xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/set-dx10.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; These tests check that floating point comparisons which are used by select
4*9880d681SAndroid Build Coastguard Worker; to store integer true (-1) and false (0) values are lowered to one of the
5*9880d681SAndroid Build Coastguard Worker; SET*DX10 instructions.
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_une_select_fptosi:
8*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETNE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
11*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_une_select_fptosi(i32 addrspace(1)* %out, float %in) {
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  %0 = fcmp une float %in, 5.0
14*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
15*9880d681SAndroid Build Coastguard Worker  %2 = fsub float -0.000000e+00, %1
16*9880d681SAndroid Build Coastguard Worker  %3 = fptosi float %2 to i32
17*9880d681SAndroid Build Coastguard Worker  store i32 %3, i32 addrspace(1)* %out
18*9880d681SAndroid Build Coastguard Worker  ret void
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_une_select_i32:
22*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETNE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
25*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_une_select_i32(i32 addrspace(1)* %out, float %in) {
26*9880d681SAndroid Build Coastguard Workerentry:
27*9880d681SAndroid Build Coastguard Worker  %0 = fcmp une float %in, 5.0
28*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, i32 -1, i32 0
29*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
30*9880d681SAndroid Build Coastguard Worker  ret void
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_oeq_select_fptosi:
34*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
37*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_oeq_select_fptosi(i32 addrspace(1)* %out, float %in) {
38*9880d681SAndroid Build Coastguard Workerentry:
39*9880d681SAndroid Build Coastguard Worker  %0 = fcmp oeq float %in, 5.0
40*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
41*9880d681SAndroid Build Coastguard Worker  %2 = fsub float -0.000000e+00, %1
42*9880d681SAndroid Build Coastguard Worker  %3 = fptosi float %2 to i32
43*9880d681SAndroid Build Coastguard Worker  store i32 %3, i32 addrspace(1)* %out
44*9880d681SAndroid Build Coastguard Worker  ret void
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_oeq_select_i32:
48*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
51*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_oeq_select_i32(i32 addrspace(1)* %out, float %in) {
52*9880d681SAndroid Build Coastguard Workerentry:
53*9880d681SAndroid Build Coastguard Worker  %0 = fcmp oeq float %in, 5.0
54*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, i32 -1, i32 0
55*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
56*9880d681SAndroid Build Coastguard Worker  ret void
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_ogt_select_fptosi:
60*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETGT_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
63*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_ogt_select_fptosi(i32 addrspace(1)* %out, float %in) {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ogt float %in, 5.0
66*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
67*9880d681SAndroid Build Coastguard Worker  %2 = fsub float -0.000000e+00, %1
68*9880d681SAndroid Build Coastguard Worker  %3 = fptosi float %2 to i32
69*9880d681SAndroid Build Coastguard Worker  store i32 %3, i32 addrspace(1)* %out
70*9880d681SAndroid Build Coastguard Worker  ret void
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_ogt_select_i32:
74*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETGT_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
77*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_ogt_select_i32(i32 addrspace(1)* %out, float %in) {
78*9880d681SAndroid Build Coastguard Workerentry:
79*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ogt float %in, 5.0
80*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, i32 -1, i32 0
81*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 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: {{^}}fcmp_oge_select_fptosi:
86*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETGE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
89*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_oge_select_fptosi(i32 addrspace(1)* %out, float %in) {
90*9880d681SAndroid Build Coastguard Workerentry:
91*9880d681SAndroid Build Coastguard Worker  %0 = fcmp oge float %in, 5.0
92*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
93*9880d681SAndroid Build Coastguard Worker  %2 = fsub float -0.000000e+00, %1
94*9880d681SAndroid Build Coastguard Worker  %3 = fptosi float %2 to i32
95*9880d681SAndroid Build Coastguard Worker  store i32 %3, i32 addrspace(1)* %out
96*9880d681SAndroid Build Coastguard Worker  ret void
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_oge_select_i32:
100*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETGE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
103*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_oge_select_i32(i32 addrspace(1)* %out, float %in) {
104*9880d681SAndroid Build Coastguard Workerentry:
105*9880d681SAndroid Build Coastguard Worker  %0 = fcmp oge float %in, 5.0
106*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, i32 -1, i32 0
107*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
108*9880d681SAndroid Build Coastguard Worker  ret void
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_ole_select_fptosi:
112*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETGE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.y, KC0[2].Z,
114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
115*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_ole_select_fptosi(i32 addrspace(1)* %out, float %in) {
116*9880d681SAndroid Build Coastguard Workerentry:
117*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ole float %in, 5.0
118*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
119*9880d681SAndroid Build Coastguard Worker  %2 = fsub float -0.000000e+00, %1
120*9880d681SAndroid Build Coastguard Worker  %3 = fptosi float %2 to i32
121*9880d681SAndroid Build Coastguard Worker  store i32 %3, i32 addrspace(1)* %out
122*9880d681SAndroid Build Coastguard Worker  ret void
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_ole_select_i32:
126*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETGE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.y, KC0[2].Z,
128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
129*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_ole_select_i32(i32 addrspace(1)* %out, float %in) {
130*9880d681SAndroid Build Coastguard Workerentry:
131*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ole float %in, 5.0
132*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, i32 -1, i32 0
133*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
134*9880d681SAndroid Build Coastguard Worker  ret void
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}fcmp_olt_select_fptosi:
138*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETGT_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.y, KC0[2].Z,
140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
141*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_olt_select_fptosi(i32 addrspace(1)* %out, float %in) {
142*9880d681SAndroid Build Coastguard Workerentry:
143*9880d681SAndroid Build Coastguard Worker  %0 = fcmp olt float %in, 5.0
144*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
145*9880d681SAndroid Build Coastguard Worker  %2 = fsub float -0.000000e+00, %1
146*9880d681SAndroid Build Coastguard Worker  %3 = fptosi float %2 to i32
147*9880d681SAndroid Build Coastguard Worker  store i32 %3, 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; CHECK: {{^}}fcmp_olt_select_i32:
152*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR
153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: SETGT_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.y, KC0[2].Z,
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.000000e+00)
155*9880d681SAndroid Build Coastguard Workerdefine void @fcmp_olt_select_i32(i32 addrspace(1)* %out, float %in) {
156*9880d681SAndroid Build Coastguard Workerentry:
157*9880d681SAndroid Build Coastguard Worker  %0 = fcmp olt float %in, 5.0
158*9880d681SAndroid Build Coastguard Worker  %1 = select i1 %0, i32 -1, i32 0
159*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
160*9880d681SAndroid Build Coastguard Worker  ret void
161*9880d681SAndroid Build Coastguard Worker}
162