@@ -7,9 +7,9 @@ declare void @use(i32)
7
7
8
8
define i32 @cttz_zext_zero_undef (i16 %x ) {
9
9
; CHECK-LABEL: @cttz_zext_zero_undef(
10
- ; CHECK-NEXT: [[Z :%.*]] = zext i16 [[X:%.*]] to i32
11
- ; CHECK-NEXT: [[TZ :%.*]] = call i32 @llvm.cttz.i32(i32 [[Z]], i1 true), !range [[RNG0:![0-9]+]]
12
- ; CHECK-NEXT: ret i32 [[TZ ]]
10
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call i16 @llvm.cttz.i16(i16 [[X:%.*]], i1 true), !range [[RNG0:![0-9]+]]
11
+ ; CHECK-NEXT: [[TMP2 :%.*]] = zext i16 [[TMP1]] to i32
12
+ ; CHECK-NEXT: ret i32 [[TMP2 ]]
13
13
;
14
14
%z = zext i16 %x to i32
15
15
%tz = call i32 @llvm.cttz.i32 (i32 %z , i1 true )
@@ -19,7 +19,7 @@ define i32 @cttz_zext_zero_undef(i16 %x) {
19
19
define i32 @cttz_zext_zero_def (i16 %x ) {
20
20
; CHECK-LABEL: @cttz_zext_zero_def(
21
21
; CHECK-NEXT: [[Z:%.*]] = zext i16 [[X:%.*]] to i32
22
- ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[Z]], i1 false), !range [[RNG0 ]]
22
+ ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[Z]], i1 false), !range [[RNG1:![0-9]+ ]]
23
23
; CHECK-NEXT: ret i32 [[TZ]]
24
24
;
25
25
%z = zext i16 %x to i32
@@ -31,7 +31,7 @@ define i32 @cttz_zext_zero_undef_extra_use(i16 %x) {
31
31
; CHECK-LABEL: @cttz_zext_zero_undef_extra_use(
32
32
; CHECK-NEXT: [[Z:%.*]] = zext i16 [[X:%.*]] to i32
33
33
; CHECK-NEXT: call void @use(i32 [[Z]])
34
- ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[Z]], i1 true), !range [[RNG0 ]]
34
+ ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[Z]], i1 true), !range [[RNG1 ]]
35
35
; CHECK-NEXT: ret i32 [[TZ]]
36
36
;
37
37
%z = zext i16 %x to i32
@@ -42,9 +42,9 @@ define i32 @cttz_zext_zero_undef_extra_use(i16 %x) {
42
42
43
43
define <2 x i64 > @cttz_zext_zero_undef_vec (<2 x i32 > %x ) {
44
44
; CHECK-LABEL: @cttz_zext_zero_undef_vec(
45
- ; CHECK-NEXT: [[Z :%.*]] = zext <2 x i32> [[X:%.*]] to <2 x i64>
46
- ; CHECK-NEXT: [[TZ :%.*]] = tail call <2 x i64> @llvm.cttz.v2i64( <2 x i64> [[Z]], i1 true)
47
- ; CHECK-NEXT: ret <2 x i64> [[TZ ]]
45
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> [[X:%.*]], i1 true)
46
+ ; CHECK-NEXT: [[TMP2 :%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
47
+ ; CHECK-NEXT: ret <2 x i64> [[TMP2 ]]
48
48
;
49
49
%z = zext <2 x i32 > %x to <2 x i64 >
50
50
%tz = tail call <2 x i64 > @llvm.cttz.v2i64 (<2 x i64 > %z , i1 true )
@@ -65,7 +65,7 @@ define <2 x i64> @cttz_zext_zero_def_vec(<2 x i32> %x) {
65
65
define i32 @cttz_sext_zero_undef (i16 %x ) {
66
66
; CHECK-LABEL: @cttz_sext_zero_undef(
67
67
; CHECK-NEXT: [[S:%.*]] = sext i16 [[X:%.*]] to i32
68
- ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 true), !range [[RNG0 ]]
68
+ ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 true), !range [[RNG1 ]]
69
69
; CHECK-NEXT: ret i32 [[TZ]]
70
70
;
71
71
%s = sext i16 %x to i32
@@ -76,19 +76,19 @@ define i32 @cttz_sext_zero_undef(i16 %x) {
76
76
define i32 @cttz_sext_zero_def (i16 %x ) {
77
77
; CHECK-LABEL: @cttz_sext_zero_def(
78
78
; CHECK-NEXT: [[S:%.*]] = zext i16 [[X:%.*]] to i32
79
- ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 false), !range [[RNG0 ]]
79
+ ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 false), !range [[RNG1 ]]
80
80
; CHECK-NEXT: ret i32 [[TZ]]
81
81
;
82
82
%s = zext i16 %x to i32
83
83
%tz = call i32 @llvm.cttz.i32 (i32 %s , i1 false )
84
84
ret i32 %tz
85
85
}
86
86
87
- define i32 @cttz_zext_sero_undef_extra_use (i16 %x ) {
88
- ; CHECK-LABEL: @cttz_zext_sero_undef_extra_use (
87
+ define i32 @cttz_sext_zero_undef_extra_use (i16 %x ) {
88
+ ; CHECK-LABEL: @cttz_sext_zero_undef_extra_use (
89
89
; CHECK-NEXT: [[S:%.*]] = sext i16 [[X:%.*]] to i32
90
90
; CHECK-NEXT: call void @use(i32 [[S]])
91
- ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 true), !range [[RNG0 ]]
91
+ ; CHECK-NEXT: [[TZ:%.*]] = call i32 @llvm.cttz.i32(i32 [[S]], i1 true), !range [[RNG1 ]]
92
92
; CHECK-NEXT: ret i32 [[TZ]]
93
93
;
94
94
%s = sext i16 %x to i32
0 commit comments