llvm-ar: Clean up memory management with OwningPtr.
[oota-llvm.git] / test / CodeGen / R600 / set-dx10.ll
1 ; 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
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) {
11 entry:
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
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) {
24 entry:
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
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) {
35 entry:
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
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) {
48 entry:
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
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) {
59 entry:
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
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) {
72 entry:
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
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) {
83 entry:
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
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) {
96 entry:
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
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) {
107 entry:
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
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) {
120 entry:
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
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) {
131 entry:
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
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) {
144 entry:
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 }