@@ -82,90 +82,56 @@ define void @replicate_udiv_with_only_first_lane_used2(i32 %x, ptr %dst, i64 %d)
8282; CHECK-NEXT: br i1 [[TMP1]], label %[[PRED_UDIV_IF:.*]], label %[[PRED_UDIV_CONTINUE:.*]]
8383; CHECK: [[PRED_UDIV_IF]]:
8484; CHECK-NEXT: [[TMP2:%.*]] = udiv i64 99, [[D]]
85- ; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x i64> poison, i64 [[TMP2]], i32 0
8685; CHECK-NEXT: br label %[[PRED_UDIV_CONTINUE]]
8786; CHECK: [[PRED_UDIV_CONTINUE]]:
88- ; CHECK-NEXT: [[TMP4 :%.*]] = phi <4 x i64> [ poison, %[[VECTOR_BODY]] ], [ [[TMP3 ]], %[[PRED_UDIV_IF]] ]
87+ ; CHECK-NEXT: [[TMP3 :%.*]] = phi i64 [ poison, %[[VECTOR_BODY]] ], [ [[TMP2 ]], %[[PRED_UDIV_IF]] ]
8988; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x i1> [[TMP0]], i32 1
9089; CHECK-NEXT: br i1 [[TMP5]], label %[[PRED_UDIV_IF1:.*]], label %[[PRED_UDIV_CONTINUE2:.*]]
9190; CHECK: [[PRED_UDIV_IF1]]:
9291; CHECK-NEXT: [[TMP6:%.*]] = udiv i64 99, [[D]]
93- ; CHECK-NEXT: [[TMP7:%.*]] = insertelement <4 x i64> [[TMP4]], i64 [[TMP6]], i32 1
9492; CHECK-NEXT: br label %[[PRED_UDIV_CONTINUE2]]
9593; CHECK: [[PRED_UDIV_CONTINUE2]]:
96- ; CHECK-NEXT: [[TMP8:%.*]] = phi <4 x i64> [ [[TMP4]], %[[PRED_UDIV_CONTINUE]] ], [ [[TMP7]], %[[PRED_UDIV_IF1]] ]
9794; CHECK-NEXT: [[TMP9:%.*]] = extractelement <4 x i1> [[TMP0]], i32 2
9895; CHECK-NEXT: br i1 [[TMP9]], label %[[PRED_UDIV_IF3:.*]], label %[[PRED_UDIV_CONTINUE4:.*]]
9996; CHECK: [[PRED_UDIV_IF3]]:
10097; CHECK-NEXT: [[TMP10:%.*]] = udiv i64 99, [[D]]
101- ; CHECK-NEXT: [[TMP34:%.*]] = insertelement <4 x i64> [[TMP8]], i64 [[TMP10]], i32 2
10298; CHECK-NEXT: br label %[[PRED_UDIV_CONTINUE4]]
10399; CHECK: [[PRED_UDIV_CONTINUE4]]:
104- ; CHECK-NEXT: [[TMP49:%.*]] = phi <4 x i64> [ [[TMP8]], %[[PRED_UDIV_CONTINUE2]] ], [ [[TMP34]], %[[PRED_UDIV_IF3]] ]
105100; CHECK-NEXT: [[TMP13:%.*]] = extractelement <4 x i1> [[TMP0]], i32 3
106101; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_UDIV_IF5:.*]], label %[[PRED_UDIV_CONTINUE6:.*]]
107102; CHECK: [[PRED_UDIV_IF5]]:
108103; CHECK-NEXT: [[TMP14:%.*]] = udiv i64 99, [[D]]
109- ; CHECK-NEXT: [[TMP15:%.*]] = insertelement <4 x i64> [[TMP49]], i64 [[TMP14]], i32 3
110104; CHECK-NEXT: br label %[[PRED_UDIV_CONTINUE6]]
111105; CHECK: [[PRED_UDIV_CONTINUE6]]:
112- ; CHECK-NEXT: [[TMP16:%.*]] = phi <4 x i64> [ [[TMP49]], %[[PRED_UDIV_CONTINUE4]] ], [ [[TMP15]], %[[PRED_UDIV_IF5]] ]
113106; CHECK-NEXT: [[TMP17:%.*]] = extractelement <4 x i1> [[TMP0]], i32 0
114107; CHECK-NEXT: br i1 [[TMP17]], label %[[PRED_UDIV_IF7:.*]], label %[[PRED_UDIV_CONTINUE8:.*]]
115108; CHECK: [[PRED_UDIV_IF7]]:
116109; CHECK-NEXT: [[TMP18:%.*]] = udiv i64 99, [[D]]
117- ; CHECK-NEXT: [[TMP19:%.*]] = insertelement <4 x i64> poison, i64 [[TMP18]], i32 0
118110; CHECK-NEXT: br label %[[PRED_UDIV_CONTINUE8]]
119111; CHECK: [[PRED_UDIV_CONTINUE8]]:
120- ; CHECK-NEXT: [[TMP20 :%.*]] = phi <4 x i64> [ poison, %[[PRED_UDIV_CONTINUE6]] ], [ [[TMP19 ]], %[[PRED_UDIV_IF7]] ]
112+ ; CHECK-NEXT: [[TMP15 :%.*]] = phi i64 [ poison, %[[PRED_UDIV_CONTINUE6]] ], [ [[TMP18 ]], %[[PRED_UDIV_IF7]] ]
121113; CHECK-NEXT: [[TMP21:%.*]] = extractelement <4 x i1> [[TMP0]], i32 1
122114; CHECK-NEXT: br i1 [[TMP21]], label %[[PRED_UDIV_IF9:.*]], label %[[PRED_UDIV_CONTINUE10:.*]]
123115; CHECK: [[PRED_UDIV_IF9]]:
124116; CHECK-NEXT: [[TMP22:%.*]] = udiv i64 99, [[D]]
125- ; CHECK-NEXT: [[TMP23:%.*]] = insertelement <4 x i64> [[TMP20]], i64 [[TMP22]], i32 1
126117; CHECK-NEXT: br label %[[PRED_UDIV_CONTINUE10]]
127118; CHECK: [[PRED_UDIV_CONTINUE10]]:
128- ; CHECK-NEXT: [[TMP24:%.*]] = phi <4 x i64> [ [[TMP20]], %[[PRED_UDIV_CONTINUE8]] ], [ [[TMP23]], %[[PRED_UDIV_IF9]] ]
129119; CHECK-NEXT: [[TMP25:%.*]] = extractelement <4 x i1> [[TMP0]], i32 2
130120; CHECK-NEXT: br i1 [[TMP25]], label %[[PRED_UDIV_IF11:.*]], label %[[PRED_UDIV_CONTINUE12:.*]]
131121; CHECK: [[PRED_UDIV_IF11]]:
132122; CHECK-NEXT: [[TMP26:%.*]] = udiv i64 99, [[D]]
133- ; CHECK-NEXT: [[TMP27:%.*]] = insertelement <4 x i64> [[TMP24]], i64 [[TMP26]], i32 2
134123; CHECK-NEXT: br label %[[PRED_UDIV_CONTINUE12]]
135124; CHECK: [[PRED_UDIV_CONTINUE12]]:
136- ; CHECK-NEXT: [[TMP28:%.*]] = phi <4 x i64> [ [[TMP24]], %[[PRED_UDIV_CONTINUE10]] ], [ [[TMP27]], %[[PRED_UDIV_IF11]] ]
137125; CHECK-NEXT: [[TMP29:%.*]] = extractelement <4 x i1> [[TMP0]], i32 3
138126; CHECK-NEXT: br i1 [[TMP29]], label %[[PRED_UDIV_IF13:.*]], label %[[PRED_UDIV_CONTINUE14]]
139127; CHECK: [[PRED_UDIV_IF13]]:
140128; CHECK-NEXT: [[TMP30:%.*]] = udiv i64 99, [[D]]
141- ; CHECK-NEXT: [[TMP31:%.*]] = insertelement <4 x i64> [[TMP28]], i64 [[TMP30]], i32 3
142129; CHECK-NEXT: br label %[[PRED_UDIV_CONTINUE14]]
143130; CHECK: [[PRED_UDIV_CONTINUE14]]:
144- ; CHECK-NEXT: [[TMP32:%.*]] = phi <4 x i64> [ [[TMP28]], %[[PRED_UDIV_CONTINUE12]] ], [ [[TMP31]], %[[PRED_UDIV_IF13]] ]
145- ; CHECK-NEXT: [[PREDPHI:%.*]] = select <4 x i1> [[BROADCAST_SPLAT]], <4 x i64> zeroinitializer, <4 x i64> [[TMP16]]
146- ; CHECK-NEXT: [[PREDPHI15:%.*]] = select <4 x i1> [[BROADCAST_SPLAT]], <4 x i64> zeroinitializer, <4 x i64> [[TMP32]]
147- ; CHECK-NEXT: [[TMP33:%.*]] = extractelement <4 x i64> [[PREDPHI]], i32 0
148- ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr i16, ptr [[DST]], i64 [[TMP33]]
149- ; CHECK-NEXT: [[TMP35:%.*]] = extractelement <4 x i64> [[PREDPHI]], i32 1
150- ; CHECK-NEXT: [[TMP36:%.*]] = getelementptr i16, ptr [[DST]], i64 [[TMP35]]
151- ; CHECK-NEXT: [[TMP37:%.*]] = extractelement <4 x i64> [[PREDPHI]], i32 2
152- ; CHECK-NEXT: [[TMP38:%.*]] = getelementptr i16, ptr [[DST]], i64 [[TMP37]]
153- ; CHECK-NEXT: [[TMP39:%.*]] = extractelement <4 x i64> [[PREDPHI]], i32 3
154- ; CHECK-NEXT: [[TMP40:%.*]] = getelementptr i16, ptr [[DST]], i64 [[TMP39]]
155- ; CHECK-NEXT: [[TMP41:%.*]] = extractelement <4 x i64> [[PREDPHI15]], i32 0
156- ; CHECK-NEXT: [[TMP42:%.*]] = getelementptr i16, ptr [[DST]], i64 [[TMP41]]
157- ; CHECK-NEXT: [[TMP43:%.*]] = extractelement <4 x i64> [[PREDPHI15]], i32 1
158- ; CHECK-NEXT: [[TMP44:%.*]] = getelementptr i16, ptr [[DST]], i64 [[TMP43]]
159- ; CHECK-NEXT: [[TMP45:%.*]] = extractelement <4 x i64> [[PREDPHI15]], i32 2
131+ ; CHECK-NEXT: [[TMP45:%.*]] = select i1 [[C]], i64 0, i64 [[TMP3]]
132+ ; CHECK-NEXT: [[TMP47:%.*]] = select i1 [[C]], i64 0, i64 [[TMP15]]
160133; CHECK-NEXT: [[TMP46:%.*]] = getelementptr i16, ptr [[DST]], i64 [[TMP45]]
161- ; CHECK-NEXT: [[TMP47:%.*]] = extractelement <4 x i64> [[PREDPHI15]], i32 3
162134; CHECK-NEXT: [[TMP48:%.*]] = getelementptr i16, ptr [[DST]], i64 [[TMP47]]
163- ; CHECK-NEXT: store i16 0, ptr [[TMP11]], align 2
164- ; CHECK-NEXT: store i16 0, ptr [[TMP36]], align 2
165- ; CHECK-NEXT: store i16 0, ptr [[TMP38]], align 2
166- ; CHECK-NEXT: store i16 0, ptr [[TMP40]], align 2
167- ; CHECK-NEXT: store i16 0, ptr [[TMP42]], align 2
168- ; CHECK-NEXT: store i16 0, ptr [[TMP44]], align 2
169135; CHECK-NEXT: store i16 0, ptr [[TMP46]], align 2
170136; CHECK-NEXT: store i16 0, ptr [[TMP48]], align 2
171137; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8
0 commit comments