1;RUN: llc < %s -march=r600 -mcpu=SI | FileCheck --check-prefix=SI --check-prefix=FUNC %s 2 3; XXX: Merge this into setcc, once R600 supports 64-bit operations 4 5;;;==========================================================================;;; 6;; Double comparisons 7;;;==========================================================================;;; 8 9; FUNC-LABEL: @f64_oeq 10; SI: V_CMP_EQ_F64 11define void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) { 12entry: 13 %0 = fcmp oeq double %a, %b 14 %1 = sext i1 %0 to i32 15 store i32 %1, i32 addrspace(1)* %out 16 ret void 17} 18 19; FUNC-LABEL: @f64_ogt 20; SI: V_CMP_GT_F64 21define void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) { 22entry: 23 %0 = fcmp ogt double %a, %b 24 %1 = sext i1 %0 to i32 25 store i32 %1, i32 addrspace(1)* %out 26 ret void 27} 28 29; FUNC-LABEL: @f64_oge 30; SI: V_CMP_GE_F64 31define void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) { 32entry: 33 %0 = fcmp oge double %a, %b 34 %1 = sext i1 %0 to i32 35 store i32 %1, i32 addrspace(1)* %out 36 ret void 37} 38 39; FUNC-LABEL: @f64_olt 40; SI: V_CMP_LT_F64 41define void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) { 42entry: 43 %0 = fcmp olt double %a, %b 44 %1 = sext i1 %0 to i32 45 store i32 %1, i32 addrspace(1)* %out 46 ret void 47} 48 49; FUNC-LABEL: @f64_ole 50; SI: V_CMP_LE_F64 51define void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) { 52entry: 53 %0 = fcmp ole double %a, %b 54 %1 = sext i1 %0 to i32 55 store i32 %1, i32 addrspace(1)* %out 56 ret void 57} 58 59; FUNC-LABEL: @f64_one 60; SI: V_CMP_O_F64 61; SI: V_CMP_NEQ_F64 62; SI: S_AND_B64 63define void @f64_one(i32 addrspace(1)* %out, double %a, double %b) { 64entry: 65 %0 = fcmp one double %a, %b 66 %1 = sext i1 %0 to i32 67 store i32 %1, i32 addrspace(1)* %out 68 ret void 69} 70 71; FUNC-LABEL: @f64_ord 72; SI: V_CMP_O_F64 73define void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) { 74entry: 75 %0 = fcmp ord double %a, %b 76 %1 = sext i1 %0 to i32 77 store i32 %1, i32 addrspace(1)* %out 78 ret void 79} 80 81; FUNC-LABEL: @f64_ueq 82; SI: V_CMP_U_F64 83; SI: V_CMP_EQ_F64 84; SI: S_OR_B64 85define void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) { 86entry: 87 %0 = fcmp ueq double %a, %b 88 %1 = sext i1 %0 to i32 89 store i32 %1, i32 addrspace(1)* %out 90 ret void 91} 92 93; FUNC-LABEL: @f64_ugt 94; SI: V_CMP_U_F64 95; SI: V_CMP_GT_F64 96; SI: S_OR_B64 97define void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) { 98entry: 99 %0 = fcmp ugt double %a, %b 100 %1 = sext i1 %0 to i32 101 store i32 %1, i32 addrspace(1)* %out 102 ret void 103} 104 105; FUNC-LABEL: @f64_uge 106; SI: V_CMP_U_F64 107; SI: V_CMP_GE_F64 108; SI: S_OR_B64 109define void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) { 110entry: 111 %0 = fcmp uge double %a, %b 112 %1 = sext i1 %0 to i32 113 store i32 %1, i32 addrspace(1)* %out 114 ret void 115} 116 117; FUNC-LABEL: @f64_ult 118; SI: V_CMP_U_F64 119; SI: V_CMP_LT_F64 120; SI: S_OR_B64 121define void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) { 122entry: 123 %0 = fcmp ult double %a, %b 124 %1 = sext i1 %0 to i32 125 store i32 %1, i32 addrspace(1)* %out 126 ret void 127} 128 129; FUNC-LABEL: @f64_ule 130; SI: V_CMP_U_F64 131; SI: V_CMP_LE_F64 132; SI: S_OR_B64 133define void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) { 134entry: 135 %0 = fcmp ule double %a, %b 136 %1 = sext i1 %0 to i32 137 store i32 %1, i32 addrspace(1)* %out 138 ret void 139} 140 141; FUNC-LABEL: @f64_une 142; SI: V_CMP_NEQ_F64 143define void @f64_une(i32 addrspace(1)* %out, double %a, double %b) { 144entry: 145 %0 = fcmp une double %a, %b 146 %1 = sext i1 %0 to i32 147 store i32 %1, i32 addrspace(1)* %out 148 ret void 149} 150 151; FUNC-LABEL: @f64_uno 152; SI: V_CMP_U_F64 153define void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) { 154entry: 155 %0 = fcmp uno double %a, %b 156 %1 = sext i1 %0 to i32 157 store i32 %1, i32 addrspace(1)* %out 158 ret void 159} 160 161;;;==========================================================================;;; 162;; 64-bit integer comparisons 163;;;==========================================================================;;; 164 165; FUNC-LABEL: @i64_eq 166; SI: V_CMP_EQ_I64 167define void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) { 168entry: 169 %0 = icmp eq i64 %a, %b 170 %1 = sext i1 %0 to i32 171 store i32 %1, i32 addrspace(1)* %out 172 ret void 173} 174 175; FUNC-LABEL: @i64_ne 176; SI: V_CMP_NE_I64 177define void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) { 178entry: 179 %0 = icmp ne i64 %a, %b 180 %1 = sext i1 %0 to i32 181 store i32 %1, i32 addrspace(1)* %out 182 ret void 183} 184 185; FUNC-LABEL: @i64_ugt 186; SI: V_CMP_GT_U64 187define void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) { 188entry: 189 %0 = icmp ugt i64 %a, %b 190 %1 = sext i1 %0 to i32 191 store i32 %1, i32 addrspace(1)* %out 192 ret void 193} 194 195; FUNC-LABEL: @i64_uge 196; SI: V_CMP_GE_U64 197define void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) { 198entry: 199 %0 = icmp uge i64 %a, %b 200 %1 = sext i1 %0 to i32 201 store i32 %1, i32 addrspace(1)* %out 202 ret void 203} 204 205; FUNC-LABEL: @i64_ult 206; SI: V_CMP_LT_U64 207define void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) { 208entry: 209 %0 = icmp ult i64 %a, %b 210 %1 = sext i1 %0 to i32 211 store i32 %1, i32 addrspace(1)* %out 212 ret void 213} 214 215; FUNC-LABEL: @i64_ule 216; SI: V_CMP_LE_U64 217define void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) { 218entry: 219 %0 = icmp ule i64 %a, %b 220 %1 = sext i1 %0 to i32 221 store i32 %1, i32 addrspace(1)* %out 222 ret void 223} 224 225; FUNC-LABEL: @i64_sgt 226; SI: V_CMP_GT_I64 227define void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) { 228entry: 229 %0 = icmp sgt i64 %a, %b 230 %1 = sext i1 %0 to i32 231 store i32 %1, i32 addrspace(1)* %out 232 ret void 233} 234 235; FUNC-LABEL: @i64_sge 236; SI: V_CMP_GE_I64 237define void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) { 238entry: 239 %0 = icmp sge i64 %a, %b 240 %1 = sext i1 %0 to i32 241 store i32 %1, i32 addrspace(1)* %out 242 ret void 243} 244 245; FUNC-LABEL: @i64_slt 246; SI: V_CMP_LT_I64 247define void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) { 248entry: 249 %0 = icmp slt i64 %a, %b 250 %1 = sext i1 %0 to i32 251 store i32 %1, i32 addrspace(1)* %out 252 ret void 253} 254 255; FUNC-LABEL: @i64_sle 256; SI: V_CMP_LE_I64 257define void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) { 258entry: 259 %0 = icmp sle i64 %a, %b 260 %1 = sext i1 %0 to i32 261 store i32 %1, i32 addrspace(1)* %out 262 ret void 263} 264