@@ -71,46 +71,37 @@ define void @redundant_or_1(ptr %dst, i1 %c.0, i1 %c.1) {
7171; CHECK-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <4 x i1> [[BROADCAST_SPLATINSERT1]], <4 x i1> poison, <4 x i32> zeroinitializer
7272; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
7373; CHECK: vector.body:
74- ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_STORE_CONTINUE8:%.*]] ]
75- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i8> [ <i8 0, i8 1, i8 2, i8 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_STORE_CONTINUE8]] ]
76- ; CHECK-NEXT: [[TMP1:%.*]] = icmp ule <4 x i8> [[VEC_IND]], splat (i8 2)
77- ; CHECK-NEXT: [[TMP2:%.*]] = select <4 x i1> [[TMP1]], <4 x i1> [[TMP0]], <4 x i1> zeroinitializer
74+ ; CHECK-NEXT: [[TMP2:%.*]] = select <4 x i1> <i1 true, i1 true, i1 true, i1 false>, <4 x i1> [[TMP0]], <4 x i1> zeroinitializer
7875; CHECK-NEXT: [[TMP5:%.*]] = select <4 x i1> [[TMP2]], <4 x i1> [[BROADCAST_SPLAT2]], <4 x i1> zeroinitializer
7976; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i1> [[TMP5]], i32 0
8077; CHECK-NEXT: br i1 [[TMP6]], label [[PRED_STORE_IF:%.*]], label [[PRED_STORE_CONTINUE:%.*]]
8178; CHECK: pred.store.if:
82- ; CHECK-NEXT: [[TMP7:%.*]] = add i32 [[INDEX]], 0
83- ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i32 [[TMP7]]
79+ ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i32 0
8480; CHECK-NEXT: store i32 0, ptr [[TMP8]], align 4
8581; CHECK-NEXT: br label [[PRED_STORE_CONTINUE]]
8682; CHECK: pred.store.continue:
8783; CHECK-NEXT: [[TMP9:%.*]] = extractelement <4 x i1> [[TMP5]], i32 1
8884; CHECK-NEXT: br i1 [[TMP9]], label [[PRED_STORE_IF3:%.*]], label [[PRED_STORE_CONTINUE4:%.*]]
8985; CHECK: pred.store.if3:
90- ; CHECK-NEXT: [[TMP10:%.*]] = add i32 [[INDEX]], 1
91- ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP10]]
86+ ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 1
9287; CHECK-NEXT: store i32 0, ptr [[TMP11]], align 4
9388; CHECK-NEXT: br label [[PRED_STORE_CONTINUE4]]
9489; CHECK: pred.store.continue4:
9590; CHECK-NEXT: [[TMP12:%.*]] = extractelement <4 x i1> [[TMP5]], i32 2
9691; CHECK-NEXT: br i1 [[TMP12]], label [[PRED_STORE_IF5:%.*]], label [[PRED_STORE_CONTINUE6:%.*]]
9792; CHECK: pred.store.if5:
98- ; CHECK-NEXT: [[TMP13:%.*]] = add i32 [[INDEX]], 2
99- ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP13]]
93+ ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 2
10094; CHECK-NEXT: store i32 0, ptr [[TMP14]], align 4
10195; CHECK-NEXT: br label [[PRED_STORE_CONTINUE6]]
10296; CHECK: pred.store.continue6:
10397; CHECK-NEXT: [[TMP15:%.*]] = extractelement <4 x i1> [[TMP5]], i32 3
104- ; CHECK-NEXT: br i1 [[TMP15]], label [[PRED_STORE_IF7:%.*]], label [[PRED_STORE_CONTINUE8]]
98+ ; CHECK-NEXT: br i1 [[TMP15]], label [[PRED_STORE_IF7:%.*]], label [[PRED_STORE_CONTINUE8:%.* ]]
10599; CHECK: pred.store.if7:
106- ; CHECK-NEXT: [[TMP16:%.*]] = add i32 [[INDEX]], 3
107- ; CHECK-NEXT: [[TMP17:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP16]]
100+ ; CHECK-NEXT: [[TMP17:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 3
108101; CHECK-NEXT: store i32 0, ptr [[TMP17]], align 4
109102; CHECK-NEXT: br label [[PRED_STORE_CONTINUE8]]
110103; CHECK: pred.store.continue8:
111- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
112- ; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i8> [[VEC_IND]], splat (i8 4)
113- ; CHECK-NEXT: br i1 true, label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
104+ ; CHECK-NEXT: br label [[MIDDLE_BLOCK:%.*]]
114105; CHECK: middle.block:
115106; CHECK-NEXT: br label [[EXIT:%.*]]
116107; CHECK: scalar.ph:
@@ -130,7 +121,7 @@ define void @redundant_or_1(ptr %dst, i1 %c.0, i1 %c.1) {
130121; CHECK: loop.latch:
131122; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
132123; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], 3
133- ; CHECK-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP4 :![0-9]+]]
124+ ; CHECK-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP3 :![0-9]+]]
134125; CHECK: exit:
135126; CHECK-NEXT: ret void
136127;
@@ -173,46 +164,37 @@ define void @redundant_or_2(ptr %dst, i1 %c.0, i1 %c.1) {
173164; CHECK-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <4 x i1> [[BROADCAST_SPLATINSERT1]], <4 x i1> poison, <4 x i32> zeroinitializer
174165; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
175166; CHECK: vector.body:
176- ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_STORE_CONTINUE8:%.*]] ]
177- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i8> [ <i8 0, i8 1, i8 2, i8 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_STORE_CONTINUE8]] ]
178- ; CHECK-NEXT: [[TMP2:%.*]] = icmp ule <4 x i8> [[VEC_IND]], splat (i8 2)
179- ; CHECK-NEXT: [[TMP3:%.*]] = select <4 x i1> [[TMP2]], <4 x i1> [[TMP0]], <4 x i1> zeroinitializer
167+ ; CHECK-NEXT: [[TMP3:%.*]] = select <4 x i1> <i1 true, i1 true, i1 true, i1 false>, <4 x i1> [[TMP0]], <4 x i1> zeroinitializer
180168; CHECK-NEXT: [[TMP4:%.*]] = select <4 x i1> [[TMP3]], <4 x i1> [[BROADCAST_SPLAT2]], <4 x i1> zeroinitializer
181169; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x i1> [[TMP4]], i32 0
182170; CHECK-NEXT: br i1 [[TMP5]], label [[PRED_STORE_IF:%.*]], label [[PRED_STORE_CONTINUE:%.*]]
183171; CHECK: pred.store.if:
184- ; CHECK-NEXT: [[TMP6:%.*]] = add i32 [[INDEX]], 0
185- ; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i32 [[TMP6]]
172+ ; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i32 0
186173; CHECK-NEXT: store i32 0, ptr [[TMP7]], align 4
187174; CHECK-NEXT: br label [[PRED_STORE_CONTINUE]]
188175; CHECK: pred.store.continue:
189176; CHECK-NEXT: [[TMP8:%.*]] = extractelement <4 x i1> [[TMP4]], i32 1
190177; CHECK-NEXT: br i1 [[TMP8]], label [[PRED_STORE_IF3:%.*]], label [[PRED_STORE_CONTINUE4:%.*]]
191178; CHECK: pred.store.if3:
192- ; CHECK-NEXT: [[TMP9:%.*]] = add i32 [[INDEX]], 1
193- ; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP9]]
179+ ; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 1
194180; CHECK-NEXT: store i32 0, ptr [[TMP10]], align 4
195181; CHECK-NEXT: br label [[PRED_STORE_CONTINUE4]]
196182; CHECK: pred.store.continue4:
197183; CHECK-NEXT: [[TMP11:%.*]] = extractelement <4 x i1> [[TMP4]], i32 2
198184; CHECK-NEXT: br i1 [[TMP11]], label [[PRED_STORE_IF5:%.*]], label [[PRED_STORE_CONTINUE6:%.*]]
199185; CHECK: pred.store.if5:
200- ; CHECK-NEXT: [[TMP12:%.*]] = add i32 [[INDEX]], 2
201- ; CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP12]]
186+ ; CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 2
202187; CHECK-NEXT: store i32 0, ptr [[TMP13]], align 4
203188; CHECK-NEXT: br label [[PRED_STORE_CONTINUE6]]
204189; CHECK: pred.store.continue6:
205190; CHECK-NEXT: [[TMP14:%.*]] = extractelement <4 x i1> [[TMP4]], i32 3
206- ; CHECK-NEXT: br i1 [[TMP14]], label [[PRED_STORE_IF7:%.*]], label [[PRED_STORE_CONTINUE8]]
191+ ; CHECK-NEXT: br i1 [[TMP14]], label [[PRED_STORE_IF7:%.*]], label [[PRED_STORE_CONTINUE8:%.* ]]
207192; CHECK: pred.store.if7:
208- ; CHECK-NEXT: [[TMP15:%.*]] = add i32 [[INDEX]], 3
209- ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP15]]
193+ ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 3
210194; CHECK-NEXT: store i32 0, ptr [[TMP16]], align 4
211195; CHECK-NEXT: br label [[PRED_STORE_CONTINUE8]]
212196; CHECK: pred.store.continue8:
213- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
214- ; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i8> [[VEC_IND]], splat (i8 4)
215- ; CHECK-NEXT: br i1 true, label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
197+ ; CHECK-NEXT: br label [[MIDDLE_BLOCK:%.*]]
216198; CHECK: middle.block:
217199; CHECK-NEXT: br label [[EXIT:%.*]]
218200; CHECK: scalar.ph:
@@ -232,7 +214,7 @@ define void @redundant_or_2(ptr %dst, i1 %c.0, i1 %c.1) {
232214; CHECK: loop.latch:
233215; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
234216; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], 3
235- ; CHECK-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP6 :![0-9]+]]
217+ ; CHECK-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP4 :![0-9]+]]
236218; CHECK: exit:
237219; CHECK-NEXT: ret void
238220;
0 commit comments