1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1
2
; RUN: opt < %s -S -instcombine | FileCheck %s
2
3
3
4
declare i8 @llvm.bitreverse.i8 (i8 )
4
5
declare i32 @llvm.bitreverse.i32 (i32 )
5
6
6
- ; CHECK-LABEL: @test1
7
- ; CHECK: ret i1 true
8
7
define i1 @test1 (i32 %arg ) {
8
+ ; CHECK-LABEL: @test1(
9
+ ; CHECK-NEXT: ret i1 true
10
+ ;
9
11
%a = or i32 %arg , 4294901760
10
12
%b = call i32 @llvm.bitreverse.i32 (i32 %a )
11
13
%and = and i32 %b , 65535
12
14
%res = icmp eq i32 %and , 65535
13
15
ret i1 %res
14
16
}
15
17
16
- ; CHECK-LABEL: @test2
17
- ; CHECK: ret i1 true
18
18
define i1 @test2 (i32 %arg ) {
19
+ ; CHECK-LABEL: @test2(
20
+ ; CHECK-NEXT: ret i1 true
21
+ ;
19
22
%a = or i32 %arg , 1
20
23
%b = call i32 @llvm.bitreverse.i32 (i32 %a )
21
24
%c = and i32 %b , 2147483648
@@ -24,28 +27,33 @@ define i1 @test2(i32 %arg) {
24
27
ret i1 %res
25
28
}
26
29
27
- ; CHECK-LABEL: @test3
28
- ; CHECK: ret i1 false
29
30
define i1 @test3 (i32 %arg ) {
31
+ ; CHECK-LABEL: @test3(
32
+ ; CHECK-NEXT: ret i1 false
33
+ ;
30
34
%a = or i32 %arg , 65536
31
35
%b = call i32 @llvm.bitreverse.i32 (i32 %a )
32
36
%and = and i32 %b , 32768
33
37
%res = icmp eq i32 %and , 0
34
38
ret i1 %res
35
39
}
36
40
37
- ; CHECK-LABEL: @add_bitreverse
38
- ; Make sure we process range metadata on bitreverse
41
+ ; known bits for the bitreverse will say the result is in the range [0, 64)
42
+ ; but the metadata says [0, 16). So make sure the range metadata wins.
43
+ ; add %reverse, 1111 0000
44
+ ; should become
45
+ ; or %reverse, 1111 0000
46
+
39
47
define i8 @add_bitreverse (i8 %a ) {
48
+ ; CHECK-LABEL: @add_bitreverse(
49
+ ; CHECK-NEXT: [[B:%.*]] = and i8 [[A:%.*]], -4
50
+ ; CHECK-NEXT: [[REVERSE:%.*]] = call i8 @llvm.bitreverse.i8(i8 [[B]]), [[RNG0:!range !.*]]
51
+ ; CHECK-NEXT: [[C:%.*]] = or i8 [[REVERSE]], -16
52
+ ; CHECK-NEXT: ret i8 [[C]]
53
+ ;
40
54
%b = and i8 %a , 252
41
- ; known bits for the bitreverse will say the result is in the range [0, 64)
42
- ; but the metadata says [0, 16). So make sure the range metadata wins.
43
- ; add %reverse, 1111 0000
44
- ; should become
45
- ; or %reverse, 1111 0000
46
55
%reverse = call i8 @llvm.bitreverse.i8 (i8 %b ), !range !1
47
56
%c = add i8 %reverse , -16
48
- ; CHECK: or i8 %reverse, -16
49
57
ret i8 %c
50
58
}
51
59
!1 = !{i8 0 , i8 16 }
0 commit comments