1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc < %s -mtriple=aarch64-unknown-unknown | FileCheck %s --check-prefixes=SDAG
3
- ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -global-isel | FileCheck %s --check-prefixes=GISEL
2
+ ; RUN: llc < %s -mtriple=aarch64-unknown-unknown | FileCheck %s
3
+ ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -global-isel | FileCheck %s
4
4
5
5
; These tests can be optimised
6
6
; fold (bitreverse(srl (bitreverse c), x)) -> (shl c, x)
@@ -12,151 +12,87 @@ declare i32 @llvm.bitreverse.i32(i32)
12
12
declare i64 @llvm.bitreverse.i64 (i64 )
13
13
14
14
define i8 @test_bitreverse_srli_bitreverse_i8 (i8 %a ) nounwind {
15
- ; SDAG-LABEL: test_bitreverse_srli_bitreverse_i8:
16
- ; SDAG: // %bb.0:
17
- ; SDAG-NEXT: lsl w0, w0, #3
18
- ; SDAG-NEXT: ret
19
- ;
20
- ; GISEL-LABEL: test_bitreverse_srli_bitreverse_i8:
21
- ; GISEL: // %bb.0:
22
- ; GISEL-NEXT: rbit w8, w0
23
- ; GISEL-NEXT: lsr w8, w8, #24
24
- ; GISEL-NEXT: lsr w8, w8, #3
25
- ; GISEL-NEXT: rbit w8, w8
26
- ; GISEL-NEXT: lsr w0, w8, #24
27
- ; GISEL-NEXT: ret
15
+ ; CHECK-LABEL: test_bitreverse_srli_bitreverse_i8:
16
+ ; CHECK: // %bb.0:
17
+ ; CHECK-NEXT: lsl w0, w0, #3
18
+ ; CHECK-NEXT: ret
28
19
%1 = call i8 @llvm.bitreverse.i8 (i8 %a )
29
20
%2 = lshr i8 %1 , 3
30
21
%3 = call i8 @llvm.bitreverse.i8 (i8 %2 )
31
22
ret i8 %3
32
23
}
33
24
34
25
define i16 @test_bitreverse_srli_bitreverse_i16 (i16 %a ) nounwind {
35
- ; SDAG-LABEL: test_bitreverse_srli_bitreverse_i16:
36
- ; SDAG: // %bb.0:
37
- ; SDAG-NEXT: lsl w0, w0, #7
38
- ; SDAG-NEXT: ret
39
- ;
40
- ; GISEL-LABEL: test_bitreverse_srli_bitreverse_i16:
41
- ; GISEL: // %bb.0:
42
- ; GISEL-NEXT: rbit w8, w0
43
- ; GISEL-NEXT: lsr w8, w8, #16
44
- ; GISEL-NEXT: lsr w8, w8, #7
45
- ; GISEL-NEXT: rbit w8, w8
46
- ; GISEL-NEXT: lsr w0, w8, #16
47
- ; GISEL-NEXT: ret
26
+ ; CHECK-LABEL: test_bitreverse_srli_bitreverse_i16:
27
+ ; CHECK: // %bb.0:
28
+ ; CHECK-NEXT: lsl w0, w0, #7
29
+ ; CHECK-NEXT: ret
48
30
%1 = call i16 @llvm.bitreverse.i16 (i16 %a )
49
31
%2 = lshr i16 %1 , 7
50
32
%3 = call i16 @llvm.bitreverse.i16 (i16 %2 )
51
33
ret i16 %3
52
34
}
53
35
54
36
define i32 @test_bitreverse_srli_bitreverse_i32 (i32 %a ) nounwind {
55
- ; SDAG-LABEL: test_bitreverse_srli_bitreverse_i32:
56
- ; SDAG: // %bb.0:
57
- ; SDAG-NEXT: lsl w0, w0, #15
58
- ; SDAG-NEXT: ret
59
- ;
60
- ; GISEL-LABEL: test_bitreverse_srli_bitreverse_i32:
61
- ; GISEL: // %bb.0:
62
- ; GISEL-NEXT: rbit w8, w0
63
- ; GISEL-NEXT: lsr w8, w8, #15
64
- ; GISEL-NEXT: rbit w0, w8
65
- ; GISEL-NEXT: ret
37
+ ; CHECK-LABEL: test_bitreverse_srli_bitreverse_i32:
38
+ ; CHECK: // %bb.0:
39
+ ; CHECK-NEXT: lsl w0, w0, #15
40
+ ; CHECK-NEXT: ret
66
41
%1 = call i32 @llvm.bitreverse.i32 (i32 %a )
67
42
%2 = lshr i32 %1 , 15
68
43
%3 = call i32 @llvm.bitreverse.i32 (i32 %2 )
69
44
ret i32 %3
70
45
}
71
46
72
47
define i64 @test_bitreverse_srli_bitreverse_i64 (i64 %a ) nounwind {
73
- ; SDAG-LABEL: test_bitreverse_srli_bitreverse_i64:
74
- ; SDAG: // %bb.0:
75
- ; SDAG-NEXT: lsl x0, x0, #33
76
- ; SDAG-NEXT: ret
77
- ;
78
- ; GISEL-LABEL: test_bitreverse_srli_bitreverse_i64:
79
- ; GISEL: // %bb.0:
80
- ; GISEL-NEXT: rbit x8, x0
81
- ; GISEL-NEXT: lsr x8, x8, #33
82
- ; GISEL-NEXT: rbit x0, x8
83
- ; GISEL-NEXT: ret
48
+ ; CHECK-LABEL: test_bitreverse_srli_bitreverse_i64:
49
+ ; CHECK: // %bb.0:
50
+ ; CHECK-NEXT: lsl x0, x0, #33
51
+ ; CHECK-NEXT: ret
84
52
%1 = call i64 @llvm.bitreverse.i64 (i64 %a )
85
53
%2 = lshr i64 %1 , 33
86
54
%3 = call i64 @llvm.bitreverse.i64 (i64 %2 )
87
55
ret i64 %3
88
56
}
89
57
90
58
define i8 @test_bitreverse_shli_bitreverse_i8 (i8 %a ) nounwind {
91
- ; SDAG-LABEL: test_bitreverse_shli_bitreverse_i8:
92
- ; SDAG: // %bb.0:
93
- ; SDAG-NEXT: ubfx w0, w0, #3, #5
94
- ; SDAG-NEXT: ret
95
- ;
96
- ; GISEL-LABEL: test_bitreverse_shli_bitreverse_i8:
97
- ; GISEL: // %bb.0:
98
- ; GISEL-NEXT: rbit w8, w0
99
- ; GISEL-NEXT: lsr w8, w8, #24
100
- ; GISEL-NEXT: lsl w8, w8, #3
101
- ; GISEL-NEXT: rbit w8, w8
102
- ; GISEL-NEXT: lsr w0, w8, #24
103
- ; GISEL-NEXT: ret
59
+ ; CHECK-LABEL: test_bitreverse_shli_bitreverse_i8:
60
+ ; CHECK: // %bb.0:
61
+ ; CHECK-NEXT: ubfx w0, w0, #3, #5
62
+ ; CHECK-NEXT: ret
104
63
%1 = call i8 @llvm.bitreverse.i8 (i8 %a )
105
64
%2 = shl i8 %1 , 3
106
65
%3 = call i8 @llvm.bitreverse.i8 (i8 %2 )
107
66
ret i8 %3
108
67
}
109
68
110
69
define i16 @test_bitreverse_shli_bitreverse_i16 (i16 %a ) nounwind {
111
- ; SDAG-LABEL: test_bitreverse_shli_bitreverse_i16:
112
- ; SDAG: // %bb.0:
113
- ; SDAG-NEXT: ubfx w0, w0, #7, #9
114
- ; SDAG-NEXT: ret
115
- ;
116
- ; GISEL-LABEL: test_bitreverse_shli_bitreverse_i16:
117
- ; GISEL: // %bb.0:
118
- ; GISEL-NEXT: rbit w8, w0
119
- ; GISEL-NEXT: lsr w8, w8, #16
120
- ; GISEL-NEXT: lsl w8, w8, #7
121
- ; GISEL-NEXT: rbit w8, w8
122
- ; GISEL-NEXT: lsr w0, w8, #16
123
- ; GISEL-NEXT: ret
70
+ ; CHECK-LABEL: test_bitreverse_shli_bitreverse_i16:
71
+ ; CHECK: // %bb.0:
72
+ ; CHECK-NEXT: ubfx w0, w0, #7, #9
73
+ ; CHECK-NEXT: ret
124
74
%1 = call i16 @llvm.bitreverse.i16 (i16 %a )
125
75
%2 = shl i16 %1 , 7
126
76
%3 = call i16 @llvm.bitreverse.i16 (i16 %2 )
127
77
ret i16 %3
128
78
}
129
79
130
80
define i32 @test_bitreverse_shli_bitreverse_i32 (i32 %a ) nounwind {
131
- ; SDAG-LABEL: test_bitreverse_shli_bitreverse_i32:
132
- ; SDAG: // %bb.0:
133
- ; SDAG-NEXT: lsr w0, w0, #15
134
- ; SDAG-NEXT: ret
135
- ;
136
- ; GISEL-LABEL: test_bitreverse_shli_bitreverse_i32:
137
- ; GISEL: // %bb.0:
138
- ; GISEL-NEXT: rbit w8, w0
139
- ; GISEL-NEXT: lsl w8, w8, #15
140
- ; GISEL-NEXT: rbit w0, w8
141
- ; GISEL-NEXT: ret
81
+ ; CHECK-LABEL: test_bitreverse_shli_bitreverse_i32:
82
+ ; CHECK: // %bb.0:
83
+ ; CHECK-NEXT: lsr w0, w0, #15
84
+ ; CHECK-NEXT: ret
142
85
%1 = call i32 @llvm.bitreverse.i32 (i32 %a )
143
86
%2 = shl i32 %1 , 15
144
87
%3 = call i32 @llvm.bitreverse.i32 (i32 %2 )
145
88
ret i32 %3
146
89
}
147
90
148
91
define i64 @test_bitreverse_shli_bitreverse_i64 (i64 %a ) nounwind {
149
- ; SDAG-LABEL: test_bitreverse_shli_bitreverse_i64:
150
- ; SDAG: // %bb.0:
151
- ; SDAG-NEXT: lsr x0, x0, #33
152
- ; SDAG-NEXT: ret
153
- ;
154
- ; GISEL-LABEL: test_bitreverse_shli_bitreverse_i64:
155
- ; GISEL: // %bb.0:
156
- ; GISEL-NEXT: rbit x8, x0
157
- ; GISEL-NEXT: lsl x8, x8, #33
158
- ; GISEL-NEXT: rbit x0, x8
159
- ; GISEL-NEXT: ret
92
+ ; CHECK-LABEL: test_bitreverse_shli_bitreverse_i64:
93
+ ; CHECK: // %bb.0:
94
+ ; CHECK-NEXT: lsr x0, x0, #33
95
+ ; CHECK-NEXT: ret
160
96
%1 = call i64 @llvm.bitreverse.i64 (i64 %a )
161
97
%2 = shl i64 %1 , 33
162
98
%3 = call i64 @llvm.bitreverse.i64 (i64 %2 )
0 commit comments