1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s 3 4 5; <256 x float> 6 7;; TODO v256i1 zero-mask isel 8;; ; Function Attrs: nounwind 9;; define fastcc <256 x i1> @fcmp_false_vv_v256f32(<256 x float> %x, <256 x float> %y) { 10;; %z = fcmp false <256 x float> %x, %y 11;; ret <256 x i1> %z 12;; } 13;; 14;; ; Function Attrs: nounwind 15;; define fastcc <256 x i1> @fcmp_false_sv_v256f32(float %x, <256 x float> %y) { 16;; %xins = insertelement <256 x float> undef, float %x, i32 0 17;; %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 18;; %z = fcmp false <256 x float> %vx, %y 19;; ret <256 x i1> %z 20;; } 21;; 22;; ; Function Attrs: nounwind 23;; define fastcc <256 x i1> @fcmp_false_vs_v256f32(<256 x float> %x, float %y) { 24;; %yins = insertelement <256 x float> undef, float %y, i32 0 25;; %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 26;; %z = fcmp false <256 x float> %x, %vy 27;; ret <256 x i1> %z 28;; } 29 30; Function Attrs: nounwind 31define fastcc <256 x i1> @fcmp_oeq_vv_v256f32(<256 x float> %x, <256 x float> %y) { 32; CHECK-LABEL: fcmp_oeq_vv_v256f32: 33; CHECK: # %bb.0: 34; CHECK-NEXT: lea %s0, 256 35; CHECK-NEXT: lvl %s0 36; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 37; CHECK-NEXT: vfmk.s.eq %vm1, %v0 38; CHECK-NEXT: b.l.t (, %s10) 39 %z = fcmp oeq <256 x float> %x, %y 40 ret <256 x i1> %z 41} 42 43; Function Attrs: nounwind 44define fastcc <256 x i1> @fcmp_oeq_sv_v256f32(float %x, <256 x float> %y) { 45; CHECK-LABEL: fcmp_oeq_sv_v256f32: 46; CHECK: # %bb.0: 47; CHECK-NEXT: lea %s1, 256 48; CHECK-NEXT: lvl %s1 49; CHECK-NEXT: vbrd %v1, %s0 50; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 51; CHECK-NEXT: vfmk.s.eq %vm1, %v0 52; CHECK-NEXT: b.l.t (, %s10) 53 %xins = insertelement <256 x float> undef, float %x, i32 0 54 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 55 %z = fcmp oeq <256 x float> %vx, %y 56 ret <256 x i1> %z 57} 58 59; Function Attrs: nounwind 60define fastcc <256 x i1> @fcmp_oeq_vs_v256f32(<256 x float> %x, float %y) { 61; CHECK-LABEL: fcmp_oeq_vs_v256f32: 62; CHECK: # %bb.0: 63; CHECK-NEXT: lea %s1, 256 64; CHECK-NEXT: lvl %s1 65; CHECK-NEXT: vbrd %v1, %s0 66; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 67; CHECK-NEXT: vfmk.s.eq %vm1, %v0 68; CHECK-NEXT: b.l.t (, %s10) 69 %yins = insertelement <256 x float> undef, float %y, i32 0 70 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 71 %z = fcmp oeq <256 x float> %x, %vy 72 ret <256 x i1> %z 73} 74 75; Function Attrs: nounwind 76define fastcc <256 x i1> @fcmp_ogt_vv_v256f32(<256 x float> %x, <256 x float> %y) { 77; CHECK-LABEL: fcmp_ogt_vv_v256f32: 78; CHECK: # %bb.0: 79; CHECK-NEXT: lea %s0, 256 80; CHECK-NEXT: lvl %s0 81; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 82; CHECK-NEXT: vfmk.s.gt %vm1, %v0 83; CHECK-NEXT: b.l.t (, %s10) 84 %z = fcmp ogt <256 x float> %x, %y 85 ret <256 x i1> %z 86} 87 88; Function Attrs: nounwind 89define fastcc <256 x i1> @fcmp_ogt_sv_v256f32(float %x, <256 x float> %y) { 90; CHECK-LABEL: fcmp_ogt_sv_v256f32: 91; CHECK: # %bb.0: 92; CHECK-NEXT: lea %s1, 256 93; CHECK-NEXT: lvl %s1 94; CHECK-NEXT: vbrd %v1, %s0 95; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 96; CHECK-NEXT: vfmk.s.gt %vm1, %v0 97; CHECK-NEXT: b.l.t (, %s10) 98 %xins = insertelement <256 x float> undef, float %x, i32 0 99 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 100 %z = fcmp ogt <256 x float> %vx, %y 101 ret <256 x i1> %z 102} 103 104; Function Attrs: nounwind 105define fastcc <256 x i1> @fcmp_ogt_vs_v256f32(<256 x float> %x, float %y) { 106; CHECK-LABEL: fcmp_ogt_vs_v256f32: 107; CHECK: # %bb.0: 108; CHECK-NEXT: lea %s1, 256 109; CHECK-NEXT: lvl %s1 110; CHECK-NEXT: vbrd %v1, %s0 111; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 112; CHECK-NEXT: vfmk.s.gt %vm1, %v0 113; CHECK-NEXT: b.l.t (, %s10) 114 %yins = insertelement <256 x float> undef, float %y, i32 0 115 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 116 %z = fcmp ogt <256 x float> %x, %vy 117 ret <256 x i1> %z 118} 119 120; Function Attrs: nounwind 121define fastcc <256 x i1> @fcmp_oge_vv_v256f32(<256 x float> %x, <256 x float> %y) { 122; CHECK-LABEL: fcmp_oge_vv_v256f32: 123; CHECK: # %bb.0: 124; CHECK-NEXT: lea %s0, 256 125; CHECK-NEXT: lvl %s0 126; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 127; CHECK-NEXT: vfmk.s.ge %vm1, %v0 128; CHECK-NEXT: b.l.t (, %s10) 129 %z = fcmp oge <256 x float> %x, %y 130 ret <256 x i1> %z 131} 132 133; Function Attrs: nounwind 134define fastcc <256 x i1> @fcmp_oge_sv_v256f32(float %x, <256 x float> %y) { 135; CHECK-LABEL: fcmp_oge_sv_v256f32: 136; CHECK: # %bb.0: 137; CHECK-NEXT: lea %s1, 256 138; CHECK-NEXT: lvl %s1 139; CHECK-NEXT: vbrd %v1, %s0 140; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 141; CHECK-NEXT: vfmk.s.ge %vm1, %v0 142; CHECK-NEXT: b.l.t (, %s10) 143 %xins = insertelement <256 x float> undef, float %x, i32 0 144 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 145 %z = fcmp oge <256 x float> %vx, %y 146 ret <256 x i1> %z 147} 148 149; Function Attrs: nounwind 150define fastcc <256 x i1> @fcmp_oge_vs_v256f32(<256 x float> %x, float %y) { 151; CHECK-LABEL: fcmp_oge_vs_v256f32: 152; CHECK: # %bb.0: 153; CHECK-NEXT: lea %s1, 256 154; CHECK-NEXT: lvl %s1 155; CHECK-NEXT: vbrd %v1, %s0 156; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 157; CHECK-NEXT: vfmk.s.ge %vm1, %v0 158; CHECK-NEXT: b.l.t (, %s10) 159 %yins = insertelement <256 x float> undef, float %y, i32 0 160 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 161 %z = fcmp oge <256 x float> %x, %vy 162 ret <256 x i1> %z 163} 164 165; Function Attrs: nounwind 166define fastcc <256 x i1> @fcmp_olt_vv_v256f32(<256 x float> %x, <256 x float> %y) { 167; CHECK-LABEL: fcmp_olt_vv_v256f32: 168; CHECK: # %bb.0: 169; CHECK-NEXT: lea %s0, 256 170; CHECK-NEXT: lvl %s0 171; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 172; CHECK-NEXT: vfmk.s.lt %vm1, %v0 173; CHECK-NEXT: b.l.t (, %s10) 174 %z = fcmp olt <256 x float> %x, %y 175 ret <256 x i1> %z 176} 177 178; Function Attrs: nounwind 179define fastcc <256 x i1> @fcmp_olt_sv_v256f32(float %x, <256 x float> %y) { 180; CHECK-LABEL: fcmp_olt_sv_v256f32: 181; CHECK: # %bb.0: 182; CHECK-NEXT: lea %s1, 256 183; CHECK-NEXT: lvl %s1 184; CHECK-NEXT: vbrd %v1, %s0 185; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 186; CHECK-NEXT: vfmk.s.lt %vm1, %v0 187; CHECK-NEXT: b.l.t (, %s10) 188 %xins = insertelement <256 x float> undef, float %x, i32 0 189 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 190 %z = fcmp olt <256 x float> %vx, %y 191 ret <256 x i1> %z 192} 193 194; Function Attrs: nounwind 195define fastcc <256 x i1> @fcmp_olt_vs_v256f32(<256 x float> %x, float %y) { 196; CHECK-LABEL: fcmp_olt_vs_v256f32: 197; CHECK: # %bb.0: 198; CHECK-NEXT: lea %s1, 256 199; CHECK-NEXT: lvl %s1 200; CHECK-NEXT: vbrd %v1, %s0 201; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 202; CHECK-NEXT: vfmk.s.lt %vm1, %v0 203; CHECK-NEXT: b.l.t (, %s10) 204 %yins = insertelement <256 x float> undef, float %y, i32 0 205 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 206 %z = fcmp olt <256 x float> %x, %vy 207 ret <256 x i1> %z 208} 209 210; Function Attrs: nounwind 211define fastcc <256 x i1> @fcmp_ole_vv_v256f32(<256 x float> %x, <256 x float> %y) { 212; CHECK-LABEL: fcmp_ole_vv_v256f32: 213; CHECK: # %bb.0: 214; CHECK-NEXT: lea %s0, 256 215; CHECK-NEXT: lvl %s0 216; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 217; CHECK-NEXT: vfmk.s.le %vm1, %v0 218; CHECK-NEXT: b.l.t (, %s10) 219 %z = fcmp ole <256 x float> %x, %y 220 ret <256 x i1> %z 221} 222 223; Function Attrs: nounwind 224define fastcc <256 x i1> @fcmp_ole_sv_v256f32(float %x, <256 x float> %y) { 225; CHECK-LABEL: fcmp_ole_sv_v256f32: 226; CHECK: # %bb.0: 227; CHECK-NEXT: lea %s1, 256 228; CHECK-NEXT: lvl %s1 229; CHECK-NEXT: vbrd %v1, %s0 230; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 231; CHECK-NEXT: vfmk.s.le %vm1, %v0 232; CHECK-NEXT: b.l.t (, %s10) 233 %xins = insertelement <256 x float> undef, float %x, i32 0 234 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 235 %z = fcmp ole <256 x float> %vx, %y 236 ret <256 x i1> %z 237} 238 239; Function Attrs: nounwind 240define fastcc <256 x i1> @fcmp_ole_vs_v256f32(<256 x float> %x, float %y) { 241; CHECK-LABEL: fcmp_ole_vs_v256f32: 242; CHECK: # %bb.0: 243; CHECK-NEXT: lea %s1, 256 244; CHECK-NEXT: lvl %s1 245; CHECK-NEXT: vbrd %v1, %s0 246; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 247; CHECK-NEXT: vfmk.s.le %vm1, %v0 248; CHECK-NEXT: b.l.t (, %s10) 249 %yins = insertelement <256 x float> undef, float %y, i32 0 250 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 251 %z = fcmp ole <256 x float> %x, %vy 252 ret <256 x i1> %z 253} 254 255; Function Attrs: nounwind 256define fastcc <256 x i1> @fcmp_one_vv_v256f32(<256 x float> %x, <256 x float> %y) { 257; CHECK-LABEL: fcmp_one_vv_v256f32: 258; CHECK: # %bb.0: 259; CHECK-NEXT: lea %s0, 256 260; CHECK-NEXT: lvl %s0 261; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 262; CHECK-NEXT: vfmk.s.ne %vm1, %v0 263; CHECK-NEXT: b.l.t (, %s10) 264 %z = fcmp one <256 x float> %x, %y 265 ret <256 x i1> %z 266} 267 268; Function Attrs: nounwind 269define fastcc <256 x i1> @fcmp_one_sv_v256f32(float %x, <256 x float> %y) { 270; CHECK-LABEL: fcmp_one_sv_v256f32: 271; CHECK: # %bb.0: 272; CHECK-NEXT: lea %s1, 256 273; CHECK-NEXT: lvl %s1 274; CHECK-NEXT: vbrd %v1, %s0 275; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 276; CHECK-NEXT: vfmk.s.ne %vm1, %v0 277; CHECK-NEXT: b.l.t (, %s10) 278 %xins = insertelement <256 x float> undef, float %x, i32 0 279 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 280 %z = fcmp one <256 x float> %vx, %y 281 ret <256 x i1> %z 282} 283 284; Function Attrs: nounwind 285define fastcc <256 x i1> @fcmp_one_vs_v256f32(<256 x float> %x, float %y) { 286; CHECK-LABEL: fcmp_one_vs_v256f32: 287; CHECK: # %bb.0: 288; CHECK-NEXT: lea %s1, 256 289; CHECK-NEXT: lvl %s1 290; CHECK-NEXT: vbrd %v1, %s0 291; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 292; CHECK-NEXT: vfmk.s.ne %vm1, %v0 293; CHECK-NEXT: b.l.t (, %s10) 294 %yins = insertelement <256 x float> undef, float %y, i32 0 295 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 296 %z = fcmp one <256 x float> %x, %vy 297 ret <256 x i1> %z 298} 299 300; Function Attrs: nounwind 301define fastcc <256 x i1> @fcmp_ord_vv_v256f32(<256 x float> %x, <256 x float> %y) { 302; CHECK-LABEL: fcmp_ord_vv_v256f32: 303; CHECK: # %bb.0: 304; CHECK-NEXT: lea %s0, 256 305; CHECK-NEXT: lvl %s0 306; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 307; CHECK-NEXT: vfmk.s.num %vm1, %v0 308; CHECK-NEXT: b.l.t (, %s10) 309 %z = fcmp ord <256 x float> %x, %y 310 ret <256 x i1> %z 311} 312 313; Function Attrs: nounwind 314define fastcc <256 x i1> @fcmp_ord_sv_v256f32(float %x, <256 x float> %y) { 315; CHECK-LABEL: fcmp_ord_sv_v256f32: 316; CHECK: # %bb.0: 317; CHECK-NEXT: lea %s1, 256 318; CHECK-NEXT: lvl %s1 319; CHECK-NEXT: vbrd %v1, %s0 320; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 321; CHECK-NEXT: vfmk.s.num %vm1, %v0 322; CHECK-NEXT: b.l.t (, %s10) 323 %xins = insertelement <256 x float> undef, float %x, i32 0 324 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 325 %z = fcmp ord <256 x float> %vx, %y 326 ret <256 x i1> %z 327} 328 329; Function Attrs: nounwind 330define fastcc <256 x i1> @fcmp_ord_vs_v256f32(<256 x float> %x, float %y) { 331; CHECK-LABEL: fcmp_ord_vs_v256f32: 332; CHECK: # %bb.0: 333; CHECK-NEXT: lea %s1, 256 334; CHECK-NEXT: lvl %s1 335; CHECK-NEXT: vbrd %v1, %s0 336; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 337; CHECK-NEXT: vfmk.s.num %vm1, %v0 338; CHECK-NEXT: b.l.t (, %s10) 339 %yins = insertelement <256 x float> undef, float %y, i32 0 340 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 341 %z = fcmp ord <256 x float> %x, %vy 342 ret <256 x i1> %z 343} 344 345; Function Attrs: nounwind 346define fastcc <256 x i1> @fcmp_uno_vv_v256f32(<256 x float> %x, <256 x float> %y) { 347; CHECK-LABEL: fcmp_uno_vv_v256f32: 348; CHECK: # %bb.0: 349; CHECK-NEXT: lea %s0, 256 350; CHECK-NEXT: lvl %s0 351; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 352; CHECK-NEXT: vfmk.s.nan %vm1, %v0 353; CHECK-NEXT: b.l.t (, %s10) 354 %z = fcmp uno <256 x float> %x, %y 355 ret <256 x i1> %z 356} 357 358; Function Attrs: nounwind 359define fastcc <256 x i1> @fcmp_uno_sv_v256f32(float %x, <256 x float> %y) { 360; CHECK-LABEL: fcmp_uno_sv_v256f32: 361; CHECK: # %bb.0: 362; CHECK-NEXT: lea %s1, 256 363; CHECK-NEXT: lvl %s1 364; CHECK-NEXT: vbrd %v1, %s0 365; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 366; CHECK-NEXT: vfmk.s.nan %vm1, %v0 367; CHECK-NEXT: b.l.t (, %s10) 368 %xins = insertelement <256 x float> undef, float %x, i32 0 369 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 370 %z = fcmp uno <256 x float> %vx, %y 371 ret <256 x i1> %z 372} 373 374; Function Attrs: nounwind 375define fastcc <256 x i1> @fcmp_uno_vs_v256f32(<256 x float> %x, float %y) { 376; CHECK-LABEL: fcmp_uno_vs_v256f32: 377; CHECK: # %bb.0: 378; CHECK-NEXT: lea %s1, 256 379; CHECK-NEXT: lvl %s1 380; CHECK-NEXT: vbrd %v1, %s0 381; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 382; CHECK-NEXT: vfmk.s.nan %vm1, %v0 383; CHECK-NEXT: b.l.t (, %s10) 384 %yins = insertelement <256 x float> undef, float %y, i32 0 385 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 386 %z = fcmp uno <256 x float> %x, %vy 387 ret <256 x i1> %z 388} 389 390; Function Attrs: nounwind 391define fastcc <256 x i1> @fcmp_ueq_vv_v256f32(<256 x float> %x, <256 x float> %y) { 392; CHECK-LABEL: fcmp_ueq_vv_v256f32: 393; CHECK: # %bb.0: 394; CHECK-NEXT: lea %s0, 256 395; CHECK-NEXT: lvl %s0 396; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 397; CHECK-NEXT: vfmk.s.eqnan %vm1, %v0 398; CHECK-NEXT: b.l.t (, %s10) 399 %z = fcmp ueq <256 x float> %x, %y 400 ret <256 x i1> %z 401} 402 403; Function Attrs: nounwind 404define fastcc <256 x i1> @fcmp_ueq_sv_v256f32(float %x, <256 x float> %y) { 405; CHECK-LABEL: fcmp_ueq_sv_v256f32: 406; CHECK: # %bb.0: 407; CHECK-NEXT: lea %s1, 256 408; CHECK-NEXT: lvl %s1 409; CHECK-NEXT: vbrd %v1, %s0 410; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 411; CHECK-NEXT: vfmk.s.eqnan %vm1, %v0 412; CHECK-NEXT: b.l.t (, %s10) 413 %xins = insertelement <256 x float> undef, float %x, i32 0 414 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 415 %z = fcmp ueq <256 x float> %vx, %y 416 ret <256 x i1> %z 417} 418 419; Function Attrs: nounwind 420define fastcc <256 x i1> @fcmp_ueq_vs_v256f32(<256 x float> %x, float %y) { 421; CHECK-LABEL: fcmp_ueq_vs_v256f32: 422; CHECK: # %bb.0: 423; CHECK-NEXT: lea %s1, 256 424; CHECK-NEXT: lvl %s1 425; CHECK-NEXT: vbrd %v1, %s0 426; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 427; CHECK-NEXT: vfmk.s.eqnan %vm1, %v0 428; CHECK-NEXT: b.l.t (, %s10) 429 %yins = insertelement <256 x float> undef, float %y, i32 0 430 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 431 %z = fcmp ueq <256 x float> %x, %vy 432 ret <256 x i1> %z 433} 434 435; Function Attrs: nounwind 436define fastcc <256 x i1> @fcmp_ugt_vv_v256f32(<256 x float> %x, <256 x float> %y) { 437; CHECK-LABEL: fcmp_ugt_vv_v256f32: 438; CHECK: # %bb.0: 439; CHECK-NEXT: lea %s0, 256 440; CHECK-NEXT: lvl %s0 441; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 442; CHECK-NEXT: vfmk.s.gtnan %vm1, %v0 443; CHECK-NEXT: b.l.t (, %s10) 444 %z = fcmp ugt <256 x float> %x, %y 445 ret <256 x i1> %z 446} 447 448; Function Attrs: nounwind 449define fastcc <256 x i1> @fcmp_ugt_sv_v256f32(float %x, <256 x float> %y) { 450; CHECK-LABEL: fcmp_ugt_sv_v256f32: 451; CHECK: # %bb.0: 452; CHECK-NEXT: lea %s1, 256 453; CHECK-NEXT: lvl %s1 454; CHECK-NEXT: vbrd %v1, %s0 455; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 456; CHECK-NEXT: vfmk.s.gtnan %vm1, %v0 457; CHECK-NEXT: b.l.t (, %s10) 458 %xins = insertelement <256 x float> undef, float %x, i32 0 459 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 460 %z = fcmp ugt <256 x float> %vx, %y 461 ret <256 x i1> %z 462} 463 464; Function Attrs: nounwind 465define fastcc <256 x i1> @fcmp_ugt_vs_v256f32(<256 x float> %x, float %y) { 466; CHECK-LABEL: fcmp_ugt_vs_v256f32: 467; CHECK: # %bb.0: 468; CHECK-NEXT: lea %s1, 256 469; CHECK-NEXT: lvl %s1 470; CHECK-NEXT: vbrd %v1, %s0 471; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 472; CHECK-NEXT: vfmk.s.gtnan %vm1, %v0 473; CHECK-NEXT: b.l.t (, %s10) 474 %yins = insertelement <256 x float> undef, float %y, i32 0 475 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 476 %z = fcmp ugt <256 x float> %x, %vy 477 ret <256 x i1> %z 478} 479 480; Function Attrs: nounwind 481define fastcc <256 x i1> @fcmp_uge_vv_v256f32(<256 x float> %x, <256 x float> %y) { 482; CHECK-LABEL: fcmp_uge_vv_v256f32: 483; CHECK: # %bb.0: 484; CHECK-NEXT: lea %s0, 256 485; CHECK-NEXT: lvl %s0 486; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 487; CHECK-NEXT: vfmk.s.genan %vm1, %v0 488; CHECK-NEXT: b.l.t (, %s10) 489 %z = fcmp uge <256 x float> %x, %y 490 ret <256 x i1> %z 491} 492 493; Function Attrs: nounwind 494define fastcc <256 x i1> @fcmp_uge_sv_v256f32(float %x, <256 x float> %y) { 495; CHECK-LABEL: fcmp_uge_sv_v256f32: 496; CHECK: # %bb.0: 497; CHECK-NEXT: lea %s1, 256 498; CHECK-NEXT: lvl %s1 499; CHECK-NEXT: vbrd %v1, %s0 500; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 501; CHECK-NEXT: vfmk.s.genan %vm1, %v0 502; CHECK-NEXT: b.l.t (, %s10) 503 %xins = insertelement <256 x float> undef, float %x, i32 0 504 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 505 %z = fcmp uge <256 x float> %vx, %y 506 ret <256 x i1> %z 507} 508 509; Function Attrs: nounwind 510define fastcc <256 x i1> @fcmp_uge_vs_v256f32(<256 x float> %x, float %y) { 511; CHECK-LABEL: fcmp_uge_vs_v256f32: 512; CHECK: # %bb.0: 513; CHECK-NEXT: lea %s1, 256 514; CHECK-NEXT: lvl %s1 515; CHECK-NEXT: vbrd %v1, %s0 516; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 517; CHECK-NEXT: vfmk.s.genan %vm1, %v0 518; CHECK-NEXT: b.l.t (, %s10) 519 %yins = insertelement <256 x float> undef, float %y, i32 0 520 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 521 %z = fcmp uge <256 x float> %x, %vy 522 ret <256 x i1> %z 523} 524 525; Function Attrs: nounwind 526define fastcc <256 x i1> @fcmp_ult_vv_v256f32(<256 x float> %x, <256 x float> %y) { 527; CHECK-LABEL: fcmp_ult_vv_v256f32: 528; CHECK: # %bb.0: 529; CHECK-NEXT: lea %s0, 256 530; CHECK-NEXT: lvl %s0 531; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 532; CHECK-NEXT: vfmk.s.ltnan %vm1, %v0 533; CHECK-NEXT: b.l.t (, %s10) 534 %z = fcmp ult <256 x float> %x, %y 535 ret <256 x i1> %z 536} 537 538; Function Attrs: nounwind 539define fastcc <256 x i1> @fcmp_ult_sv_v256f32(float %x, <256 x float> %y) { 540; CHECK-LABEL: fcmp_ult_sv_v256f32: 541; CHECK: # %bb.0: 542; CHECK-NEXT: lea %s1, 256 543; CHECK-NEXT: lvl %s1 544; CHECK-NEXT: vbrd %v1, %s0 545; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 546; CHECK-NEXT: vfmk.s.ltnan %vm1, %v0 547; CHECK-NEXT: b.l.t (, %s10) 548 %xins = insertelement <256 x float> undef, float %x, i32 0 549 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 550 %z = fcmp ult <256 x float> %vx, %y 551 ret <256 x i1> %z 552} 553 554; Function Attrs: nounwind 555define fastcc <256 x i1> @fcmp_ult_vs_v256f32(<256 x float> %x, float %y) { 556; CHECK-LABEL: fcmp_ult_vs_v256f32: 557; CHECK: # %bb.0: 558; CHECK-NEXT: lea %s1, 256 559; CHECK-NEXT: lvl %s1 560; CHECK-NEXT: vbrd %v1, %s0 561; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 562; CHECK-NEXT: vfmk.s.ltnan %vm1, %v0 563; CHECK-NEXT: b.l.t (, %s10) 564 %yins = insertelement <256 x float> undef, float %y, i32 0 565 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 566 %z = fcmp ult <256 x float> %x, %vy 567 ret <256 x i1> %z 568} 569 570; Function Attrs: nounwind 571define fastcc <256 x i1> @fcmp_ule_vv_v256f32(<256 x float> %x, <256 x float> %y) { 572; CHECK-LABEL: fcmp_ule_vv_v256f32: 573; CHECK: # %bb.0: 574; CHECK-NEXT: lea %s0, 256 575; CHECK-NEXT: lvl %s0 576; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 577; CHECK-NEXT: vfmk.s.lenan %vm1, %v0 578; CHECK-NEXT: b.l.t (, %s10) 579 %z = fcmp ule <256 x float> %x, %y 580 ret <256 x i1> %z 581} 582 583; Function Attrs: nounwind 584define fastcc <256 x i1> @fcmp_ule_sv_v256f32(float %x, <256 x float> %y) { 585; CHECK-LABEL: fcmp_ule_sv_v256f32: 586; CHECK: # %bb.0: 587; CHECK-NEXT: lea %s1, 256 588; CHECK-NEXT: lvl %s1 589; CHECK-NEXT: vbrd %v1, %s0 590; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 591; CHECK-NEXT: vfmk.s.lenan %vm1, %v0 592; CHECK-NEXT: b.l.t (, %s10) 593 %xins = insertelement <256 x float> undef, float %x, i32 0 594 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 595 %z = fcmp ule <256 x float> %vx, %y 596 ret <256 x i1> %z 597} 598 599; Function Attrs: nounwind 600define fastcc <256 x i1> @fcmp_ule_vs_v256f32(<256 x float> %x, float %y) { 601; CHECK-LABEL: fcmp_ule_vs_v256f32: 602; CHECK: # %bb.0: 603; CHECK-NEXT: lea %s1, 256 604; CHECK-NEXT: lvl %s1 605; CHECK-NEXT: vbrd %v1, %s0 606; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 607; CHECK-NEXT: vfmk.s.lenan %vm1, %v0 608; CHECK-NEXT: b.l.t (, %s10) 609 %yins = insertelement <256 x float> undef, float %y, i32 0 610 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 611 %z = fcmp ule <256 x float> %x, %vy 612 ret <256 x i1> %z 613} 614 615; Function Attrs: nounwind 616define fastcc <256 x i1> @fcmp_une_vv_v256f32(<256 x float> %x, <256 x float> %y) { 617; CHECK-LABEL: fcmp_une_vv_v256f32: 618; CHECK: # %bb.0: 619; CHECK-NEXT: lea %s0, 256 620; CHECK-NEXT: lvl %s0 621; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 622; CHECK-NEXT: vfmk.s.nenan %vm1, %v0 623; CHECK-NEXT: b.l.t (, %s10) 624 %z = fcmp une <256 x float> %x, %y 625 ret <256 x i1> %z 626} 627 628; Function Attrs: nounwind 629define fastcc <256 x i1> @fcmp_une_sv_v256f32(float %x, <256 x float> %y) { 630; CHECK-LABEL: fcmp_une_sv_v256f32: 631; CHECK: # %bb.0: 632; CHECK-NEXT: lea %s1, 256 633; CHECK-NEXT: lvl %s1 634; CHECK-NEXT: vbrd %v1, %s0 635; CHECK-NEXT: vfcmp.s %v0, %v1, %v0 636; CHECK-NEXT: vfmk.s.nenan %vm1, %v0 637; CHECK-NEXT: b.l.t (, %s10) 638 %xins = insertelement <256 x float> undef, float %x, i32 0 639 %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 640 %z = fcmp une <256 x float> %vx, %y 641 ret <256 x i1> %z 642} 643 644; Function Attrs: nounwind 645define fastcc <256 x i1> @fcmp_une_vs_v256f32(<256 x float> %x, float %y) { 646; CHECK-LABEL: fcmp_une_vs_v256f32: 647; CHECK: # %bb.0: 648; CHECK-NEXT: lea %s1, 256 649; CHECK-NEXT: lvl %s1 650; CHECK-NEXT: vbrd %v1, %s0 651; CHECK-NEXT: vfcmp.s %v0, %v0, %v1 652; CHECK-NEXT: vfmk.s.nenan %vm1, %v0 653; CHECK-NEXT: b.l.t (, %s10) 654 %yins = insertelement <256 x float> undef, float %y, i32 0 655 %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 656 %z = fcmp une <256 x float> %x, %vy 657 ret <256 x i1> %z 658} 659 660;; TODO v256i1 all-one mask isel. 661;; ; Function Attrs: nounwind 662;; define fastcc <256 x i1> @fcmp_true_vv_v256f32(<256 x float> %x, <256 x float> %y) { 663;; %z = fcmp true <256 x float> %x, %y 664;; ret <256 x i1> %z 665;; } 666;; 667;; ; Function Attrs: nounwind 668;; define fastcc <256 x i1> @fcmp_true_sv_v256f32(float %x, <256 x float> %y) { 669;; %xins = insertelement <256 x float> undef, float %x, i32 0 670;; %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer 671;; %z = fcmp true <256 x float> %vx, %y 672;; ret <256 x i1> %z 673;; } 674;; 675;; ; Function Attrs: nounwind 676;; define fastcc <256 x i1> @fcmp_true_vs_v256f32(<256 x float> %x, float %y) { 677;; %yins = insertelement <256 x float> undef, float %y, i32 0 678;; %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer 679;; %z = fcmp true <256 x float> %x, %vy 680;; ret <256 x i1> %z 681;; } 682