xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/bitreverse-inline-immediates.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Test that materialization constants that are the bit reversed of
4*9880d681SAndroid Build Coastguard Worker; inline immediates are replaced with bfrev of the inline immediate to
5*9880d681SAndroid Build Coastguard Worker; save code size.
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_0_i32:
8*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0{{$}}
9*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
10*9880d681SAndroid Build Coastguard Workerdefine void @materialize_0_i32(i32 addrspace(1)* %out) {
11*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 addrspace(1)* %out
12*9880d681SAndroid Build Coastguard Worker  ret void
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_0_i64:
16*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
17*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIK:[0-9]+]], v[[LOK]]{{$}}
18*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
19*9880d681SAndroid Build Coastguard Workerdefine void @materialize_0_i64(i64 addrspace(1)* %out) {
20*9880d681SAndroid Build Coastguard Worker  store i64 0, i64 addrspace(1)* %out
21*9880d681SAndroid Build Coastguard Worker  ret void
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_neg1_i32:
25*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], -1{{$}}
26*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
27*9880d681SAndroid Build Coastguard Workerdefine void @materialize_neg1_i32(i32 addrspace(1)* %out) {
28*9880d681SAndroid Build Coastguard Worker  store i32 -1, i32 addrspace(1)* %out
29*9880d681SAndroid Build Coastguard Worker  ret void
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_neg1_i64:
33*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}}
34*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIK:[0-9]+]], v[[LOK]]{{$}}
35*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
36*9880d681SAndroid Build Coastguard Workerdefine void @materialize_neg1_i64(i64 addrspace(1)* %out) {
37*9880d681SAndroid Build Coastguard Worker  store i64 -1, i64 addrspace(1)* %out
38*9880d681SAndroid Build Coastguard Worker  ret void
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_signbit_i32:
42*9880d681SAndroid Build Coastguard Worker; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], 1{{$}}
43*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
44*9880d681SAndroid Build Coastguard Workerdefine void @materialize_signbit_i32(i32 addrspace(1)* %out) {
45*9880d681SAndroid Build Coastguard Worker  store i32 -2147483648, i32 addrspace(1)* %out
46*9880d681SAndroid Build Coastguard Worker  ret void
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_signbit_i64:
50*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
51*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], 1{{$}}
52*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
53*9880d681SAndroid Build Coastguard Workerdefine void @materialize_signbit_i64(i64 addrspace(1)* %out) {
54*9880d681SAndroid Build Coastguard Worker  store i64  -9223372036854775808, i64 addrspace(1)* %out
55*9880d681SAndroid Build Coastguard Worker  ret void
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_neg16_i32:
59*9880d681SAndroid Build Coastguard Worker; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], -16{{$}}
60*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
61*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_neg16_i32(i32 addrspace(1)* %out) {
62*9880d681SAndroid Build Coastguard Worker  store i32 268435455, i32 addrspace(1)* %out
63*9880d681SAndroid Build Coastguard Worker  ret void
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_neg16_i64:
67*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}}
68*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], -16{{$}}
69*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
70*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_neg16_i64(i64 addrspace(1)* %out) {
71*9880d681SAndroid Build Coastguard Worker  store i64  1152921504606846975, i64 addrspace(1)* %out
72*9880d681SAndroid Build Coastguard Worker  ret void
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_neg17_i32:
76*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0xf7ffffff{{$}}
77*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
78*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_neg17_i32(i32 addrspace(1)* %out) {
79*9880d681SAndroid Build Coastguard Worker  store i32 -134217729, i32 addrspace(1)* %out
80*9880d681SAndroid Build Coastguard Worker  ret void
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_neg17_i64:
84*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}}
85*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0xf7ffffff{{$}}
86*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
87*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_neg17_i64(i64 addrspace(1)* %out) {
88*9880d681SAndroid Build Coastguard Worker  store i64 -576460752303423489, i64 addrspace(1)* %out
89*9880d681SAndroid Build Coastguard Worker  ret void
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_64_i32:
93*9880d681SAndroid Build Coastguard Worker; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], 64{{$}}
94*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
95*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_64_i32(i32 addrspace(1)* %out) {
96*9880d681SAndroid Build Coastguard Worker  store i32 33554432, i32 addrspace(1)* %out
97*9880d681SAndroid Build Coastguard Worker  ret void
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_64_i64:
101*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
102*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], 64{{$}}
103*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
104*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_64_i64(i64 addrspace(1)* %out) {
105*9880d681SAndroid Build Coastguard Worker  store i64 144115188075855872, i64 addrspace(1)* %out
106*9880d681SAndroid Build Coastguard Worker  ret void
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_65_i32:
110*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0x82000000{{$}}
111*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
112*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_65_i32(i32 addrspace(1)* %out) {
113*9880d681SAndroid Build Coastguard Worker  store i32 -2113929216, i32 addrspace(1)* %out
114*9880d681SAndroid Build Coastguard Worker  ret void
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_65_i64:
118*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
119*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0x82000000{{$}}
120*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
121*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_65_i64(i64 addrspace(1)* %out) {
122*9880d681SAndroid Build Coastguard Worker  store i64 -9079256848778919936, i64 addrspace(1)* %out
123*9880d681SAndroid Build Coastguard Worker  ret void
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_3_i32:
127*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], -2.0{{$}}
128*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
129*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_3_i32(i32 addrspace(1)* %out) {
130*9880d681SAndroid Build Coastguard Worker  store i32 -1073741824, i32 addrspace(1)* %out
131*9880d681SAndroid Build Coastguard Worker  ret void
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_3_i64:
135*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
136*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], -2.0{{$}}
137*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
138*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_3_i64(i64 addrspace(1)* %out) {
139*9880d681SAndroid Build Coastguard Worker  store i64 -4611686018427387904, i64 addrspace(1)* %out
140*9880d681SAndroid Build Coastguard Worker  ret void
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_1.0_i32:
144*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0x1fc{{$}}
145*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]]
146*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_1.0_i32(i32 addrspace(1)* %out) {
147*9880d681SAndroid Build Coastguard Worker  store i32 508, i32 addrspace(1)* %out
148*9880d681SAndroid Build Coastguard Worker  ret void
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_1.0_i64:
152*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0x1fc{{$}}
153*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0{{$}}
154*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
155*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_1.0_i64(i64 addrspace(1)* %out) {
156*9880d681SAndroid Build Coastguard Worker  store i64 508, i64 addrspace(1)* %out
157*9880d681SAndroid Build Coastguard Worker  ret void
158*9880d681SAndroid Build Coastguard Worker}
159