1; RUN: llc < %s -mtriple=armv8-linux-gnueabihf -mattr=+fp-armv8 -float-abi=hard | FileCheck %s 2@varfloat = global float 0.0 3@vardouble = global double 0.0 4define void @test_vsel32sgt(i32 %lhs32, i32 %rhs32, float %a, float %b) { 5; CHECK-LABEL: test_vsel32sgt 6 %tst1 = icmp sgt i32 %lhs32, %rhs32 7 %val1 = select i1 %tst1, float %a, float %b 8 store float %val1, ptr @varfloat 9; CHECK: cmp r0, r1 10; CHECK: vselgt.f32 s0, s0, s1 11 ret void 12} 13define void @test_vsel64sgt(i32 %lhs32, i32 %rhs32, double %a, double %b) { 14; CHECK-LABEL: test_vsel64sgt 15 %tst1 = icmp sgt i32 %lhs32, %rhs32 16 %val1 = select i1 %tst1, double %a, double %b 17 store double %val1, ptr @vardouble 18; CHECK: cmp r0, r1 19; CHECK: vselgt.f64 d16, d0, d1 20 ret void 21} 22define void @test_vsel32sge(i32 %lhs32, i32 %rhs32, float %a, float %b) { 23; CHECK-LABEL: test_vsel32sge 24 %tst1 = icmp sge i32 %lhs32, %rhs32 25 %val1 = select i1 %tst1, float %a, float %b 26 store float %val1, ptr @varfloat 27; CHECK: cmp r0, r1 28; CHECK: vselge.f32 s0, s0, s1 29 ret void 30} 31define void @test_vsel64sge(i32 %lhs32, i32 %rhs32, double %a, double %b) { 32; CHECK-LABEL: test_vsel64sge 33 %tst1 = icmp sge i32 %lhs32, %rhs32 34 %val1 = select i1 %tst1, double %a, double %b 35 store double %val1, ptr @vardouble 36; CHECK: cmp r0, r1 37; CHECK: vselge.f64 d16, d0, d1 38 ret void 39} 40define void @test_vsel32eq(i32 %lhs32, i32 %rhs32, float %a, float %b) { 41; CHECK-LABEL: test_vsel32eq 42 %tst1 = icmp eq i32 %lhs32, %rhs32 43 %val1 = select i1 %tst1, float %a, float %b 44 store float %val1, ptr @varfloat 45; CHECK: cmp r0, r1 46; CHECK: vseleq.f32 s0, s0, s1 47 ret void 48} 49define void @test_vsel64eq(i32 %lhs32, i32 %rhs32, double %a, double %b) { 50; CHECK-LABEL: test_vsel64eq 51 %tst1 = icmp eq i32 %lhs32, %rhs32 52 %val1 = select i1 %tst1, double %a, double %b 53 store double %val1, ptr @vardouble 54; CHECK: cmp r0, r1 55; CHECK: vseleq.f64 d16, d0, d1 56 ret void 57} 58define void @test_vsel32slt(i32 %lhs32, i32 %rhs32, float %a, float %b) { 59; CHECK-LABEL: test_vsel32slt 60 %tst1 = icmp slt i32 %lhs32, %rhs32 61 %val1 = select i1 %tst1, float %a, float %b 62 store float %val1, ptr @varfloat 63; CHECK: cmp r0, r1 64; CHECK: vselge.f32 s0, s1, s0 65 ret void 66} 67define void @test_vsel64slt(i32 %lhs32, i32 %rhs32, double %a, double %b) { 68; CHECK-LABEL: test_vsel64slt 69 %tst1 = icmp slt i32 %lhs32, %rhs32 70 %val1 = select i1 %tst1, double %a, double %b 71 store double %val1, ptr @vardouble 72; CHECK: cmp r0, r1 73; CHECK: vselge.f64 d16, d1, d0 74 ret void 75} 76define void @test_vsel32sle(i32 %lhs32, i32 %rhs32, float %a, float %b) { 77; CHECK-LABEL: test_vsel32sle 78 %tst1 = icmp sle i32 %lhs32, %rhs32 79 %val1 = select i1 %tst1, float %a, float %b 80 store float %val1, ptr @varfloat 81; CHECK: cmp r0, r1 82; CHECK: vselgt.f32 s0, s1, s0 83 ret void 84} 85define void @test_vsel64sle(i32 %lhs32, i32 %rhs32, double %a, double %b) { 86; CHECK-LABEL: test_vsel64sle 87 %tst1 = icmp sle i32 %lhs32, %rhs32 88 %val1 = select i1 %tst1, double %a, double %b 89 store double %val1, ptr @vardouble 90; CHECK: cmp r0, r1 91; CHECK: vselgt.f64 d16, d1, d0 92 ret void 93} 94define void @test_vsel32ogt(float %lhs32, float %rhs32, float %a, float %b) { 95; CHECK-LABEL: test_vsel32ogt 96 %tst1 = fcmp ogt float %lhs32, %rhs32 97 %val1 = select i1 %tst1, float %a, float %b 98 store float %val1, ptr @varfloat 99; CHECK: vcmp.f32 s0, s1 100; CHECK: vselgt.f32 s0, s2, s3 101 ret void 102} 103define void @test_vsel64ogt(float %lhs32, float %rhs32, double %a, double %b) { 104; CHECK-LABEL: test_vsel64ogt 105 %tst1 = fcmp ogt float %lhs32, %rhs32 106 %val1 = select i1 %tst1, double %a, double %b 107 store double %val1, ptr @vardouble 108; CHECK: vcmp.f32 s0, s1 109; CHECK: vselgt.f64 d16, d1, d2 110 ret void 111} 112define void @test_vsel32oge(float %lhs32, float %rhs32, float %a, float %b) { 113; CHECK-LABEL: test_vsel32oge 114 %tst1 = fcmp oge float %lhs32, %rhs32 115 %val1 = select i1 %tst1, float %a, float %b 116 store float %val1, ptr @varfloat 117; CHECK: vcmp.f32 s0, s1 118; CHECK: vselge.f32 s0, s2, s3 119 ret void 120} 121define void @test_vsel64oge(float %lhs32, float %rhs32, double %a, double %b) { 122; CHECK-LABEL: test_vsel64oge 123 %tst1 = fcmp oge float %lhs32, %rhs32 124 %val1 = select i1 %tst1, double %a, double %b 125 store double %val1, ptr @vardouble 126; CHECK: vcmp.f32 s0, s1 127; CHECK: vselge.f64 d16, d1, d2 128 ret void 129} 130define void @test_vsel32oeq(float %lhs32, float %rhs32, float %a, float %b) { 131; CHECK-LABEL: test_vsel32oeq 132 %tst1 = fcmp oeq float %lhs32, %rhs32 133 %val1 = select i1 %tst1, float %a, float %b 134 store float %val1, ptr @varfloat 135; CHECK: vcmp.f32 s0, s1 136; CHECK: vseleq.f32 s0, s2, s3 137 ret void 138} 139define void @test_vsel64oeq(float %lhs32, float %rhs32, double %a, double %b) { 140; CHECK-LABEL: test_vsel64oeq 141 %tst1 = fcmp oeq float %lhs32, %rhs32 142 %val1 = select i1 %tst1, double %a, double %b 143 store double %val1, ptr @vardouble 144; CHECK: vcmp.f32 s0, s1 145; CHECK: vseleq.f64 d16, d1, d2 146 ret void 147} 148define void @test_vsel32ugt(float %lhs32, float %rhs32, float %a, float %b) { 149; CHECK-LABEL: test_vsel32ugt 150 %tst1 = fcmp ugt float %lhs32, %rhs32 151 %val1 = select i1 %tst1, float %a, float %b 152 store float %val1, ptr @varfloat 153; CHECK: vcmp.f32 s1, s0 154; CHECK: vselge.f32 s0, s3, s2 155 ret void 156} 157define void @test_vsel64ugt(float %lhs32, float %rhs32, double %a, double %b) { 158; CHECK-LABEL: test_vsel64ugt 159 %tst1 = fcmp ugt float %lhs32, %rhs32 160 %val1 = select i1 %tst1, double %a, double %b 161 store double %val1, ptr @vardouble 162; CHECK: vcmp.f32 s1, s0 163; CHECK: vselge.f64 d16, d2, d1 164 ret void 165} 166define void @test_vsel32uge(float %lhs32, float %rhs32, float %a, float %b) { 167; CHECK-LABEL: test_vsel32uge 168 %tst1 = fcmp uge float %lhs32, %rhs32 169 %val1 = select i1 %tst1, float %a, float %b 170 store float %val1, ptr @varfloat 171; CHECK: vcmp.f32 s1, s0 172; CHECK: vselgt.f32 s0, s3, s2 173 ret void 174} 175define void @test_vsel64uge(float %lhs32, float %rhs32, double %a, double %b) { 176; CHECK-LABEL: test_vsel64uge 177 %tst1 = fcmp uge float %lhs32, %rhs32 178 %val1 = select i1 %tst1, double %a, double %b 179 store double %val1, ptr @vardouble 180; CHECK: vcmp.f32 s1, s0 181; CHECK: vselgt.f64 d16, d2, d1 182 ret void 183} 184define void @test_vsel32olt(float %lhs32, float %rhs32, float %a, float %b) { 185; CHECK-LABEL: test_vsel32olt 186 %tst1 = fcmp olt float %lhs32, %rhs32 187 %val1 = select i1 %tst1, float %a, float %b 188 store float %val1, ptr @varfloat 189; CHECK: vcmp.f32 s1, s0 190; CHECK: vselgt.f32 s0, s2, s3 191 ret void 192} 193define void @test_vsel64olt(float %lhs32, float %rhs32, double %a, double %b) { 194; CHECK-LABEL: test_vsel64olt 195 %tst1 = fcmp olt float %lhs32, %rhs32 196 %val1 = select i1 %tst1, double %a, double %b 197 store double %val1, ptr @vardouble 198; CHECK: vcmp.f32 s1, s0 199; CHECK: vselgt.f64 d16, d1, d2 200 ret void 201} 202define void @test_vsel32ult(float %lhs32, float %rhs32, float %a, float %b) { 203; CHECK-LABEL: test_vsel32ult 204 %tst1 = fcmp ult float %lhs32, %rhs32 205 %val1 = select i1 %tst1, float %a, float %b 206 store float %val1, ptr @varfloat 207; CHECK: vcmp.f32 s0, s1 208; CHECK: vselge.f32 s0, s3, s2 209 ret void 210} 211define void @test_vsel64ult(float %lhs32, float %rhs32, double %a, double %b) { 212; CHECK-LABEL: test_vsel64ult 213 %tst1 = fcmp ult float %lhs32, %rhs32 214 %val1 = select i1 %tst1, double %a, double %b 215 store double %val1, ptr @vardouble 216; CHECK: vcmp.f32 s0, s1 217; CHECK: vselge.f64 d16, d2, d1 218 ret void 219} 220define void @test_vsel32ole(float %lhs32, float %rhs32, float %a, float %b) { 221; CHECK-LABEL: test_vsel32ole 222 %tst1 = fcmp ole float %lhs32, %rhs32 223 %val1 = select i1 %tst1, float %a, float %b 224 store float %val1, ptr @varfloat 225; CHECK: vcmp.f32 s1, s0 226; CHECK: vselge.f32 s0, s2, s3 227 ret void 228} 229define void @test_vsel64ole(float %lhs32, float %rhs32, double %a, double %b) { 230; CHECK-LABEL: test_vsel64ole 231 %tst1 = fcmp ole float %lhs32, %rhs32 232 %val1 = select i1 %tst1, double %a, double %b 233 store double %val1, ptr @vardouble 234; CHECK: vcmp.f32 s1, s0 235; CHECK: vselge.f64 d16, d1, d2 236 ret void 237} 238define void @test_vsel32ule(float %lhs32, float %rhs32, float %a, float %b) { 239; CHECK-LABEL: test_vsel32ule 240 %tst1 = fcmp ule float %lhs32, %rhs32 241 %val1 = select i1 %tst1, float %a, float %b 242 store float %val1, ptr @varfloat 243; CHECK: vcmp.f32 s0, s1 244; CHECK: vselgt.f32 s0, s3, s2 245 ret void 246} 247define void @test_vsel64ule(float %lhs32, float %rhs32, double %a, double %b) { 248; CHECK-LABEL: test_vsel64ule 249 %tst1 = fcmp ule float %lhs32, %rhs32 250 %val1 = select i1 %tst1, double %a, double %b 251 store double %val1, ptr @vardouble 252; CHECK: vcmp.f32 s0, s1 253; CHECK: vselgt.f64 d16, d2, d1 254 ret void 255} 256define void @test_vsel32ord(float %lhs32, float %rhs32, float %a, float %b) { 257; CHECK-LABEL: test_vsel32ord 258 %tst1 = fcmp ord float %lhs32, %rhs32 259 %val1 = select i1 %tst1, float %a, float %b 260 store float %val1, ptr @varfloat 261; CHECK: vcmp.f32 s0, s1 262; CHECK: vselvs.f32 s0, s3, s2 263 ret void 264} 265define void @test_vsel64ord(float %lhs32, float %rhs32, double %a, double %b) { 266; CHECK-LABEL: test_vsel64ord 267 %tst1 = fcmp ord float %lhs32, %rhs32 268 %val1 = select i1 %tst1, double %a, double %b 269 store double %val1, ptr @vardouble 270; CHECK: vcmp.f32 s0, s1 271; CHECK: vselvs.f64 d16, d2, d1 272 ret void 273} 274define void @test_vsel32une(float %lhs32, float %rhs32, float %a, float %b) { 275; CHECK-LABEL: test_vsel32une 276 %tst1 = fcmp une float %lhs32, %rhs32 277 %val1 = select i1 %tst1, float %a, float %b 278 store float %val1, ptr @varfloat 279; CHECK: vcmp.f32 s0, s1 280; CHECK: vseleq.f32 s0, s3, s2 281 ret void 282} 283define void @test_vsel64une(float %lhs32, float %rhs32, double %a, double %b) { 284; CHECK-LABEL: test_vsel64une 285 %tst1 = fcmp une float %lhs32, %rhs32 286 %val1 = select i1 %tst1, double %a, double %b 287 store double %val1, ptr @vardouble 288; CHECK: vcmp.f32 s0, s1 289; CHECK: vseleq.f64 d16, d2, d1 290 ret void 291} 292define void @test_vsel32uno(float %lhs32, float %rhs32, float %a, float %b) { 293; CHECK-LABEL: test_vsel32uno 294 %tst1 = fcmp uno float %lhs32, %rhs32 295 %val1 = select i1 %tst1, float %a, float %b 296 store float %val1, ptr @varfloat 297; CHECK: vcmp.f32 s0, s1 298; CHECK: vselvs.f32 s0, s2, s3 299 ret void 300} 301define void @test_vsel64uno(float %lhs32, float %rhs32, double %a, double %b) { 302; CHECK-LABEL: test_vsel64uno 303 %tst1 = fcmp uno float %lhs32, %rhs32 304 %val1 = select i1 %tst1, double %a, double %b 305 store double %val1, ptr @vardouble 306; CHECK: vcmp.f32 s0, s1 307; CHECK: vselvs.f64 d16, d1, d2 308 ret void 309} 310 311define void @test_vsel32ogt_nnan(float %lhs32, float %rhs32, float %a, float %b) { 312; CHECK-LABEL: test_vsel32ogt_nnan 313 %tst1 = fcmp nnan ogt float %lhs32, %rhs32 314 %val1 = select i1 %tst1, float %a, float %b 315 store float %val1, ptr @varfloat 316; CHECK: vcmp.f32 s0, s1 317; CHECK: vselgt.f32 s0, s2, s3 318 ret void 319} 320define void @test_vsel64ogt_nnan(float %lhs32, float %rhs32, double %a, double %b) { 321; CHECK-LABEL: test_vsel64ogt_nnan 322 %tst1 = fcmp nnan ogt float %lhs32, %rhs32 323 %val1 = select i1 %tst1, double %a, double %b 324 store double %val1, ptr @vardouble 325; CHECK: vcmp.f32 s0, s1 326; CHECK: vselgt.f64 d16, d1, d2 327 ret void 328} 329define void @test_vsel32oge_nnan(float %lhs32, float %rhs32, float %a, float %b) { 330; CHECK-LABEL: test_vsel32oge_nnan 331 %tst1 = fcmp nnan oge float %lhs32, %rhs32 332 %val1 = select i1 %tst1, float %a, float %b 333 store float %val1, ptr @varfloat 334; CHECK: vcmp.f32 s0, s1 335; CHECK: vselge.f32 s0, s2, s3 336 ret void 337} 338define void @test_vsel64oge_nnan(float %lhs32, float %rhs32, double %a, double %b) { 339; CHECK-LABEL: test_vsel64oge_nnan 340 %tst1 = fcmp nnan oge float %lhs32, %rhs32 341 %val1 = select i1 %tst1, double %a, double %b 342 store double %val1, ptr @vardouble 343; CHECK: vcmp.f32 s0, s1 344; CHECK: vselge.f64 d16, d1, d2 345 ret void 346} 347define void @test_vsel32oeq_nnan(float %lhs32, float %rhs32, float %a, float %b) { 348; CHECK-LABEL: test_vsel32oeq_nnan 349 %tst1 = fcmp nnan oeq float %lhs32, %rhs32 350 %val1 = select i1 %tst1, float %a, float %b 351 store float %val1, ptr @varfloat 352; CHECK: vcmp.f32 s0, s1 353; CHECK: vseleq.f32 s0, s2, s3 354 ret void 355} 356define void @test_vsel64oeq_nnan(float %lhs32, float %rhs32, double %a, double %b) { 357; CHECK-LABEL: test_vsel64oeq_nnan 358 %tst1 = fcmp nnan oeq float %lhs32, %rhs32 359 %val1 = select i1 %tst1, double %a, double %b 360 store double %val1, ptr @vardouble 361; CHECK: vcmp.f32 s0, s1 362; CHECK: vseleq.f64 d16, d1, d2 363 ret void 364} 365define void @test_vsel32ugt_nnan(float %lhs32, float %rhs32, float %a, float %b) { 366; CHECK-LABEL: test_vsel32ugt_nnan 367 %tst1 = fcmp nnan ugt float %lhs32, %rhs32 368 %val1 = select i1 %tst1, float %a, float %b 369 store float %val1, ptr @varfloat 370; CHECK: vcmp.f32 s0, s1 371; CHECK: vselgt.f32 s0, s2, s3 372 ret void 373} 374define void @test_vsel64ugt_nnan(float %lhs32, float %rhs32, double %a, double %b) { 375; CHECK-LABEL: test_vsel64ugt_nnan 376 %tst1 = fcmp nnan ugt float %lhs32, %rhs32 377 %val1 = select i1 %tst1, double %a, double %b 378 store double %val1, ptr @vardouble 379; CHECK: vcmp.f32 s0, s1 380; CHECK: vselgt.f64 d16, d1, d2 381 ret void 382} 383define void @test_vsel32uge_nnan(float %lhs32, float %rhs32, float %a, float %b) { 384; CHECK-LABEL: test_vsel32uge_nnan 385 %tst1 = fcmp nnan uge float %lhs32, %rhs32 386 %val1 = select i1 %tst1, float %a, float %b 387 store float %val1, ptr @varfloat 388; CHECK: vcmp.f32 s0, s1 389; CHECK: vselge.f32 s0, s2, s3 390 ret void 391} 392define void @test_vsel64uge_nnan(float %lhs32, float %rhs32, double %a, double %b) { 393; CHECK-LABEL: test_vsel64uge_nnan 394 %tst1 = fcmp nnan uge float %lhs32, %rhs32 395 %val1 = select i1 %tst1, double %a, double %b 396 store double %val1, ptr @vardouble 397; CHECK: vcmp.f32 s0, s1 398; CHECK: vselge.f64 d16, d1, d2 399 ret void 400} 401define void @test_vsel32olt_nnan(float %lhs32, float %rhs32, float %a, float %b) { 402; CHECK-LABEL: test_vsel32olt_nnan 403 %tst1 = fcmp nnan olt float %lhs32, %rhs32 404 %val1 = select i1 %tst1, float %a, float %b 405 store float %val1, ptr @varfloat 406; CHECK: vcmp.f32 s1, s0 407; CHECK: vselgt.f32 s0, s2, s3 408 ret void 409} 410define void @test_vsel64olt_nnan(float %lhs32, float %rhs32, double %a, double %b) { 411; CHECK-LABEL: test_vsel64olt_nnan 412 %tst1 = fcmp nnan olt float %lhs32, %rhs32 413 %val1 = select i1 %tst1, double %a, double %b 414 store double %val1, ptr @vardouble 415; CHECK: vcmp.f32 s1, s0 416; CHECK: vselgt.f64 d16, d1, d2 417 ret void 418} 419define void @test_vsel32ult_nnan(float %lhs32, float %rhs32, float %a, float %b) { 420; CHECK-LABEL: test_vsel32ult_nnan 421 %tst1 = fcmp nnan ult float %lhs32, %rhs32 422 %val1 = select i1 %tst1, float %a, float %b 423 store float %val1, ptr @varfloat 424; CHECK: vcmp.f32 s1, s0 425; CHECK: vselgt.f32 s0, s2, s3 426 ret void 427} 428define void @test_vsel64ult_nnan(float %lhs32, float %rhs32, double %a, double %b) { 429; CHECK-LABEL: test_vsel64ult_nnan 430 %tst1 = fcmp nnan ult float %lhs32, %rhs32 431 %val1 = select i1 %tst1, double %a, double %b 432 store double %val1, ptr @vardouble 433; CHECK: vcmp.f32 s1, s0 434; CHECK: vselgt.f64 d16, d1, d2 435 ret void 436} 437define void @test_vsel32ole_nnan(float %lhs32, float %rhs32, float %a, float %b) { 438; CHECK-LABEL: test_vsel32ole_nnan 439 %tst1 = fcmp nnan ole float %lhs32, %rhs32 440 %val1 = select i1 %tst1, float %a, float %b 441 store float %val1, ptr @varfloat 442; CHECK: vcmp.f32 s1, s0 443; CHECK: vselge.f32 s0, s2, s3 444 ret void 445} 446define void @test_vsel64ole_nnan(float %lhs32, float %rhs32, double %a, double %b) { 447; CHECK-LABEL: test_vsel64ole_nnan 448 %tst1 = fcmp nnan ole float %lhs32, %rhs32 449 %val1 = select i1 %tst1, double %a, double %b 450 store double %val1, ptr @vardouble 451; CHECK: vcmp.f32 s1, s0 452; CHECK: vselge.f64 d16, d1, d2 453 ret void 454} 455define void @test_vsel32ule_nnan(float %lhs32, float %rhs32, float %a, float %b) { 456; CHECK-LABEL: test_vsel32ule_nnan 457 %tst1 = fcmp nnan ule float %lhs32, %rhs32 458 %val1 = select i1 %tst1, float %a, float %b 459 store float %val1, ptr @varfloat 460; CHECK: vcmp.f32 s1, s0 461; CHECK: vselge.f32 s0, s2, s3 462 ret void 463} 464define void @test_vsel64ule_nnan(float %lhs32, float %rhs32, double %a, double %b) { 465; CHECK-LABEL: test_vsel64ule_nnan 466 %tst1 = fcmp nnan ule float %lhs32, %rhs32 467 %val1 = select i1 %tst1, double %a, double %b 468 store double %val1, ptr @vardouble 469; CHECK: vcmp.f32 s1, s0 470; CHECK: vselge.f64 d16, d1, d2 471 ret void 472} 473define void @test_vsel32ord_nnan(float %lhs32, float %rhs32, float %a, float %b) { 474; CHECK-LABEL: test_vsel32ord_nnan 475 %tst1 = fcmp nnan ord float %lhs32, %rhs32 476 %val1 = select i1 %tst1, float %a, float %b 477 store float %val1, ptr @varfloat 478; CHECK: vcmp.f32 s0, s1 479; CHECK: vselvs.f32 s0, s3, s2 480 ret void 481} 482define void @test_vsel64ord_nnan(float %lhs32, float %rhs32, double %a, double %b) { 483; CHECK-LABEL: test_vsel64ord_nnan 484 %tst1 = fcmp nnan ord float %lhs32, %rhs32 485 %val1 = select i1 %tst1, double %a, double %b 486 store double %val1, ptr @vardouble 487; CHECK: vcmp.f32 s0, s1 488; CHECK: vselvs.f64 d16, d2, d1 489 ret void 490} 491define void @test_vsel32une_nnan(float %lhs32, float %rhs32, float %a, float %b) { 492; CHECK-LABEL: test_vsel32une_nnan 493 %tst1 = fcmp nnan une float %lhs32, %rhs32 494 %val1 = select i1 %tst1, float %a, float %b 495 store float %val1, ptr @varfloat 496; CHECK: vcmp.f32 s0, s1 497; CHECK: vseleq.f32 s0, s3, s2 498 ret void 499} 500define void @test_vsel64une_nnan(float %lhs32, float %rhs32, double %a, double %b) { 501; CHECK-LABEL: test_vsel64une_nnan 502 %tst1 = fcmp nnan une float %lhs32, %rhs32 503 %val1 = select i1 %tst1, double %a, double %b 504 store double %val1, ptr @vardouble 505; CHECK: vcmp.f32 s0, s1 506; CHECK: vseleq.f64 d16, d2, d1 507 ret void 508} 509define void @test_vsel32uno_nnan(float %lhs32, float %rhs32, float %a, float %b) { 510; CHECK-LABEL: test_vsel32uno_nnan 511 %tst1 = fcmp nnan uno float %lhs32, %rhs32 512 %val1 = select i1 %tst1, float %a, float %b 513 store float %val1, ptr @varfloat 514; CHECK: vcmp.f32 s0, s1 515; CHECK: vselvs.f32 s0, s2, s3 516 ret void 517} 518define void @test_vsel64uno_nnan(float %lhs32, float %rhs32, double %a, double %b) { 519; CHECK-LABEL: test_vsel64uno_nnan 520 %tst1 = fcmp nnan uno float %lhs32, %rhs32 521 %val1 = select i1 %tst1, double %a, double %b 522 store double %val1, ptr @vardouble 523; CHECK: vcmp.f32 s0, s1 524; CHECK: vselvs.f64 d16, d1, d2 525 ret void 526} 527 528define void @test_vsel_ltzero(i32 %lhs32, float %a, float %b) { 529; CHECK-LABEL: test_vsel_ltzero 530 %tst1 = icmp slt i32 %lhs32, 0 531 %val1 = select i1 %tst1, float %a, float %b 532 store float %val1, ptr @varfloat 533; CHECK: cmp r0, #0 534; CHECK: vselge.f32 s0, s1, s0 535 ret void 536} 537 538define void @test_vsel_lezero(i32 %lhs32, float %a, float %b) { 539; CHECK-LABEL: test_vsel_lezero 540 %tst1 = icmp sle i32 %lhs32, 0 541 %val1 = select i1 %tst1, float %a, float %b 542 store float %val1, ptr @varfloat 543; CHECK: cmp r0, #1 544; CHECK: vselge.f32 s0, s1, s0 545 ret void 546} 547 548define void @test_vsel_gtzero(i32 %lhs32, float %a, float %b) { 549; CHECK-LABEL: test_vsel_gtzero 550 %tst1 = icmp sgt i32 %lhs32, 0 551 %val1 = select i1 %tst1, float %a, float %b 552 store float %val1, ptr @varfloat 553; CHECK: cmp r0, #0 554; CHECK: vselgt.f32 s0, s0, s1 555 ret void 556} 557 558define void @test_vsel_gezero(i32 %lhs32, float %a, float %b) { 559; CHECK-LABEL: test_vsel_gezero 560 %tst1 = icmp sge i32 %lhs32, 0 561 %val1 = select i1 %tst1, float %a, float %b 562 store float %val1, ptr @varfloat 563; CHECK: cmn r0, #1 564; CHECK: vselgt.f32 s0, s0, s1 565 ret void 566} 567 568define void @test_vsel_ltzero64(i32 %lhs32, double %a, double %b) { 569; CHECK-LABEL: test_vsel_ltzero 570 %tst1 = icmp slt i32 %lhs32, 0 571 %val1 = select i1 %tst1, double %a, double %b 572 store double %val1, ptr @vardouble 573; CHECK: cmp r0, #0 574; CHECK: vselge.f64 d16, d1, d0 575 ret void 576} 577 578define void @test_vsel_lezero64(i32 %lhs32, double %a, double %b) { 579; CHECK-LABEL: test_vsel_lezero 580 %tst1 = icmp sle i32 %lhs32, 0 581 %val1 = select i1 %tst1, double %a, double %b 582 store double %val1, ptr @vardouble 583; CHECK: cmp r0, #1 584; CHECK: vselge.f64 d16, d1, d0 585 ret void 586} 587 588define void @test_vsel_gtzero64(i32 %lhs32, double %a, double %b) { 589; CHECK-LABEL: test_vsel_gtzero 590 %tst1 = icmp sgt i32 %lhs32, 0 591 %val1 = select i1 %tst1, double %a, double %b 592 store double %val1, ptr @vardouble 593; CHECK: cmp r0, #0 594; CHECK: vselgt.f64 d16, d0, d1 595 ret void 596} 597 598define void @test_vsel_gezero64(i32 %lhs32, double %a, double %b) { 599; CHECK-LABEL: test_vsel_gezero 600 %tst1 = icmp sge i32 %lhs32, 0 601 %val1 = select i1 %tst1, double %a, double %b 602 store double %val1, ptr @vardouble 603; CHECK: cmn r0, #1 604; CHECK: vselgt.f64 d16, d0, d1 605 ret void 606} 607