Skip to content

Commit 2564f1e

Browse files
committed
[VPlan] Simplify Not(Not(A)) -> A.
Follow-up simplification to 5fae408.
1 parent b5c5c2b commit 2564f1e

File tree

3 files changed

+7
-12
lines changed

3 files changed

+7
-12
lines changed

llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,9 @@ static void simplifyRecipe(VPRecipeBase &R, VPTypeAnalysis &TypeInfo) {
10601060

10611061
if (match(&R, m_c_Mul(m_VPValue(A), m_SpecificInt(1))))
10621062
return R.getVPSingleValue()->replaceAllUsesWith(A);
1063+
1064+
if (match(&R, m_Not(m_Not(m_VPValue(A)))))
1065+
return R.getVPSingleValue()->replaceAllUsesWith(A);
10631066
}
10641067

10651068
/// Move loop-invariant recipes out of the vector loop region in \p Plan.

llvm/test/Transforms/LoopVectorize/single_early_exit.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,8 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
200200
; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[TMP11]], i32 0
201201
; CHECK-NEXT: [[WIDE_LOAD3:%.*]] = load <4 x i32>, ptr [[TMP12]], align 4
202202
; CHECK-NEXT: [[TMP13:%.*]] = icmp eq <4 x i32> [[WIDE_LOAD]], [[WIDE_LOAD3]]
203-
; CHECK-NEXT: [[TMP14:%.*]] = xor <4 x i1> [[TMP13]], splat (i1 true)
204203
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
205-
; CHECK-NEXT: [[TMP15:%.*]] = xor <4 x i1> [[TMP14]], splat (i1 true)
206-
; CHECK-NEXT: [[TMP16:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP15]])
204+
; CHECK-NEXT: [[TMP16:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP13]])
207205
; CHECK-NEXT: [[TMP17:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
208206
; CHECK-NEXT: [[TMP18:%.*]] = or i1 [[TMP16]], [[TMP17]]
209207
; CHECK-NEXT: br i1 [[TMP18]], label [[MIDDLE_SPLIT:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]

llvm/test/Transforms/LoopVectorize/uncountable-early-exit-vplan.ll

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,8 @@ define i64 @multi_exiting_to_different_exits_live_in_exit_values() {
2828
; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = vector-pointer ir<%gep.src>
2929
; CHECK-NEXT: WIDEN ir<%l> = load vp<[[VEC_PTR]]>
3030
; CHECK-NEXT: WIDEN ir<%c.1> = icmp eq ir<%l>, ir<10>
31-
; CHECK-NEXT: EMIT vp<[[NOT1:%.+]]> = not ir<%c.1>
3231
; CHECK-NEXT: EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
33-
; CHECK-NEXT: EMIT vp<[[NOT2:%.+]]> = not vp<[[NOT1]]>
34-
; CHECK-NEXT: EMIT vp<[[EA_TAKEN:%.+]]> = any-of vp<[[NOT2]]>
32+
; CHECK-NEXT: EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
3533
; CHECK-NEXT: EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
3634
; CHECK-NEXT: EMIT vp<[[EC:%.+]]> = or vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
3735
; CHECK-NEXT: EMIT branch-on-cond vp<[[EC]]>
@@ -112,10 +110,8 @@ define i64 @multi_exiting_to_same_exit_live_in_exit_values() {
112110
; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = vector-pointer ir<%gep.src>
113111
; CHECK-NEXT: WIDEN ir<%l> = load vp<[[VEC_PTR]]>
114112
; CHECK-NEXT: WIDEN ir<%c.1> = icmp eq ir<%l>, ir<10>
115-
; CHECK-NEXT: EMIT vp<[[NOT1:%.+]]> = not ir<%c.1>
116113
; CHECK-NEXT: EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
117-
; CHECK-NEXT: EMIT vp<[[NOT2:%.+]]> = not vp<[[NOT1]]>
118-
; CHECK-NEXT: EMIT vp<[[EA_TAKEN:%.+]]> = any-of vp<[[NOT2]]>
114+
; CHECK-NEXT: EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
119115
; CHECK-NEXT: EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
120116
; CHECK-NEXT: EMIT vp<[[EC:%.+]]> = or vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
121117
; CHECK-NEXT: EMIT branch-on-cond vp<[[EC]]>
@@ -189,10 +185,8 @@ define i64 @multi_exiting_to_same_exit_live_in_exit_values_2() {
189185
; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = vector-pointer ir<%gep.src>
190186
; CHECK-NEXT: WIDEN ir<%l> = load vp<[[VEC_PTR]]>
191187
; CHECK-NEXT: WIDEN ir<%c.1> = icmp eq ir<%l>, ir<10>
192-
; CHECK-NEXT: EMIT vp<[[NOT1:%.+]]> = not ir<%c.1>
193188
; CHECK-NEXT: EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
194-
; CHECK-NEXT: EMIT vp<[[NOT2:%.+]]> = not vp<[[NOT1]]>
195-
; CHECK-NEXT: EMIT vp<[[EA_TAKEN:%.+]]> = any-of vp<[[NOT2]]>
189+
; CHECK-NEXT: EMIT vp<[[EA_TAKEN:%.+]]> = any-of ir<%c.1>
196190
; CHECK-NEXT: EMIT vp<[[LATCH_CMP:%.+]]> = icmp eq vp<%index.next>, vp<[[VTC]]>
197191
; CHECK-NEXT: EMIT vp<[[EC:%.+]]> = or vp<[[EA_TAKEN]]>, vp<[[LATCH_CMP]]>
198192
; CHECK-NEXT: EMIT branch-on-cond vp<[[EC]]>

0 commit comments

Comments
 (0)