@@ -10,48 +10,53 @@ define i1 @test(i32 %conv15.12, i16 %0, ptr %1, i16 %2, i16 %3, i16 %4, i16 %5,
1010; CHECK-NEXT:  [[ENTRY:.*:]] 
1111; CHECK-NEXT:    [[TMP7:%.*]] = load i16, ptr [[TMP1]], align 2 
1212; CHECK-NEXT:    [[TMP8:%.*]] = load i16, ptr @h, align 2 
13- ; CHECK-NEXT:    [[TMP9:%.*]] = load <16 x i16>, ptr getelementptr inbounds nuw (i8, ptr @h, i64 6), align 2 
14- ; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <16 x i16> [[TMP9]], <16 x i16> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9> 
15- ; CHECK-NEXT:    [[TMP11:%.*]] = insertelement <8 x i16> poison, i16 [[TMP6]], i32 0 
16- ; CHECK-NEXT:    [[TMP12:%.*]] = insertelement <8 x i16> [[TMP11]], i16 [[TMP5]], i32 1 
17- ; CHECK-NEXT:    [[TMP13:%.*]] = insertelement <8 x i16> [[TMP12]], i16 [[TMP4]], i32 2 
18- ; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <8 x i16> [[TMP13]], i16 [[TMP3]], i32 3 
19- ; CHECK-NEXT:    [[TMP15:%.*]] = insertelement <8 x i16> [[TMP14]], i16 [[TMP2]], i32 4 
20- ; CHECK-NEXT:    [[TMP16:%.*]] = insertelement <8 x i16> [[TMP15]], i16 [[TMP0]], i32 6 
21- ; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <8 x i16> [[TMP16]], i16 [[TMP8]], i32 5 
22- ; CHECK-NEXT:    [[TMP18:%.*]] = insertelement <8 x i16> [[TMP17]], i16 [[TMP7]], i32 7 
23- ; CHECK-NEXT:    [[TMP19:%.*]] = sext <8 x i16> [[TMP18]] to <8 x i32> 
24- ; CHECK-NEXT:    [[TMP20:%.*]] = call <8 x i32> @llvm.smax.v8i32(<8 x i32> [[TMP19]], <8 x i32> zeroinitializer) 
25- ; CHECK-NEXT:    [[TMP21:%.*]] = call <8 x i16> @llvm.vector.insert.v8i16.v4i16(<8 x i16> [[TMP18]], <4 x i16> [[TMP10]], i64 0) 
26- ; CHECK-NEXT:    [[TMP22:%.*]] = icmp eq <8 x i16> [[TMP21]], zeroinitializer 
27- ; CHECK-NEXT:    [[TMP23:%.*]] = select <8 x i1> [[TMP22]], <8 x i32> splat (i32 8), <8 x i32> [[TMP19]] 
28- ; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <8 x i32> [[TMP19]], i32 [[CONV15_1_4]], i32 0 
29- ; CHECK-NEXT:    [[TMP25:%.*]] = insertelement <8 x i32> [[TMP24]], i32 [[CONV15_1_3]], i32 1 
30- ; CHECK-NEXT:    [[TMP26:%.*]] = insertelement <8 x i32> [[TMP25]], i32 [[CONV15_12]], i32 7 
31- ; CHECK-NEXT:    [[TMP27:%.*]] = xor <8 x i32> [[TMP23]], [[TMP26]] 
32- ; CHECK-NEXT:    [[TMP28:%.*]] = icmp sgt <8 x i32> [[TMP20]], [[TMP27]] 
33- ; CHECK-NEXT:    [[TMP29:%.*]] = extractelement <8 x i1> [[TMP28]], i32 7 
13+ ; CHECK-NEXT:    [[TMP9:%.*]] = insertelement <4 x i16> poison, i16 [[TMP2]], i32 0 
14+ ; CHECK-NEXT:    [[TMP10:%.*]] = insertelement <4 x i16> [[TMP9]], i16 [[TMP0]], i32 2 
15+ ; CHECK-NEXT:    [[TMP11:%.*]] = insertelement <4 x i16> [[TMP10]], i16 [[TMP8]], i32 1 
16+ ; CHECK-NEXT:    [[TMP12:%.*]] = insertelement <4 x i16> [[TMP11]], i16 [[TMP7]], i32 3 
17+ ; CHECK-NEXT:    [[TMP13:%.*]] = sext <4 x i16> [[TMP12]] to <4 x i32> 
18+ ; CHECK-NEXT:    [[TMP14:%.*]] = call <4 x i32> @llvm.smax.v4i32(<4 x i32> [[TMP13]], <4 x i32> zeroinitializer) 
19+ ; CHECK-NEXT:    [[TMP15:%.*]] = icmp eq <4 x i16> [[TMP12]], zeroinitializer 
20+ ; CHECK-NEXT:    [[TMP16:%.*]] = select <4 x i1> [[TMP15]], <4 x i32> splat (i32 8), <4 x i32> [[TMP13]] 
21+ ; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x i32> [[TMP13]], i32 [[CONV15_12]], i32 3 
22+ ; CHECK-NEXT:    [[TMP18:%.*]] = xor <4 x i32> [[TMP16]], [[TMP17]] 
23+ ; CHECK-NEXT:    [[TMP19:%.*]] = icmp sgt <4 x i32> [[TMP14]], [[TMP18]] 
24+ ; CHECK-NEXT:    [[TMP29:%.*]] = extractelement <4 x i1> [[TMP19]], i32 3 
3425; CHECK-NEXT:    [[CONV30_18:%.*]] = zext i1 [[TMP29]] to i16 
3526; CHECK-NEXT:    store i16 [[CONV30_18]], ptr @a, align 2 
36- ; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <8  x i1> [[TMP28 ]], i32 6  
27+ ; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4  x i1> [[TMP19 ]], i32 2  
3728; CHECK-NEXT:    [[CONV30_219:%.*]] = zext i1 [[TMP30]] to i16 
3829; CHECK-NEXT:    store i16 [[CONV30_219]], ptr @a, align 2 
39- ; CHECK-NEXT:    [[TMP31:%.*]] = extractelement <8  x i1> [[TMP28 ]], i32 5  
30+ ; CHECK-NEXT:    [[TMP31:%.*]] = extractelement <4  x i1> [[TMP19 ]], i32 1  
4031; CHECK-NEXT:    [[CONV30_330:%.*]] = zext i1 [[TMP31]] to i16 
4132; CHECK-NEXT:    store i16 [[CONV30_330]], ptr @a, align 2 
42- ; CHECK-NEXT:    [[TMP32:%.*]] = extractelement <8  x i1> [[TMP28 ]], i32 4  
33+ ; CHECK-NEXT:    [[TMP32:%.*]] = extractelement <4  x i1> [[TMP19 ]], i32 0  
4334; CHECK-NEXT:    [[CONV30_4:%.*]] = zext i1 [[TMP32]] to i16 
4435; CHECK-NEXT:    store i16 [[CONV30_4]], ptr @a, align 2 
45- ; CHECK-NEXT:    [[TMP33:%.*]] = extractelement <8 x i1> [[TMP28]], i32 3 
36+ ; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x i16> poison, i16 [[TMP3]], i32 0 
37+ ; CHECK-NEXT:    [[TMP25:%.*]] = insertelement <4 x i16> [[TMP24]], i16 [[TMP4]], i32 1 
38+ ; CHECK-NEXT:    [[TMP26:%.*]] = insertelement <4 x i16> [[TMP25]], i16 [[TMP5]], i32 2 
39+ ; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x i16> [[TMP26]], i16 [[TMP6]], i32 3 
40+ ; CHECK-NEXT:    [[TMP28:%.*]] = sext <4 x i16> [[TMP27]] to <4 x i32> 
41+ ; CHECK-NEXT:    [[TMP38:%.*]] = load <16 x i16>, ptr getelementptr inbounds nuw (i8, ptr @h, i64 6), align 2 
42+ ; CHECK-NEXT:    [[TMP39:%.*]] = shufflevector <16 x i16> [[TMP38]], <16 x i16> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9> 
43+ ; CHECK-NEXT:    [[TMP40:%.*]] = call <4 x i32> @llvm.smax.v4i32(<4 x i32> [[TMP28]], <4 x i32> zeroinitializer) 
44+ ; CHECK-NEXT:    [[TMP41:%.*]] = icmp eq <4 x i16> [[TMP39]], zeroinitializer 
45+ ; CHECK-NEXT:    [[TMP42:%.*]] = select <4 x i1> [[TMP41]], <4 x i32> splat (i32 8), <4 x i32> [[TMP28]] 
46+ ; CHECK-NEXT:    [[TMP43:%.*]] = insertelement <4 x i32> [[TMP28]], i32 [[CONV15_1_3]], i32 2 
47+ ; CHECK-NEXT:    [[TMP44:%.*]] = insertelement <4 x i32> [[TMP43]], i32 [[CONV15_1_4]], i32 3 
48+ ; CHECK-NEXT:    [[TMP45:%.*]] = xor <4 x i32> [[TMP42]], [[TMP44]] 
49+ ; CHECK-NEXT:    [[TMP37:%.*]] = icmp sgt <4 x i32> [[TMP40]], [[TMP45]] 
50+ ; CHECK-NEXT:    [[TMP33:%.*]] = extractelement <4 x i1> [[TMP37]], i32 0 
4651; CHECK-NEXT:    [[CONV30_1_1:%.*]] = zext i1 [[TMP33]] to i16 
4752; CHECK-NEXT:    store i16 [[CONV30_1_1]], ptr @a, align 2 
48- ; CHECK-NEXT:    [[TMP34:%.*]] = extractelement <8  x i1> [[TMP28 ]], i32 2  
53+ ; CHECK-NEXT:    [[TMP34:%.*]] = extractelement <4  x i1> [[TMP37 ]], i32 1  
4954; CHECK-NEXT:    [[CONV30_1_2:%.*]] = zext i1 [[TMP34]] to i16 
5055; CHECK-NEXT:    store i16 [[CONV30_1_2]], ptr @a, align 2 
51- ; CHECK-NEXT:    [[TMP35:%.*]] = extractelement <8  x i1> [[TMP28 ]], i32 1  
56+ ; CHECK-NEXT:    [[TMP35:%.*]] = extractelement <4  x i1> [[TMP37 ]], i32 2  
5257; CHECK-NEXT:    [[CONV30_1_3:%.*]] = zext i1 [[TMP35]] to i16 
5358; CHECK-NEXT:    store i16 [[CONV30_1_3]], ptr @a, align 2 
54- ; CHECK-NEXT:    [[TMP36:%.*]] = extractelement <8  x i1> [[TMP28 ]], i32 0  
59+ ; CHECK-NEXT:    [[TMP36:%.*]] = extractelement <4  x i1> [[TMP37 ]], i32 3  
5560; CHECK-NEXT:    ret i1 [[TMP36]] 
5661; 
5762entry:
0 commit comments