blob: 6867c6394937ca3ea399b44f15b1255a006cf195 [file] [log] [blame]
Tom Stellarde06163a2013-02-07 14:02:35 +00001; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
2
3; These tests check that floating point comparisons which are used by select
4; to store integer true (-1) and false (0) values are lowered to one of the
5; SET*DX10 instructions.
6
Tom Stellard79243d92014-10-01 17:15:17 +00007; CHECK: {{^}}fcmp_une_select_fptosi:
Matthias Braun97d0ffb2015-12-04 01:51:19 +00008; CHECK: LSHR
9; CHECK-NEXT: SETNE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
Vincent Lejeunef97af792013-05-02 21:52:30 +000010; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000011define amdgpu_kernel void @fcmp_une_select_fptosi(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +000012entry:
13 %0 = fcmp une float %in, 5.0
14 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
15 %2 = fsub float -0.000000e+00, %1
16 %3 = fptosi float %2 to i32
17 store i32 %3, i32 addrspace(1)* %out
18 ret void
19}
20
Tom Stellard79243d92014-10-01 17:15:17 +000021; CHECK: {{^}}fcmp_une_select_i32:
Matthias Braun97d0ffb2015-12-04 01:51:19 +000022; CHECK: LSHR
23; CHECK-NEXT: SETNE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
Vincent Lejeunef97af792013-05-02 21:52:30 +000024; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000025define amdgpu_kernel void @fcmp_une_select_i32(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +000026entry:
27 %0 = fcmp une float %in, 5.0
28 %1 = select i1 %0, i32 -1, i32 0
29 store i32 %1, i32 addrspace(1)* %out
30 ret void
31}
32
Tom Stellard79243d92014-10-01 17:15:17 +000033; CHECK: {{^}}fcmp_oeq_select_fptosi:
Matthias Braun97d0ffb2015-12-04 01:51:19 +000034; CHECK: LSHR
35; CHECK-NEXT: SETE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
Vincent Lejeunef97af792013-05-02 21:52:30 +000036; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000037define amdgpu_kernel void @fcmp_oeq_select_fptosi(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +000038entry:
Tom Stellard0351ea22013-09-28 02:50:50 +000039 %0 = fcmp oeq float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +000040 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
41 %2 = fsub float -0.000000e+00, %1
42 %3 = fptosi float %2 to i32
43 store i32 %3, i32 addrspace(1)* %out
44 ret void
45}
46
Tom Stellard79243d92014-10-01 17:15:17 +000047; CHECK: {{^}}fcmp_oeq_select_i32:
Matthias Braun97d0ffb2015-12-04 01:51:19 +000048; CHECK: LSHR
49; CHECK-NEXT: SETE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
Vincent Lejeunef97af792013-05-02 21:52:30 +000050; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000051define amdgpu_kernel void @fcmp_oeq_select_i32(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +000052entry:
Tom Stellard0351ea22013-09-28 02:50:50 +000053 %0 = fcmp oeq float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +000054 %1 = select i1 %0, i32 -1, i32 0
55 store i32 %1, i32 addrspace(1)* %out
56 ret void
57}
58
Tom Stellard79243d92014-10-01 17:15:17 +000059; CHECK: {{^}}fcmp_ogt_select_fptosi:
Matthias Braun97d0ffb2015-12-04 01:51:19 +000060; CHECK: LSHR
61; CHECK-NEXT: SETGT_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
Vincent Lejeunef97af792013-05-02 21:52:30 +000062; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000063define amdgpu_kernel void @fcmp_ogt_select_fptosi(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +000064entry:
Tom Stellard0351ea22013-09-28 02:50:50 +000065 %0 = fcmp ogt float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +000066 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
67 %2 = fsub float -0.000000e+00, %1
68 %3 = fptosi float %2 to i32
69 store i32 %3, i32 addrspace(1)* %out
70 ret void
71}
72
Tom Stellard79243d92014-10-01 17:15:17 +000073; CHECK: {{^}}fcmp_ogt_select_i32:
Matthias Braun97d0ffb2015-12-04 01:51:19 +000074; CHECK: LSHR
75; CHECK-NEXT: SETGT_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
Vincent Lejeunef97af792013-05-02 21:52:30 +000076; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000077define amdgpu_kernel void @fcmp_ogt_select_i32(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +000078entry:
Tom Stellard0351ea22013-09-28 02:50:50 +000079 %0 = fcmp ogt float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +000080 %1 = select i1 %0, i32 -1, i32 0
81 store i32 %1, i32 addrspace(1)* %out
82 ret void
83}
84
Tom Stellard79243d92014-10-01 17:15:17 +000085; CHECK: {{^}}fcmp_oge_select_fptosi:
Matthias Braun97d0ffb2015-12-04 01:51:19 +000086; CHECK: LSHR
87; CHECK-NEXT: SETGE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
Vincent Lejeunef97af792013-05-02 21:52:30 +000088; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000089define amdgpu_kernel void @fcmp_oge_select_fptosi(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +000090entry:
Tom Stellard0351ea22013-09-28 02:50:50 +000091 %0 = fcmp oge float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +000092 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
93 %2 = fsub float -0.000000e+00, %1
94 %3 = fptosi float %2 to i32
95 store i32 %3, i32 addrspace(1)* %out
96 ret void
97}
98
Tom Stellard79243d92014-10-01 17:15:17 +000099; CHECK: {{^}}fcmp_oge_select_i32:
Matthias Braun97d0ffb2015-12-04 01:51:19 +0000100; CHECK: LSHR
101; CHECK-NEXT: SETGE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.y,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000102; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000103define amdgpu_kernel void @fcmp_oge_select_i32(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +0000104entry:
Tom Stellard0351ea22013-09-28 02:50:50 +0000105 %0 = fcmp oge float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +0000106 %1 = select i1 %0, i32 -1, i32 0
107 store i32 %1, i32 addrspace(1)* %out
108 ret void
109}
110
Tom Stellard79243d92014-10-01 17:15:17 +0000111; CHECK: {{^}}fcmp_ole_select_fptosi:
Matthias Braun97d0ffb2015-12-04 01:51:19 +0000112; CHECK: LSHR
113; CHECK-NEXT: SETGE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.y, KC0[2].Z,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000114; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000115define amdgpu_kernel void @fcmp_ole_select_fptosi(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +0000116entry:
Tom Stellard0351ea22013-09-28 02:50:50 +0000117 %0 = fcmp ole float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +0000118 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
119 %2 = fsub float -0.000000e+00, %1
120 %3 = fptosi float %2 to i32
121 store i32 %3, i32 addrspace(1)* %out
122 ret void
123}
124
Tom Stellard79243d92014-10-01 17:15:17 +0000125; CHECK: {{^}}fcmp_ole_select_i32:
Matthias Braun97d0ffb2015-12-04 01:51:19 +0000126; CHECK: LSHR
127; CHECK-NEXT: SETGE_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.y, KC0[2].Z,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000128; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000129define amdgpu_kernel void @fcmp_ole_select_i32(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +0000130entry:
Tom Stellard0351ea22013-09-28 02:50:50 +0000131 %0 = fcmp ole float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +0000132 %1 = select i1 %0, i32 -1, i32 0
133 store i32 %1, i32 addrspace(1)* %out
134 ret void
135}
136
Tom Stellard79243d92014-10-01 17:15:17 +0000137; CHECK: {{^}}fcmp_olt_select_fptosi:
Matthias Braun97d0ffb2015-12-04 01:51:19 +0000138; CHECK: LSHR
139; CHECK-NEXT: SETGT_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.y, KC0[2].Z,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000140; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000141define amdgpu_kernel void @fcmp_olt_select_fptosi(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +0000142entry:
Tom Stellard0351ea22013-09-28 02:50:50 +0000143 %0 = fcmp olt float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +0000144 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
145 %2 = fsub float -0.000000e+00, %1
146 %3 = fptosi float %2 to i32
147 store i32 %3, i32 addrspace(1)* %out
148 ret void
149}
150
Tom Stellard79243d92014-10-01 17:15:17 +0000151; CHECK: {{^}}fcmp_olt_select_i32:
Matthias Braun97d0ffb2015-12-04 01:51:19 +0000152; CHECK: LSHR
153; CHECK-NEXT: SETGT_DX10 * {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.y, KC0[2].Z,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000154; CHECK-NEXT: 1084227584(5.000000e+00)
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000155define amdgpu_kernel void @fcmp_olt_select_i32(i32 addrspace(1)* %out, float %in) {
Tom Stellarde06163a2013-02-07 14:02:35 +0000156entry:
Tom Stellard0351ea22013-09-28 02:50:50 +0000157 %0 = fcmp olt float %in, 5.0
Tom Stellarde06163a2013-02-07 14:02:35 +0000158 %1 = select i1 %0, i32 -1, i32 0
159 store i32 %1, i32 addrspace(1)* %out
160 ret void
161}