blob: 291a7bd85ac82924525fac17d65049d58056ab3d [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
Tom Stellardca69a532013-07-31 20:43:27 +00008; CHECK: SETNE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
Vincent Lejeunef97af792013-05-02 21:52:30 +00009; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000010define void @fcmp_une_select_fptosi(i32 addrspace(1)* %out, float %in) {
11entry:
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
17 ret void
18}
19
20; CHECK: @fcmp_une_select_i32
Tom Stellardca69a532013-07-31 20:43:27 +000021; CHECK: SETNE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
Vincent Lejeunef97af792013-05-02 21:52:30 +000022; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000023define void @fcmp_une_select_i32(i32 addrspace(1)* %out, float %in) {
24entry:
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
28 ret void
29}
30
31; CHECK: @fcmp_ueq_select_fptosi
Tom Stellardca69a532013-07-31 20:43:27 +000032; CHECK: SETE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
Vincent Lejeunef97af792013-05-02 21:52:30 +000033; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000034define void @fcmp_ueq_select_fptosi(i32 addrspace(1)* %out, float %in) {
35entry:
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
41 ret void
42}
43
44; CHECK: @fcmp_ueq_select_i32
Tom Stellardca69a532013-07-31 20:43:27 +000045; CHECK: SETE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
Vincent Lejeunef97af792013-05-02 21:52:30 +000046; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000047define void @fcmp_ueq_select_i32(i32 addrspace(1)* %out, float %in) {
48entry:
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
52 ret void
53}
54
55; CHECK: @fcmp_ugt_select_fptosi
Tom Stellardca69a532013-07-31 20:43:27 +000056; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
Vincent Lejeunef97af792013-05-02 21:52:30 +000057; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000058define void @fcmp_ugt_select_fptosi(i32 addrspace(1)* %out, float %in) {
59entry:
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
65 ret void
66}
67
68; CHECK: @fcmp_ugt_select_i32
Tom Stellardca69a532013-07-31 20:43:27 +000069; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
Vincent Lejeunef97af792013-05-02 21:52:30 +000070; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000071define void @fcmp_ugt_select_i32(i32 addrspace(1)* %out, float %in) {
72entry:
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
76 ret void
77}
78
79; CHECK: @fcmp_uge_select_fptosi
Tom Stellardca69a532013-07-31 20:43:27 +000080; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
Vincent Lejeunef97af792013-05-02 21:52:30 +000081; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000082define void @fcmp_uge_select_fptosi(i32 addrspace(1)* %out, float %in) {
83entry:
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
89 ret void
90}
91
92; CHECK: @fcmp_uge_select_i32
Tom Stellardca69a532013-07-31 20:43:27 +000093; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
Vincent Lejeunef97af792013-05-02 21:52:30 +000094; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +000095define void @fcmp_uge_select_i32(i32 addrspace(1)* %out, float %in) {
96entry:
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
100 ret void
101}
102
103; CHECK: @fcmp_ule_select_fptosi
Tom Stellardca69a532013-07-31 20:43:27 +0000104; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000105; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000106define void @fcmp_ule_select_fptosi(i32 addrspace(1)* %out, float %in) {
107entry:
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
113 ret void
114}
115
116; CHECK: @fcmp_ule_select_i32
Tom Stellardca69a532013-07-31 20:43:27 +0000117; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000118; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000119define void @fcmp_ule_select_i32(i32 addrspace(1)* %out, float %in) {
120entry:
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
124 ret void
125}
126
127; CHECK: @fcmp_ult_select_fptosi
Tom Stellardca69a532013-07-31 20:43:27 +0000128; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000129; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000130define void @fcmp_ult_select_fptosi(i32 addrspace(1)* %out, float %in) {
131entry:
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
137 ret void
138}
139
140; CHECK: @fcmp_ult_select_i32
Tom Stellardca69a532013-07-31 20:43:27 +0000141; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
Vincent Lejeunef97af792013-05-02 21:52:30 +0000142; CHECK-NEXT: 1084227584(5.000000e+00)
Tom Stellarde06163a2013-02-07 14:02:35 +0000143define void @fcmp_ult_select_i32(i32 addrspace(1)* %out, float %in) {
144entry:
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
148 ret void
149}