@@ -7,49 +7,37 @@ define i32 @test(ptr %b, ptr %c, i32 %0, ptr %a, i1 %tobool3.not) {
7
7
; CHECK-NEXT: entry:
8
8
; CHECK-NEXT: br i1 [[TOBOOL3_NOT]], label [[BB1:%.*]], label [[BB2:%.*]]
9
9
; CHECK: bb1:
10
- ; CHECK-NEXT: [[CONV1_I_US:%.*]] = ashr i32 [[TMP0]], 16
11
- ; CHECK-NEXT: [[CMP2_I_US:%.*]] = icmp slt i32 [[CONV1_I_US]], [[TMP0]]
12
- ; CHECK-NEXT: [[SEXT26_US:%.*]] = zext i1 [[CMP2_I_US]] to i32
13
- ; CHECK-NEXT: [[CONV1_I_US_5:%.*]] = ashr i32 [[TMP0]], 16
14
- ; CHECK-NEXT: [[CMP2_I_US_5:%.*]] = icmp slt i32 [[CONV1_I_US_5]], [[TMP0]]
15
- ; CHECK-NEXT: [[SEXT26_US_5:%.*]] = zext i1 [[CMP2_I_US_5]] to i32
16
- ; CHECK-NEXT: [[CONV1_I_US_6:%.*]] = ashr i32 [[TMP0]], 16
17
- ; CHECK-NEXT: [[CMP2_I_US_6:%.*]] = icmp slt i32 [[CONV1_I_US_6]], [[TMP0]]
18
- ; CHECK-NEXT: [[SEXT26_US_6:%.*]] = zext i1 [[CMP2_I_US_6]] to i32
19
- ; CHECK-NEXT: [[CONV1_I_US_7:%.*]] = ashr i32 [[TMP0]], 16
20
- ; CHECK-NEXT: [[CMP2_I_US_7:%.*]] = icmp slt i32 [[CONV1_I_US_7]], [[TMP0]]
21
- ; CHECK-NEXT: [[SEXT26_US_7:%.*]] = zext i1 [[CMP2_I_US_7]] to i32
10
+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i32> poison, i32 [[TMP0]], i32 0
11
+ ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <4 x i32> zeroinitializer
12
+ ; CHECK-NEXT: [[TMP3:%.*]] = ashr <4 x i32> [[TMP2]], splat (i32 16)
13
+ ; CHECK-NEXT: [[TMP4:%.*]] = icmp slt <4 x i32> [[TMP3]], [[TMP2]]
14
+ ; CHECK-NEXT: [[TMP5:%.*]] = zext <4 x i1> [[TMP4]] to <4 x i16>
22
15
; CHECK-NEXT: br label [[BB3:%.*]]
23
16
; CHECK: bb2:
24
- ; CHECK-NEXT: [[CMP2_I:%.*]] = icmp sgt i32 [[TMP0]], 0
25
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i1 [[CMP2_I]] to i32
26
- ; CHECK-NEXT: [[COND_I:%.*]] = select i1 [[TOBOOL3_NOT]], i32 [[TMP0]], i32 [[TMP1]]
27
- ; CHECK-NEXT: [[SEXT26:%.*]] = shl i32 [[COND_I]], 16
28
- ; CHECK-NEXT: [[CONV13:%.*]] = ashr i32 [[SEXT26]], 16
29
- ; CHECK-NEXT: [[CMP2_I_5:%.*]] = icmp sgt i32 [[TMP0]], 0
30
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[CMP2_I_5]] to i32
31
- ; CHECK-NEXT: [[COND_I_5:%.*]] = select i1 [[TOBOOL3_NOT]], i32 [[TMP0]], i32 [[TMP2]]
32
- ; CHECK-NEXT: [[SEXT26_5:%.*]] = shl i32 [[COND_I_5]], 16
33
- ; CHECK-NEXT: [[CONV13_5:%.*]] = ashr i32 [[SEXT26_5]], 16
34
- ; CHECK-NEXT: [[CMP2_I_6:%.*]] = icmp sgt i32 [[TMP0]], 0
35
- ; CHECK-NEXT: [[TMP3:%.*]] = zext i1 [[CMP2_I_6]] to i32
36
- ; CHECK-NEXT: [[COND_I_6:%.*]] = select i1 [[TOBOOL3_NOT]], i32 [[TMP0]], i32 [[TMP3]]
37
- ; CHECK-NEXT: [[SEXT26_6:%.*]] = shl i32 [[COND_I_6]], 16
38
- ; CHECK-NEXT: [[CONV13_6:%.*]] = ashr i32 [[SEXT26_6]], 16
39
- ; CHECK-NEXT: [[CMP2_I_7:%.*]] = icmp sgt i32 [[TMP0]], 0
40
- ; CHECK-NEXT: [[TMP4:%.*]] = zext i1 [[CMP2_I_7]] to i32
41
- ; CHECK-NEXT: [[COND_I_7:%.*]] = select i1 [[TOBOOL3_NOT]], i32 [[TMP0]], i32 [[TMP4]]
42
- ; CHECK-NEXT: [[SEXT26_7:%.*]] = shl i32 [[COND_I_7]], 16
43
- ; CHECK-NEXT: [[CONV13_7:%.*]] = ashr i32 [[SEXT26_7]], 16
17
+ ; CHECK-NEXT: [[TMP6:%.*]] = insertelement <4 x i32> poison, i32 [[TMP0]], i32 0
18
+ ; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> poison, <4 x i32> zeroinitializer
19
+ ; CHECK-NEXT: [[TMP8:%.*]] = icmp sgt <4 x i32> [[TMP7]], zeroinitializer
20
+ ; CHECK-NEXT: [[TMP9:%.*]] = zext <4 x i1> [[TMP8]] to <4 x i32>
21
+ ; CHECK-NEXT: [[TMP10:%.*]] = insertelement <4 x i1> poison, i1 [[TOBOOL3_NOT]], i32 0
22
+ ; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x i1> [[TMP10]], <4 x i1> poison, <4 x i32> zeroinitializer
23
+ ; CHECK-NEXT: [[TMP12:%.*]] = select <4 x i1> [[TMP11]], <4 x i32> [[TMP7]], <4 x i32> [[TMP9]]
24
+ ; CHECK-NEXT: [[TMP13:%.*]] = shl <4 x i32> [[TMP12]], splat (i32 16)
25
+ ; CHECK-NEXT: [[TMP14:%.*]] = ashr <4 x i32> [[TMP13]], splat (i32 16)
26
+ ; CHECK-NEXT: [[TMP15:%.*]] = trunc <4 x i32> [[TMP14]] to <4 x i16>
44
27
; CHECK-NEXT: br i1 true, label [[BB3]], label [[BB2]]
45
28
; CHECK: bb3:
46
- ; CHECK-NEXT: [[TMP18:%.*]] = phi i32 [ [[SEXT26_US]], [[BB1]] ], [ [[CONV13]], [[BB2]] ]
47
- ; CHECK-NEXT: [[TMP20:%.*]] = phi i32 [ [[SEXT26_US_5]], [[BB1]] ], [ [[CONV13_5]], [[BB2]] ]
48
- ; CHECK-NEXT: [[TMP22:%.*]] = phi i32 [ [[SEXT26_US_6]], [[BB1]] ], [ [[CONV13_6]], [[BB2]] ]
49
- ; CHECK-NEXT: [[TMP24:%.*]] = phi i32 [ [[SEXT26_US_7]], [[BB1]] ], [ [[CONV13_7]], [[BB2]] ]
29
+ ; CHECK-NEXT: [[TMP16:%.*]] = phi <4 x i16> [ [[TMP5]], [[BB1]] ], [ [[TMP15]], [[BB2]] ]
30
+ ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <4 x i16> [[TMP16]], i32 0
31
+ ; CHECK-NEXT: [[TMP18:%.*]] = sext i16 [[TMP17]] to i32
50
32
; CHECK-NEXT: store i32 [[TMP18]], ptr [[B]], align 16
33
+ ; CHECK-NEXT: [[TMP19:%.*]] = extractelement <4 x i16> [[TMP16]], i32 1
34
+ ; CHECK-NEXT: [[TMP20:%.*]] = sext i16 [[TMP19]] to i32
51
35
; CHECK-NEXT: store i32 [[TMP20]], ptr [[A]], align 8
36
+ ; CHECK-NEXT: [[TMP21:%.*]] = extractelement <4 x i16> [[TMP16]], i32 2
37
+ ; CHECK-NEXT: [[TMP22:%.*]] = sext i16 [[TMP21]] to i32
52
38
; CHECK-NEXT: store i32 [[TMP22]], ptr [[C]], align 16
39
+ ; CHECK-NEXT: [[TMP23:%.*]] = extractelement <4 x i16> [[TMP16]], i32 3
40
+ ; CHECK-NEXT: [[TMP24:%.*]] = sext i16 [[TMP23]] to i32
53
41
; CHECK-NEXT: store i32 [[TMP24]], ptr [[B]], align 8
54
42
; CHECK-NEXT: ret i32 0
55
43
;
0 commit comments