xref: /aosp_15_r20/external/llvm/test/Analysis/CostModel/AMDGPU/shifts.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa -mattr=+half-rate-64-ops < %s | FileCheck -check-prefix=ALL -check-prefix=FAST64 %s
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa -mattr=-half-rate-64-ops < %s | FileCheck -check-prefix=ALL -check-prefix=SLOW64 %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; ALL: 'shl_i32'
5*9880d681SAndroid Build Coastguard Worker; ALL: estimated cost of 1 for {{.*}} shl i32
6*9880d681SAndroid Build Coastguard Workerdefine void @shl_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %vaddr, i32 %b) #0 {
7*9880d681SAndroid Build Coastguard Worker  %vec = load i32, i32 addrspace(1)* %vaddr
8*9880d681SAndroid Build Coastguard Worker  %or = shl i32 %vec, %b
9*9880d681SAndroid Build Coastguard Worker  store i32 %or, i32 addrspace(1)* %out
10*9880d681SAndroid Build Coastguard Worker  ret void
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; ALL: 'shl_i64'
14*9880d681SAndroid Build Coastguard Worker; FAST64: estimated cost of 2 for {{.*}} shl i64
15*9880d681SAndroid Build Coastguard Worker; SLOW64: estimated cost of 3 for {{.*}} shl i64
16*9880d681SAndroid Build Coastguard Workerdefine void @shl_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %vaddr, i64 %b) #0 {
17*9880d681SAndroid Build Coastguard Worker  %vec = load i64, i64 addrspace(1)* %vaddr
18*9880d681SAndroid Build Coastguard Worker  %or = shl i64 %vec, %b
19*9880d681SAndroid Build Coastguard Worker  store i64 %or, i64 addrspace(1)* %out
20*9880d681SAndroid Build Coastguard Worker  ret void
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker; ALL: 'lshr_i32'
24*9880d681SAndroid Build Coastguard Worker; ALL: estimated cost of 1 for {{.*}} lshr i32
25*9880d681SAndroid Build Coastguard Workerdefine void @lshr_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %vaddr, i32 %b) #0 {
26*9880d681SAndroid Build Coastguard Worker  %vec = load i32, i32 addrspace(1)* %vaddr
27*9880d681SAndroid Build Coastguard Worker  %or = lshr i32 %vec, %b
28*9880d681SAndroid Build Coastguard Worker  store i32 %or, 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; ALL: 'lshr_i64'
33*9880d681SAndroid Build Coastguard Worker; FAST64: estimated cost of 2 for {{.*}} lshr i64
34*9880d681SAndroid Build Coastguard Worker; SLOW64: estimated cost of 3 for {{.*}} lshr i64
35*9880d681SAndroid Build Coastguard Workerdefine void @lshr_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %vaddr, i64 %b) #0 {
36*9880d681SAndroid Build Coastguard Worker  %vec = load i64, i64 addrspace(1)* %vaddr
37*9880d681SAndroid Build Coastguard Worker  %or = lshr i64 %vec, %b
38*9880d681SAndroid Build Coastguard Worker  store i64 %or, i64 addrspace(1)* %out
39*9880d681SAndroid Build Coastguard Worker  ret void
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; ALL: 'ashr_i32'
43*9880d681SAndroid Build Coastguard Worker; ALL: estimated cost of 1 for {{.*}} ashr i32
44*9880d681SAndroid Build Coastguard Workerdefine void @ashr_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %vaddr, i32 %b) #0 {
45*9880d681SAndroid Build Coastguard Worker  %vec = load i32, i32 addrspace(1)* %vaddr
46*9880d681SAndroid Build Coastguard Worker  %or = ashr i32 %vec, %b
47*9880d681SAndroid Build Coastguard Worker  store i32 %or, i32 addrspace(1)* %out
48*9880d681SAndroid Build Coastguard Worker  ret void
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; ALL: 'ashr_i64'
52*9880d681SAndroid Build Coastguard Worker; FAST64: estimated cost of 2 for {{.*}} ashr i64
53*9880d681SAndroid Build Coastguard Worker; SLOW64: estimated cost of 3 for {{.*}} ashr i64
54*9880d681SAndroid Build Coastguard Workerdefine void @ashr_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %vaddr, i64 %b) #0 {
55*9880d681SAndroid Build Coastguard Worker  %vec = load i64, i64 addrspace(1)* %vaddr
56*9880d681SAndroid Build Coastguard Worker  %or = ashr i64 %vec, %b
57*9880d681SAndroid Build Coastguard Worker  store i64 %or, i64 addrspace(1)* %out
58*9880d681SAndroid Build Coastguard Worker  ret void
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
62