1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=X86 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefixes=X64 4 5define <16 x i32> @test_v16f32_oeq_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 6; X86-LABEL: test_v16f32_oeq_q: 7; X86: # %bb.0: 8; X86-NEXT: pushl %ebp 9; X86-NEXT: movl %esp, %ebp 10; X86-NEXT: andl $-64, %esp 11; X86-NEXT: subl $64, %esp 12; X86-NEXT: vcmpeqps 8(%ebp), %zmm2, %k1 13; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 14; X86-NEXT: movl %ebp, %esp 15; X86-NEXT: popl %ebp 16; X86-NEXT: retl 17; 18; X64-LABEL: test_v16f32_oeq_q: 19; X64: # %bb.0: 20; X64-NEXT: vcmpeqps %zmm3, %zmm2, %k1 21; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 22; X64-NEXT: retq 23 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 24 <16 x float> %f1, <16 x float> %f2, metadata !"oeq", 25 metadata !"fpexcept.strict") #0 26 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 27 ret <16 x i32> %res 28} 29 30define <16 x i32> @test_v16f32_ogt_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 31; X86-LABEL: test_v16f32_ogt_q: 32; X86: # %bb.0: 33; X86-NEXT: pushl %ebp 34; X86-NEXT: movl %esp, %ebp 35; X86-NEXT: andl $-64, %esp 36; X86-NEXT: subl $64, %esp 37; X86-NEXT: vcmpgt_oqps 8(%ebp), %zmm2, %k1 38; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 39; X86-NEXT: movl %ebp, %esp 40; X86-NEXT: popl %ebp 41; X86-NEXT: retl 42; 43; X64-LABEL: test_v16f32_ogt_q: 44; X64: # %bb.0: 45; X64-NEXT: vcmplt_oqps %zmm2, %zmm3, %k1 46; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 47; X64-NEXT: retq 48 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 49 <16 x float> %f1, <16 x float> %f2, metadata !"ogt", 50 metadata !"fpexcept.strict") #0 51 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 52 ret <16 x i32> %res 53} 54 55define <16 x i32> @test_v16f32_oge_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 56; X86-LABEL: test_v16f32_oge_q: 57; X86: # %bb.0: 58; X86-NEXT: pushl %ebp 59; X86-NEXT: movl %esp, %ebp 60; X86-NEXT: andl $-64, %esp 61; X86-NEXT: subl $64, %esp 62; X86-NEXT: vcmpge_oqps 8(%ebp), %zmm2, %k1 63; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 64; X86-NEXT: movl %ebp, %esp 65; X86-NEXT: popl %ebp 66; X86-NEXT: retl 67; 68; X64-LABEL: test_v16f32_oge_q: 69; X64: # %bb.0: 70; X64-NEXT: vcmple_oqps %zmm2, %zmm3, %k1 71; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 72; X64-NEXT: retq 73 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 74 <16 x float> %f1, <16 x float> %f2, metadata !"oge", 75 metadata !"fpexcept.strict") #0 76 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 77 ret <16 x i32> %res 78} 79 80define <16 x i32> @test_v16f32_olt_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 81; X86-LABEL: test_v16f32_olt_q: 82; X86: # %bb.0: 83; X86-NEXT: pushl %ebp 84; X86-NEXT: movl %esp, %ebp 85; X86-NEXT: andl $-64, %esp 86; X86-NEXT: subl $64, %esp 87; X86-NEXT: vcmplt_oqps 8(%ebp), %zmm2, %k1 88; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 89; X86-NEXT: movl %ebp, %esp 90; X86-NEXT: popl %ebp 91; X86-NEXT: retl 92; 93; X64-LABEL: test_v16f32_olt_q: 94; X64: # %bb.0: 95; X64-NEXT: vcmplt_oqps %zmm3, %zmm2, %k1 96; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 97; X64-NEXT: retq 98 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 99 <16 x float> %f1, <16 x float> %f2, metadata !"olt", 100 metadata !"fpexcept.strict") #0 101 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 102 ret <16 x i32> %res 103} 104 105define <16 x i32> @test_v16f32_ole_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 106; X86-LABEL: test_v16f32_ole_q: 107; X86: # %bb.0: 108; X86-NEXT: pushl %ebp 109; X86-NEXT: movl %esp, %ebp 110; X86-NEXT: andl $-64, %esp 111; X86-NEXT: subl $64, %esp 112; X86-NEXT: vcmple_oqps 8(%ebp), %zmm2, %k1 113; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 114; X86-NEXT: movl %ebp, %esp 115; X86-NEXT: popl %ebp 116; X86-NEXT: retl 117; 118; X64-LABEL: test_v16f32_ole_q: 119; X64: # %bb.0: 120; X64-NEXT: vcmple_oqps %zmm3, %zmm2, %k1 121; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 122; X64-NEXT: retq 123 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 124 <16 x float> %f1, <16 x float> %f2, metadata !"ole", 125 metadata !"fpexcept.strict") #0 126 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 127 ret <16 x i32> %res 128} 129 130define <16 x i32> @test_v16f32_one_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 131; X86-LABEL: test_v16f32_one_q: 132; X86: # %bb.0: 133; X86-NEXT: pushl %ebp 134; X86-NEXT: movl %esp, %ebp 135; X86-NEXT: andl $-64, %esp 136; X86-NEXT: subl $64, %esp 137; X86-NEXT: vcmpneq_oqps 8(%ebp), %zmm2, %k1 138; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 139; X86-NEXT: movl %ebp, %esp 140; X86-NEXT: popl %ebp 141; X86-NEXT: retl 142; 143; X64-LABEL: test_v16f32_one_q: 144; X64: # %bb.0: 145; X64-NEXT: vcmpneq_oqps %zmm3, %zmm2, %k1 146; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 147; X64-NEXT: retq 148 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 149 <16 x float> %f1, <16 x float> %f2, metadata !"one", 150 metadata !"fpexcept.strict") #0 151 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 152 ret <16 x i32> %res 153} 154 155define <16 x i32> @test_v16f32_ord_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 156; X86-LABEL: test_v16f32_ord_q: 157; X86: # %bb.0: 158; X86-NEXT: pushl %ebp 159; X86-NEXT: movl %esp, %ebp 160; X86-NEXT: andl $-64, %esp 161; X86-NEXT: subl $64, %esp 162; X86-NEXT: vcmpordps 8(%ebp), %zmm2, %k1 163; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 164; X86-NEXT: movl %ebp, %esp 165; X86-NEXT: popl %ebp 166; X86-NEXT: retl 167; 168; X64-LABEL: test_v16f32_ord_q: 169; X64: # %bb.0: 170; X64-NEXT: vcmpordps %zmm3, %zmm2, %k1 171; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 172; X64-NEXT: retq 173 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 174 <16 x float> %f1, <16 x float> %f2, metadata !"ord", 175 metadata !"fpexcept.strict") #0 176 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 177 ret <16 x i32> %res 178} 179 180define <16 x i32> @test_v16f32_ueq_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 181; X86-LABEL: test_v16f32_ueq_q: 182; X86: # %bb.0: 183; X86-NEXT: pushl %ebp 184; X86-NEXT: movl %esp, %ebp 185; X86-NEXT: andl $-64, %esp 186; X86-NEXT: subl $64, %esp 187; X86-NEXT: vcmpeq_uqps 8(%ebp), %zmm2, %k1 188; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 189; X86-NEXT: movl %ebp, %esp 190; X86-NEXT: popl %ebp 191; X86-NEXT: retl 192; 193; X64-LABEL: test_v16f32_ueq_q: 194; X64: # %bb.0: 195; X64-NEXT: vcmpeq_uqps %zmm3, %zmm2, %k1 196; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 197; X64-NEXT: retq 198 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 199 <16 x float> %f1, <16 x float> %f2, metadata !"ueq", 200 metadata !"fpexcept.strict") #0 201 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 202 ret <16 x i32> %res 203} 204 205define <16 x i32> @test_v16f32_ugt_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 206; X86-LABEL: test_v16f32_ugt_q: 207; X86: # %bb.0: 208; X86-NEXT: pushl %ebp 209; X86-NEXT: movl %esp, %ebp 210; X86-NEXT: andl $-64, %esp 211; X86-NEXT: subl $64, %esp 212; X86-NEXT: vcmpnle_uqps 8(%ebp), %zmm2, %k1 213; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 214; X86-NEXT: movl %ebp, %esp 215; X86-NEXT: popl %ebp 216; X86-NEXT: retl 217; 218; X64-LABEL: test_v16f32_ugt_q: 219; X64: # %bb.0: 220; X64-NEXT: vcmpnle_uqps %zmm3, %zmm2, %k1 221; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 222; X64-NEXT: retq 223 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 224 <16 x float> %f1, <16 x float> %f2, metadata !"ugt", 225 metadata !"fpexcept.strict") #0 226 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 227 ret <16 x i32> %res 228} 229 230define <16 x i32> @test_v16f32_uge_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 231; X86-LABEL: test_v16f32_uge_q: 232; X86: # %bb.0: 233; X86-NEXT: pushl %ebp 234; X86-NEXT: movl %esp, %ebp 235; X86-NEXT: andl $-64, %esp 236; X86-NEXT: subl $64, %esp 237; X86-NEXT: vcmpnlt_uqps 8(%ebp), %zmm2, %k1 238; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 239; X86-NEXT: movl %ebp, %esp 240; X86-NEXT: popl %ebp 241; X86-NEXT: retl 242; 243; X64-LABEL: test_v16f32_uge_q: 244; X64: # %bb.0: 245; X64-NEXT: vcmpnlt_uqps %zmm3, %zmm2, %k1 246; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 247; X64-NEXT: retq 248 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 249 <16 x float> %f1, <16 x float> %f2, metadata !"uge", 250 metadata !"fpexcept.strict") #0 251 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 252 ret <16 x i32> %res 253} 254 255define <16 x i32> @test_v16f32_ult_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 256; X86-LABEL: test_v16f32_ult_q: 257; X86: # %bb.0: 258; X86-NEXT: pushl %ebp 259; X86-NEXT: movl %esp, %ebp 260; X86-NEXT: andl $-64, %esp 261; X86-NEXT: subl $64, %esp 262; X86-NEXT: vcmpnge_uqps 8(%ebp), %zmm2, %k1 263; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 264; X86-NEXT: movl %ebp, %esp 265; X86-NEXT: popl %ebp 266; X86-NEXT: retl 267; 268; X64-LABEL: test_v16f32_ult_q: 269; X64: # %bb.0: 270; X64-NEXT: vcmpnle_uqps %zmm2, %zmm3, %k1 271; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 272; X64-NEXT: retq 273 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 274 <16 x float> %f1, <16 x float> %f2, metadata !"ult", 275 metadata !"fpexcept.strict") #0 276 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 277 ret <16 x i32> %res 278} 279 280define <16 x i32> @test_v16f32_ule_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 281; X86-LABEL: test_v16f32_ule_q: 282; X86: # %bb.0: 283; X86-NEXT: pushl %ebp 284; X86-NEXT: movl %esp, %ebp 285; X86-NEXT: andl $-64, %esp 286; X86-NEXT: subl $64, %esp 287; X86-NEXT: vcmpngt_uqps 8(%ebp), %zmm2, %k1 288; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 289; X86-NEXT: movl %ebp, %esp 290; X86-NEXT: popl %ebp 291; X86-NEXT: retl 292; 293; X64-LABEL: test_v16f32_ule_q: 294; X64: # %bb.0: 295; X64-NEXT: vcmpnlt_uqps %zmm2, %zmm3, %k1 296; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 297; X64-NEXT: retq 298 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 299 <16 x float> %f1, <16 x float> %f2, metadata !"ule", 300 metadata !"fpexcept.strict") #0 301 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 302 ret <16 x i32> %res 303} 304 305define <16 x i32> @test_v16f32_une_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 306; X86-LABEL: test_v16f32_une_q: 307; X86: # %bb.0: 308; X86-NEXT: pushl %ebp 309; X86-NEXT: movl %esp, %ebp 310; X86-NEXT: andl $-64, %esp 311; X86-NEXT: subl $64, %esp 312; X86-NEXT: vcmpneqps 8(%ebp), %zmm2, %k1 313; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 314; X86-NEXT: movl %ebp, %esp 315; X86-NEXT: popl %ebp 316; X86-NEXT: retl 317; 318; X64-LABEL: test_v16f32_une_q: 319; X64: # %bb.0: 320; X64-NEXT: vcmpneqps %zmm3, %zmm2, %k1 321; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 322; X64-NEXT: retq 323 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 324 <16 x float> %f1, <16 x float> %f2, metadata !"une", 325 metadata !"fpexcept.strict") #0 326 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 327 ret <16 x i32> %res 328} 329 330define <16 x i32> @test_v16f32_uno_q(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 331; X86-LABEL: test_v16f32_uno_q: 332; X86: # %bb.0: 333; X86-NEXT: pushl %ebp 334; X86-NEXT: movl %esp, %ebp 335; X86-NEXT: andl $-64, %esp 336; X86-NEXT: subl $64, %esp 337; X86-NEXT: vcmpunordps 8(%ebp), %zmm2, %k1 338; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 339; X86-NEXT: movl %ebp, %esp 340; X86-NEXT: popl %ebp 341; X86-NEXT: retl 342; 343; X64-LABEL: test_v16f32_uno_q: 344; X64: # %bb.0: 345; X64-NEXT: vcmpunordps %zmm3, %zmm2, %k1 346; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 347; X64-NEXT: retq 348 %cond = call <16 x i1> @llvm.experimental.constrained.fcmp.v16f32( 349 <16 x float> %f1, <16 x float> %f2, metadata !"uno", 350 metadata !"fpexcept.strict") #0 351 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 352 ret <16 x i32> %res 353} 354 355define <8 x i64> @test_v8f64_oeq_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 356; X86-LABEL: test_v8f64_oeq_q: 357; X86: # %bb.0: 358; X86-NEXT: pushl %ebp 359; X86-NEXT: movl %esp, %ebp 360; X86-NEXT: andl $-64, %esp 361; X86-NEXT: subl $64, %esp 362; X86-NEXT: vcmpeqpd 8(%ebp), %zmm2, %k1 363; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 364; X86-NEXT: movl %ebp, %esp 365; X86-NEXT: popl %ebp 366; X86-NEXT: retl 367; 368; X64-LABEL: test_v8f64_oeq_q: 369; X64: # %bb.0: 370; X64-NEXT: vcmpeqpd %zmm3, %zmm2, %k1 371; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 372; X64-NEXT: retq 373 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 374 <8 x double> %f1, <8 x double> %f2, metadata !"oeq", 375 metadata !"fpexcept.strict") #0 376 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 377 ret <8 x i64> %res 378} 379 380define <8 x i64> @test_v8f64_ogt_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 381; X86-LABEL: test_v8f64_ogt_q: 382; X86: # %bb.0: 383; X86-NEXT: pushl %ebp 384; X86-NEXT: movl %esp, %ebp 385; X86-NEXT: andl $-64, %esp 386; X86-NEXT: subl $64, %esp 387; X86-NEXT: vcmpgt_oqpd 8(%ebp), %zmm2, %k1 388; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 389; X86-NEXT: movl %ebp, %esp 390; X86-NEXT: popl %ebp 391; X86-NEXT: retl 392; 393; X64-LABEL: test_v8f64_ogt_q: 394; X64: # %bb.0: 395; X64-NEXT: vcmplt_oqpd %zmm2, %zmm3, %k1 396; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 397; X64-NEXT: retq 398 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 399 <8 x double> %f1, <8 x double> %f2, metadata !"ogt", 400 metadata !"fpexcept.strict") #0 401 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 402 ret <8 x i64> %res 403} 404 405define <8 x i64> @test_v8f64_oge_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 406; X86-LABEL: test_v8f64_oge_q: 407; X86: # %bb.0: 408; X86-NEXT: pushl %ebp 409; X86-NEXT: movl %esp, %ebp 410; X86-NEXT: andl $-64, %esp 411; X86-NEXT: subl $64, %esp 412; X86-NEXT: vcmpge_oqpd 8(%ebp), %zmm2, %k1 413; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 414; X86-NEXT: movl %ebp, %esp 415; X86-NEXT: popl %ebp 416; X86-NEXT: retl 417; 418; X64-LABEL: test_v8f64_oge_q: 419; X64: # %bb.0: 420; X64-NEXT: vcmple_oqpd %zmm2, %zmm3, %k1 421; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 422; X64-NEXT: retq 423 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 424 <8 x double> %f1, <8 x double> %f2, metadata !"oge", 425 metadata !"fpexcept.strict") #0 426 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 427 ret <8 x i64> %res 428} 429 430define <8 x i64> @test_v8f64_olt_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 431; X86-LABEL: test_v8f64_olt_q: 432; X86: # %bb.0: 433; X86-NEXT: pushl %ebp 434; X86-NEXT: movl %esp, %ebp 435; X86-NEXT: andl $-64, %esp 436; X86-NEXT: subl $64, %esp 437; X86-NEXT: vcmplt_oqpd 8(%ebp), %zmm2, %k1 438; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 439; X86-NEXT: movl %ebp, %esp 440; X86-NEXT: popl %ebp 441; X86-NEXT: retl 442; 443; X64-LABEL: test_v8f64_olt_q: 444; X64: # %bb.0: 445; X64-NEXT: vcmplt_oqpd %zmm3, %zmm2, %k1 446; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 447; X64-NEXT: retq 448 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 449 <8 x double> %f1, <8 x double> %f2, metadata !"olt", 450 metadata !"fpexcept.strict") #0 451 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 452 ret <8 x i64> %res 453} 454 455define <8 x i64> @test_v8f64_ole_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 456; X86-LABEL: test_v8f64_ole_q: 457; X86: # %bb.0: 458; X86-NEXT: pushl %ebp 459; X86-NEXT: movl %esp, %ebp 460; X86-NEXT: andl $-64, %esp 461; X86-NEXT: subl $64, %esp 462; X86-NEXT: vcmple_oqpd 8(%ebp), %zmm2, %k1 463; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 464; X86-NEXT: movl %ebp, %esp 465; X86-NEXT: popl %ebp 466; X86-NEXT: retl 467; 468; X64-LABEL: test_v8f64_ole_q: 469; X64: # %bb.0: 470; X64-NEXT: vcmple_oqpd %zmm3, %zmm2, %k1 471; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 472; X64-NEXT: retq 473 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 474 <8 x double> %f1, <8 x double> %f2, metadata !"ole", 475 metadata !"fpexcept.strict") #0 476 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 477 ret <8 x i64> %res 478} 479 480define <8 x i64> @test_v8f64_one_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 481; X86-LABEL: test_v8f64_one_q: 482; X86: # %bb.0: 483; X86-NEXT: pushl %ebp 484; X86-NEXT: movl %esp, %ebp 485; X86-NEXT: andl $-64, %esp 486; X86-NEXT: subl $64, %esp 487; X86-NEXT: vcmpneq_oqpd 8(%ebp), %zmm2, %k1 488; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 489; X86-NEXT: movl %ebp, %esp 490; X86-NEXT: popl %ebp 491; X86-NEXT: retl 492; 493; X64-LABEL: test_v8f64_one_q: 494; X64: # %bb.0: 495; X64-NEXT: vcmpneq_oqpd %zmm3, %zmm2, %k1 496; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 497; X64-NEXT: retq 498 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 499 <8 x double> %f1, <8 x double> %f2, metadata !"one", 500 metadata !"fpexcept.strict") #0 501 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 502 ret <8 x i64> %res 503} 504 505define <8 x i64> @test_v8f64_ord_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 506; X86-LABEL: test_v8f64_ord_q: 507; X86: # %bb.0: 508; X86-NEXT: pushl %ebp 509; X86-NEXT: movl %esp, %ebp 510; X86-NEXT: andl $-64, %esp 511; X86-NEXT: subl $64, %esp 512; X86-NEXT: vcmpordpd 8(%ebp), %zmm2, %k1 513; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 514; X86-NEXT: movl %ebp, %esp 515; X86-NEXT: popl %ebp 516; X86-NEXT: retl 517; 518; X64-LABEL: test_v8f64_ord_q: 519; X64: # %bb.0: 520; X64-NEXT: vcmpordpd %zmm3, %zmm2, %k1 521; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 522; X64-NEXT: retq 523 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 524 <8 x double> %f1, <8 x double> %f2, metadata !"ord", 525 metadata !"fpexcept.strict") #0 526 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 527 ret <8 x i64> %res 528} 529 530define <8 x i64> @test_v8f64_ueq_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 531; X86-LABEL: test_v8f64_ueq_q: 532; X86: # %bb.0: 533; X86-NEXT: pushl %ebp 534; X86-NEXT: movl %esp, %ebp 535; X86-NEXT: andl $-64, %esp 536; X86-NEXT: subl $64, %esp 537; X86-NEXT: vcmpeq_uqpd 8(%ebp), %zmm2, %k1 538; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 539; X86-NEXT: movl %ebp, %esp 540; X86-NEXT: popl %ebp 541; X86-NEXT: retl 542; 543; X64-LABEL: test_v8f64_ueq_q: 544; X64: # %bb.0: 545; X64-NEXT: vcmpeq_uqpd %zmm3, %zmm2, %k1 546; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 547; X64-NEXT: retq 548 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 549 <8 x double> %f1, <8 x double> %f2, metadata !"ueq", 550 metadata !"fpexcept.strict") #0 551 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 552 ret <8 x i64> %res 553} 554 555define <8 x i64> @test_v8f64_ugt_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 556; X86-LABEL: test_v8f64_ugt_q: 557; X86: # %bb.0: 558; X86-NEXT: pushl %ebp 559; X86-NEXT: movl %esp, %ebp 560; X86-NEXT: andl $-64, %esp 561; X86-NEXT: subl $64, %esp 562; X86-NEXT: vcmpnle_uqpd 8(%ebp), %zmm2, %k1 563; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 564; X86-NEXT: movl %ebp, %esp 565; X86-NEXT: popl %ebp 566; X86-NEXT: retl 567; 568; X64-LABEL: test_v8f64_ugt_q: 569; X64: # %bb.0: 570; X64-NEXT: vcmpnle_uqpd %zmm3, %zmm2, %k1 571; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 572; X64-NEXT: retq 573 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 574 <8 x double> %f1, <8 x double> %f2, metadata !"ugt", 575 metadata !"fpexcept.strict") #0 576 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 577 ret <8 x i64> %res 578} 579 580define <8 x i64> @test_v8f64_uge_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 581; X86-LABEL: test_v8f64_uge_q: 582; X86: # %bb.0: 583; X86-NEXT: pushl %ebp 584; X86-NEXT: movl %esp, %ebp 585; X86-NEXT: andl $-64, %esp 586; X86-NEXT: subl $64, %esp 587; X86-NEXT: vcmpnlt_uqpd 8(%ebp), %zmm2, %k1 588; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 589; X86-NEXT: movl %ebp, %esp 590; X86-NEXT: popl %ebp 591; X86-NEXT: retl 592; 593; X64-LABEL: test_v8f64_uge_q: 594; X64: # %bb.0: 595; X64-NEXT: vcmpnlt_uqpd %zmm3, %zmm2, %k1 596; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 597; X64-NEXT: retq 598 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 599 <8 x double> %f1, <8 x double> %f2, metadata !"uge", 600 metadata !"fpexcept.strict") #0 601 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 602 ret <8 x i64> %res 603} 604 605define <8 x i64> @test_v8f64_ult_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 606; X86-LABEL: test_v8f64_ult_q: 607; X86: # %bb.0: 608; X86-NEXT: pushl %ebp 609; X86-NEXT: movl %esp, %ebp 610; X86-NEXT: andl $-64, %esp 611; X86-NEXT: subl $64, %esp 612; X86-NEXT: vcmpnge_uqpd 8(%ebp), %zmm2, %k1 613; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 614; X86-NEXT: movl %ebp, %esp 615; X86-NEXT: popl %ebp 616; X86-NEXT: retl 617; 618; X64-LABEL: test_v8f64_ult_q: 619; X64: # %bb.0: 620; X64-NEXT: vcmpnle_uqpd %zmm2, %zmm3, %k1 621; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 622; X64-NEXT: retq 623 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 624 <8 x double> %f1, <8 x double> %f2, metadata !"ult", 625 metadata !"fpexcept.strict") #0 626 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 627 ret <8 x i64> %res 628} 629 630define <8 x i64> @test_v8f64_ule_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 631; X86-LABEL: test_v8f64_ule_q: 632; X86: # %bb.0: 633; X86-NEXT: pushl %ebp 634; X86-NEXT: movl %esp, %ebp 635; X86-NEXT: andl $-64, %esp 636; X86-NEXT: subl $64, %esp 637; X86-NEXT: vcmpngt_uqpd 8(%ebp), %zmm2, %k1 638; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 639; X86-NEXT: movl %ebp, %esp 640; X86-NEXT: popl %ebp 641; X86-NEXT: retl 642; 643; X64-LABEL: test_v8f64_ule_q: 644; X64: # %bb.0: 645; X64-NEXT: vcmpnlt_uqpd %zmm2, %zmm3, %k1 646; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 647; X64-NEXT: retq 648 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 649 <8 x double> %f1, <8 x double> %f2, metadata !"ule", 650 metadata !"fpexcept.strict") #0 651 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 652 ret <8 x i64> %res 653} 654 655define <8 x i64> @test_v8f64_une_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 656; X86-LABEL: test_v8f64_une_q: 657; X86: # %bb.0: 658; X86-NEXT: pushl %ebp 659; X86-NEXT: movl %esp, %ebp 660; X86-NEXT: andl $-64, %esp 661; X86-NEXT: subl $64, %esp 662; X86-NEXT: vcmpneqpd 8(%ebp), %zmm2, %k1 663; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 664; X86-NEXT: movl %ebp, %esp 665; X86-NEXT: popl %ebp 666; X86-NEXT: retl 667; 668; X64-LABEL: test_v8f64_une_q: 669; X64: # %bb.0: 670; X64-NEXT: vcmpneqpd %zmm3, %zmm2, %k1 671; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 672; X64-NEXT: retq 673 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 674 <8 x double> %f1, <8 x double> %f2, metadata !"une", 675 metadata !"fpexcept.strict") #0 676 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 677 ret <8 x i64> %res 678} 679 680define <8 x i64> @test_v8f64_uno_q(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 681; X86-LABEL: test_v8f64_uno_q: 682; X86: # %bb.0: 683; X86-NEXT: pushl %ebp 684; X86-NEXT: movl %esp, %ebp 685; X86-NEXT: andl $-64, %esp 686; X86-NEXT: subl $64, %esp 687; X86-NEXT: vcmpunordpd 8(%ebp), %zmm2, %k1 688; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 689; X86-NEXT: movl %ebp, %esp 690; X86-NEXT: popl %ebp 691; X86-NEXT: retl 692; 693; X64-LABEL: test_v8f64_uno_q: 694; X64: # %bb.0: 695; X64-NEXT: vcmpunordpd %zmm3, %zmm2, %k1 696; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 697; X64-NEXT: retq 698 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f64( 699 <8 x double> %f1, <8 x double> %f2, metadata !"uno", 700 metadata !"fpexcept.strict") #0 701 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 702 ret <8 x i64> %res 703} 704 705define <16 x i32> @test_v16f32_oeq_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 706; X86-LABEL: test_v16f32_oeq_s: 707; X86: # %bb.0: 708; X86-NEXT: pushl %ebp 709; X86-NEXT: movl %esp, %ebp 710; X86-NEXT: andl $-64, %esp 711; X86-NEXT: subl $64, %esp 712; X86-NEXT: vcmpeq_osps 8(%ebp), %zmm2, %k1 713; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 714; X86-NEXT: movl %ebp, %esp 715; X86-NEXT: popl %ebp 716; X86-NEXT: retl 717; 718; X64-LABEL: test_v16f32_oeq_s: 719; X64: # %bb.0: 720; X64-NEXT: vcmpeq_osps %zmm3, %zmm2, %k1 721; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 722; X64-NEXT: retq 723 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 724 <16 x float> %f1, <16 x float> %f2, metadata !"oeq", 725 metadata !"fpexcept.strict") #0 726 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 727 ret <16 x i32> %res 728} 729 730define <16 x i32> @test_v16f32_ogt_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 731; X86-LABEL: test_v16f32_ogt_s: 732; X86: # %bb.0: 733; X86-NEXT: pushl %ebp 734; X86-NEXT: movl %esp, %ebp 735; X86-NEXT: andl $-64, %esp 736; X86-NEXT: subl $64, %esp 737; X86-NEXT: vcmpgtps 8(%ebp), %zmm2, %k1 738; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 739; X86-NEXT: movl %ebp, %esp 740; X86-NEXT: popl %ebp 741; X86-NEXT: retl 742; 743; X64-LABEL: test_v16f32_ogt_s: 744; X64: # %bb.0: 745; X64-NEXT: vcmpltps %zmm2, %zmm3, %k1 746; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 747; X64-NEXT: retq 748 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 749 <16 x float> %f1, <16 x float> %f2, metadata !"ogt", 750 metadata !"fpexcept.strict") #0 751 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 752 ret <16 x i32> %res 753} 754 755define <16 x i32> @test_v16f32_oge_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 756; X86-LABEL: test_v16f32_oge_s: 757; X86: # %bb.0: 758; X86-NEXT: pushl %ebp 759; X86-NEXT: movl %esp, %ebp 760; X86-NEXT: andl $-64, %esp 761; X86-NEXT: subl $64, %esp 762; X86-NEXT: vcmpgeps 8(%ebp), %zmm2, %k1 763; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 764; X86-NEXT: movl %ebp, %esp 765; X86-NEXT: popl %ebp 766; X86-NEXT: retl 767; 768; X64-LABEL: test_v16f32_oge_s: 769; X64: # %bb.0: 770; X64-NEXT: vcmpleps %zmm2, %zmm3, %k1 771; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 772; X64-NEXT: retq 773 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 774 <16 x float> %f1, <16 x float> %f2, metadata !"oge", 775 metadata !"fpexcept.strict") #0 776 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 777 ret <16 x i32> %res 778} 779 780define <16 x i32> @test_v16f32_olt_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 781; X86-LABEL: test_v16f32_olt_s: 782; X86: # %bb.0: 783; X86-NEXT: pushl %ebp 784; X86-NEXT: movl %esp, %ebp 785; X86-NEXT: andl $-64, %esp 786; X86-NEXT: subl $64, %esp 787; X86-NEXT: vcmpltps 8(%ebp), %zmm2, %k1 788; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 789; X86-NEXT: movl %ebp, %esp 790; X86-NEXT: popl %ebp 791; X86-NEXT: retl 792; 793; X64-LABEL: test_v16f32_olt_s: 794; X64: # %bb.0: 795; X64-NEXT: vcmpltps %zmm3, %zmm2, %k1 796; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 797; X64-NEXT: retq 798 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 799 <16 x float> %f1, <16 x float> %f2, metadata !"olt", 800 metadata !"fpexcept.strict") #0 801 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 802 ret <16 x i32> %res 803} 804 805define <16 x i32> @test_v16f32_ole_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 806; X86-LABEL: test_v16f32_ole_s: 807; X86: # %bb.0: 808; X86-NEXT: pushl %ebp 809; X86-NEXT: movl %esp, %ebp 810; X86-NEXT: andl $-64, %esp 811; X86-NEXT: subl $64, %esp 812; X86-NEXT: vcmpleps 8(%ebp), %zmm2, %k1 813; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 814; X86-NEXT: movl %ebp, %esp 815; X86-NEXT: popl %ebp 816; X86-NEXT: retl 817; 818; X64-LABEL: test_v16f32_ole_s: 819; X64: # %bb.0: 820; X64-NEXT: vcmpleps %zmm3, %zmm2, %k1 821; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 822; X64-NEXT: retq 823 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 824 <16 x float> %f1, <16 x float> %f2, metadata !"ole", 825 metadata !"fpexcept.strict") #0 826 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 827 ret <16 x i32> %res 828} 829 830define <16 x i32> @test_v16f32_one_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 831; X86-LABEL: test_v16f32_one_s: 832; X86: # %bb.0: 833; X86-NEXT: pushl %ebp 834; X86-NEXT: movl %esp, %ebp 835; X86-NEXT: andl $-64, %esp 836; X86-NEXT: subl $64, %esp 837; X86-NEXT: vcmpneq_osps 8(%ebp), %zmm2, %k1 838; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 839; X86-NEXT: movl %ebp, %esp 840; X86-NEXT: popl %ebp 841; X86-NEXT: retl 842; 843; X64-LABEL: test_v16f32_one_s: 844; X64: # %bb.0: 845; X64-NEXT: vcmpneq_osps %zmm3, %zmm2, %k1 846; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 847; X64-NEXT: retq 848 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 849 <16 x float> %f1, <16 x float> %f2, metadata !"one", 850 metadata !"fpexcept.strict") #0 851 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 852 ret <16 x i32> %res 853} 854 855define <16 x i32> @test_v16f32_ord_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 856; X86-LABEL: test_v16f32_ord_s: 857; X86: # %bb.0: 858; X86-NEXT: pushl %ebp 859; X86-NEXT: movl %esp, %ebp 860; X86-NEXT: andl $-64, %esp 861; X86-NEXT: subl $64, %esp 862; X86-NEXT: vcmpord_sps 8(%ebp), %zmm2, %k1 863; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 864; X86-NEXT: movl %ebp, %esp 865; X86-NEXT: popl %ebp 866; X86-NEXT: retl 867; 868; X64-LABEL: test_v16f32_ord_s: 869; X64: # %bb.0: 870; X64-NEXT: vcmpord_sps %zmm3, %zmm2, %k1 871; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 872; X64-NEXT: retq 873 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 874 <16 x float> %f1, <16 x float> %f2, metadata !"ord", 875 metadata !"fpexcept.strict") #0 876 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 877 ret <16 x i32> %res 878} 879 880define <16 x i32> @test_v16f32_ueq_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 881; X86-LABEL: test_v16f32_ueq_s: 882; X86: # %bb.0: 883; X86-NEXT: pushl %ebp 884; X86-NEXT: movl %esp, %ebp 885; X86-NEXT: andl $-64, %esp 886; X86-NEXT: subl $64, %esp 887; X86-NEXT: vcmpeq_usps 8(%ebp), %zmm2, %k1 888; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 889; X86-NEXT: movl %ebp, %esp 890; X86-NEXT: popl %ebp 891; X86-NEXT: retl 892; 893; X64-LABEL: test_v16f32_ueq_s: 894; X64: # %bb.0: 895; X64-NEXT: vcmpeq_usps %zmm3, %zmm2, %k1 896; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 897; X64-NEXT: retq 898 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 899 <16 x float> %f1, <16 x float> %f2, metadata !"ueq", 900 metadata !"fpexcept.strict") #0 901 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 902 ret <16 x i32> %res 903} 904 905define <16 x i32> @test_v16f32_ugt_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 906; X86-LABEL: test_v16f32_ugt_s: 907; X86: # %bb.0: 908; X86-NEXT: pushl %ebp 909; X86-NEXT: movl %esp, %ebp 910; X86-NEXT: andl $-64, %esp 911; X86-NEXT: subl $64, %esp 912; X86-NEXT: vcmpnleps 8(%ebp), %zmm2, %k1 913; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 914; X86-NEXT: movl %ebp, %esp 915; X86-NEXT: popl %ebp 916; X86-NEXT: retl 917; 918; X64-LABEL: test_v16f32_ugt_s: 919; X64: # %bb.0: 920; X64-NEXT: vcmpnleps %zmm3, %zmm2, %k1 921; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 922; X64-NEXT: retq 923 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 924 <16 x float> %f1, <16 x float> %f2, metadata !"ugt", 925 metadata !"fpexcept.strict") #0 926 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 927 ret <16 x i32> %res 928} 929 930define <16 x i32> @test_v16f32_uge_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 931; X86-LABEL: test_v16f32_uge_s: 932; X86: # %bb.0: 933; X86-NEXT: pushl %ebp 934; X86-NEXT: movl %esp, %ebp 935; X86-NEXT: andl $-64, %esp 936; X86-NEXT: subl $64, %esp 937; X86-NEXT: vcmpnltps 8(%ebp), %zmm2, %k1 938; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 939; X86-NEXT: movl %ebp, %esp 940; X86-NEXT: popl %ebp 941; X86-NEXT: retl 942; 943; X64-LABEL: test_v16f32_uge_s: 944; X64: # %bb.0: 945; X64-NEXT: vcmpnltps %zmm3, %zmm2, %k1 946; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 947; X64-NEXT: retq 948 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 949 <16 x float> %f1, <16 x float> %f2, metadata !"uge", 950 metadata !"fpexcept.strict") #0 951 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 952 ret <16 x i32> %res 953} 954 955define <16 x i32> @test_v16f32_ult_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 956; X86-LABEL: test_v16f32_ult_s: 957; X86: # %bb.0: 958; X86-NEXT: pushl %ebp 959; X86-NEXT: movl %esp, %ebp 960; X86-NEXT: andl $-64, %esp 961; X86-NEXT: subl $64, %esp 962; X86-NEXT: vcmpngeps 8(%ebp), %zmm2, %k1 963; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 964; X86-NEXT: movl %ebp, %esp 965; X86-NEXT: popl %ebp 966; X86-NEXT: retl 967; 968; X64-LABEL: test_v16f32_ult_s: 969; X64: # %bb.0: 970; X64-NEXT: vcmpnleps %zmm2, %zmm3, %k1 971; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 972; X64-NEXT: retq 973 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 974 <16 x float> %f1, <16 x float> %f2, metadata !"ult", 975 metadata !"fpexcept.strict") #0 976 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 977 ret <16 x i32> %res 978} 979 980define <16 x i32> @test_v16f32_ule_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 981; X86-LABEL: test_v16f32_ule_s: 982; X86: # %bb.0: 983; X86-NEXT: pushl %ebp 984; X86-NEXT: movl %esp, %ebp 985; X86-NEXT: andl $-64, %esp 986; X86-NEXT: subl $64, %esp 987; X86-NEXT: vcmpngtps 8(%ebp), %zmm2, %k1 988; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 989; X86-NEXT: movl %ebp, %esp 990; X86-NEXT: popl %ebp 991; X86-NEXT: retl 992; 993; X64-LABEL: test_v16f32_ule_s: 994; X64: # %bb.0: 995; X64-NEXT: vcmpnltps %zmm2, %zmm3, %k1 996; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 997; X64-NEXT: retq 998 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 999 <16 x float> %f1, <16 x float> %f2, metadata !"ule", 1000 metadata !"fpexcept.strict") #0 1001 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 1002 ret <16 x i32> %res 1003} 1004 1005define <16 x i32> @test_v16f32_une_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 1006; X86-LABEL: test_v16f32_une_s: 1007; X86: # %bb.0: 1008; X86-NEXT: pushl %ebp 1009; X86-NEXT: movl %esp, %ebp 1010; X86-NEXT: andl $-64, %esp 1011; X86-NEXT: subl $64, %esp 1012; X86-NEXT: vcmpneq_usps 8(%ebp), %zmm2, %k1 1013; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 1014; X86-NEXT: movl %ebp, %esp 1015; X86-NEXT: popl %ebp 1016; X86-NEXT: retl 1017; 1018; X64-LABEL: test_v16f32_une_s: 1019; X64: # %bb.0: 1020; X64-NEXT: vcmpneq_usps %zmm3, %zmm2, %k1 1021; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 1022; X64-NEXT: retq 1023 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 1024 <16 x float> %f1, <16 x float> %f2, metadata !"une", 1025 metadata !"fpexcept.strict") #0 1026 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 1027 ret <16 x i32> %res 1028} 1029 1030define <16 x i32> @test_v16f32_uno_s(<16 x i32> %a, <16 x i32> %b, <16 x float> %f1, <16 x float> %f2) #0 { 1031; X86-LABEL: test_v16f32_uno_s: 1032; X86: # %bb.0: 1033; X86-NEXT: pushl %ebp 1034; X86-NEXT: movl %esp, %ebp 1035; X86-NEXT: andl $-64, %esp 1036; X86-NEXT: subl $64, %esp 1037; X86-NEXT: vcmpunord_sps 8(%ebp), %zmm2, %k1 1038; X86-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 1039; X86-NEXT: movl %ebp, %esp 1040; X86-NEXT: popl %ebp 1041; X86-NEXT: retl 1042; 1043; X64-LABEL: test_v16f32_uno_s: 1044; X64: # %bb.0: 1045; X64-NEXT: vcmpunord_sps %zmm3, %zmm2, %k1 1046; X64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 1047; X64-NEXT: retq 1048 %cond = call <16 x i1> @llvm.experimental.constrained.fcmps.v16f32( 1049 <16 x float> %f1, <16 x float> %f2, metadata !"uno", 1050 metadata !"fpexcept.strict") #0 1051 %res = select <16 x i1> %cond, <16 x i32> %a, <16 x i32> %b 1052 ret <16 x i32> %res 1053} 1054 1055define <8 x i64> @test_v8f64_oeq_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1056; X86-LABEL: test_v8f64_oeq_s: 1057; X86: # %bb.0: 1058; X86-NEXT: pushl %ebp 1059; X86-NEXT: movl %esp, %ebp 1060; X86-NEXT: andl $-64, %esp 1061; X86-NEXT: subl $64, %esp 1062; X86-NEXT: vcmpeq_ospd 8(%ebp), %zmm2, %k1 1063; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1064; X86-NEXT: movl %ebp, %esp 1065; X86-NEXT: popl %ebp 1066; X86-NEXT: retl 1067; 1068; X64-LABEL: test_v8f64_oeq_s: 1069; X64: # %bb.0: 1070; X64-NEXT: vcmpeq_ospd %zmm3, %zmm2, %k1 1071; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1072; X64-NEXT: retq 1073 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1074 <8 x double> %f1, <8 x double> %f2, metadata !"oeq", 1075 metadata !"fpexcept.strict") #0 1076 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1077 ret <8 x i64> %res 1078} 1079 1080define <8 x i64> @test_v8f64_ogt_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1081; X86-LABEL: test_v8f64_ogt_s: 1082; X86: # %bb.0: 1083; X86-NEXT: pushl %ebp 1084; X86-NEXT: movl %esp, %ebp 1085; X86-NEXT: andl $-64, %esp 1086; X86-NEXT: subl $64, %esp 1087; X86-NEXT: vcmpgtpd 8(%ebp), %zmm2, %k1 1088; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1089; X86-NEXT: movl %ebp, %esp 1090; X86-NEXT: popl %ebp 1091; X86-NEXT: retl 1092; 1093; X64-LABEL: test_v8f64_ogt_s: 1094; X64: # %bb.0: 1095; X64-NEXT: vcmpltpd %zmm2, %zmm3, %k1 1096; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1097; X64-NEXT: retq 1098 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1099 <8 x double> %f1, <8 x double> %f2, metadata !"ogt", 1100 metadata !"fpexcept.strict") #0 1101 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1102 ret <8 x i64> %res 1103} 1104 1105define <8 x i64> @test_v8f64_oge_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1106; X86-LABEL: test_v8f64_oge_s: 1107; X86: # %bb.0: 1108; X86-NEXT: pushl %ebp 1109; X86-NEXT: movl %esp, %ebp 1110; X86-NEXT: andl $-64, %esp 1111; X86-NEXT: subl $64, %esp 1112; X86-NEXT: vcmpgepd 8(%ebp), %zmm2, %k1 1113; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1114; X86-NEXT: movl %ebp, %esp 1115; X86-NEXT: popl %ebp 1116; X86-NEXT: retl 1117; 1118; X64-LABEL: test_v8f64_oge_s: 1119; X64: # %bb.0: 1120; X64-NEXT: vcmplepd %zmm2, %zmm3, %k1 1121; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1122; X64-NEXT: retq 1123 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1124 <8 x double> %f1, <8 x double> %f2, metadata !"oge", 1125 metadata !"fpexcept.strict") #0 1126 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1127 ret <8 x i64> %res 1128} 1129 1130define <8 x i64> @test_v8f64_olt_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1131; X86-LABEL: test_v8f64_olt_s: 1132; X86: # %bb.0: 1133; X86-NEXT: pushl %ebp 1134; X86-NEXT: movl %esp, %ebp 1135; X86-NEXT: andl $-64, %esp 1136; X86-NEXT: subl $64, %esp 1137; X86-NEXT: vcmpltpd 8(%ebp), %zmm2, %k1 1138; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1139; X86-NEXT: movl %ebp, %esp 1140; X86-NEXT: popl %ebp 1141; X86-NEXT: retl 1142; 1143; X64-LABEL: test_v8f64_olt_s: 1144; X64: # %bb.0: 1145; X64-NEXT: vcmpltpd %zmm3, %zmm2, %k1 1146; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1147; X64-NEXT: retq 1148 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1149 <8 x double> %f1, <8 x double> %f2, metadata !"olt", 1150 metadata !"fpexcept.strict") #0 1151 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1152 ret <8 x i64> %res 1153} 1154 1155define <8 x i64> @test_v8f64_ole_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1156; X86-LABEL: test_v8f64_ole_s: 1157; X86: # %bb.0: 1158; X86-NEXT: pushl %ebp 1159; X86-NEXT: movl %esp, %ebp 1160; X86-NEXT: andl $-64, %esp 1161; X86-NEXT: subl $64, %esp 1162; X86-NEXT: vcmplepd 8(%ebp), %zmm2, %k1 1163; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1164; X86-NEXT: movl %ebp, %esp 1165; X86-NEXT: popl %ebp 1166; X86-NEXT: retl 1167; 1168; X64-LABEL: test_v8f64_ole_s: 1169; X64: # %bb.0: 1170; X64-NEXT: vcmplepd %zmm3, %zmm2, %k1 1171; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1172; X64-NEXT: retq 1173 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1174 <8 x double> %f1, <8 x double> %f2, metadata !"ole", 1175 metadata !"fpexcept.strict") #0 1176 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1177 ret <8 x i64> %res 1178} 1179 1180define <8 x i64> @test_v8f64_one_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1181; X86-LABEL: test_v8f64_one_s: 1182; X86: # %bb.0: 1183; X86-NEXT: pushl %ebp 1184; X86-NEXT: movl %esp, %ebp 1185; X86-NEXT: andl $-64, %esp 1186; X86-NEXT: subl $64, %esp 1187; X86-NEXT: vcmpneq_ospd 8(%ebp), %zmm2, %k1 1188; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1189; X86-NEXT: movl %ebp, %esp 1190; X86-NEXT: popl %ebp 1191; X86-NEXT: retl 1192; 1193; X64-LABEL: test_v8f64_one_s: 1194; X64: # %bb.0: 1195; X64-NEXT: vcmpneq_ospd %zmm3, %zmm2, %k1 1196; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1197; X64-NEXT: retq 1198 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1199 <8 x double> %f1, <8 x double> %f2, metadata !"one", 1200 metadata !"fpexcept.strict") #0 1201 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1202 ret <8 x i64> %res 1203} 1204 1205define <8 x i64> @test_v8f64_ord_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1206; X86-LABEL: test_v8f64_ord_s: 1207; X86: # %bb.0: 1208; X86-NEXT: pushl %ebp 1209; X86-NEXT: movl %esp, %ebp 1210; X86-NEXT: andl $-64, %esp 1211; X86-NEXT: subl $64, %esp 1212; X86-NEXT: vcmpord_spd 8(%ebp), %zmm2, %k1 1213; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1214; X86-NEXT: movl %ebp, %esp 1215; X86-NEXT: popl %ebp 1216; X86-NEXT: retl 1217; 1218; X64-LABEL: test_v8f64_ord_s: 1219; X64: # %bb.0: 1220; X64-NEXT: vcmpord_spd %zmm3, %zmm2, %k1 1221; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1222; X64-NEXT: retq 1223 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1224 <8 x double> %f1, <8 x double> %f2, metadata !"ord", 1225 metadata !"fpexcept.strict") #0 1226 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1227 ret <8 x i64> %res 1228} 1229 1230define <8 x i64> @test_v8f64_ueq_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1231; X86-LABEL: test_v8f64_ueq_s: 1232; X86: # %bb.0: 1233; X86-NEXT: pushl %ebp 1234; X86-NEXT: movl %esp, %ebp 1235; X86-NEXT: andl $-64, %esp 1236; X86-NEXT: subl $64, %esp 1237; X86-NEXT: vcmpeq_uspd 8(%ebp), %zmm2, %k1 1238; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1239; X86-NEXT: movl %ebp, %esp 1240; X86-NEXT: popl %ebp 1241; X86-NEXT: retl 1242; 1243; X64-LABEL: test_v8f64_ueq_s: 1244; X64: # %bb.0: 1245; X64-NEXT: vcmpeq_uspd %zmm3, %zmm2, %k1 1246; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1247; X64-NEXT: retq 1248 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1249 <8 x double> %f1, <8 x double> %f2, metadata !"ueq", 1250 metadata !"fpexcept.strict") #0 1251 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1252 ret <8 x i64> %res 1253} 1254 1255define <8 x i64> @test_v8f64_ugt_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1256; X86-LABEL: test_v8f64_ugt_s: 1257; X86: # %bb.0: 1258; X86-NEXT: pushl %ebp 1259; X86-NEXT: movl %esp, %ebp 1260; X86-NEXT: andl $-64, %esp 1261; X86-NEXT: subl $64, %esp 1262; X86-NEXT: vcmpnlepd 8(%ebp), %zmm2, %k1 1263; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1264; X86-NEXT: movl %ebp, %esp 1265; X86-NEXT: popl %ebp 1266; X86-NEXT: retl 1267; 1268; X64-LABEL: test_v8f64_ugt_s: 1269; X64: # %bb.0: 1270; X64-NEXT: vcmpnlepd %zmm3, %zmm2, %k1 1271; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1272; X64-NEXT: retq 1273 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1274 <8 x double> %f1, <8 x double> %f2, metadata !"ugt", 1275 metadata !"fpexcept.strict") #0 1276 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1277 ret <8 x i64> %res 1278} 1279 1280define <8 x i64> @test_v8f64_uge_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1281; X86-LABEL: test_v8f64_uge_s: 1282; X86: # %bb.0: 1283; X86-NEXT: pushl %ebp 1284; X86-NEXT: movl %esp, %ebp 1285; X86-NEXT: andl $-64, %esp 1286; X86-NEXT: subl $64, %esp 1287; X86-NEXT: vcmpnltpd 8(%ebp), %zmm2, %k1 1288; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1289; X86-NEXT: movl %ebp, %esp 1290; X86-NEXT: popl %ebp 1291; X86-NEXT: retl 1292; 1293; X64-LABEL: test_v8f64_uge_s: 1294; X64: # %bb.0: 1295; X64-NEXT: vcmpnltpd %zmm3, %zmm2, %k1 1296; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1297; X64-NEXT: retq 1298 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1299 <8 x double> %f1, <8 x double> %f2, metadata !"uge", 1300 metadata !"fpexcept.strict") #0 1301 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1302 ret <8 x i64> %res 1303} 1304 1305define <8 x i64> @test_v8f64_ult_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1306; X86-LABEL: test_v8f64_ult_s: 1307; X86: # %bb.0: 1308; X86-NEXT: pushl %ebp 1309; X86-NEXT: movl %esp, %ebp 1310; X86-NEXT: andl $-64, %esp 1311; X86-NEXT: subl $64, %esp 1312; X86-NEXT: vcmpngepd 8(%ebp), %zmm2, %k1 1313; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1314; X86-NEXT: movl %ebp, %esp 1315; X86-NEXT: popl %ebp 1316; X86-NEXT: retl 1317; 1318; X64-LABEL: test_v8f64_ult_s: 1319; X64: # %bb.0: 1320; X64-NEXT: vcmpnlepd %zmm2, %zmm3, %k1 1321; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1322; X64-NEXT: retq 1323 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1324 <8 x double> %f1, <8 x double> %f2, metadata !"ult", 1325 metadata !"fpexcept.strict") #0 1326 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1327 ret <8 x i64> %res 1328} 1329 1330define <8 x i64> @test_v8f64_ule_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1331; X86-LABEL: test_v8f64_ule_s: 1332; X86: # %bb.0: 1333; X86-NEXT: pushl %ebp 1334; X86-NEXT: movl %esp, %ebp 1335; X86-NEXT: andl $-64, %esp 1336; X86-NEXT: subl $64, %esp 1337; X86-NEXT: vcmpngtpd 8(%ebp), %zmm2, %k1 1338; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1339; X86-NEXT: movl %ebp, %esp 1340; X86-NEXT: popl %ebp 1341; X86-NEXT: retl 1342; 1343; X64-LABEL: test_v8f64_ule_s: 1344; X64: # %bb.0: 1345; X64-NEXT: vcmpnltpd %zmm2, %zmm3, %k1 1346; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1347; X64-NEXT: retq 1348 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1349 <8 x double> %f1, <8 x double> %f2, metadata !"ule", 1350 metadata !"fpexcept.strict") #0 1351 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1352 ret <8 x i64> %res 1353} 1354 1355define <8 x i64> @test_v8f64_une_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1356; X86-LABEL: test_v8f64_une_s: 1357; X86: # %bb.0: 1358; X86-NEXT: pushl %ebp 1359; X86-NEXT: movl %esp, %ebp 1360; X86-NEXT: andl $-64, %esp 1361; X86-NEXT: subl $64, %esp 1362; X86-NEXT: vcmpneq_uspd 8(%ebp), %zmm2, %k1 1363; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1364; X86-NEXT: movl %ebp, %esp 1365; X86-NEXT: popl %ebp 1366; X86-NEXT: retl 1367; 1368; X64-LABEL: test_v8f64_une_s: 1369; X64: # %bb.0: 1370; X64-NEXT: vcmpneq_uspd %zmm3, %zmm2, %k1 1371; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1372; X64-NEXT: retq 1373 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1374 <8 x double> %f1, <8 x double> %f2, metadata !"une", 1375 metadata !"fpexcept.strict") #0 1376 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1377 ret <8 x i64> %res 1378} 1379 1380define <8 x i64> @test_v8f64_uno_s(<8 x i64> %a, <8 x i64> %b, <8 x double> %f1, <8 x double> %f2) #0 { 1381; X86-LABEL: test_v8f64_uno_s: 1382; X86: # %bb.0: 1383; X86-NEXT: pushl %ebp 1384; X86-NEXT: movl %esp, %ebp 1385; X86-NEXT: andl $-64, %esp 1386; X86-NEXT: subl $64, %esp 1387; X86-NEXT: vcmpunord_spd 8(%ebp), %zmm2, %k1 1388; X86-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1389; X86-NEXT: movl %ebp, %esp 1390; X86-NEXT: popl %ebp 1391; X86-NEXT: retl 1392; 1393; X64-LABEL: test_v8f64_uno_s: 1394; X64: # %bb.0: 1395; X64-NEXT: vcmpunord_spd %zmm3, %zmm2, %k1 1396; X64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1397; X64-NEXT: retq 1398 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f64( 1399 <8 x double> %f1, <8 x double> %f2, metadata !"uno", 1400 metadata !"fpexcept.strict") #0 1401 %res = select <8 x i1> %cond, <8 x i64> %a, <8 x i64> %b 1402 ret <8 x i64> %res 1403} 1404 1405attributes #0 = { strictfp nounwind } 1406 1407declare <16 x i1> @llvm.experimental.constrained.fcmp.v16f32(<16 x float>, <16 x float>, metadata, metadata) 1408declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f64(<8 x double>, <8 x double>, metadata, metadata) 1409declare <16 x i1> @llvm.experimental.constrained.fcmps.v16f32(<16 x float>, <16 x float>, metadata, metadata) 1410declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f64(<8 x double>, <8 x double>, metadata, metadata) 1411