blob: bdc2ff40b76be7ec5c4595817119974ed641d2dd [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
7; CHECK: @fcmp_une_select_fptosi
Vincent Lejeune7e2c8322013-09-04 19:53:46 +00008; CHECK: SETNE_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
9; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +000010; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000011define void @fcmp_une_select_fptosi(i32 addrspace(1)* %out, float %in) {
12entry:
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
21; CHECK: @fcmp_une_select_i32
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000022; CHECK: SETNE_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
23; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +000024; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000025define void @fcmp_une_select_i32(i32 addrspace(1)* %out, float %in) {
26entry:
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
33; CHECK: @fcmp_ueq_select_fptosi
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000034; CHECK: SETE_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
35; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +000036; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000037define void @fcmp_ueq_select_fptosi(i32 addrspace(1)* %out, float %in) {
38entry:
39 %0 = fcmp ueq float %in, 5.0
40 %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
47; CHECK: @fcmp_ueq_select_i32
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000048; CHECK: SETE_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
49; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +000050; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000051define void @fcmp_ueq_select_i32(i32 addrspace(1)* %out, float %in) {
52entry:
53 %0 = fcmp ueq float %in, 5.0
54 %1 = select i1 %0, i32 -1, i32 0
55 store i32 %1, i32 addrspace(1)* %out
56 ret void
57}
58
59; CHECK: @fcmp_ugt_select_fptosi
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000060; CHECK: SETGT_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
61; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +000062; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000063define void @fcmp_ugt_select_fptosi(i32 addrspace(1)* %out, float %in) {
64entry:
65 %0 = fcmp ugt float %in, 5.0
66 %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
73; CHECK: @fcmp_ugt_select_i32
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000074; CHECK: SETGT_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
75; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +000076; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000077define void @fcmp_ugt_select_i32(i32 addrspace(1)* %out, float %in) {
78entry:
79 %0 = fcmp ugt float %in, 5.0
80 %1 = select i1 %0, i32 -1, i32 0
81 store i32 %1, i32 addrspace(1)* %out
82 ret void
83}
84
85; CHECK: @fcmp_uge_select_fptosi
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000086; CHECK: SETGE_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
87; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +000088; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000089define void @fcmp_uge_select_fptosi(i32 addrspace(1)* %out, float %in) {
90entry:
91 %0 = fcmp uge float %in, 5.0
92 %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
99; CHECK: @fcmp_uge_select_i32
Vincent Lejeune7e2c8322013-09-04 19:53:46 +0000100; CHECK: SETGE_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
101; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +0000102; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000103define void @fcmp_uge_select_i32(i32 addrspace(1)* %out, float %in) {
104entry:
105 %0 = fcmp uge float %in, 5.0
106 %1 = select i1 %0, i32 -1, i32 0
107 store i32 %1, i32 addrspace(1)* %out
108 ret void
109}
110
111; CHECK: @fcmp_ule_select_fptosi
Vincent Lejeune7e2c8322013-09-04 19:53:46 +0000112; CHECK: SETGE_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
113; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +0000114; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000115define void @fcmp_ule_select_fptosi(i32 addrspace(1)* %out, float %in) {
116entry:
117 %0 = fcmp ule float %in, 5.0
118 %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
125; CHECK: @fcmp_ule_select_i32
Vincent Lejeune7e2c8322013-09-04 19:53:46 +0000126; CHECK: SETGE_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
127; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +0000128; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000129define void @fcmp_ule_select_i32(i32 addrspace(1)* %out, float %in) {
130entry:
131 %0 = fcmp ule float %in, 5.0
132 %1 = select i1 %0, i32 -1, i32 0
133 store i32 %1, i32 addrspace(1)* %out
134 ret void
135}
136
137; CHECK: @fcmp_ult_select_fptosi
Vincent Lejeune7e2c8322013-09-04 19:53:46 +0000138; CHECK: SETGT_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
139; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +0000140; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000141define void @fcmp_ult_select_fptosi(i32 addrspace(1)* %out, float %in) {
142entry:
143 %0 = fcmp ult float %in, 5.0
144 %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
151; CHECK: @fcmp_ult_select_i32
Vincent Lejeune7e2c8322013-09-04 19:53:46 +0000152; CHECK: SETGT_DX10 {{\** *}}T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
153; CHECK-NEXT: LSHR
Vincent Lejeunef97af792013-05-02 21:52:30 +0000154; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000155define void @fcmp_ult_select_i32(i32 addrspace(1)* %out, float %in) {
156entry:
157 %0 = fcmp ult float %in, 5.0
158 %1 = select i1 %0, i32 -1, i32 0
159 store i32 %1, i32 addrspace(1)* %out
160 ret void
161}