1 ; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
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.
7 ; CHECK: @fcmp_une_select_fptosi
8 ; CHECK: SETNE_DX10 * T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x,
9 ; CHECK-NEXT: 1084227584(5.000000e+00)
10 define void @fcmp_une_select_fptosi(i32 addrspace(1)* %out, float %in) {
12 %0 = fcmp une float %in, 5.0
13 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
14 %2 = fsub float -0.000000e+00, %1
15 %3 = fptosi float %2 to i32
16 store i32 %3, i32 addrspace(1)* %out
20 ; CHECK: @fcmp_une_select_i32
21 ; CHECK: SETNE_DX10 * T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x,
22 ; CHECK-NEXT: 1084227584(5.000000e+00)
23 define void @fcmp_une_select_i32(i32 addrspace(1)* %out, float %in) {
25 %0 = fcmp une float %in, 5.0
26 %1 = select i1 %0, i32 -1, i32 0
27 store i32 %1, i32 addrspace(1)* %out
31 ; CHECK: @fcmp_ueq_select_fptosi
32 ; CHECK: SETE_DX10 * T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x,
33 ; CHECK-NEXT: 1084227584(5.000000e+00)
34 define void @fcmp_ueq_select_fptosi(i32 addrspace(1)* %out, float %in) {
36 %0 = fcmp ueq float %in, 5.0
37 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
38 %2 = fsub float -0.000000e+00, %1
39 %3 = fptosi float %2 to i32
40 store i32 %3, i32 addrspace(1)* %out
44 ; CHECK: @fcmp_ueq_select_i32
45 ; CHECK: SETE_DX10 * T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x,
46 ; CHECK-NEXT: 1084227584(5.000000e+00)
47 define void @fcmp_ueq_select_i32(i32 addrspace(1)* %out, float %in) {
49 %0 = fcmp ueq float %in, 5.0
50 %1 = select i1 %0, i32 -1, i32 0
51 store i32 %1, i32 addrspace(1)* %out
55 ; CHECK: @fcmp_ugt_select_fptosi
56 ; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x,
57 ; CHECK-NEXT: 1084227584(5.000000e+00)
58 define void @fcmp_ugt_select_fptosi(i32 addrspace(1)* %out, float %in) {
60 %0 = fcmp ugt float %in, 5.0
61 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
62 %2 = fsub float -0.000000e+00, %1
63 %3 = fptosi float %2 to i32
64 store i32 %3, i32 addrspace(1)* %out
68 ; CHECK: @fcmp_ugt_select_i32
69 ; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x,
70 ; CHECK-NEXT: 1084227584(5.000000e+00)
71 define void @fcmp_ugt_select_i32(i32 addrspace(1)* %out, float %in) {
73 %0 = fcmp ugt float %in, 5.0
74 %1 = select i1 %0, i32 -1, i32 0
75 store i32 %1, i32 addrspace(1)* %out
79 ; CHECK: @fcmp_uge_select_fptosi
80 ; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x,
81 ; CHECK-NEXT: 1084227584(5.000000e+00)
82 define void @fcmp_uge_select_fptosi(i32 addrspace(1)* %out, float %in) {
84 %0 = fcmp uge float %in, 5.0
85 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
86 %2 = fsub float -0.000000e+00, %1
87 %3 = fptosi float %2 to i32
88 store i32 %3, i32 addrspace(1)* %out
92 ; CHECK: @fcmp_uge_select_i32
93 ; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x,
94 ; CHECK-NEXT: 1084227584(5.000000e+00)
95 define void @fcmp_uge_select_i32(i32 addrspace(1)* %out, float %in) {
97 %0 = fcmp uge float %in, 5.0
98 %1 = select i1 %0, i32 -1, i32 0
99 store i32 %1, i32 addrspace(1)* %out
103 ; CHECK: @fcmp_ule_select_fptosi
104 ; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, T{{[0-9]+\.[XYZW]}},
105 ; CHECK-NEXT: 1084227584(5.000000e+00)
106 define void @fcmp_ule_select_fptosi(i32 addrspace(1)* %out, float %in) {
108 %0 = fcmp ule float %in, 5.0
109 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
110 %2 = fsub float -0.000000e+00, %1
111 %3 = fptosi float %2 to i32
112 store i32 %3, i32 addrspace(1)* %out
116 ; CHECK: @fcmp_ule_select_i32
117 ; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, T{{[0-9]+\.[XYZW]}},
118 ; CHECK-NEXT: 1084227584(5.000000e+00)
119 define void @fcmp_ule_select_i32(i32 addrspace(1)* %out, float %in) {
121 %0 = fcmp ule float %in, 5.0
122 %1 = select i1 %0, i32 -1, i32 0
123 store i32 %1, i32 addrspace(1)* %out
127 ; CHECK: @fcmp_ult_select_fptosi
128 ; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, T{{[0-9]+\.[XYZW]}},
129 ; CHECK-NEXT: 1084227584(5.000000e+00)
130 define void @fcmp_ult_select_fptosi(i32 addrspace(1)* %out, float %in) {
132 %0 = fcmp ult float %in, 5.0
133 %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
134 %2 = fsub float -0.000000e+00, %1
135 %3 = fptosi float %2 to i32
136 store i32 %3, i32 addrspace(1)* %out
140 ; CHECK: @fcmp_ult_select_i32
141 ; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, T{{[0-9]+\.[XYZW]}},
142 ; CHECK-NEXT: 1084227584(5.000000e+00)
143 define void @fcmp_ult_select_i32(i32 addrspace(1)* %out, float %in) {
145 %0 = fcmp ult float %in, 5.0
146 %1 = select i1 %0, i32 -1, i32 0
147 store i32 %1, i32 addrspace(1)* %out