xref: /aosp_15_r20/external/llvm/test/Analysis/CostModel/AMDGPU/add-sub.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa -mattr=+half-rate-64-ops < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa -mattr=-half-rate-64-ops < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; CHECK: 'add_i32'
5*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 1 for {{.*}} add i32
6*9880d681SAndroid Build Coastguard Workerdefine void @add_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  %add = add i32 %vec, %b
9*9880d681SAndroid Build Coastguard Worker  store i32 %add, 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; CHECK: 'add_v2i32'
14*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 2 for {{.*}} add <2 x i32>
15*9880d681SAndroid Build Coastguard Workerdefine void @add_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %vaddr, <2 x i32> %b) #0 {
16*9880d681SAndroid Build Coastguard Worker  %vec = load <2 x i32>, <2 x i32> addrspace(1)* %vaddr
17*9880d681SAndroid Build Coastguard Worker  %add = add <2 x i32> %vec, %b
18*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %add, <2 x i32> addrspace(1)* %out
19*9880d681SAndroid Build Coastguard Worker  ret void
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker; CHECK: 'add_v3i32'
23*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 3 for {{.*}} add <3 x i32>
24*9880d681SAndroid Build Coastguard Workerdefine void @add_v3i32(<3 x i32> addrspace(1)* %out, <3 x i32> addrspace(1)* %vaddr, <3 x i32> %b) #0 {
25*9880d681SAndroid Build Coastguard Worker  %vec = load <3 x i32>, <3 x i32> addrspace(1)* %vaddr
26*9880d681SAndroid Build Coastguard Worker  %add = add <3 x i32> %vec, %b
27*9880d681SAndroid Build Coastguard Worker  store <3 x i32> %add, <3 x i32> addrspace(1)* %out
28*9880d681SAndroid Build Coastguard Worker  ret void
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker; CHECK: 'add_v4i32'
32*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 4 for {{.*}} add <4 x i32>
33*9880d681SAndroid Build Coastguard Workerdefine void @add_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %vaddr, <4 x i32> %b) #0 {
34*9880d681SAndroid Build Coastguard Worker  %vec = load <4 x i32>, <4 x i32> addrspace(1)* %vaddr
35*9880d681SAndroid Build Coastguard Worker  %add = add <4 x i32> %vec, %b
36*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %add, <4 x i32> addrspace(1)* %out
37*9880d681SAndroid Build Coastguard Worker  ret void
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; CHECK: 'add_i64'
41*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 2 for {{.*}} add i64
42*9880d681SAndroid Build Coastguard Workerdefine void @add_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %vaddr, i64 %b) #0 {
43*9880d681SAndroid Build Coastguard Worker  %vec = load i64, i64 addrspace(1)* %vaddr
44*9880d681SAndroid Build Coastguard Worker  %add = add i64 %vec, %b
45*9880d681SAndroid Build Coastguard Worker  store i64 %add, i64 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; CHECK: 'add_v2i64'
50*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 4 for {{.*}} add <2 x i64>
51*9880d681SAndroid Build Coastguard Workerdefine void @add_v2i64(<2 x i64> addrspace(1)* %out, <2 x i64> addrspace(1)* %vaddr, <2 x i64> %b) #0 {
52*9880d681SAndroid Build Coastguard Worker  %vec = load <2 x i64>, <2 x i64> addrspace(1)* %vaddr
53*9880d681SAndroid Build Coastguard Worker  %add = add <2 x i64> %vec, %b
54*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %add, <2 x 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; CHECK: 'add_v3i64'
59*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 6 for {{.*}} add <3 x i64>
60*9880d681SAndroid Build Coastguard Workerdefine void @add_v3i64(<3 x i64> addrspace(1)* %out, <3 x i64> addrspace(1)* %vaddr, <3 x i64> %b) #0 {
61*9880d681SAndroid Build Coastguard Worker  %vec = load <3 x i64>, <3 x i64> addrspace(1)* %vaddr
62*9880d681SAndroid Build Coastguard Worker  %add = add <3 x i64> %vec, %b
63*9880d681SAndroid Build Coastguard Worker  store <3 x i64> %add, <3 x i64> addrspace(1)* %out
64*9880d681SAndroid Build Coastguard Worker  ret void
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; CHECK: 'add_v4i64'
68*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 8 for {{.*}} add <4 x i64>
69*9880d681SAndroid Build Coastguard Workerdefine void @add_v4i64(<4 x i64> addrspace(1)* %out, <4 x i64> addrspace(1)* %vaddr, <4 x i64> %b) #0 {
70*9880d681SAndroid Build Coastguard Worker  %vec = load <4 x i64>, <4 x i64> addrspace(1)* %vaddr
71*9880d681SAndroid Build Coastguard Worker  %add = add <4 x i64> %vec, %b
72*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %add, <4 x i64> addrspace(1)* %out
73*9880d681SAndroid Build Coastguard Worker  ret void
74*9880d681SAndroid Build Coastguard Worker}
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; CHECK: 'add_v16i64'
77*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 32 for {{.*}} add <16 x i64>
78*9880d681SAndroid Build Coastguard Workerdefine void @add_v16i64(<16 x i64> addrspace(1)* %out, <16 x i64> addrspace(1)* %vaddr, <16 x i64> %b) #0 {
79*9880d681SAndroid Build Coastguard Worker  %vec = load <16 x i64>, <16 x i64> addrspace(1)* %vaddr
80*9880d681SAndroid Build Coastguard Worker  %add = add <16 x i64> %vec, %b
81*9880d681SAndroid Build Coastguard Worker  store <16 x i64> %add, <16 x i64> addrspace(1)* %out
82*9880d681SAndroid Build Coastguard Worker  ret void
83*9880d681SAndroid Build Coastguard Worker}
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; CHECK: 'add_i16'
86*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 1 for {{.*}} add i16
87*9880d681SAndroid Build Coastguard Workerdefine void @add_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %vaddr, i16 %b) #0 {
88*9880d681SAndroid Build Coastguard Worker  %vec = load i16, i16 addrspace(1)* %vaddr
89*9880d681SAndroid Build Coastguard Worker  %add = add i16 %vec, %b
90*9880d681SAndroid Build Coastguard Worker  store i16 %add, i16 addrspace(1)* %out
91*9880d681SAndroid Build Coastguard Worker  ret void
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker; CHECK: 'add_v2i16'
95*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 2 for {{.*}} add <2 x i16>
96*9880d681SAndroid Build Coastguard Workerdefine void @add_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr, <2 x i16> %b) #0 {
97*9880d681SAndroid Build Coastguard Worker  %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr
98*9880d681SAndroid Build Coastguard Worker  %add = add <2 x i16> %vec, %b
99*9880d681SAndroid Build Coastguard Worker  store <2 x i16> %add, <2 x i16> addrspace(1)* %out
100*9880d681SAndroid Build Coastguard Worker  ret void
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; CHECK: 'sub_i32'
104*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 1 for {{.*}} sub i32
105*9880d681SAndroid Build Coastguard Workerdefine void @sub_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %vaddr, i32 %b) #0 {
106*9880d681SAndroid Build Coastguard Worker  %vec = load i32, i32 addrspace(1)* %vaddr
107*9880d681SAndroid Build Coastguard Worker  %sub = sub i32 %vec, %b
108*9880d681SAndroid Build Coastguard Worker  store i32 %sub, i32 addrspace(1)* %out
109*9880d681SAndroid Build Coastguard Worker  ret void
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker; CHECK: 'sub_i64'
113*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 2 for {{.*}} sub i64
114*9880d681SAndroid Build Coastguard Workerdefine void @sub_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %vaddr, i64 %b) #0 {
115*9880d681SAndroid Build Coastguard Worker  %vec = load i64, i64 addrspace(1)* %vaddr
116*9880d681SAndroid Build Coastguard Worker  %sub = sub i64 %vec, %b
117*9880d681SAndroid Build Coastguard Worker  store i64 %sub, i64 addrspace(1)* %out
118*9880d681SAndroid Build Coastguard Worker  ret void
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker; CHECK: 'sub_i16'
121*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 1 for {{.*}} sub i16
122*9880d681SAndroid Build Coastguard Workerdefine void @sub_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %vaddr, i16 %b) #0 {
123*9880d681SAndroid Build Coastguard Worker  %vec = load i16, i16 addrspace(1)* %vaddr
124*9880d681SAndroid Build Coastguard Worker  %sub = sub i16 %vec, %b
125*9880d681SAndroid Build Coastguard Worker  store i16 %sub, i16 addrspace(1)* %out
126*9880d681SAndroid Build Coastguard Worker  ret void
127*9880d681SAndroid Build Coastguard Worker}
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker; CHECK: 'sub_v2i16'
130*9880d681SAndroid Build Coastguard Worker; CHECK: estimated cost of 2 for {{.*}} sub <2 x i16>
131*9880d681SAndroid Build Coastguard Workerdefine void @sub_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr, <2 x i16> %b) #0 {
132*9880d681SAndroid Build Coastguard Worker  %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr
133*9880d681SAndroid Build Coastguard Worker  %sub = sub <2 x i16> %vec, %b
134*9880d681SAndroid Build Coastguard Worker  store <2 x i16> %sub, <2 x i16> addrspace(1)* %out
135*9880d681SAndroid Build Coastguard Worker  ret void
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
139