@@ -14,8 +14,7 @@ declare <3 x i7> @llvm.ctpop.v3i7(<3 x i7>)
14
14
15
15
define i32 @ctlz_sel_const_true_false (i1 %b ) {
16
16
; CHECK-LABEL: @ctlz_sel_const_true_false(
17
- ; CHECK-NEXT: [[S:%.*]] = select i1 [[B:%.*]], i32 5, i32 -7
18
- ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.ctlz.i32(i32 [[S]], i1 true), !range [[RNG0:![0-9]+]]
17
+ ; CHECK-NEXT: [[C:%.*]] = select i1 [[B:%.*]], i32 29, i32 0
19
18
; CHECK-NEXT: ret i32 [[C]]
20
19
;
21
20
%s = select i1 %b , i32 5 , i32 -7
@@ -25,8 +24,8 @@ define i32 @ctlz_sel_const_true_false(i1 %b) {
25
24
26
25
define i32 @ctlz_sel_const_true (i1 %b , i32 %x ) {
27
26
; CHECK-LABEL: @ctlz_sel_const_true(
28
- ; CHECK-NEXT: [[S :%.*]] = select i1 [[B :%.*]], i32 5, i32 [[X:%.* ]]
29
- ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.ctlz.i32(i32 [[S ]], i1 false), !range [[RNG1:![0-9]+ ]]
27
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call i32 @llvm.ctlz.i32(i32 [[X :%.*]], i1 false), !range [[RNG0:![0-9]+ ]]
28
+ ; CHECK-NEXT: [[C:%.*]] = select i1 [[B:%.* ]], i32 29, i32 [[TMP1 ]]
30
29
; CHECK-NEXT: ret i32 [[C]]
31
30
;
32
31
%s = select i1 %b , i32 5 , i32 %x
@@ -36,8 +35,8 @@ define i32 @ctlz_sel_const_true(i1 %b, i32 %x) {
36
35
37
36
define <3 x i17 > @ctlz_sel_const_false (<3 x i1 > %b , <3 x i17 > %x ) {
38
37
; CHECK-LABEL: @ctlz_sel_const_false(
39
- ; CHECK-NEXT: [[S :%.*]] = select <3 x i1> [[B:%.*]], <3 x i17> [[X:%.*]], <3 x i17> <i17 7, i17 -1, i17 0>
40
- ; CHECK-NEXT: [[C:%.*]] = call <3 x i17> @llvm.ctlz.v3i17( <3 x i17> [[S ]], i1 true)
38
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <3 x i17> @llvm.ctlz.v3i17( <3 x i17> [[X:%.*]], i1 true)
39
+ ; CHECK-NEXT: [[C:%.*]] = select <3 x i1> [[B:%.*]], <3 x i17> [[TMP1 ]], <3 x i17> <i17 14, i17 0, i17 undef>
41
40
; CHECK-NEXT: ret <3 x i17> [[C]]
42
41
;
43
42
%s = select <3 x i1 > %b , <3 x i17 > %x , <3 x i17 > <i17 7 , i17 -1 , i17 0 >
@@ -49,7 +48,7 @@ define i32 @ctlz_sel_const_true_false_extra_use(i1 %b) {
49
48
; CHECK-LABEL: @ctlz_sel_const_true_false_extra_use(
50
49
; CHECK-NEXT: [[S:%.*]] = select i1 [[B:%.*]], i32 -1, i32 7
51
50
; CHECK-NEXT: call void @use(i32 [[S]])
52
- ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.ctlz.i32(i32 [[S]], i1 true), !range [[RNG2 :![0-9]+]]
51
+ ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.ctlz.i32(i32 [[S]], i1 true), !range [[RNG1 :![0-9]+]]
53
52
; CHECK-NEXT: ret i32 [[C]]
54
53
;
55
54
%s = select i1 %b , i32 -1 , i32 7
@@ -60,8 +59,7 @@ define i32 @ctlz_sel_const_true_false_extra_use(i1 %b) {
60
59
61
60
define i32 @cttz_sel_const_true_false (i1 %b ) {
62
61
; CHECK-LABEL: @cttz_sel_const_true_false(
63
- ; CHECK-NEXT: [[S:%.*]] = select i1 [[B:%.*]], i32 4, i32 -7
64
- ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 true), !range [[RNG1]]
62
+ ; CHECK-NEXT: [[C:%.*]] = select i1 [[B:%.*]], i32 2, i32 0
65
63
; CHECK-NEXT: ret i32 [[C]]
66
64
;
67
65
%s = select i1 %b , i32 4 , i32 -7
@@ -71,8 +69,8 @@ define i32 @cttz_sel_const_true_false(i1 %b) {
71
69
72
70
define i32 @cttz_sel_const_true (i1 %b , i32 %x ) {
73
71
; CHECK-LABEL: @cttz_sel_const_true(
74
- ; CHECK-NEXT: [[S :%.*]] = select i1 [[B :%.*]], i32 5, i32 [[X:%.* ]]
75
- ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.cttz.i32(i32 [[S ]], i1 true), !range [[RNG1 ]]
72
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call i32 @llvm.cttz.i32(i32 [[X :%.*]], i1 true), !range [[RNG0 ]]
73
+ ; CHECK-NEXT: [[C:%.*]] = select i1 [[B:%.* ]], i32 0, i32 [[TMP1 ]]
76
74
; CHECK-NEXT: ret i32 [[C]]
77
75
;
78
76
%s = select i1 %b , i32 5 , i32 %x
@@ -82,8 +80,8 @@ define i32 @cttz_sel_const_true(i1 %b, i32 %x) {
82
80
83
81
define <3 x i5 > @cttz_sel_const_false (<3 x i1 > %b , <3 x i5 > %x ) {
84
82
; CHECK-LABEL: @cttz_sel_const_false(
85
- ; CHECK-NEXT: [[S :%.*]] = select <3 x i1> [[B:%.*]], <3 x i5> [[X:%.*]], <3 x i5> <i5 7, i5 -1, i5 0>
86
- ; CHECK-NEXT: [[C:%.*]] = call <3 x i5> @llvm.cttz.v3i5( <3 x i5> [[S ]], i1 false)
83
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <3 x i5> @llvm.cttz.v3i5( <3 x i5> [[X:%.*]], i1 false)
84
+ ; CHECK-NEXT: [[C:%.*]] = select <3 x i1> [[B:%.*]], <3 x i5> [[TMP1 ]], <3 x i5> <i5 0, i5 0, i5 5>
87
85
; CHECK-NEXT: ret <3 x i5> [[C]]
88
86
;
89
87
%s = select <3 x i1 > %b , <3 x i5 > %x , <3 x i5 > <i5 7 , i5 -1 , i5 0 >
@@ -95,7 +93,7 @@ define i32 @cttz_sel_const_true_false_extra_use(i1 %b) {
95
93
; CHECK-LABEL: @cttz_sel_const_true_false_extra_use(
96
94
; CHECK-NEXT: [[S:%.*]] = select i1 [[B:%.*]], i32 5, i32 -8
97
95
; CHECK-NEXT: call void @use(i32 [[S]])
98
- ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 true), !range [[RNG1 ]]
96
+ ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 true), !range [[RNG0 ]]
99
97
; CHECK-NEXT: ret i32 [[C]]
100
98
;
101
99
%s = select i1 %b , i32 5 , i32 -8
@@ -116,7 +114,7 @@ define i32 @ctpop_sel_const_true_false(i1 %b) {
116
114
117
115
define i32 @ctpop_sel_const_true (i1 %b , i32 %x ) {
118
116
; CHECK-LABEL: @ctpop_sel_const_true(
119
- ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.ctpop.i32(i32 [[X:%.*]]), !range [[RNG1 ]]
117
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.ctpop.i32(i32 [[X:%.*]]), !range [[RNG0 ]]
120
118
; CHECK-NEXT: [[C:%.*]] = select i1 [[B:%.*]], i32 2, i32 [[TMP1]]
121
119
; CHECK-NEXT: ret i32 [[C]]
122
120
;
@@ -140,7 +138,7 @@ define i32 @ctpop_sel_const_true_false_extra_use(i1 %b) {
140
138
; CHECK-LABEL: @ctpop_sel_const_true_false_extra_use(
141
139
; CHECK-NEXT: [[S:%.*]] = select i1 [[B:%.*]], i32 5, i32 7
142
140
; CHECK-NEXT: call void @use(i32 [[S]])
143
- ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.ctpop.i32(i32 [[S]]), !range [[RNG3 :![0-9]+]]
141
+ ; CHECK-NEXT: [[C:%.*]] = call i32 @llvm.ctpop.i32(i32 [[S]]), !range [[RNG2 :![0-9]+]]
144
142
; CHECK-NEXT: ret i32 [[C]]
145
143
;
146
144
%s = select i1 %b , i32 5 , i32 7
0 commit comments