blob: 645e6e1e2dd34d333eaba705c00b46669818480e [file] [log] [blame]
Stanislav Mekhanoshin20279dc2018-06-20 20:24:20 +00001; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefix=GCN %s
2
3; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants:
4; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 2, 9,
5define amdgpu_kernel void @sel_constants_sub_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
6 %sel = select i1 %cond, i32 -4, i32 3
7 %bo = sub i32 5, %sel
8 store i32 %bo, i32 addrspace(1)* %p, align 4
9 ret void
10}
11
12; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants_i16:
13; TODO: shrink i16 constant. This is correct but suboptimal.
14; GCN: v_mov_b32_e32 [[T:v[0-9]+]], 0xffff0009
15; GCN: v_cndmask_b32_e32 v{{[0-9]+}}, 2, [[T]],
16define amdgpu_kernel void @sel_constants_sub_constant_sel_constants_i16(i16 addrspace(1)* %p, i1 %cond) {
17 %sel = select i1 %cond, i16 -4, i16 3
18 %bo = sub i16 5, %sel
19 store i16 %bo, i16 addrspace(1)* %p, align 2
20 ret void
21}
22
23; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants_i16_neg:
24; GCN: v_mov_b32_e32 [[F:v[0-9]+]], 0xfffff449
25; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, [[F]], -3,
26define amdgpu_kernel void @sel_constants_sub_constant_sel_constants_i16_neg(i16 addrspace(1)* %p, i1 %cond) {
27 %sel = select i1 %cond, i16 4, i16 3000
28 %bo = sub i16 1, %sel
29 store i16 %bo, i16 addrspace(1)* %p, align 2
30 ret void
31}
32
33; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants_v2i16:
34; GCN-DAG: v_mov_b32_e32 [[F:v[0-9]+]], 0x60002
35; GCN-DAG: v_mov_b32_e32 [[T:v[0-9]+]], 0x50009
36; GCN: v_cndmask_b32_e32 v{{[0-9]+}}, [[F]], [[T]],
37define amdgpu_kernel void @sel_constants_sub_constant_sel_constants_v2i16(<2 x i16> addrspace(1)* %p, i1 %cond) {
38 %sel = select i1 %cond, <2 x i16> <i16 -4, i16 2>, <2 x i16> <i16 3, i16 1>
39 %bo = sub <2 x i16> <i16 5, i16 7>, %sel
40 store <2 x i16> %bo, <2 x i16> addrspace(1)* %p, align 4
41 ret void
42}
43
44; GCN-LABEL: {{^}}sel_constants_sub_constant_sel_constants_v4i32:
45; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 2, 9,
46; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 6, 5,
47; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 10, 6,
48; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 14, 7,
49define amdgpu_kernel void @sel_constants_sub_constant_sel_constants_v4i32(<4 x i32> addrspace(1)* %p, i1 %cond) {
50 %sel = select i1 %cond, <4 x i32> <i32 -4, i32 2, i32 3, i32 4>, <4 x i32> <i32 3, i32 1, i32 -1, i32 -3>
51 %bo = sub <4 x i32> <i32 5, i32 7, i32 9, i32 11>, %sel
52 store <4 x i32> %bo, <4 x i32> addrspace(1)* %p, align 32
53 ret void
54}
55
56; GCN-LABEL: {{^}}sdiv_constant_sel_constants:
57; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 5, 0,
58define amdgpu_kernel void @sdiv_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
59 %sel = select i1 %cond, i32 121, i32 23
60 %bo = sdiv i32 120, %sel
61 store i32 %bo, i32 addrspace(1)* %p, align 4
62 ret void
63}
64
65; GCN-LABEL: {{^}}udiv_constant_sel_constants:
66; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 5, 0,
67define amdgpu_kernel void @udiv_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
68 %sel = select i1 %cond, i32 -4, i32 23
69 %bo = udiv i32 120, %sel
70 store i32 %bo, i32 addrspace(1)* %p, align 4
71 ret void
72}
73
74; GCN-LABEL: {{^}}srem_constant_sel_constants:
75; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 3, 33,
76define amdgpu_kernel void @srem_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
77 %sel = select i1 %cond, i32 34, i32 15
78 %bo = srem i32 33, %sel
79 store i32 %bo, i32 addrspace(1)* %p, align 4
80 ret void
81}
82
83; GCN-LABEL: {{^}}urem_constant_sel_constants:
84; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 3, 33,
85define amdgpu_kernel void @urem_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
86 %sel = select i1 %cond, i32 34, i32 15
87 %bo = urem i32 33, %sel
88 store i32 %bo, i32 addrspace(1)* %p, align 4
89 ret void
90}
91
92; GCN-LABEL: {{^}}shl_constant_sel_constants:
93; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 8, 4,
94define amdgpu_kernel void @shl_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
95 %sel = select i1 %cond, i32 2, i32 3
96 %bo = shl i32 1, %sel
97 store i32 %bo, i32 addrspace(1)* %p, align 4
98 ret void
99}
100
101; GCN-LABEL: {{^}}lshr_constant_sel_constants:
102; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 8, 16,
103define amdgpu_kernel void @lshr_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
104 %sel = select i1 %cond, i32 2, i32 3
105 %bo = lshr i32 64, %sel
106 store i32 %bo, i32 addrspace(1)* %p, align 4
107 ret void
108}
109
110; GCN-LABEL: {{^}}ashr_constant_sel_constants:
111; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 16, 32,
112define amdgpu_kernel void @ashr_constant_sel_constants(i32 addrspace(1)* %p, i1 %cond) {
113 %sel = select i1 %cond, i32 2, i32 3
114 %bo = ashr i32 128, %sel
115 store i32 %bo, i32 addrspace(1)* %p, align 4
116 ret void
117}
118
119; GCN-LABEL: {{^}}fsub_constant_sel_constants:
120; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, -4.0, 1.0,
121define amdgpu_kernel void @fsub_constant_sel_constants(float addrspace(1)* %p, i1 %cond) {
122 %sel = select i1 %cond, float -2.0, float 3.0
123 %bo = fsub float -1.0, %sel
124 store float %bo, float addrspace(1)* %p, align 4
125 ret void
126}
127
128; GCN-LABEL: {{^}}fsub_constant_sel_constants_f16:
129; TODO: it shall be possible to fold constants with OpSel
130; GCN-DAG: v_mov_b32_e32 [[T:v[0-9]+]], 0x3c00
131; GCN-DAG: v_mov_b32_e32 [[F:v[0-9]+]], 0xc400
132; GCN: v_cndmask_b32_e32 v{{[0-9]+}}, [[F]], [[T]],
133define amdgpu_kernel void @fsub_constant_sel_constants_f16(half addrspace(1)* %p, i1 %cond) {
134 %sel = select i1 %cond, half -2.0, half 3.0
135 %bo = fsub half -1.0, %sel
136 store half %bo, half addrspace(1)* %p, align 2
137 ret void
138}
139
140; GCN-LABEL: {{^}}fsub_constant_sel_constants_v2f16:
141; GCN-DAG: v_mov_b32_e32 [[T:v[0-9]+]], 0x45003c00
142; GCN: v_cndmask_b32_e32 v{{[0-9]+}}, -2.0, [[T]],
143define amdgpu_kernel void @fsub_constant_sel_constants_v2f16(<2 x half> addrspace(1)* %p, i1 %cond) {
144 %sel = select i1 %cond, <2 x half> <half -2.0, half -3.0>, <2 x half> <half -1.0, half 4.0>
145 %bo = fsub <2 x half> <half -1.0, half 2.0>, %sel
146 store <2 x half> %bo, <2 x half> addrspace(1)* %p, align 4
147 ret void
148}
149
150; GCN-LABEL: {{^}}fsub_constant_sel_constants_v4f32:
151; GCN-DAG: v_mov_b32_e32 [[T2:v[0-9]+]], 0x40a00000
152; GCN-DAG: v_mov_b32_e32 [[T3:v[0-9]+]], 0x41100000
153; GCN-DAG: v_mov_b32_e32 [[T4:v[0-9]+]], 0x41500000
154; GCN-DAG: v_mov_b32_e32 [[F4:v[0-9]+]], 0x40c00000
155; GCN-DAG: v_cndmask_b32_e64 v{{[0-9]+}}, 0, 1.0,
156; GCN-DAG: v_cndmask_b32_e32 v{{[0-9]+}}, 2.0, [[T2]],
157; GCN-DAG: v_cndmask_b32_e32 v{{[0-9]+}}, 4.0, [[T3]],
158; GCN-DAG: v_cndmask_b32_e32 v{{[0-9]+}}, [[F4]], [[T4]],
159define amdgpu_kernel void @fsub_constant_sel_constants_v4f32(<4 x float> addrspace(1)* %p, i1 %cond) {
160 %sel = select i1 %cond, <4 x float> <float -2.0, float -3.0, float -4.0, float -5.0>, <4 x float> <float -1.0, float 0.0, float 1.0, float 2.0>
161 %bo = fsub <4 x float> <float -1.0, float 2.0, float 5.0, float 8.0>, %sel
162 store <4 x float> %bo, <4 x float> addrspace(1)* %p, align 32
163 ret void
164}
165
166; GCN-LABEL: {{^}}fdiv_constant_sel_constants:
167; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 4.0, -2.0,
168define amdgpu_kernel void @fdiv_constant_sel_constants(float addrspace(1)* %p, i1 %cond) {
169 %sel = select i1 %cond, float -4.0, float 2.0
170 %bo = fdiv float 8.0, %sel
171 store float %bo, float addrspace(1)* %p, align 4
172 ret void
173}
174
175; GCN-LABEL: {{^}}frem_constant_sel_constants:
176; GCN: v_cndmask_b32_e64 v{{[0-9]+}}, 2.0, 1.0,
177define amdgpu_kernel void @frem_constant_sel_constants(float addrspace(1)* %p, i1 %cond) {
178 %sel = select i1 %cond, float -4.0, float 3.0
179 %bo = frem float 5.0, %sel
180 store float %bo, float addrspace(1)* %p, align 4
181 ret void
182}