1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefix=AVX-32 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefix=AVX-64 4; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefix=AVX512-32 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -mattr=+avx512vl -O3 | FileCheck %s --check-prefix=AVX512-64 6; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefix=AVX512F-32 7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -O3 | FileCheck %s --check-prefix=AVX512F-64 8 9define <8 x i32> @test_v8f32_oeq_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 10; AVX-32-LABEL: test_v8f32_oeq_q: 11; AVX-32: # %bb.0: 12; AVX-32-NEXT: pushl %ebp 13; AVX-32-NEXT: movl %esp, %ebp 14; AVX-32-NEXT: andl $-32, %esp 15; AVX-32-NEXT: subl $32, %esp 16; AVX-32-NEXT: vcmpeqps 8(%ebp), %ymm2, %ymm2 17; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 18; AVX-32-NEXT: movl %ebp, %esp 19; AVX-32-NEXT: popl %ebp 20; AVX-32-NEXT: retl 21; 22; AVX-64-LABEL: test_v8f32_oeq_q: 23; AVX-64: # %bb.0: 24; AVX-64-NEXT: vcmpeqps %ymm3, %ymm2, %ymm2 25; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 26; AVX-64-NEXT: retq 27; 28; AVX512-32-LABEL: test_v8f32_oeq_q: 29; AVX512-32: # %bb.0: 30; AVX512-32-NEXT: pushl %ebp 31; AVX512-32-NEXT: movl %esp, %ebp 32; AVX512-32-NEXT: andl $-32, %esp 33; AVX512-32-NEXT: subl $32, %esp 34; AVX512-32-NEXT: vcmpeqps 8(%ebp), %ymm2, %k1 35; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 36; AVX512-32-NEXT: movl %ebp, %esp 37; AVX512-32-NEXT: popl %ebp 38; AVX512-32-NEXT: retl 39; 40; AVX512-64-LABEL: test_v8f32_oeq_q: 41; AVX512-64: # %bb.0: 42; AVX512-64-NEXT: vcmpeqps %ymm3, %ymm2, %k1 43; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 44; AVX512-64-NEXT: retq 45; 46; AVX512F-32-LABEL: test_v8f32_oeq_q: 47; AVX512F-32: # %bb.0: 48; AVX512F-32-NEXT: pushl %ebp 49; AVX512F-32-NEXT: movl %esp, %ebp 50; AVX512F-32-NEXT: andl $-32, %esp 51; AVX512F-32-NEXT: subl $32, %esp 52; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 53; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 54; AVX512F-32-NEXT: vcmpeqps 8(%ebp), %ymm2, %ymm2 55; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 56; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 57; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 58; AVX512F-32-NEXT: movl %ebp, %esp 59; AVX512F-32-NEXT: popl %ebp 60; AVX512F-32-NEXT: retl 61; 62; AVX512F-64-LABEL: test_v8f32_oeq_q: 63; AVX512F-64: # %bb.0: 64; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 65; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 66; AVX512F-64-NEXT: vcmpeqps %ymm3, %ymm2, %ymm2 67; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 68; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 69; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 70; AVX512F-64-NEXT: retq 71 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 72 <8 x float> %f1, <8 x float> %f2, metadata !"oeq", 73 metadata !"fpexcept.strict") #0 74 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 75 ret <8 x i32> %res 76} 77 78define <8 x i32> @test_v8f32_ogt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 79; AVX-32-LABEL: test_v8f32_ogt_q: 80; AVX-32: # %bb.0: 81; AVX-32-NEXT: pushl %ebp 82; AVX-32-NEXT: movl %esp, %ebp 83; AVX-32-NEXT: andl $-32, %esp 84; AVX-32-NEXT: subl $32, %esp 85; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3 86; AVX-32-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2 87; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 88; AVX-32-NEXT: movl %ebp, %esp 89; AVX-32-NEXT: popl %ebp 90; AVX-32-NEXT: retl 91; 92; AVX-64-LABEL: test_v8f32_ogt_q: 93; AVX-64: # %bb.0: 94; AVX-64-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2 95; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 96; AVX-64-NEXT: retq 97; 98; AVX512-32-LABEL: test_v8f32_ogt_q: 99; AVX512-32: # %bb.0: 100; AVX512-32-NEXT: pushl %ebp 101; AVX512-32-NEXT: movl %esp, %ebp 102; AVX512-32-NEXT: andl $-32, %esp 103; AVX512-32-NEXT: subl $32, %esp 104; AVX512-32-NEXT: vcmpgt_oqps 8(%ebp), %ymm2, %k1 105; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 106; AVX512-32-NEXT: movl %ebp, %esp 107; AVX512-32-NEXT: popl %ebp 108; AVX512-32-NEXT: retl 109; 110; AVX512-64-LABEL: test_v8f32_ogt_q: 111; AVX512-64: # %bb.0: 112; AVX512-64-NEXT: vcmplt_oqps %ymm2, %ymm3, %k1 113; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 114; AVX512-64-NEXT: retq 115; 116; AVX512F-32-LABEL: test_v8f32_ogt_q: 117; AVX512F-32: # %bb.0: 118; AVX512F-32-NEXT: pushl %ebp 119; AVX512F-32-NEXT: movl %esp, %ebp 120; AVX512F-32-NEXT: andl $-32, %esp 121; AVX512F-32-NEXT: subl $32, %esp 122; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 123; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 124; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 125; AVX512F-32-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2 126; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 127; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 128; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 129; AVX512F-32-NEXT: movl %ebp, %esp 130; AVX512F-32-NEXT: popl %ebp 131; AVX512F-32-NEXT: retl 132; 133; AVX512F-64-LABEL: test_v8f32_ogt_q: 134; AVX512F-64: # %bb.0: 135; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 136; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 137; AVX512F-64-NEXT: vcmplt_oqps %ymm2, %ymm3, %ymm2 138; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 139; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 140; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 141; AVX512F-64-NEXT: retq 142 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 143 <8 x float> %f1, <8 x float> %f2, metadata !"ogt", 144 metadata !"fpexcept.strict") #0 145 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 146 ret <8 x i32> %res 147} 148 149define <8 x i32> @test_v8f32_oge_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 150; AVX-32-LABEL: test_v8f32_oge_q: 151; AVX-32: # %bb.0: 152; AVX-32-NEXT: pushl %ebp 153; AVX-32-NEXT: movl %esp, %ebp 154; AVX-32-NEXT: andl $-32, %esp 155; AVX-32-NEXT: subl $32, %esp 156; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3 157; AVX-32-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2 158; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 159; AVX-32-NEXT: movl %ebp, %esp 160; AVX-32-NEXT: popl %ebp 161; AVX-32-NEXT: retl 162; 163; AVX-64-LABEL: test_v8f32_oge_q: 164; AVX-64: # %bb.0: 165; AVX-64-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2 166; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 167; AVX-64-NEXT: retq 168; 169; AVX512-32-LABEL: test_v8f32_oge_q: 170; AVX512-32: # %bb.0: 171; AVX512-32-NEXT: pushl %ebp 172; AVX512-32-NEXT: movl %esp, %ebp 173; AVX512-32-NEXT: andl $-32, %esp 174; AVX512-32-NEXT: subl $32, %esp 175; AVX512-32-NEXT: vcmpge_oqps 8(%ebp), %ymm2, %k1 176; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 177; AVX512-32-NEXT: movl %ebp, %esp 178; AVX512-32-NEXT: popl %ebp 179; AVX512-32-NEXT: retl 180; 181; AVX512-64-LABEL: test_v8f32_oge_q: 182; AVX512-64: # %bb.0: 183; AVX512-64-NEXT: vcmple_oqps %ymm2, %ymm3, %k1 184; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 185; AVX512-64-NEXT: retq 186; 187; AVX512F-32-LABEL: test_v8f32_oge_q: 188; AVX512F-32: # %bb.0: 189; AVX512F-32-NEXT: pushl %ebp 190; AVX512F-32-NEXT: movl %esp, %ebp 191; AVX512F-32-NEXT: andl $-32, %esp 192; AVX512F-32-NEXT: subl $32, %esp 193; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 194; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 195; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 196; AVX512F-32-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2 197; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 198; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 199; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 200; AVX512F-32-NEXT: movl %ebp, %esp 201; AVX512F-32-NEXT: popl %ebp 202; AVX512F-32-NEXT: retl 203; 204; AVX512F-64-LABEL: test_v8f32_oge_q: 205; AVX512F-64: # %bb.0: 206; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 207; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 208; AVX512F-64-NEXT: vcmple_oqps %ymm2, %ymm3, %ymm2 209; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 210; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 211; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 212; AVX512F-64-NEXT: retq 213 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 214 <8 x float> %f1, <8 x float> %f2, metadata !"oge", 215 metadata !"fpexcept.strict") #0 216 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 217 ret <8 x i32> %res 218} 219 220define <8 x i32> @test_v8f32_olt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 221; AVX-32-LABEL: test_v8f32_olt_q: 222; AVX-32: # %bb.0: 223; AVX-32-NEXT: pushl %ebp 224; AVX-32-NEXT: movl %esp, %ebp 225; AVX-32-NEXT: andl $-32, %esp 226; AVX-32-NEXT: subl $32, %esp 227; AVX-32-NEXT: vcmplt_oqps 8(%ebp), %ymm2, %ymm2 228; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 229; AVX-32-NEXT: movl %ebp, %esp 230; AVX-32-NEXT: popl %ebp 231; AVX-32-NEXT: retl 232; 233; AVX-64-LABEL: test_v8f32_olt_q: 234; AVX-64: # %bb.0: 235; AVX-64-NEXT: vcmplt_oqps %ymm3, %ymm2, %ymm2 236; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 237; AVX-64-NEXT: retq 238; 239; AVX512-32-LABEL: test_v8f32_olt_q: 240; AVX512-32: # %bb.0: 241; AVX512-32-NEXT: pushl %ebp 242; AVX512-32-NEXT: movl %esp, %ebp 243; AVX512-32-NEXT: andl $-32, %esp 244; AVX512-32-NEXT: subl $32, %esp 245; AVX512-32-NEXT: vcmplt_oqps 8(%ebp), %ymm2, %k1 246; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 247; AVX512-32-NEXT: movl %ebp, %esp 248; AVX512-32-NEXT: popl %ebp 249; AVX512-32-NEXT: retl 250; 251; AVX512-64-LABEL: test_v8f32_olt_q: 252; AVX512-64: # %bb.0: 253; AVX512-64-NEXT: vcmplt_oqps %ymm3, %ymm2, %k1 254; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 255; AVX512-64-NEXT: retq 256; 257; AVX512F-32-LABEL: test_v8f32_olt_q: 258; AVX512F-32: # %bb.0: 259; AVX512F-32-NEXT: pushl %ebp 260; AVX512F-32-NEXT: movl %esp, %ebp 261; AVX512F-32-NEXT: andl $-32, %esp 262; AVX512F-32-NEXT: subl $32, %esp 263; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 264; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 265; AVX512F-32-NEXT: vcmplt_oqps 8(%ebp), %ymm2, %ymm2 266; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 267; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 268; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 269; AVX512F-32-NEXT: movl %ebp, %esp 270; AVX512F-32-NEXT: popl %ebp 271; AVX512F-32-NEXT: retl 272; 273; AVX512F-64-LABEL: test_v8f32_olt_q: 274; AVX512F-64: # %bb.0: 275; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 276; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 277; AVX512F-64-NEXT: vcmplt_oqps %ymm3, %ymm2, %ymm2 278; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 279; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 280; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 281; AVX512F-64-NEXT: retq 282 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 283 <8 x float> %f1, <8 x float> %f2, metadata !"olt", 284 metadata !"fpexcept.strict") #0 285 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 286 ret <8 x i32> %res 287} 288 289define <8 x i32> @test_v8f32_ole_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 290; AVX-32-LABEL: test_v8f32_ole_q: 291; AVX-32: # %bb.0: 292; AVX-32-NEXT: pushl %ebp 293; AVX-32-NEXT: movl %esp, %ebp 294; AVX-32-NEXT: andl $-32, %esp 295; AVX-32-NEXT: subl $32, %esp 296; AVX-32-NEXT: vcmple_oqps 8(%ebp), %ymm2, %ymm2 297; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 298; AVX-32-NEXT: movl %ebp, %esp 299; AVX-32-NEXT: popl %ebp 300; AVX-32-NEXT: retl 301; 302; AVX-64-LABEL: test_v8f32_ole_q: 303; AVX-64: # %bb.0: 304; AVX-64-NEXT: vcmple_oqps %ymm3, %ymm2, %ymm2 305; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 306; AVX-64-NEXT: retq 307; 308; AVX512-32-LABEL: test_v8f32_ole_q: 309; AVX512-32: # %bb.0: 310; AVX512-32-NEXT: pushl %ebp 311; AVX512-32-NEXT: movl %esp, %ebp 312; AVX512-32-NEXT: andl $-32, %esp 313; AVX512-32-NEXT: subl $32, %esp 314; AVX512-32-NEXT: vcmple_oqps 8(%ebp), %ymm2, %k1 315; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 316; AVX512-32-NEXT: movl %ebp, %esp 317; AVX512-32-NEXT: popl %ebp 318; AVX512-32-NEXT: retl 319; 320; AVX512-64-LABEL: test_v8f32_ole_q: 321; AVX512-64: # %bb.0: 322; AVX512-64-NEXT: vcmple_oqps %ymm3, %ymm2, %k1 323; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 324; AVX512-64-NEXT: retq 325; 326; AVX512F-32-LABEL: test_v8f32_ole_q: 327; AVX512F-32: # %bb.0: 328; AVX512F-32-NEXT: pushl %ebp 329; AVX512F-32-NEXT: movl %esp, %ebp 330; AVX512F-32-NEXT: andl $-32, %esp 331; AVX512F-32-NEXT: subl $32, %esp 332; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 333; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 334; AVX512F-32-NEXT: vcmple_oqps 8(%ebp), %ymm2, %ymm2 335; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 336; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 337; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 338; AVX512F-32-NEXT: movl %ebp, %esp 339; AVX512F-32-NEXT: popl %ebp 340; AVX512F-32-NEXT: retl 341; 342; AVX512F-64-LABEL: test_v8f32_ole_q: 343; AVX512F-64: # %bb.0: 344; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 345; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 346; AVX512F-64-NEXT: vcmple_oqps %ymm3, %ymm2, %ymm2 347; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 348; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 349; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 350; AVX512F-64-NEXT: retq 351 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 352 <8 x float> %f1, <8 x float> %f2, metadata !"ole", 353 metadata !"fpexcept.strict") #0 354 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 355 ret <8 x i32> %res 356} 357 358define <8 x i32> @test_v8f32_one_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 359; AVX-32-LABEL: test_v8f32_one_q: 360; AVX-32: # %bb.0: 361; AVX-32-NEXT: pushl %ebp 362; AVX-32-NEXT: movl %esp, %ebp 363; AVX-32-NEXT: andl $-32, %esp 364; AVX-32-NEXT: subl $32, %esp 365; AVX-32-NEXT: vcmpneq_oqps 8(%ebp), %ymm2, %ymm2 366; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 367; AVX-32-NEXT: movl %ebp, %esp 368; AVX-32-NEXT: popl %ebp 369; AVX-32-NEXT: retl 370; 371; AVX-64-LABEL: test_v8f32_one_q: 372; AVX-64: # %bb.0: 373; AVX-64-NEXT: vcmpneq_oqps %ymm3, %ymm2, %ymm2 374; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 375; AVX-64-NEXT: retq 376; 377; AVX512-32-LABEL: test_v8f32_one_q: 378; AVX512-32: # %bb.0: 379; AVX512-32-NEXT: pushl %ebp 380; AVX512-32-NEXT: movl %esp, %ebp 381; AVX512-32-NEXT: andl $-32, %esp 382; AVX512-32-NEXT: subl $32, %esp 383; AVX512-32-NEXT: vcmpneq_oqps 8(%ebp), %ymm2, %k1 384; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 385; AVX512-32-NEXT: movl %ebp, %esp 386; AVX512-32-NEXT: popl %ebp 387; AVX512-32-NEXT: retl 388; 389; AVX512-64-LABEL: test_v8f32_one_q: 390; AVX512-64: # %bb.0: 391; AVX512-64-NEXT: vcmpneq_oqps %ymm3, %ymm2, %k1 392; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 393; AVX512-64-NEXT: retq 394; 395; AVX512F-32-LABEL: test_v8f32_one_q: 396; AVX512F-32: # %bb.0: 397; AVX512F-32-NEXT: pushl %ebp 398; AVX512F-32-NEXT: movl %esp, %ebp 399; AVX512F-32-NEXT: andl $-32, %esp 400; AVX512F-32-NEXT: subl $32, %esp 401; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 402; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 403; AVX512F-32-NEXT: vcmpneq_oqps 8(%ebp), %ymm2, %ymm2 404; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 405; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 406; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 407; AVX512F-32-NEXT: movl %ebp, %esp 408; AVX512F-32-NEXT: popl %ebp 409; AVX512F-32-NEXT: retl 410; 411; AVX512F-64-LABEL: test_v8f32_one_q: 412; AVX512F-64: # %bb.0: 413; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 414; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 415; AVX512F-64-NEXT: vcmpneq_oqps %ymm3, %ymm2, %ymm2 416; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 417; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 418; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 419; AVX512F-64-NEXT: retq 420 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 421 <8 x float> %f1, <8 x float> %f2, metadata !"one", 422 metadata !"fpexcept.strict") #0 423 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 424 ret <8 x i32> %res 425} 426 427define <8 x i32> @test_v8f32_ord_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 428; AVX-32-LABEL: test_v8f32_ord_q: 429; AVX-32: # %bb.0: 430; AVX-32-NEXT: pushl %ebp 431; AVX-32-NEXT: movl %esp, %ebp 432; AVX-32-NEXT: andl $-32, %esp 433; AVX-32-NEXT: subl $32, %esp 434; AVX-32-NEXT: vcmpordps 8(%ebp), %ymm2, %ymm2 435; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 436; AVX-32-NEXT: movl %ebp, %esp 437; AVX-32-NEXT: popl %ebp 438; AVX-32-NEXT: retl 439; 440; AVX-64-LABEL: test_v8f32_ord_q: 441; AVX-64: # %bb.0: 442; AVX-64-NEXT: vcmpordps %ymm3, %ymm2, %ymm2 443; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 444; AVX-64-NEXT: retq 445; 446; AVX512-32-LABEL: test_v8f32_ord_q: 447; AVX512-32: # %bb.0: 448; AVX512-32-NEXT: pushl %ebp 449; AVX512-32-NEXT: movl %esp, %ebp 450; AVX512-32-NEXT: andl $-32, %esp 451; AVX512-32-NEXT: subl $32, %esp 452; AVX512-32-NEXT: vcmpordps 8(%ebp), %ymm2, %k1 453; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 454; AVX512-32-NEXT: movl %ebp, %esp 455; AVX512-32-NEXT: popl %ebp 456; AVX512-32-NEXT: retl 457; 458; AVX512-64-LABEL: test_v8f32_ord_q: 459; AVX512-64: # %bb.0: 460; AVX512-64-NEXT: vcmpordps %ymm3, %ymm2, %k1 461; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 462; AVX512-64-NEXT: retq 463; 464; AVX512F-32-LABEL: test_v8f32_ord_q: 465; AVX512F-32: # %bb.0: 466; AVX512F-32-NEXT: pushl %ebp 467; AVX512F-32-NEXT: movl %esp, %ebp 468; AVX512F-32-NEXT: andl $-32, %esp 469; AVX512F-32-NEXT: subl $32, %esp 470; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 471; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 472; AVX512F-32-NEXT: vcmpordps 8(%ebp), %ymm2, %ymm2 473; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 474; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 475; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 476; AVX512F-32-NEXT: movl %ebp, %esp 477; AVX512F-32-NEXT: popl %ebp 478; AVX512F-32-NEXT: retl 479; 480; AVX512F-64-LABEL: test_v8f32_ord_q: 481; AVX512F-64: # %bb.0: 482; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 483; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 484; AVX512F-64-NEXT: vcmpordps %ymm3, %ymm2, %ymm2 485; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 486; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 487; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 488; AVX512F-64-NEXT: retq 489 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 490 <8 x float> %f1, <8 x float> %f2, metadata !"ord", 491 metadata !"fpexcept.strict") #0 492 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 493 ret <8 x i32> %res 494} 495 496define <8 x i32> @test_v8f32_ueq_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 497; AVX-32-LABEL: test_v8f32_ueq_q: 498; AVX-32: # %bb.0: 499; AVX-32-NEXT: pushl %ebp 500; AVX-32-NEXT: movl %esp, %ebp 501; AVX-32-NEXT: andl $-32, %esp 502; AVX-32-NEXT: subl $32, %esp 503; AVX-32-NEXT: vcmpeq_uqps 8(%ebp), %ymm2, %ymm2 504; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 505; AVX-32-NEXT: movl %ebp, %esp 506; AVX-32-NEXT: popl %ebp 507; AVX-32-NEXT: retl 508; 509; AVX-64-LABEL: test_v8f32_ueq_q: 510; AVX-64: # %bb.0: 511; AVX-64-NEXT: vcmpeq_uqps %ymm3, %ymm2, %ymm2 512; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 513; AVX-64-NEXT: retq 514; 515; AVX512-32-LABEL: test_v8f32_ueq_q: 516; AVX512-32: # %bb.0: 517; AVX512-32-NEXT: pushl %ebp 518; AVX512-32-NEXT: movl %esp, %ebp 519; AVX512-32-NEXT: andl $-32, %esp 520; AVX512-32-NEXT: subl $32, %esp 521; AVX512-32-NEXT: vcmpeq_uqps 8(%ebp), %ymm2, %k1 522; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 523; AVX512-32-NEXT: movl %ebp, %esp 524; AVX512-32-NEXT: popl %ebp 525; AVX512-32-NEXT: retl 526; 527; AVX512-64-LABEL: test_v8f32_ueq_q: 528; AVX512-64: # %bb.0: 529; AVX512-64-NEXT: vcmpeq_uqps %ymm3, %ymm2, %k1 530; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 531; AVX512-64-NEXT: retq 532; 533; AVX512F-32-LABEL: test_v8f32_ueq_q: 534; AVX512F-32: # %bb.0: 535; AVX512F-32-NEXT: pushl %ebp 536; AVX512F-32-NEXT: movl %esp, %ebp 537; AVX512F-32-NEXT: andl $-32, %esp 538; AVX512F-32-NEXT: subl $32, %esp 539; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 540; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 541; AVX512F-32-NEXT: vcmpeq_uqps 8(%ebp), %ymm2, %ymm2 542; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 543; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 544; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 545; AVX512F-32-NEXT: movl %ebp, %esp 546; AVX512F-32-NEXT: popl %ebp 547; AVX512F-32-NEXT: retl 548; 549; AVX512F-64-LABEL: test_v8f32_ueq_q: 550; AVX512F-64: # %bb.0: 551; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 552; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 553; AVX512F-64-NEXT: vcmpeq_uqps %ymm3, %ymm2, %ymm2 554; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 555; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 556; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 557; AVX512F-64-NEXT: retq 558 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 559 <8 x float> %f1, <8 x float> %f2, metadata !"ueq", 560 metadata !"fpexcept.strict") #0 561 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 562 ret <8 x i32> %res 563} 564 565define <8 x i32> @test_v8f32_ugt_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 566; AVX-32-LABEL: test_v8f32_ugt_q: 567; AVX-32: # %bb.0: 568; AVX-32-NEXT: pushl %ebp 569; AVX-32-NEXT: movl %esp, %ebp 570; AVX-32-NEXT: andl $-32, %esp 571; AVX-32-NEXT: subl $32, %esp 572; AVX-32-NEXT: vcmpnle_uqps 8(%ebp), %ymm2, %ymm2 573; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 574; AVX-32-NEXT: movl %ebp, %esp 575; AVX-32-NEXT: popl %ebp 576; AVX-32-NEXT: retl 577; 578; AVX-64-LABEL: test_v8f32_ugt_q: 579; AVX-64: # %bb.0: 580; AVX-64-NEXT: vcmpnle_uqps %ymm3, %ymm2, %ymm2 581; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 582; AVX-64-NEXT: retq 583; 584; AVX512-32-LABEL: test_v8f32_ugt_q: 585; AVX512-32: # %bb.0: 586; AVX512-32-NEXT: pushl %ebp 587; AVX512-32-NEXT: movl %esp, %ebp 588; AVX512-32-NEXT: andl $-32, %esp 589; AVX512-32-NEXT: subl $32, %esp 590; AVX512-32-NEXT: vcmpnle_uqps 8(%ebp), %ymm2, %k1 591; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 592; AVX512-32-NEXT: movl %ebp, %esp 593; AVX512-32-NEXT: popl %ebp 594; AVX512-32-NEXT: retl 595; 596; AVX512-64-LABEL: test_v8f32_ugt_q: 597; AVX512-64: # %bb.0: 598; AVX512-64-NEXT: vcmpnle_uqps %ymm3, %ymm2, %k1 599; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 600; AVX512-64-NEXT: retq 601; 602; AVX512F-32-LABEL: test_v8f32_ugt_q: 603; AVX512F-32: # %bb.0: 604; AVX512F-32-NEXT: pushl %ebp 605; AVX512F-32-NEXT: movl %esp, %ebp 606; AVX512F-32-NEXT: andl $-32, %esp 607; AVX512F-32-NEXT: subl $32, %esp 608; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 609; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 610; AVX512F-32-NEXT: vcmpnle_uqps 8(%ebp), %ymm2, %ymm2 611; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 612; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 613; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 614; AVX512F-32-NEXT: movl %ebp, %esp 615; AVX512F-32-NEXT: popl %ebp 616; AVX512F-32-NEXT: retl 617; 618; AVX512F-64-LABEL: test_v8f32_ugt_q: 619; AVX512F-64: # %bb.0: 620; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 621; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 622; AVX512F-64-NEXT: vcmpnle_uqps %ymm3, %ymm2, %ymm2 623; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 624; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 625; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 626; AVX512F-64-NEXT: retq 627 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 628 <8 x float> %f1, <8 x float> %f2, metadata !"ugt", 629 metadata !"fpexcept.strict") #0 630 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 631 ret <8 x i32> %res 632} 633 634define <8 x i32> @test_v8f32_uge_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 635; AVX-32-LABEL: test_v8f32_uge_q: 636; AVX-32: # %bb.0: 637; AVX-32-NEXT: pushl %ebp 638; AVX-32-NEXT: movl %esp, %ebp 639; AVX-32-NEXT: andl $-32, %esp 640; AVX-32-NEXT: subl $32, %esp 641; AVX-32-NEXT: vcmpnlt_uqps 8(%ebp), %ymm2, %ymm2 642; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 643; AVX-32-NEXT: movl %ebp, %esp 644; AVX-32-NEXT: popl %ebp 645; AVX-32-NEXT: retl 646; 647; AVX-64-LABEL: test_v8f32_uge_q: 648; AVX-64: # %bb.0: 649; AVX-64-NEXT: vcmpnlt_uqps %ymm3, %ymm2, %ymm2 650; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 651; AVX-64-NEXT: retq 652; 653; AVX512-32-LABEL: test_v8f32_uge_q: 654; AVX512-32: # %bb.0: 655; AVX512-32-NEXT: pushl %ebp 656; AVX512-32-NEXT: movl %esp, %ebp 657; AVX512-32-NEXT: andl $-32, %esp 658; AVX512-32-NEXT: subl $32, %esp 659; AVX512-32-NEXT: vcmpnlt_uqps 8(%ebp), %ymm2, %k1 660; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 661; AVX512-32-NEXT: movl %ebp, %esp 662; AVX512-32-NEXT: popl %ebp 663; AVX512-32-NEXT: retl 664; 665; AVX512-64-LABEL: test_v8f32_uge_q: 666; AVX512-64: # %bb.0: 667; AVX512-64-NEXT: vcmpnlt_uqps %ymm3, %ymm2, %k1 668; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 669; AVX512-64-NEXT: retq 670; 671; AVX512F-32-LABEL: test_v8f32_uge_q: 672; AVX512F-32: # %bb.0: 673; AVX512F-32-NEXT: pushl %ebp 674; AVX512F-32-NEXT: movl %esp, %ebp 675; AVX512F-32-NEXT: andl $-32, %esp 676; AVX512F-32-NEXT: subl $32, %esp 677; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 678; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 679; AVX512F-32-NEXT: vcmpnlt_uqps 8(%ebp), %ymm2, %ymm2 680; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 681; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 682; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 683; AVX512F-32-NEXT: movl %ebp, %esp 684; AVX512F-32-NEXT: popl %ebp 685; AVX512F-32-NEXT: retl 686; 687; AVX512F-64-LABEL: test_v8f32_uge_q: 688; AVX512F-64: # %bb.0: 689; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 690; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 691; AVX512F-64-NEXT: vcmpnlt_uqps %ymm3, %ymm2, %ymm2 692; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 693; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 694; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 695; AVX512F-64-NEXT: retq 696 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 697 <8 x float> %f1, <8 x float> %f2, metadata !"uge", 698 metadata !"fpexcept.strict") #0 699 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 700 ret <8 x i32> %res 701} 702 703define <8 x i32> @test_v8f32_ult_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 704; AVX-32-LABEL: test_v8f32_ult_q: 705; AVX-32: # %bb.0: 706; AVX-32-NEXT: pushl %ebp 707; AVX-32-NEXT: movl %esp, %ebp 708; AVX-32-NEXT: andl $-32, %esp 709; AVX-32-NEXT: subl $32, %esp 710; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3 711; AVX-32-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2 712; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 713; AVX-32-NEXT: movl %ebp, %esp 714; AVX-32-NEXT: popl %ebp 715; AVX-32-NEXT: retl 716; 717; AVX-64-LABEL: test_v8f32_ult_q: 718; AVX-64: # %bb.0: 719; AVX-64-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2 720; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 721; AVX-64-NEXT: retq 722; 723; AVX512-32-LABEL: test_v8f32_ult_q: 724; AVX512-32: # %bb.0: 725; AVX512-32-NEXT: pushl %ebp 726; AVX512-32-NEXT: movl %esp, %ebp 727; AVX512-32-NEXT: andl $-32, %esp 728; AVX512-32-NEXT: subl $32, %esp 729; AVX512-32-NEXT: vcmpnge_uqps 8(%ebp), %ymm2, %k1 730; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 731; AVX512-32-NEXT: movl %ebp, %esp 732; AVX512-32-NEXT: popl %ebp 733; AVX512-32-NEXT: retl 734; 735; AVX512-64-LABEL: test_v8f32_ult_q: 736; AVX512-64: # %bb.0: 737; AVX512-64-NEXT: vcmpnle_uqps %ymm2, %ymm3, %k1 738; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 739; AVX512-64-NEXT: retq 740; 741; AVX512F-32-LABEL: test_v8f32_ult_q: 742; AVX512F-32: # %bb.0: 743; AVX512F-32-NEXT: pushl %ebp 744; AVX512F-32-NEXT: movl %esp, %ebp 745; AVX512F-32-NEXT: andl $-32, %esp 746; AVX512F-32-NEXT: subl $32, %esp 747; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 748; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 749; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 750; AVX512F-32-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2 751; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 752; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 753; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 754; AVX512F-32-NEXT: movl %ebp, %esp 755; AVX512F-32-NEXT: popl %ebp 756; AVX512F-32-NEXT: retl 757; 758; AVX512F-64-LABEL: test_v8f32_ult_q: 759; AVX512F-64: # %bb.0: 760; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 761; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 762; AVX512F-64-NEXT: vcmpnle_uqps %ymm2, %ymm3, %ymm2 763; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 764; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 765; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 766; AVX512F-64-NEXT: retq 767 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 768 <8 x float> %f1, <8 x float> %f2, metadata !"ult", 769 metadata !"fpexcept.strict") #0 770 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 771 ret <8 x i32> %res 772} 773 774define <8 x i32> @test_v8f32_ule_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 775; AVX-32-LABEL: test_v8f32_ule_q: 776; AVX-32: # %bb.0: 777; AVX-32-NEXT: pushl %ebp 778; AVX-32-NEXT: movl %esp, %ebp 779; AVX-32-NEXT: andl $-32, %esp 780; AVX-32-NEXT: subl $32, %esp 781; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3 782; AVX-32-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2 783; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 784; AVX-32-NEXT: movl %ebp, %esp 785; AVX-32-NEXT: popl %ebp 786; AVX-32-NEXT: retl 787; 788; AVX-64-LABEL: test_v8f32_ule_q: 789; AVX-64: # %bb.0: 790; AVX-64-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2 791; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 792; AVX-64-NEXT: retq 793; 794; AVX512-32-LABEL: test_v8f32_ule_q: 795; AVX512-32: # %bb.0: 796; AVX512-32-NEXT: pushl %ebp 797; AVX512-32-NEXT: movl %esp, %ebp 798; AVX512-32-NEXT: andl $-32, %esp 799; AVX512-32-NEXT: subl $32, %esp 800; AVX512-32-NEXT: vcmpngt_uqps 8(%ebp), %ymm2, %k1 801; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 802; AVX512-32-NEXT: movl %ebp, %esp 803; AVX512-32-NEXT: popl %ebp 804; AVX512-32-NEXT: retl 805; 806; AVX512-64-LABEL: test_v8f32_ule_q: 807; AVX512-64: # %bb.0: 808; AVX512-64-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %k1 809; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 810; AVX512-64-NEXT: retq 811; 812; AVX512F-32-LABEL: test_v8f32_ule_q: 813; AVX512F-32: # %bb.0: 814; AVX512F-32-NEXT: pushl %ebp 815; AVX512F-32-NEXT: movl %esp, %ebp 816; AVX512F-32-NEXT: andl $-32, %esp 817; AVX512F-32-NEXT: subl $32, %esp 818; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 819; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 820; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 821; AVX512F-32-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2 822; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 823; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 824; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 825; AVX512F-32-NEXT: movl %ebp, %esp 826; AVX512F-32-NEXT: popl %ebp 827; AVX512F-32-NEXT: retl 828; 829; AVX512F-64-LABEL: test_v8f32_ule_q: 830; AVX512F-64: # %bb.0: 831; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 832; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 833; AVX512F-64-NEXT: vcmpnlt_uqps %ymm2, %ymm3, %ymm2 834; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 835; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 836; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 837; AVX512F-64-NEXT: retq 838 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 839 <8 x float> %f1, <8 x float> %f2, metadata !"ule", 840 metadata !"fpexcept.strict") #0 841 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 842 ret <8 x i32> %res 843} 844 845define <8 x i32> @test_v8f32_une_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 846; AVX-32-LABEL: test_v8f32_une_q: 847; AVX-32: # %bb.0: 848; AVX-32-NEXT: pushl %ebp 849; AVX-32-NEXT: movl %esp, %ebp 850; AVX-32-NEXT: andl $-32, %esp 851; AVX-32-NEXT: subl $32, %esp 852; AVX-32-NEXT: vcmpneqps 8(%ebp), %ymm2, %ymm2 853; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 854; AVX-32-NEXT: movl %ebp, %esp 855; AVX-32-NEXT: popl %ebp 856; AVX-32-NEXT: retl 857; 858; AVX-64-LABEL: test_v8f32_une_q: 859; AVX-64: # %bb.0: 860; AVX-64-NEXT: vcmpneqps %ymm3, %ymm2, %ymm2 861; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 862; AVX-64-NEXT: retq 863; 864; AVX512-32-LABEL: test_v8f32_une_q: 865; AVX512-32: # %bb.0: 866; AVX512-32-NEXT: pushl %ebp 867; AVX512-32-NEXT: movl %esp, %ebp 868; AVX512-32-NEXT: andl $-32, %esp 869; AVX512-32-NEXT: subl $32, %esp 870; AVX512-32-NEXT: vcmpneqps 8(%ebp), %ymm2, %k1 871; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 872; AVX512-32-NEXT: movl %ebp, %esp 873; AVX512-32-NEXT: popl %ebp 874; AVX512-32-NEXT: retl 875; 876; AVX512-64-LABEL: test_v8f32_une_q: 877; AVX512-64: # %bb.0: 878; AVX512-64-NEXT: vcmpneqps %ymm3, %ymm2, %k1 879; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 880; AVX512-64-NEXT: retq 881; 882; AVX512F-32-LABEL: test_v8f32_une_q: 883; AVX512F-32: # %bb.0: 884; AVX512F-32-NEXT: pushl %ebp 885; AVX512F-32-NEXT: movl %esp, %ebp 886; AVX512F-32-NEXT: andl $-32, %esp 887; AVX512F-32-NEXT: subl $32, %esp 888; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 889; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 890; AVX512F-32-NEXT: vcmpneqps 8(%ebp), %ymm2, %ymm2 891; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 892; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 893; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 894; AVX512F-32-NEXT: movl %ebp, %esp 895; AVX512F-32-NEXT: popl %ebp 896; AVX512F-32-NEXT: retl 897; 898; AVX512F-64-LABEL: test_v8f32_une_q: 899; AVX512F-64: # %bb.0: 900; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 901; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 902; AVX512F-64-NEXT: vcmpneqps %ymm3, %ymm2, %ymm2 903; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 904; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 905; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 906; AVX512F-64-NEXT: retq 907 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 908 <8 x float> %f1, <8 x float> %f2, metadata !"une", 909 metadata !"fpexcept.strict") #0 910 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 911 ret <8 x i32> %res 912} 913 914define <8 x i32> @test_v8f32_uno_q(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 915; AVX-32-LABEL: test_v8f32_uno_q: 916; AVX-32: # %bb.0: 917; AVX-32-NEXT: pushl %ebp 918; AVX-32-NEXT: movl %esp, %ebp 919; AVX-32-NEXT: andl $-32, %esp 920; AVX-32-NEXT: subl $32, %esp 921; AVX-32-NEXT: vcmpunordps 8(%ebp), %ymm2, %ymm2 922; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 923; AVX-32-NEXT: movl %ebp, %esp 924; AVX-32-NEXT: popl %ebp 925; AVX-32-NEXT: retl 926; 927; AVX-64-LABEL: test_v8f32_uno_q: 928; AVX-64: # %bb.0: 929; AVX-64-NEXT: vcmpunordps %ymm3, %ymm2, %ymm2 930; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 931; AVX-64-NEXT: retq 932; 933; AVX512-32-LABEL: test_v8f32_uno_q: 934; AVX512-32: # %bb.0: 935; AVX512-32-NEXT: pushl %ebp 936; AVX512-32-NEXT: movl %esp, %ebp 937; AVX512-32-NEXT: andl $-32, %esp 938; AVX512-32-NEXT: subl $32, %esp 939; AVX512-32-NEXT: vcmpunordps 8(%ebp), %ymm2, %k1 940; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 941; AVX512-32-NEXT: movl %ebp, %esp 942; AVX512-32-NEXT: popl %ebp 943; AVX512-32-NEXT: retl 944; 945; AVX512-64-LABEL: test_v8f32_uno_q: 946; AVX512-64: # %bb.0: 947; AVX512-64-NEXT: vcmpunordps %ymm3, %ymm2, %k1 948; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 949; AVX512-64-NEXT: retq 950; 951; AVX512F-32-LABEL: test_v8f32_uno_q: 952; AVX512F-32: # %bb.0: 953; AVX512F-32-NEXT: pushl %ebp 954; AVX512F-32-NEXT: movl %esp, %ebp 955; AVX512F-32-NEXT: andl $-32, %esp 956; AVX512F-32-NEXT: subl $32, %esp 957; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 958; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 959; AVX512F-32-NEXT: vcmpunordps 8(%ebp), %ymm2, %ymm2 960; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 961; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 962; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 963; AVX512F-32-NEXT: movl %ebp, %esp 964; AVX512F-32-NEXT: popl %ebp 965; AVX512F-32-NEXT: retl 966; 967; AVX512F-64-LABEL: test_v8f32_uno_q: 968; AVX512F-64: # %bb.0: 969; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 970; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 971; AVX512F-64-NEXT: vcmpunordps %ymm3, %ymm2, %ymm2 972; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 973; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 974; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 975; AVX512F-64-NEXT: retq 976 %cond = call <8 x i1> @llvm.experimental.constrained.fcmp.v8f32( 977 <8 x float> %f1, <8 x float> %f2, metadata !"uno", 978 metadata !"fpexcept.strict") #0 979 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 980 ret <8 x i32> %res 981} 982 983define <4 x i64> @test_v4f64_oeq_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 984; AVX-32-LABEL: test_v4f64_oeq_q: 985; AVX-32: # %bb.0: 986; AVX-32-NEXT: pushl %ebp 987; AVX-32-NEXT: movl %esp, %ebp 988; AVX-32-NEXT: andl $-32, %esp 989; AVX-32-NEXT: subl $32, %esp 990; AVX-32-NEXT: vcmpeqpd 8(%ebp), %ymm2, %ymm2 991; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 992; AVX-32-NEXT: movl %ebp, %esp 993; AVX-32-NEXT: popl %ebp 994; AVX-32-NEXT: retl 995; 996; AVX-64-LABEL: test_v4f64_oeq_q: 997; AVX-64: # %bb.0: 998; AVX-64-NEXT: vcmpeqpd %ymm3, %ymm2, %ymm2 999; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1000; AVX-64-NEXT: retq 1001; 1002; AVX512-32-LABEL: test_v4f64_oeq_q: 1003; AVX512-32: # %bb.0: 1004; AVX512-32-NEXT: pushl %ebp 1005; AVX512-32-NEXT: movl %esp, %ebp 1006; AVX512-32-NEXT: andl $-32, %esp 1007; AVX512-32-NEXT: subl $32, %esp 1008; AVX512-32-NEXT: vcmpeqpd 8(%ebp), %ymm2, %k1 1009; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1010; AVX512-32-NEXT: movl %ebp, %esp 1011; AVX512-32-NEXT: popl %ebp 1012; AVX512-32-NEXT: retl 1013; 1014; AVX512-64-LABEL: test_v4f64_oeq_q: 1015; AVX512-64: # %bb.0: 1016; AVX512-64-NEXT: vcmpeqpd %ymm3, %ymm2, %k1 1017; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1018; AVX512-64-NEXT: retq 1019; 1020; AVX512F-32-LABEL: test_v4f64_oeq_q: 1021; AVX512F-32: # %bb.0: 1022; AVX512F-32-NEXT: pushl %ebp 1023; AVX512F-32-NEXT: movl %esp, %ebp 1024; AVX512F-32-NEXT: andl $-32, %esp 1025; AVX512F-32-NEXT: subl $32, %esp 1026; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1027; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1028; AVX512F-32-NEXT: vcmpeqpd 8(%ebp), %ymm2, %ymm2 1029; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1030; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1031; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1032; AVX512F-32-NEXT: movl %ebp, %esp 1033; AVX512F-32-NEXT: popl %ebp 1034; AVX512F-32-NEXT: retl 1035; 1036; AVX512F-64-LABEL: test_v4f64_oeq_q: 1037; AVX512F-64: # %bb.0: 1038; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1039; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1040; AVX512F-64-NEXT: vcmpeqpd %ymm3, %ymm2, %ymm2 1041; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1042; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1043; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1044; AVX512F-64-NEXT: retq 1045 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1046 <4 x double> %f1, <4 x double> %f2, metadata !"oeq", 1047 metadata !"fpexcept.strict") #0 1048 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1049 ret <4 x i64> %res 1050} 1051 1052define <4 x i64> @test_v4f64_ogt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1053; AVX-32-LABEL: test_v4f64_ogt_q: 1054; AVX-32: # %bb.0: 1055; AVX-32-NEXT: pushl %ebp 1056; AVX-32-NEXT: movl %esp, %ebp 1057; AVX-32-NEXT: andl $-32, %esp 1058; AVX-32-NEXT: subl $32, %esp 1059; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3 1060; AVX-32-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2 1061; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1062; AVX-32-NEXT: movl %ebp, %esp 1063; AVX-32-NEXT: popl %ebp 1064; AVX-32-NEXT: retl 1065; 1066; AVX-64-LABEL: test_v4f64_ogt_q: 1067; AVX-64: # %bb.0: 1068; AVX-64-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2 1069; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1070; AVX-64-NEXT: retq 1071; 1072; AVX512-32-LABEL: test_v4f64_ogt_q: 1073; AVX512-32: # %bb.0: 1074; AVX512-32-NEXT: pushl %ebp 1075; AVX512-32-NEXT: movl %esp, %ebp 1076; AVX512-32-NEXT: andl $-32, %esp 1077; AVX512-32-NEXT: subl $32, %esp 1078; AVX512-32-NEXT: vcmpgt_oqpd 8(%ebp), %ymm2, %k1 1079; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1080; AVX512-32-NEXT: movl %ebp, %esp 1081; AVX512-32-NEXT: popl %ebp 1082; AVX512-32-NEXT: retl 1083; 1084; AVX512-64-LABEL: test_v4f64_ogt_q: 1085; AVX512-64: # %bb.0: 1086; AVX512-64-NEXT: vcmplt_oqpd %ymm2, %ymm3, %k1 1087; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1088; AVX512-64-NEXT: retq 1089; 1090; AVX512F-32-LABEL: test_v4f64_ogt_q: 1091; AVX512F-32: # %bb.0: 1092; AVX512F-32-NEXT: pushl %ebp 1093; AVX512F-32-NEXT: movl %esp, %ebp 1094; AVX512F-32-NEXT: andl $-32, %esp 1095; AVX512F-32-NEXT: subl $32, %esp 1096; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1097; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1098; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 1099; AVX512F-32-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2 1100; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1101; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1102; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1103; AVX512F-32-NEXT: movl %ebp, %esp 1104; AVX512F-32-NEXT: popl %ebp 1105; AVX512F-32-NEXT: retl 1106; 1107; AVX512F-64-LABEL: test_v4f64_ogt_q: 1108; AVX512F-64: # %bb.0: 1109; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1110; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1111; AVX512F-64-NEXT: vcmplt_oqpd %ymm2, %ymm3, %ymm2 1112; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1113; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1114; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1115; AVX512F-64-NEXT: retq 1116 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1117 <4 x double> %f1, <4 x double> %f2, metadata !"ogt", 1118 metadata !"fpexcept.strict") #0 1119 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1120 ret <4 x i64> %res 1121} 1122 1123define <4 x i64> @test_v4f64_oge_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1124; AVX-32-LABEL: test_v4f64_oge_q: 1125; AVX-32: # %bb.0: 1126; AVX-32-NEXT: pushl %ebp 1127; AVX-32-NEXT: movl %esp, %ebp 1128; AVX-32-NEXT: andl $-32, %esp 1129; AVX-32-NEXT: subl $32, %esp 1130; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3 1131; AVX-32-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2 1132; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1133; AVX-32-NEXT: movl %ebp, %esp 1134; AVX-32-NEXT: popl %ebp 1135; AVX-32-NEXT: retl 1136; 1137; AVX-64-LABEL: test_v4f64_oge_q: 1138; AVX-64: # %bb.0: 1139; AVX-64-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2 1140; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1141; AVX-64-NEXT: retq 1142; 1143; AVX512-32-LABEL: test_v4f64_oge_q: 1144; AVX512-32: # %bb.0: 1145; AVX512-32-NEXT: pushl %ebp 1146; AVX512-32-NEXT: movl %esp, %ebp 1147; AVX512-32-NEXT: andl $-32, %esp 1148; AVX512-32-NEXT: subl $32, %esp 1149; AVX512-32-NEXT: vcmpge_oqpd 8(%ebp), %ymm2, %k1 1150; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1151; AVX512-32-NEXT: movl %ebp, %esp 1152; AVX512-32-NEXT: popl %ebp 1153; AVX512-32-NEXT: retl 1154; 1155; AVX512-64-LABEL: test_v4f64_oge_q: 1156; AVX512-64: # %bb.0: 1157; AVX512-64-NEXT: vcmple_oqpd %ymm2, %ymm3, %k1 1158; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1159; AVX512-64-NEXT: retq 1160; 1161; AVX512F-32-LABEL: test_v4f64_oge_q: 1162; AVX512F-32: # %bb.0: 1163; AVX512F-32-NEXT: pushl %ebp 1164; AVX512F-32-NEXT: movl %esp, %ebp 1165; AVX512F-32-NEXT: andl $-32, %esp 1166; AVX512F-32-NEXT: subl $32, %esp 1167; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1168; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1169; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 1170; AVX512F-32-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2 1171; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1172; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1173; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1174; AVX512F-32-NEXT: movl %ebp, %esp 1175; AVX512F-32-NEXT: popl %ebp 1176; AVX512F-32-NEXT: retl 1177; 1178; AVX512F-64-LABEL: test_v4f64_oge_q: 1179; AVX512F-64: # %bb.0: 1180; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1181; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1182; AVX512F-64-NEXT: vcmple_oqpd %ymm2, %ymm3, %ymm2 1183; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1184; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1185; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1186; AVX512F-64-NEXT: retq 1187 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1188 <4 x double> %f1, <4 x double> %f2, metadata !"oge", 1189 metadata !"fpexcept.strict") #0 1190 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1191 ret <4 x i64> %res 1192} 1193 1194define <4 x i64> @test_v4f64_olt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1195; AVX-32-LABEL: test_v4f64_olt_q: 1196; AVX-32: # %bb.0: 1197; AVX-32-NEXT: pushl %ebp 1198; AVX-32-NEXT: movl %esp, %ebp 1199; AVX-32-NEXT: andl $-32, %esp 1200; AVX-32-NEXT: subl $32, %esp 1201; AVX-32-NEXT: vcmplt_oqpd 8(%ebp), %ymm2, %ymm2 1202; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1203; AVX-32-NEXT: movl %ebp, %esp 1204; AVX-32-NEXT: popl %ebp 1205; AVX-32-NEXT: retl 1206; 1207; AVX-64-LABEL: test_v4f64_olt_q: 1208; AVX-64: # %bb.0: 1209; AVX-64-NEXT: vcmplt_oqpd %ymm3, %ymm2, %ymm2 1210; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1211; AVX-64-NEXT: retq 1212; 1213; AVX512-32-LABEL: test_v4f64_olt_q: 1214; AVX512-32: # %bb.0: 1215; AVX512-32-NEXT: pushl %ebp 1216; AVX512-32-NEXT: movl %esp, %ebp 1217; AVX512-32-NEXT: andl $-32, %esp 1218; AVX512-32-NEXT: subl $32, %esp 1219; AVX512-32-NEXT: vcmplt_oqpd 8(%ebp), %ymm2, %k1 1220; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1221; AVX512-32-NEXT: movl %ebp, %esp 1222; AVX512-32-NEXT: popl %ebp 1223; AVX512-32-NEXT: retl 1224; 1225; AVX512-64-LABEL: test_v4f64_olt_q: 1226; AVX512-64: # %bb.0: 1227; AVX512-64-NEXT: vcmplt_oqpd %ymm3, %ymm2, %k1 1228; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1229; AVX512-64-NEXT: retq 1230; 1231; AVX512F-32-LABEL: test_v4f64_olt_q: 1232; AVX512F-32: # %bb.0: 1233; AVX512F-32-NEXT: pushl %ebp 1234; AVX512F-32-NEXT: movl %esp, %ebp 1235; AVX512F-32-NEXT: andl $-32, %esp 1236; AVX512F-32-NEXT: subl $32, %esp 1237; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1238; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1239; AVX512F-32-NEXT: vcmplt_oqpd 8(%ebp), %ymm2, %ymm2 1240; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1241; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1242; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1243; AVX512F-32-NEXT: movl %ebp, %esp 1244; AVX512F-32-NEXT: popl %ebp 1245; AVX512F-32-NEXT: retl 1246; 1247; AVX512F-64-LABEL: test_v4f64_olt_q: 1248; AVX512F-64: # %bb.0: 1249; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1250; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1251; AVX512F-64-NEXT: vcmplt_oqpd %ymm3, %ymm2, %ymm2 1252; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1253; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1254; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1255; AVX512F-64-NEXT: retq 1256 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1257 <4 x double> %f1, <4 x double> %f2, metadata !"olt", 1258 metadata !"fpexcept.strict") #0 1259 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1260 ret <4 x i64> %res 1261} 1262 1263define <4 x i64> @test_v4f64_ole_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1264; AVX-32-LABEL: test_v4f64_ole_q: 1265; AVX-32: # %bb.0: 1266; AVX-32-NEXT: pushl %ebp 1267; AVX-32-NEXT: movl %esp, %ebp 1268; AVX-32-NEXT: andl $-32, %esp 1269; AVX-32-NEXT: subl $32, %esp 1270; AVX-32-NEXT: vcmple_oqpd 8(%ebp), %ymm2, %ymm2 1271; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1272; AVX-32-NEXT: movl %ebp, %esp 1273; AVX-32-NEXT: popl %ebp 1274; AVX-32-NEXT: retl 1275; 1276; AVX-64-LABEL: test_v4f64_ole_q: 1277; AVX-64: # %bb.0: 1278; AVX-64-NEXT: vcmple_oqpd %ymm3, %ymm2, %ymm2 1279; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1280; AVX-64-NEXT: retq 1281; 1282; AVX512-32-LABEL: test_v4f64_ole_q: 1283; AVX512-32: # %bb.0: 1284; AVX512-32-NEXT: pushl %ebp 1285; AVX512-32-NEXT: movl %esp, %ebp 1286; AVX512-32-NEXT: andl $-32, %esp 1287; AVX512-32-NEXT: subl $32, %esp 1288; AVX512-32-NEXT: vcmple_oqpd 8(%ebp), %ymm2, %k1 1289; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1290; AVX512-32-NEXT: movl %ebp, %esp 1291; AVX512-32-NEXT: popl %ebp 1292; AVX512-32-NEXT: retl 1293; 1294; AVX512-64-LABEL: test_v4f64_ole_q: 1295; AVX512-64: # %bb.0: 1296; AVX512-64-NEXT: vcmple_oqpd %ymm3, %ymm2, %k1 1297; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1298; AVX512-64-NEXT: retq 1299; 1300; AVX512F-32-LABEL: test_v4f64_ole_q: 1301; AVX512F-32: # %bb.0: 1302; AVX512F-32-NEXT: pushl %ebp 1303; AVX512F-32-NEXT: movl %esp, %ebp 1304; AVX512F-32-NEXT: andl $-32, %esp 1305; AVX512F-32-NEXT: subl $32, %esp 1306; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1307; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1308; AVX512F-32-NEXT: vcmple_oqpd 8(%ebp), %ymm2, %ymm2 1309; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1310; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1311; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1312; AVX512F-32-NEXT: movl %ebp, %esp 1313; AVX512F-32-NEXT: popl %ebp 1314; AVX512F-32-NEXT: retl 1315; 1316; AVX512F-64-LABEL: test_v4f64_ole_q: 1317; AVX512F-64: # %bb.0: 1318; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1319; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1320; AVX512F-64-NEXT: vcmple_oqpd %ymm3, %ymm2, %ymm2 1321; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1322; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1323; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1324; AVX512F-64-NEXT: retq 1325 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1326 <4 x double> %f1, <4 x double> %f2, metadata !"ole", 1327 metadata !"fpexcept.strict") #0 1328 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1329 ret <4 x i64> %res 1330} 1331 1332define <4 x i64> @test_v4f64_one_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1333; AVX-32-LABEL: test_v4f64_one_q: 1334; AVX-32: # %bb.0: 1335; AVX-32-NEXT: pushl %ebp 1336; AVX-32-NEXT: movl %esp, %ebp 1337; AVX-32-NEXT: andl $-32, %esp 1338; AVX-32-NEXT: subl $32, %esp 1339; AVX-32-NEXT: vcmpneq_oqpd 8(%ebp), %ymm2, %ymm2 1340; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1341; AVX-32-NEXT: movl %ebp, %esp 1342; AVX-32-NEXT: popl %ebp 1343; AVX-32-NEXT: retl 1344; 1345; AVX-64-LABEL: test_v4f64_one_q: 1346; AVX-64: # %bb.0: 1347; AVX-64-NEXT: vcmpneq_oqpd %ymm3, %ymm2, %ymm2 1348; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1349; AVX-64-NEXT: retq 1350; 1351; AVX512-32-LABEL: test_v4f64_one_q: 1352; AVX512-32: # %bb.0: 1353; AVX512-32-NEXT: pushl %ebp 1354; AVX512-32-NEXT: movl %esp, %ebp 1355; AVX512-32-NEXT: andl $-32, %esp 1356; AVX512-32-NEXT: subl $32, %esp 1357; AVX512-32-NEXT: vcmpneq_oqpd 8(%ebp), %ymm2, %k1 1358; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1359; AVX512-32-NEXT: movl %ebp, %esp 1360; AVX512-32-NEXT: popl %ebp 1361; AVX512-32-NEXT: retl 1362; 1363; AVX512-64-LABEL: test_v4f64_one_q: 1364; AVX512-64: # %bb.0: 1365; AVX512-64-NEXT: vcmpneq_oqpd %ymm3, %ymm2, %k1 1366; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1367; AVX512-64-NEXT: retq 1368; 1369; AVX512F-32-LABEL: test_v4f64_one_q: 1370; AVX512F-32: # %bb.0: 1371; AVX512F-32-NEXT: pushl %ebp 1372; AVX512F-32-NEXT: movl %esp, %ebp 1373; AVX512F-32-NEXT: andl $-32, %esp 1374; AVX512F-32-NEXT: subl $32, %esp 1375; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1376; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1377; AVX512F-32-NEXT: vcmpneq_oqpd 8(%ebp), %ymm2, %ymm2 1378; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1379; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1380; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1381; AVX512F-32-NEXT: movl %ebp, %esp 1382; AVX512F-32-NEXT: popl %ebp 1383; AVX512F-32-NEXT: retl 1384; 1385; AVX512F-64-LABEL: test_v4f64_one_q: 1386; AVX512F-64: # %bb.0: 1387; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1388; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1389; AVX512F-64-NEXT: vcmpneq_oqpd %ymm3, %ymm2, %ymm2 1390; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1391; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1392; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1393; AVX512F-64-NEXT: retq 1394 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1395 <4 x double> %f1, <4 x double> %f2, metadata !"one", 1396 metadata !"fpexcept.strict") #0 1397 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1398 ret <4 x i64> %res 1399} 1400 1401define <4 x i64> @test_v4f64_ord_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1402; AVX-32-LABEL: test_v4f64_ord_q: 1403; AVX-32: # %bb.0: 1404; AVX-32-NEXT: pushl %ebp 1405; AVX-32-NEXT: movl %esp, %ebp 1406; AVX-32-NEXT: andl $-32, %esp 1407; AVX-32-NEXT: subl $32, %esp 1408; AVX-32-NEXT: vcmpordpd 8(%ebp), %ymm2, %ymm2 1409; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1410; AVX-32-NEXT: movl %ebp, %esp 1411; AVX-32-NEXT: popl %ebp 1412; AVX-32-NEXT: retl 1413; 1414; AVX-64-LABEL: test_v4f64_ord_q: 1415; AVX-64: # %bb.0: 1416; AVX-64-NEXT: vcmpordpd %ymm3, %ymm2, %ymm2 1417; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1418; AVX-64-NEXT: retq 1419; 1420; AVX512-32-LABEL: test_v4f64_ord_q: 1421; AVX512-32: # %bb.0: 1422; AVX512-32-NEXT: pushl %ebp 1423; AVX512-32-NEXT: movl %esp, %ebp 1424; AVX512-32-NEXT: andl $-32, %esp 1425; AVX512-32-NEXT: subl $32, %esp 1426; AVX512-32-NEXT: vcmpordpd 8(%ebp), %ymm2, %k1 1427; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1428; AVX512-32-NEXT: movl %ebp, %esp 1429; AVX512-32-NEXT: popl %ebp 1430; AVX512-32-NEXT: retl 1431; 1432; AVX512-64-LABEL: test_v4f64_ord_q: 1433; AVX512-64: # %bb.0: 1434; AVX512-64-NEXT: vcmpordpd %ymm3, %ymm2, %k1 1435; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1436; AVX512-64-NEXT: retq 1437; 1438; AVX512F-32-LABEL: test_v4f64_ord_q: 1439; AVX512F-32: # %bb.0: 1440; AVX512F-32-NEXT: pushl %ebp 1441; AVX512F-32-NEXT: movl %esp, %ebp 1442; AVX512F-32-NEXT: andl $-32, %esp 1443; AVX512F-32-NEXT: subl $32, %esp 1444; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1445; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1446; AVX512F-32-NEXT: vcmpordpd 8(%ebp), %ymm2, %ymm2 1447; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1448; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1449; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1450; AVX512F-32-NEXT: movl %ebp, %esp 1451; AVX512F-32-NEXT: popl %ebp 1452; AVX512F-32-NEXT: retl 1453; 1454; AVX512F-64-LABEL: test_v4f64_ord_q: 1455; AVX512F-64: # %bb.0: 1456; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1457; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1458; AVX512F-64-NEXT: vcmpordpd %ymm3, %ymm2, %ymm2 1459; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1460; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1461; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1462; AVX512F-64-NEXT: retq 1463 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1464 <4 x double> %f1, <4 x double> %f2, metadata !"ord", 1465 metadata !"fpexcept.strict") #0 1466 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1467 ret <4 x i64> %res 1468} 1469 1470define <4 x i64> @test_v4f64_ueq_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1471; AVX-32-LABEL: test_v4f64_ueq_q: 1472; AVX-32: # %bb.0: 1473; AVX-32-NEXT: pushl %ebp 1474; AVX-32-NEXT: movl %esp, %ebp 1475; AVX-32-NEXT: andl $-32, %esp 1476; AVX-32-NEXT: subl $32, %esp 1477; AVX-32-NEXT: vcmpeq_uqpd 8(%ebp), %ymm2, %ymm2 1478; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1479; AVX-32-NEXT: movl %ebp, %esp 1480; AVX-32-NEXT: popl %ebp 1481; AVX-32-NEXT: retl 1482; 1483; AVX-64-LABEL: test_v4f64_ueq_q: 1484; AVX-64: # %bb.0: 1485; AVX-64-NEXT: vcmpeq_uqpd %ymm3, %ymm2, %ymm2 1486; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1487; AVX-64-NEXT: retq 1488; 1489; AVX512-32-LABEL: test_v4f64_ueq_q: 1490; AVX512-32: # %bb.0: 1491; AVX512-32-NEXT: pushl %ebp 1492; AVX512-32-NEXT: movl %esp, %ebp 1493; AVX512-32-NEXT: andl $-32, %esp 1494; AVX512-32-NEXT: subl $32, %esp 1495; AVX512-32-NEXT: vcmpeq_uqpd 8(%ebp), %ymm2, %k1 1496; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1497; AVX512-32-NEXT: movl %ebp, %esp 1498; AVX512-32-NEXT: popl %ebp 1499; AVX512-32-NEXT: retl 1500; 1501; AVX512-64-LABEL: test_v4f64_ueq_q: 1502; AVX512-64: # %bb.0: 1503; AVX512-64-NEXT: vcmpeq_uqpd %ymm3, %ymm2, %k1 1504; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1505; AVX512-64-NEXT: retq 1506; 1507; AVX512F-32-LABEL: test_v4f64_ueq_q: 1508; AVX512F-32: # %bb.0: 1509; AVX512F-32-NEXT: pushl %ebp 1510; AVX512F-32-NEXT: movl %esp, %ebp 1511; AVX512F-32-NEXT: andl $-32, %esp 1512; AVX512F-32-NEXT: subl $32, %esp 1513; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1514; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1515; AVX512F-32-NEXT: vcmpeq_uqpd 8(%ebp), %ymm2, %ymm2 1516; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1517; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1518; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1519; AVX512F-32-NEXT: movl %ebp, %esp 1520; AVX512F-32-NEXT: popl %ebp 1521; AVX512F-32-NEXT: retl 1522; 1523; AVX512F-64-LABEL: test_v4f64_ueq_q: 1524; AVX512F-64: # %bb.0: 1525; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1526; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1527; AVX512F-64-NEXT: vcmpeq_uqpd %ymm3, %ymm2, %ymm2 1528; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1529; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1530; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1531; AVX512F-64-NEXT: retq 1532 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1533 <4 x double> %f1, <4 x double> %f2, metadata !"ueq", 1534 metadata !"fpexcept.strict") #0 1535 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1536 ret <4 x i64> %res 1537} 1538 1539define <4 x i64> @test_v4f64_ugt_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1540; AVX-32-LABEL: test_v4f64_ugt_q: 1541; AVX-32: # %bb.0: 1542; AVX-32-NEXT: pushl %ebp 1543; AVX-32-NEXT: movl %esp, %ebp 1544; AVX-32-NEXT: andl $-32, %esp 1545; AVX-32-NEXT: subl $32, %esp 1546; AVX-32-NEXT: vcmpnle_uqpd 8(%ebp), %ymm2, %ymm2 1547; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1548; AVX-32-NEXT: movl %ebp, %esp 1549; AVX-32-NEXT: popl %ebp 1550; AVX-32-NEXT: retl 1551; 1552; AVX-64-LABEL: test_v4f64_ugt_q: 1553; AVX-64: # %bb.0: 1554; AVX-64-NEXT: vcmpnle_uqpd %ymm3, %ymm2, %ymm2 1555; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1556; AVX-64-NEXT: retq 1557; 1558; AVX512-32-LABEL: test_v4f64_ugt_q: 1559; AVX512-32: # %bb.0: 1560; AVX512-32-NEXT: pushl %ebp 1561; AVX512-32-NEXT: movl %esp, %ebp 1562; AVX512-32-NEXT: andl $-32, %esp 1563; AVX512-32-NEXT: subl $32, %esp 1564; AVX512-32-NEXT: vcmpnle_uqpd 8(%ebp), %ymm2, %k1 1565; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1566; AVX512-32-NEXT: movl %ebp, %esp 1567; AVX512-32-NEXT: popl %ebp 1568; AVX512-32-NEXT: retl 1569; 1570; AVX512-64-LABEL: test_v4f64_ugt_q: 1571; AVX512-64: # %bb.0: 1572; AVX512-64-NEXT: vcmpnle_uqpd %ymm3, %ymm2, %k1 1573; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1574; AVX512-64-NEXT: retq 1575; 1576; AVX512F-32-LABEL: test_v4f64_ugt_q: 1577; AVX512F-32: # %bb.0: 1578; AVX512F-32-NEXT: pushl %ebp 1579; AVX512F-32-NEXT: movl %esp, %ebp 1580; AVX512F-32-NEXT: andl $-32, %esp 1581; AVX512F-32-NEXT: subl $32, %esp 1582; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1583; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1584; AVX512F-32-NEXT: vcmpnle_uqpd 8(%ebp), %ymm2, %ymm2 1585; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1586; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1587; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1588; AVX512F-32-NEXT: movl %ebp, %esp 1589; AVX512F-32-NEXT: popl %ebp 1590; AVX512F-32-NEXT: retl 1591; 1592; AVX512F-64-LABEL: test_v4f64_ugt_q: 1593; AVX512F-64: # %bb.0: 1594; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1595; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1596; AVX512F-64-NEXT: vcmpnle_uqpd %ymm3, %ymm2, %ymm2 1597; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1598; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1599; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1600; AVX512F-64-NEXT: retq 1601 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1602 <4 x double> %f1, <4 x double> %f2, metadata !"ugt", 1603 metadata !"fpexcept.strict") #0 1604 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1605 ret <4 x i64> %res 1606} 1607 1608define <4 x i64> @test_v4f64_uge_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1609; AVX-32-LABEL: test_v4f64_uge_q: 1610; AVX-32: # %bb.0: 1611; AVX-32-NEXT: pushl %ebp 1612; AVX-32-NEXT: movl %esp, %ebp 1613; AVX-32-NEXT: andl $-32, %esp 1614; AVX-32-NEXT: subl $32, %esp 1615; AVX-32-NEXT: vcmpnlt_uqpd 8(%ebp), %ymm2, %ymm2 1616; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1617; AVX-32-NEXT: movl %ebp, %esp 1618; AVX-32-NEXT: popl %ebp 1619; AVX-32-NEXT: retl 1620; 1621; AVX-64-LABEL: test_v4f64_uge_q: 1622; AVX-64: # %bb.0: 1623; AVX-64-NEXT: vcmpnlt_uqpd %ymm3, %ymm2, %ymm2 1624; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1625; AVX-64-NEXT: retq 1626; 1627; AVX512-32-LABEL: test_v4f64_uge_q: 1628; AVX512-32: # %bb.0: 1629; AVX512-32-NEXT: pushl %ebp 1630; AVX512-32-NEXT: movl %esp, %ebp 1631; AVX512-32-NEXT: andl $-32, %esp 1632; AVX512-32-NEXT: subl $32, %esp 1633; AVX512-32-NEXT: vcmpnlt_uqpd 8(%ebp), %ymm2, %k1 1634; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1635; AVX512-32-NEXT: movl %ebp, %esp 1636; AVX512-32-NEXT: popl %ebp 1637; AVX512-32-NEXT: retl 1638; 1639; AVX512-64-LABEL: test_v4f64_uge_q: 1640; AVX512-64: # %bb.0: 1641; AVX512-64-NEXT: vcmpnlt_uqpd %ymm3, %ymm2, %k1 1642; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1643; AVX512-64-NEXT: retq 1644; 1645; AVX512F-32-LABEL: test_v4f64_uge_q: 1646; AVX512F-32: # %bb.0: 1647; AVX512F-32-NEXT: pushl %ebp 1648; AVX512F-32-NEXT: movl %esp, %ebp 1649; AVX512F-32-NEXT: andl $-32, %esp 1650; AVX512F-32-NEXT: subl $32, %esp 1651; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1652; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1653; AVX512F-32-NEXT: vcmpnlt_uqpd 8(%ebp), %ymm2, %ymm2 1654; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1655; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1656; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1657; AVX512F-32-NEXT: movl %ebp, %esp 1658; AVX512F-32-NEXT: popl %ebp 1659; AVX512F-32-NEXT: retl 1660; 1661; AVX512F-64-LABEL: test_v4f64_uge_q: 1662; AVX512F-64: # %bb.0: 1663; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1664; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1665; AVX512F-64-NEXT: vcmpnlt_uqpd %ymm3, %ymm2, %ymm2 1666; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1667; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1668; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1669; AVX512F-64-NEXT: retq 1670 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1671 <4 x double> %f1, <4 x double> %f2, metadata !"uge", 1672 metadata !"fpexcept.strict") #0 1673 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1674 ret <4 x i64> %res 1675} 1676 1677define <4 x i64> @test_v4f64_ult_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1678; AVX-32-LABEL: test_v4f64_ult_q: 1679; AVX-32: # %bb.0: 1680; AVX-32-NEXT: pushl %ebp 1681; AVX-32-NEXT: movl %esp, %ebp 1682; AVX-32-NEXT: andl $-32, %esp 1683; AVX-32-NEXT: subl $32, %esp 1684; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3 1685; AVX-32-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2 1686; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1687; AVX-32-NEXT: movl %ebp, %esp 1688; AVX-32-NEXT: popl %ebp 1689; AVX-32-NEXT: retl 1690; 1691; AVX-64-LABEL: test_v4f64_ult_q: 1692; AVX-64: # %bb.0: 1693; AVX-64-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2 1694; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1695; AVX-64-NEXT: retq 1696; 1697; AVX512-32-LABEL: test_v4f64_ult_q: 1698; AVX512-32: # %bb.0: 1699; AVX512-32-NEXT: pushl %ebp 1700; AVX512-32-NEXT: movl %esp, %ebp 1701; AVX512-32-NEXT: andl $-32, %esp 1702; AVX512-32-NEXT: subl $32, %esp 1703; AVX512-32-NEXT: vcmpnge_uqpd 8(%ebp), %ymm2, %k1 1704; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1705; AVX512-32-NEXT: movl %ebp, %esp 1706; AVX512-32-NEXT: popl %ebp 1707; AVX512-32-NEXT: retl 1708; 1709; AVX512-64-LABEL: test_v4f64_ult_q: 1710; AVX512-64: # %bb.0: 1711; AVX512-64-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %k1 1712; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1713; AVX512-64-NEXT: retq 1714; 1715; AVX512F-32-LABEL: test_v4f64_ult_q: 1716; AVX512F-32: # %bb.0: 1717; AVX512F-32-NEXT: pushl %ebp 1718; AVX512F-32-NEXT: movl %esp, %ebp 1719; AVX512F-32-NEXT: andl $-32, %esp 1720; AVX512F-32-NEXT: subl $32, %esp 1721; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1722; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1723; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 1724; AVX512F-32-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2 1725; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1726; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1727; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1728; AVX512F-32-NEXT: movl %ebp, %esp 1729; AVX512F-32-NEXT: popl %ebp 1730; AVX512F-32-NEXT: retl 1731; 1732; AVX512F-64-LABEL: test_v4f64_ult_q: 1733; AVX512F-64: # %bb.0: 1734; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1735; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1736; AVX512F-64-NEXT: vcmpnle_uqpd %ymm2, %ymm3, %ymm2 1737; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1738; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1739; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1740; AVX512F-64-NEXT: retq 1741 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1742 <4 x double> %f1, <4 x double> %f2, metadata !"ult", 1743 metadata !"fpexcept.strict") #0 1744 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1745 ret <4 x i64> %res 1746} 1747 1748define <4 x i64> @test_v4f64_ule_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1749; AVX-32-LABEL: test_v4f64_ule_q: 1750; AVX-32: # %bb.0: 1751; AVX-32-NEXT: pushl %ebp 1752; AVX-32-NEXT: movl %esp, %ebp 1753; AVX-32-NEXT: andl $-32, %esp 1754; AVX-32-NEXT: subl $32, %esp 1755; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3 1756; AVX-32-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2 1757; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1758; AVX-32-NEXT: movl %ebp, %esp 1759; AVX-32-NEXT: popl %ebp 1760; AVX-32-NEXT: retl 1761; 1762; AVX-64-LABEL: test_v4f64_ule_q: 1763; AVX-64: # %bb.0: 1764; AVX-64-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2 1765; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1766; AVX-64-NEXT: retq 1767; 1768; AVX512-32-LABEL: test_v4f64_ule_q: 1769; AVX512-32: # %bb.0: 1770; AVX512-32-NEXT: pushl %ebp 1771; AVX512-32-NEXT: movl %esp, %ebp 1772; AVX512-32-NEXT: andl $-32, %esp 1773; AVX512-32-NEXT: subl $32, %esp 1774; AVX512-32-NEXT: vcmpngt_uqpd 8(%ebp), %ymm2, %k1 1775; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1776; AVX512-32-NEXT: movl %ebp, %esp 1777; AVX512-32-NEXT: popl %ebp 1778; AVX512-32-NEXT: retl 1779; 1780; AVX512-64-LABEL: test_v4f64_ule_q: 1781; AVX512-64: # %bb.0: 1782; AVX512-64-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %k1 1783; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1784; AVX512-64-NEXT: retq 1785; 1786; AVX512F-32-LABEL: test_v4f64_ule_q: 1787; AVX512F-32: # %bb.0: 1788; AVX512F-32-NEXT: pushl %ebp 1789; AVX512F-32-NEXT: movl %esp, %ebp 1790; AVX512F-32-NEXT: andl $-32, %esp 1791; AVX512F-32-NEXT: subl $32, %esp 1792; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1793; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1794; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 1795; AVX512F-32-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2 1796; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1797; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1798; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1799; AVX512F-32-NEXT: movl %ebp, %esp 1800; AVX512F-32-NEXT: popl %ebp 1801; AVX512F-32-NEXT: retl 1802; 1803; AVX512F-64-LABEL: test_v4f64_ule_q: 1804; AVX512F-64: # %bb.0: 1805; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1806; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1807; AVX512F-64-NEXT: vcmpnlt_uqpd %ymm2, %ymm3, %ymm2 1808; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1809; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1810; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1811; AVX512F-64-NEXT: retq 1812 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1813 <4 x double> %f1, <4 x double> %f2, metadata !"ule", 1814 metadata !"fpexcept.strict") #0 1815 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1816 ret <4 x i64> %res 1817} 1818 1819define <4 x i64> @test_v4f64_une_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1820; AVX-32-LABEL: test_v4f64_une_q: 1821; AVX-32: # %bb.0: 1822; AVX-32-NEXT: pushl %ebp 1823; AVX-32-NEXT: movl %esp, %ebp 1824; AVX-32-NEXT: andl $-32, %esp 1825; AVX-32-NEXT: subl $32, %esp 1826; AVX-32-NEXT: vcmpneqpd 8(%ebp), %ymm2, %ymm2 1827; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1828; AVX-32-NEXT: movl %ebp, %esp 1829; AVX-32-NEXT: popl %ebp 1830; AVX-32-NEXT: retl 1831; 1832; AVX-64-LABEL: test_v4f64_une_q: 1833; AVX-64: # %bb.0: 1834; AVX-64-NEXT: vcmpneqpd %ymm3, %ymm2, %ymm2 1835; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1836; AVX-64-NEXT: retq 1837; 1838; AVX512-32-LABEL: test_v4f64_une_q: 1839; AVX512-32: # %bb.0: 1840; AVX512-32-NEXT: pushl %ebp 1841; AVX512-32-NEXT: movl %esp, %ebp 1842; AVX512-32-NEXT: andl $-32, %esp 1843; AVX512-32-NEXT: subl $32, %esp 1844; AVX512-32-NEXT: vcmpneqpd 8(%ebp), %ymm2, %k1 1845; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1846; AVX512-32-NEXT: movl %ebp, %esp 1847; AVX512-32-NEXT: popl %ebp 1848; AVX512-32-NEXT: retl 1849; 1850; AVX512-64-LABEL: test_v4f64_une_q: 1851; AVX512-64: # %bb.0: 1852; AVX512-64-NEXT: vcmpneqpd %ymm3, %ymm2, %k1 1853; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1854; AVX512-64-NEXT: retq 1855; 1856; AVX512F-32-LABEL: test_v4f64_une_q: 1857; AVX512F-32: # %bb.0: 1858; AVX512F-32-NEXT: pushl %ebp 1859; AVX512F-32-NEXT: movl %esp, %ebp 1860; AVX512F-32-NEXT: andl $-32, %esp 1861; AVX512F-32-NEXT: subl $32, %esp 1862; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1863; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1864; AVX512F-32-NEXT: vcmpneqpd 8(%ebp), %ymm2, %ymm2 1865; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1866; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1867; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1868; AVX512F-32-NEXT: movl %ebp, %esp 1869; AVX512F-32-NEXT: popl %ebp 1870; AVX512F-32-NEXT: retl 1871; 1872; AVX512F-64-LABEL: test_v4f64_une_q: 1873; AVX512F-64: # %bb.0: 1874; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1875; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1876; AVX512F-64-NEXT: vcmpneqpd %ymm3, %ymm2, %ymm2 1877; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1878; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1879; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1880; AVX512F-64-NEXT: retq 1881 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1882 <4 x double> %f1, <4 x double> %f2, metadata !"une", 1883 metadata !"fpexcept.strict") #0 1884 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1885 ret <4 x i64> %res 1886} 1887 1888define <4 x i64> @test_v4f64_uno_q(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 1889; AVX-32-LABEL: test_v4f64_uno_q: 1890; AVX-32: # %bb.0: 1891; AVX-32-NEXT: pushl %ebp 1892; AVX-32-NEXT: movl %esp, %ebp 1893; AVX-32-NEXT: andl $-32, %esp 1894; AVX-32-NEXT: subl $32, %esp 1895; AVX-32-NEXT: vcmpunordpd 8(%ebp), %ymm2, %ymm2 1896; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1897; AVX-32-NEXT: movl %ebp, %esp 1898; AVX-32-NEXT: popl %ebp 1899; AVX-32-NEXT: retl 1900; 1901; AVX-64-LABEL: test_v4f64_uno_q: 1902; AVX-64: # %bb.0: 1903; AVX-64-NEXT: vcmpunordpd %ymm3, %ymm2, %ymm2 1904; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1905; AVX-64-NEXT: retq 1906; 1907; AVX512-32-LABEL: test_v4f64_uno_q: 1908; AVX512-32: # %bb.0: 1909; AVX512-32-NEXT: pushl %ebp 1910; AVX512-32-NEXT: movl %esp, %ebp 1911; AVX512-32-NEXT: andl $-32, %esp 1912; AVX512-32-NEXT: subl $32, %esp 1913; AVX512-32-NEXT: vcmpunordpd 8(%ebp), %ymm2, %k1 1914; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1915; AVX512-32-NEXT: movl %ebp, %esp 1916; AVX512-32-NEXT: popl %ebp 1917; AVX512-32-NEXT: retl 1918; 1919; AVX512-64-LABEL: test_v4f64_uno_q: 1920; AVX512-64: # %bb.0: 1921; AVX512-64-NEXT: vcmpunordpd %ymm3, %ymm2, %k1 1922; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 1923; AVX512-64-NEXT: retq 1924; 1925; AVX512F-32-LABEL: test_v4f64_uno_q: 1926; AVX512F-32: # %bb.0: 1927; AVX512F-32-NEXT: pushl %ebp 1928; AVX512F-32-NEXT: movl %esp, %ebp 1929; AVX512F-32-NEXT: andl $-32, %esp 1930; AVX512F-32-NEXT: subl $32, %esp 1931; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1932; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1933; AVX512F-32-NEXT: vcmpunordpd 8(%ebp), %ymm2, %ymm2 1934; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 1935; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1936; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1937; AVX512F-32-NEXT: movl %ebp, %esp 1938; AVX512F-32-NEXT: popl %ebp 1939; AVX512F-32-NEXT: retl 1940; 1941; AVX512F-64-LABEL: test_v4f64_uno_q: 1942; AVX512F-64: # %bb.0: 1943; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 1944; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 1945; AVX512F-64-NEXT: vcmpunordpd %ymm3, %ymm2, %ymm2 1946; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 1947; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 1948; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1949; AVX512F-64-NEXT: retq 1950 %cond = call <4 x i1> @llvm.experimental.constrained.fcmp.v4f64( 1951 <4 x double> %f1, <4 x double> %f2, metadata !"uno", 1952 metadata !"fpexcept.strict") #0 1953 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 1954 ret <4 x i64> %res 1955} 1956 1957define <8 x i32> @test_v8f32_oeq_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 1958; AVX-32-LABEL: test_v8f32_oeq_s: 1959; AVX-32: # %bb.0: 1960; AVX-32-NEXT: pushl %ebp 1961; AVX-32-NEXT: movl %esp, %ebp 1962; AVX-32-NEXT: andl $-32, %esp 1963; AVX-32-NEXT: subl $32, %esp 1964; AVX-32-NEXT: vcmpeq_osps 8(%ebp), %ymm2, %ymm2 1965; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 1966; AVX-32-NEXT: movl %ebp, %esp 1967; AVX-32-NEXT: popl %ebp 1968; AVX-32-NEXT: retl 1969; 1970; AVX-64-LABEL: test_v8f32_oeq_s: 1971; AVX-64: # %bb.0: 1972; AVX-64-NEXT: vcmpeq_osps %ymm3, %ymm2, %ymm2 1973; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 1974; AVX-64-NEXT: retq 1975; 1976; AVX512-32-LABEL: test_v8f32_oeq_s: 1977; AVX512-32: # %bb.0: 1978; AVX512-32-NEXT: pushl %ebp 1979; AVX512-32-NEXT: movl %esp, %ebp 1980; AVX512-32-NEXT: andl $-32, %esp 1981; AVX512-32-NEXT: subl $32, %esp 1982; AVX512-32-NEXT: vcmpeq_osps 8(%ebp), %ymm2, %k1 1983; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 1984; AVX512-32-NEXT: movl %ebp, %esp 1985; AVX512-32-NEXT: popl %ebp 1986; AVX512-32-NEXT: retl 1987; 1988; AVX512-64-LABEL: test_v8f32_oeq_s: 1989; AVX512-64: # %bb.0: 1990; AVX512-64-NEXT: vcmpeq_osps %ymm3, %ymm2, %k1 1991; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 1992; AVX512-64-NEXT: retq 1993; 1994; AVX512F-32-LABEL: test_v8f32_oeq_s: 1995; AVX512F-32: # %bb.0: 1996; AVX512F-32-NEXT: pushl %ebp 1997; AVX512F-32-NEXT: movl %esp, %ebp 1998; AVX512F-32-NEXT: andl $-32, %esp 1999; AVX512F-32-NEXT: subl $32, %esp 2000; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2001; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2002; AVX512F-32-NEXT: vcmpeq_osps 8(%ebp), %ymm2, %ymm2 2003; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2004; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2005; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2006; AVX512F-32-NEXT: movl %ebp, %esp 2007; AVX512F-32-NEXT: popl %ebp 2008; AVX512F-32-NEXT: retl 2009; 2010; AVX512F-64-LABEL: test_v8f32_oeq_s: 2011; AVX512F-64: # %bb.0: 2012; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2013; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2014; AVX512F-64-NEXT: vcmpeq_osps %ymm3, %ymm2, %ymm2 2015; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2016; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2017; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2018; AVX512F-64-NEXT: retq 2019 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2020 <8 x float> %f1, <8 x float> %f2, metadata !"oeq", 2021 metadata !"fpexcept.strict") #0 2022 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2023 ret <8 x i32> %res 2024} 2025 2026define <8 x i32> @test_v8f32_ogt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2027; AVX-32-LABEL: test_v8f32_ogt_s: 2028; AVX-32: # %bb.0: 2029; AVX-32-NEXT: pushl %ebp 2030; AVX-32-NEXT: movl %esp, %ebp 2031; AVX-32-NEXT: andl $-32, %esp 2032; AVX-32-NEXT: subl $32, %esp 2033; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3 2034; AVX-32-NEXT: vcmpltps %ymm2, %ymm3, %ymm2 2035; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2036; AVX-32-NEXT: movl %ebp, %esp 2037; AVX-32-NEXT: popl %ebp 2038; AVX-32-NEXT: retl 2039; 2040; AVX-64-LABEL: test_v8f32_ogt_s: 2041; AVX-64: # %bb.0: 2042; AVX-64-NEXT: vcmpltps %ymm2, %ymm3, %ymm2 2043; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2044; AVX-64-NEXT: retq 2045; 2046; AVX512-32-LABEL: test_v8f32_ogt_s: 2047; AVX512-32: # %bb.0: 2048; AVX512-32-NEXT: pushl %ebp 2049; AVX512-32-NEXT: movl %esp, %ebp 2050; AVX512-32-NEXT: andl $-32, %esp 2051; AVX512-32-NEXT: subl $32, %esp 2052; AVX512-32-NEXT: vcmpgtps 8(%ebp), %ymm2, %k1 2053; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2054; AVX512-32-NEXT: movl %ebp, %esp 2055; AVX512-32-NEXT: popl %ebp 2056; AVX512-32-NEXT: retl 2057; 2058; AVX512-64-LABEL: test_v8f32_ogt_s: 2059; AVX512-64: # %bb.0: 2060; AVX512-64-NEXT: vcmpltps %ymm2, %ymm3, %k1 2061; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2062; AVX512-64-NEXT: retq 2063; 2064; AVX512F-32-LABEL: test_v8f32_ogt_s: 2065; AVX512F-32: # %bb.0: 2066; AVX512F-32-NEXT: pushl %ebp 2067; AVX512F-32-NEXT: movl %esp, %ebp 2068; AVX512F-32-NEXT: andl $-32, %esp 2069; AVX512F-32-NEXT: subl $32, %esp 2070; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2071; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2072; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 2073; AVX512F-32-NEXT: vcmpltps %ymm2, %ymm3, %ymm2 2074; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2075; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2076; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2077; AVX512F-32-NEXT: movl %ebp, %esp 2078; AVX512F-32-NEXT: popl %ebp 2079; AVX512F-32-NEXT: retl 2080; 2081; AVX512F-64-LABEL: test_v8f32_ogt_s: 2082; AVX512F-64: # %bb.0: 2083; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2084; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2085; AVX512F-64-NEXT: vcmpltps %ymm2, %ymm3, %ymm2 2086; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2087; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2088; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2089; AVX512F-64-NEXT: retq 2090 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2091 <8 x float> %f1, <8 x float> %f2, metadata !"ogt", 2092 metadata !"fpexcept.strict") #0 2093 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2094 ret <8 x i32> %res 2095} 2096 2097define <8 x i32> @test_v8f32_oge_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2098; AVX-32-LABEL: test_v8f32_oge_s: 2099; AVX-32: # %bb.0: 2100; AVX-32-NEXT: pushl %ebp 2101; AVX-32-NEXT: movl %esp, %ebp 2102; AVX-32-NEXT: andl $-32, %esp 2103; AVX-32-NEXT: subl $32, %esp 2104; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3 2105; AVX-32-NEXT: vcmpleps %ymm2, %ymm3, %ymm2 2106; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2107; AVX-32-NEXT: movl %ebp, %esp 2108; AVX-32-NEXT: popl %ebp 2109; AVX-32-NEXT: retl 2110; 2111; AVX-64-LABEL: test_v8f32_oge_s: 2112; AVX-64: # %bb.0: 2113; AVX-64-NEXT: vcmpleps %ymm2, %ymm3, %ymm2 2114; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2115; AVX-64-NEXT: retq 2116; 2117; AVX512-32-LABEL: test_v8f32_oge_s: 2118; AVX512-32: # %bb.0: 2119; AVX512-32-NEXT: pushl %ebp 2120; AVX512-32-NEXT: movl %esp, %ebp 2121; AVX512-32-NEXT: andl $-32, %esp 2122; AVX512-32-NEXT: subl $32, %esp 2123; AVX512-32-NEXT: vcmpgeps 8(%ebp), %ymm2, %k1 2124; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2125; AVX512-32-NEXT: movl %ebp, %esp 2126; AVX512-32-NEXT: popl %ebp 2127; AVX512-32-NEXT: retl 2128; 2129; AVX512-64-LABEL: test_v8f32_oge_s: 2130; AVX512-64: # %bb.0: 2131; AVX512-64-NEXT: vcmpleps %ymm2, %ymm3, %k1 2132; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2133; AVX512-64-NEXT: retq 2134; 2135; AVX512F-32-LABEL: test_v8f32_oge_s: 2136; AVX512F-32: # %bb.0: 2137; AVX512F-32-NEXT: pushl %ebp 2138; AVX512F-32-NEXT: movl %esp, %ebp 2139; AVX512F-32-NEXT: andl $-32, %esp 2140; AVX512F-32-NEXT: subl $32, %esp 2141; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2142; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2143; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 2144; AVX512F-32-NEXT: vcmpleps %ymm2, %ymm3, %ymm2 2145; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2146; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2147; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2148; AVX512F-32-NEXT: movl %ebp, %esp 2149; AVX512F-32-NEXT: popl %ebp 2150; AVX512F-32-NEXT: retl 2151; 2152; AVX512F-64-LABEL: test_v8f32_oge_s: 2153; AVX512F-64: # %bb.0: 2154; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2155; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2156; AVX512F-64-NEXT: vcmpleps %ymm2, %ymm3, %ymm2 2157; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2158; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2159; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2160; AVX512F-64-NEXT: retq 2161 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2162 <8 x float> %f1, <8 x float> %f2, metadata !"oge", 2163 metadata !"fpexcept.strict") #0 2164 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2165 ret <8 x i32> %res 2166} 2167 2168define <8 x i32> @test_v8f32_olt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2169; AVX-32-LABEL: test_v8f32_olt_s: 2170; AVX-32: # %bb.0: 2171; AVX-32-NEXT: pushl %ebp 2172; AVX-32-NEXT: movl %esp, %ebp 2173; AVX-32-NEXT: andl $-32, %esp 2174; AVX-32-NEXT: subl $32, %esp 2175; AVX-32-NEXT: vcmpltps 8(%ebp), %ymm2, %ymm2 2176; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2177; AVX-32-NEXT: movl %ebp, %esp 2178; AVX-32-NEXT: popl %ebp 2179; AVX-32-NEXT: retl 2180; 2181; AVX-64-LABEL: test_v8f32_olt_s: 2182; AVX-64: # %bb.0: 2183; AVX-64-NEXT: vcmpltps %ymm3, %ymm2, %ymm2 2184; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2185; AVX-64-NEXT: retq 2186; 2187; AVX512-32-LABEL: test_v8f32_olt_s: 2188; AVX512-32: # %bb.0: 2189; AVX512-32-NEXT: pushl %ebp 2190; AVX512-32-NEXT: movl %esp, %ebp 2191; AVX512-32-NEXT: andl $-32, %esp 2192; AVX512-32-NEXT: subl $32, %esp 2193; AVX512-32-NEXT: vcmpltps 8(%ebp), %ymm2, %k1 2194; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2195; AVX512-32-NEXT: movl %ebp, %esp 2196; AVX512-32-NEXT: popl %ebp 2197; AVX512-32-NEXT: retl 2198; 2199; AVX512-64-LABEL: test_v8f32_olt_s: 2200; AVX512-64: # %bb.0: 2201; AVX512-64-NEXT: vcmpltps %ymm3, %ymm2, %k1 2202; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2203; AVX512-64-NEXT: retq 2204; 2205; AVX512F-32-LABEL: test_v8f32_olt_s: 2206; AVX512F-32: # %bb.0: 2207; AVX512F-32-NEXT: pushl %ebp 2208; AVX512F-32-NEXT: movl %esp, %ebp 2209; AVX512F-32-NEXT: andl $-32, %esp 2210; AVX512F-32-NEXT: subl $32, %esp 2211; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2212; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2213; AVX512F-32-NEXT: vcmpltps 8(%ebp), %ymm2, %ymm2 2214; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2215; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2216; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2217; AVX512F-32-NEXT: movl %ebp, %esp 2218; AVX512F-32-NEXT: popl %ebp 2219; AVX512F-32-NEXT: retl 2220; 2221; AVX512F-64-LABEL: test_v8f32_olt_s: 2222; AVX512F-64: # %bb.0: 2223; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2224; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2225; AVX512F-64-NEXT: vcmpltps %ymm3, %ymm2, %ymm2 2226; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2227; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2228; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2229; AVX512F-64-NEXT: retq 2230 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2231 <8 x float> %f1, <8 x float> %f2, metadata !"olt", 2232 metadata !"fpexcept.strict") #0 2233 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2234 ret <8 x i32> %res 2235} 2236 2237define <8 x i32> @test_v8f32_ole_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2238; AVX-32-LABEL: test_v8f32_ole_s: 2239; AVX-32: # %bb.0: 2240; AVX-32-NEXT: pushl %ebp 2241; AVX-32-NEXT: movl %esp, %ebp 2242; AVX-32-NEXT: andl $-32, %esp 2243; AVX-32-NEXT: subl $32, %esp 2244; AVX-32-NEXT: vcmpleps 8(%ebp), %ymm2, %ymm2 2245; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2246; AVX-32-NEXT: movl %ebp, %esp 2247; AVX-32-NEXT: popl %ebp 2248; AVX-32-NEXT: retl 2249; 2250; AVX-64-LABEL: test_v8f32_ole_s: 2251; AVX-64: # %bb.0: 2252; AVX-64-NEXT: vcmpleps %ymm3, %ymm2, %ymm2 2253; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2254; AVX-64-NEXT: retq 2255; 2256; AVX512-32-LABEL: test_v8f32_ole_s: 2257; AVX512-32: # %bb.0: 2258; AVX512-32-NEXT: pushl %ebp 2259; AVX512-32-NEXT: movl %esp, %ebp 2260; AVX512-32-NEXT: andl $-32, %esp 2261; AVX512-32-NEXT: subl $32, %esp 2262; AVX512-32-NEXT: vcmpleps 8(%ebp), %ymm2, %k1 2263; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2264; AVX512-32-NEXT: movl %ebp, %esp 2265; AVX512-32-NEXT: popl %ebp 2266; AVX512-32-NEXT: retl 2267; 2268; AVX512-64-LABEL: test_v8f32_ole_s: 2269; AVX512-64: # %bb.0: 2270; AVX512-64-NEXT: vcmpleps %ymm3, %ymm2, %k1 2271; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2272; AVX512-64-NEXT: retq 2273; 2274; AVX512F-32-LABEL: test_v8f32_ole_s: 2275; AVX512F-32: # %bb.0: 2276; AVX512F-32-NEXT: pushl %ebp 2277; AVX512F-32-NEXT: movl %esp, %ebp 2278; AVX512F-32-NEXT: andl $-32, %esp 2279; AVX512F-32-NEXT: subl $32, %esp 2280; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2281; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2282; AVX512F-32-NEXT: vcmpleps 8(%ebp), %ymm2, %ymm2 2283; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2284; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2285; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2286; AVX512F-32-NEXT: movl %ebp, %esp 2287; AVX512F-32-NEXT: popl %ebp 2288; AVX512F-32-NEXT: retl 2289; 2290; AVX512F-64-LABEL: test_v8f32_ole_s: 2291; AVX512F-64: # %bb.0: 2292; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2293; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2294; AVX512F-64-NEXT: vcmpleps %ymm3, %ymm2, %ymm2 2295; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2296; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2297; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2298; AVX512F-64-NEXT: retq 2299 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2300 <8 x float> %f1, <8 x float> %f2, metadata !"ole", 2301 metadata !"fpexcept.strict") #0 2302 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2303 ret <8 x i32> %res 2304} 2305 2306define <8 x i32> @test_v8f32_one_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2307; AVX-32-LABEL: test_v8f32_one_s: 2308; AVX-32: # %bb.0: 2309; AVX-32-NEXT: pushl %ebp 2310; AVX-32-NEXT: movl %esp, %ebp 2311; AVX-32-NEXT: andl $-32, %esp 2312; AVX-32-NEXT: subl $32, %esp 2313; AVX-32-NEXT: vcmpneq_osps 8(%ebp), %ymm2, %ymm2 2314; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2315; AVX-32-NEXT: movl %ebp, %esp 2316; AVX-32-NEXT: popl %ebp 2317; AVX-32-NEXT: retl 2318; 2319; AVX-64-LABEL: test_v8f32_one_s: 2320; AVX-64: # %bb.0: 2321; AVX-64-NEXT: vcmpneq_osps %ymm3, %ymm2, %ymm2 2322; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2323; AVX-64-NEXT: retq 2324; 2325; AVX512-32-LABEL: test_v8f32_one_s: 2326; AVX512-32: # %bb.0: 2327; AVX512-32-NEXT: pushl %ebp 2328; AVX512-32-NEXT: movl %esp, %ebp 2329; AVX512-32-NEXT: andl $-32, %esp 2330; AVX512-32-NEXT: subl $32, %esp 2331; AVX512-32-NEXT: vcmpneq_osps 8(%ebp), %ymm2, %k1 2332; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2333; AVX512-32-NEXT: movl %ebp, %esp 2334; AVX512-32-NEXT: popl %ebp 2335; AVX512-32-NEXT: retl 2336; 2337; AVX512-64-LABEL: test_v8f32_one_s: 2338; AVX512-64: # %bb.0: 2339; AVX512-64-NEXT: vcmpneq_osps %ymm3, %ymm2, %k1 2340; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2341; AVX512-64-NEXT: retq 2342; 2343; AVX512F-32-LABEL: test_v8f32_one_s: 2344; AVX512F-32: # %bb.0: 2345; AVX512F-32-NEXT: pushl %ebp 2346; AVX512F-32-NEXT: movl %esp, %ebp 2347; AVX512F-32-NEXT: andl $-32, %esp 2348; AVX512F-32-NEXT: subl $32, %esp 2349; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2350; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2351; AVX512F-32-NEXT: vcmpneq_osps 8(%ebp), %ymm2, %ymm2 2352; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2353; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2354; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2355; AVX512F-32-NEXT: movl %ebp, %esp 2356; AVX512F-32-NEXT: popl %ebp 2357; AVX512F-32-NEXT: retl 2358; 2359; AVX512F-64-LABEL: test_v8f32_one_s: 2360; AVX512F-64: # %bb.0: 2361; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2362; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2363; AVX512F-64-NEXT: vcmpneq_osps %ymm3, %ymm2, %ymm2 2364; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2365; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2366; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2367; AVX512F-64-NEXT: retq 2368 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2369 <8 x float> %f1, <8 x float> %f2, metadata !"one", 2370 metadata !"fpexcept.strict") #0 2371 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2372 ret <8 x i32> %res 2373} 2374 2375define <8 x i32> @test_v8f32_ord_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2376; AVX-32-LABEL: test_v8f32_ord_s: 2377; AVX-32: # %bb.0: 2378; AVX-32-NEXT: pushl %ebp 2379; AVX-32-NEXT: movl %esp, %ebp 2380; AVX-32-NEXT: andl $-32, %esp 2381; AVX-32-NEXT: subl $32, %esp 2382; AVX-32-NEXT: vcmpord_sps 8(%ebp), %ymm2, %ymm2 2383; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2384; AVX-32-NEXT: movl %ebp, %esp 2385; AVX-32-NEXT: popl %ebp 2386; AVX-32-NEXT: retl 2387; 2388; AVX-64-LABEL: test_v8f32_ord_s: 2389; AVX-64: # %bb.0: 2390; AVX-64-NEXT: vcmpord_sps %ymm3, %ymm2, %ymm2 2391; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2392; AVX-64-NEXT: retq 2393; 2394; AVX512-32-LABEL: test_v8f32_ord_s: 2395; AVX512-32: # %bb.0: 2396; AVX512-32-NEXT: pushl %ebp 2397; AVX512-32-NEXT: movl %esp, %ebp 2398; AVX512-32-NEXT: andl $-32, %esp 2399; AVX512-32-NEXT: subl $32, %esp 2400; AVX512-32-NEXT: vcmpord_sps 8(%ebp), %ymm2, %k1 2401; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2402; AVX512-32-NEXT: movl %ebp, %esp 2403; AVX512-32-NEXT: popl %ebp 2404; AVX512-32-NEXT: retl 2405; 2406; AVX512-64-LABEL: test_v8f32_ord_s: 2407; AVX512-64: # %bb.0: 2408; AVX512-64-NEXT: vcmpord_sps %ymm3, %ymm2, %k1 2409; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2410; AVX512-64-NEXT: retq 2411; 2412; AVX512F-32-LABEL: test_v8f32_ord_s: 2413; AVX512F-32: # %bb.0: 2414; AVX512F-32-NEXT: pushl %ebp 2415; AVX512F-32-NEXT: movl %esp, %ebp 2416; AVX512F-32-NEXT: andl $-32, %esp 2417; AVX512F-32-NEXT: subl $32, %esp 2418; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2419; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2420; AVX512F-32-NEXT: vcmpord_sps 8(%ebp), %ymm2, %ymm2 2421; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2422; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2423; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2424; AVX512F-32-NEXT: movl %ebp, %esp 2425; AVX512F-32-NEXT: popl %ebp 2426; AVX512F-32-NEXT: retl 2427; 2428; AVX512F-64-LABEL: test_v8f32_ord_s: 2429; AVX512F-64: # %bb.0: 2430; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2431; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2432; AVX512F-64-NEXT: vcmpord_sps %ymm3, %ymm2, %ymm2 2433; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2434; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2435; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2436; AVX512F-64-NEXT: retq 2437 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2438 <8 x float> %f1, <8 x float> %f2, metadata !"ord", 2439 metadata !"fpexcept.strict") #0 2440 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2441 ret <8 x i32> %res 2442} 2443 2444define <8 x i32> @test_v8f32_ueq_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2445; AVX-32-LABEL: test_v8f32_ueq_s: 2446; AVX-32: # %bb.0: 2447; AVX-32-NEXT: pushl %ebp 2448; AVX-32-NEXT: movl %esp, %ebp 2449; AVX-32-NEXT: andl $-32, %esp 2450; AVX-32-NEXT: subl $32, %esp 2451; AVX-32-NEXT: vcmpeq_usps 8(%ebp), %ymm2, %ymm2 2452; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2453; AVX-32-NEXT: movl %ebp, %esp 2454; AVX-32-NEXT: popl %ebp 2455; AVX-32-NEXT: retl 2456; 2457; AVX-64-LABEL: test_v8f32_ueq_s: 2458; AVX-64: # %bb.0: 2459; AVX-64-NEXT: vcmpeq_usps %ymm3, %ymm2, %ymm2 2460; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2461; AVX-64-NEXT: retq 2462; 2463; AVX512-32-LABEL: test_v8f32_ueq_s: 2464; AVX512-32: # %bb.0: 2465; AVX512-32-NEXT: pushl %ebp 2466; AVX512-32-NEXT: movl %esp, %ebp 2467; AVX512-32-NEXT: andl $-32, %esp 2468; AVX512-32-NEXT: subl $32, %esp 2469; AVX512-32-NEXT: vcmpeq_usps 8(%ebp), %ymm2, %k1 2470; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2471; AVX512-32-NEXT: movl %ebp, %esp 2472; AVX512-32-NEXT: popl %ebp 2473; AVX512-32-NEXT: retl 2474; 2475; AVX512-64-LABEL: test_v8f32_ueq_s: 2476; AVX512-64: # %bb.0: 2477; AVX512-64-NEXT: vcmpeq_usps %ymm3, %ymm2, %k1 2478; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2479; AVX512-64-NEXT: retq 2480; 2481; AVX512F-32-LABEL: test_v8f32_ueq_s: 2482; AVX512F-32: # %bb.0: 2483; AVX512F-32-NEXT: pushl %ebp 2484; AVX512F-32-NEXT: movl %esp, %ebp 2485; AVX512F-32-NEXT: andl $-32, %esp 2486; AVX512F-32-NEXT: subl $32, %esp 2487; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2488; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2489; AVX512F-32-NEXT: vcmpeq_usps 8(%ebp), %ymm2, %ymm2 2490; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2491; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2492; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2493; AVX512F-32-NEXT: movl %ebp, %esp 2494; AVX512F-32-NEXT: popl %ebp 2495; AVX512F-32-NEXT: retl 2496; 2497; AVX512F-64-LABEL: test_v8f32_ueq_s: 2498; AVX512F-64: # %bb.0: 2499; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2500; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2501; AVX512F-64-NEXT: vcmpeq_usps %ymm3, %ymm2, %ymm2 2502; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2503; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2504; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2505; AVX512F-64-NEXT: retq 2506 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2507 <8 x float> %f1, <8 x float> %f2, metadata !"ueq", 2508 metadata !"fpexcept.strict") #0 2509 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2510 ret <8 x i32> %res 2511} 2512 2513define <8 x i32> @test_v8f32_ugt_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2514; AVX-32-LABEL: test_v8f32_ugt_s: 2515; AVX-32: # %bb.0: 2516; AVX-32-NEXT: pushl %ebp 2517; AVX-32-NEXT: movl %esp, %ebp 2518; AVX-32-NEXT: andl $-32, %esp 2519; AVX-32-NEXT: subl $32, %esp 2520; AVX-32-NEXT: vcmpnleps 8(%ebp), %ymm2, %ymm2 2521; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2522; AVX-32-NEXT: movl %ebp, %esp 2523; AVX-32-NEXT: popl %ebp 2524; AVX-32-NEXT: retl 2525; 2526; AVX-64-LABEL: test_v8f32_ugt_s: 2527; AVX-64: # %bb.0: 2528; AVX-64-NEXT: vcmpnleps %ymm3, %ymm2, %ymm2 2529; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2530; AVX-64-NEXT: retq 2531; 2532; AVX512-32-LABEL: test_v8f32_ugt_s: 2533; AVX512-32: # %bb.0: 2534; AVX512-32-NEXT: pushl %ebp 2535; AVX512-32-NEXT: movl %esp, %ebp 2536; AVX512-32-NEXT: andl $-32, %esp 2537; AVX512-32-NEXT: subl $32, %esp 2538; AVX512-32-NEXT: vcmpnleps 8(%ebp), %ymm2, %k1 2539; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2540; AVX512-32-NEXT: movl %ebp, %esp 2541; AVX512-32-NEXT: popl %ebp 2542; AVX512-32-NEXT: retl 2543; 2544; AVX512-64-LABEL: test_v8f32_ugt_s: 2545; AVX512-64: # %bb.0: 2546; AVX512-64-NEXT: vcmpnleps %ymm3, %ymm2, %k1 2547; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2548; AVX512-64-NEXT: retq 2549; 2550; AVX512F-32-LABEL: test_v8f32_ugt_s: 2551; AVX512F-32: # %bb.0: 2552; AVX512F-32-NEXT: pushl %ebp 2553; AVX512F-32-NEXT: movl %esp, %ebp 2554; AVX512F-32-NEXT: andl $-32, %esp 2555; AVX512F-32-NEXT: subl $32, %esp 2556; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2557; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2558; AVX512F-32-NEXT: vcmpnleps 8(%ebp), %ymm2, %ymm2 2559; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2560; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2561; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2562; AVX512F-32-NEXT: movl %ebp, %esp 2563; AVX512F-32-NEXT: popl %ebp 2564; AVX512F-32-NEXT: retl 2565; 2566; AVX512F-64-LABEL: test_v8f32_ugt_s: 2567; AVX512F-64: # %bb.0: 2568; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2569; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2570; AVX512F-64-NEXT: vcmpnleps %ymm3, %ymm2, %ymm2 2571; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2572; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2573; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2574; AVX512F-64-NEXT: retq 2575 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2576 <8 x float> %f1, <8 x float> %f2, metadata !"ugt", 2577 metadata !"fpexcept.strict") #0 2578 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2579 ret <8 x i32> %res 2580} 2581 2582define <8 x i32> @test_v8f32_uge_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2583; AVX-32-LABEL: test_v8f32_uge_s: 2584; AVX-32: # %bb.0: 2585; AVX-32-NEXT: pushl %ebp 2586; AVX-32-NEXT: movl %esp, %ebp 2587; AVX-32-NEXT: andl $-32, %esp 2588; AVX-32-NEXT: subl $32, %esp 2589; AVX-32-NEXT: vcmpnltps 8(%ebp), %ymm2, %ymm2 2590; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2591; AVX-32-NEXT: movl %ebp, %esp 2592; AVX-32-NEXT: popl %ebp 2593; AVX-32-NEXT: retl 2594; 2595; AVX-64-LABEL: test_v8f32_uge_s: 2596; AVX-64: # %bb.0: 2597; AVX-64-NEXT: vcmpnltps %ymm3, %ymm2, %ymm2 2598; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2599; AVX-64-NEXT: retq 2600; 2601; AVX512-32-LABEL: test_v8f32_uge_s: 2602; AVX512-32: # %bb.0: 2603; AVX512-32-NEXT: pushl %ebp 2604; AVX512-32-NEXT: movl %esp, %ebp 2605; AVX512-32-NEXT: andl $-32, %esp 2606; AVX512-32-NEXT: subl $32, %esp 2607; AVX512-32-NEXT: vcmpnltps 8(%ebp), %ymm2, %k1 2608; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2609; AVX512-32-NEXT: movl %ebp, %esp 2610; AVX512-32-NEXT: popl %ebp 2611; AVX512-32-NEXT: retl 2612; 2613; AVX512-64-LABEL: test_v8f32_uge_s: 2614; AVX512-64: # %bb.0: 2615; AVX512-64-NEXT: vcmpnltps %ymm3, %ymm2, %k1 2616; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2617; AVX512-64-NEXT: retq 2618; 2619; AVX512F-32-LABEL: test_v8f32_uge_s: 2620; AVX512F-32: # %bb.0: 2621; AVX512F-32-NEXT: pushl %ebp 2622; AVX512F-32-NEXT: movl %esp, %ebp 2623; AVX512F-32-NEXT: andl $-32, %esp 2624; AVX512F-32-NEXT: subl $32, %esp 2625; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2626; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2627; AVX512F-32-NEXT: vcmpnltps 8(%ebp), %ymm2, %ymm2 2628; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2629; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2630; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2631; AVX512F-32-NEXT: movl %ebp, %esp 2632; AVX512F-32-NEXT: popl %ebp 2633; AVX512F-32-NEXT: retl 2634; 2635; AVX512F-64-LABEL: test_v8f32_uge_s: 2636; AVX512F-64: # %bb.0: 2637; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2638; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2639; AVX512F-64-NEXT: vcmpnltps %ymm3, %ymm2, %ymm2 2640; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2641; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2642; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2643; AVX512F-64-NEXT: retq 2644 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2645 <8 x float> %f1, <8 x float> %f2, metadata !"uge", 2646 metadata !"fpexcept.strict") #0 2647 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2648 ret <8 x i32> %res 2649} 2650 2651define <8 x i32> @test_v8f32_ult_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2652; AVX-32-LABEL: test_v8f32_ult_s: 2653; AVX-32: # %bb.0: 2654; AVX-32-NEXT: pushl %ebp 2655; AVX-32-NEXT: movl %esp, %ebp 2656; AVX-32-NEXT: andl $-32, %esp 2657; AVX-32-NEXT: subl $32, %esp 2658; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3 2659; AVX-32-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2 2660; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2661; AVX-32-NEXT: movl %ebp, %esp 2662; AVX-32-NEXT: popl %ebp 2663; AVX-32-NEXT: retl 2664; 2665; AVX-64-LABEL: test_v8f32_ult_s: 2666; AVX-64: # %bb.0: 2667; AVX-64-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2 2668; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2669; AVX-64-NEXT: retq 2670; 2671; AVX512-32-LABEL: test_v8f32_ult_s: 2672; AVX512-32: # %bb.0: 2673; AVX512-32-NEXT: pushl %ebp 2674; AVX512-32-NEXT: movl %esp, %ebp 2675; AVX512-32-NEXT: andl $-32, %esp 2676; AVX512-32-NEXT: subl $32, %esp 2677; AVX512-32-NEXT: vcmpngeps 8(%ebp), %ymm2, %k1 2678; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2679; AVX512-32-NEXT: movl %ebp, %esp 2680; AVX512-32-NEXT: popl %ebp 2681; AVX512-32-NEXT: retl 2682; 2683; AVX512-64-LABEL: test_v8f32_ult_s: 2684; AVX512-64: # %bb.0: 2685; AVX512-64-NEXT: vcmpnleps %ymm2, %ymm3, %k1 2686; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2687; AVX512-64-NEXT: retq 2688; 2689; AVX512F-32-LABEL: test_v8f32_ult_s: 2690; AVX512F-32: # %bb.0: 2691; AVX512F-32-NEXT: pushl %ebp 2692; AVX512F-32-NEXT: movl %esp, %ebp 2693; AVX512F-32-NEXT: andl $-32, %esp 2694; AVX512F-32-NEXT: subl $32, %esp 2695; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2696; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2697; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 2698; AVX512F-32-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2 2699; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2700; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2701; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2702; AVX512F-32-NEXT: movl %ebp, %esp 2703; AVX512F-32-NEXT: popl %ebp 2704; AVX512F-32-NEXT: retl 2705; 2706; AVX512F-64-LABEL: test_v8f32_ult_s: 2707; AVX512F-64: # %bb.0: 2708; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2709; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2710; AVX512F-64-NEXT: vcmpnleps %ymm2, %ymm3, %ymm2 2711; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2712; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2713; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2714; AVX512F-64-NEXT: retq 2715 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2716 <8 x float> %f1, <8 x float> %f2, metadata !"ult", 2717 metadata !"fpexcept.strict") #0 2718 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2719 ret <8 x i32> %res 2720} 2721 2722define <8 x i32> @test_v8f32_ule_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2723; AVX-32-LABEL: test_v8f32_ule_s: 2724; AVX-32: # %bb.0: 2725; AVX-32-NEXT: pushl %ebp 2726; AVX-32-NEXT: movl %esp, %ebp 2727; AVX-32-NEXT: andl $-32, %esp 2728; AVX-32-NEXT: subl $32, %esp 2729; AVX-32-NEXT: vmovaps 8(%ebp), %ymm3 2730; AVX-32-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2 2731; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2732; AVX-32-NEXT: movl %ebp, %esp 2733; AVX-32-NEXT: popl %ebp 2734; AVX-32-NEXT: retl 2735; 2736; AVX-64-LABEL: test_v8f32_ule_s: 2737; AVX-64: # %bb.0: 2738; AVX-64-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2 2739; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2740; AVX-64-NEXT: retq 2741; 2742; AVX512-32-LABEL: test_v8f32_ule_s: 2743; AVX512-32: # %bb.0: 2744; AVX512-32-NEXT: pushl %ebp 2745; AVX512-32-NEXT: movl %esp, %ebp 2746; AVX512-32-NEXT: andl $-32, %esp 2747; AVX512-32-NEXT: subl $32, %esp 2748; AVX512-32-NEXT: vcmpngtps 8(%ebp), %ymm2, %k1 2749; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2750; AVX512-32-NEXT: movl %ebp, %esp 2751; AVX512-32-NEXT: popl %ebp 2752; AVX512-32-NEXT: retl 2753; 2754; AVX512-64-LABEL: test_v8f32_ule_s: 2755; AVX512-64: # %bb.0: 2756; AVX512-64-NEXT: vcmpnltps %ymm2, %ymm3, %k1 2757; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2758; AVX512-64-NEXT: retq 2759; 2760; AVX512F-32-LABEL: test_v8f32_ule_s: 2761; AVX512F-32: # %bb.0: 2762; AVX512F-32-NEXT: pushl %ebp 2763; AVX512F-32-NEXT: movl %esp, %ebp 2764; AVX512F-32-NEXT: andl $-32, %esp 2765; AVX512F-32-NEXT: subl $32, %esp 2766; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2767; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2768; AVX512F-32-NEXT: vmovaps 8(%ebp), %ymm3 2769; AVX512F-32-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2 2770; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2771; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2772; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2773; AVX512F-32-NEXT: movl %ebp, %esp 2774; AVX512F-32-NEXT: popl %ebp 2775; AVX512F-32-NEXT: retl 2776; 2777; AVX512F-64-LABEL: test_v8f32_ule_s: 2778; AVX512F-64: # %bb.0: 2779; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2780; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2781; AVX512F-64-NEXT: vcmpnltps %ymm2, %ymm3, %ymm2 2782; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2783; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2784; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2785; AVX512F-64-NEXT: retq 2786 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2787 <8 x float> %f1, <8 x float> %f2, metadata !"ule", 2788 metadata !"fpexcept.strict") #0 2789 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2790 ret <8 x i32> %res 2791} 2792 2793define <8 x i32> @test_v8f32_une_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2794; AVX-32-LABEL: test_v8f32_une_s: 2795; AVX-32: # %bb.0: 2796; AVX-32-NEXT: pushl %ebp 2797; AVX-32-NEXT: movl %esp, %ebp 2798; AVX-32-NEXT: andl $-32, %esp 2799; AVX-32-NEXT: subl $32, %esp 2800; AVX-32-NEXT: vcmpneq_usps 8(%ebp), %ymm2, %ymm2 2801; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2802; AVX-32-NEXT: movl %ebp, %esp 2803; AVX-32-NEXT: popl %ebp 2804; AVX-32-NEXT: retl 2805; 2806; AVX-64-LABEL: test_v8f32_une_s: 2807; AVX-64: # %bb.0: 2808; AVX-64-NEXT: vcmpneq_usps %ymm3, %ymm2, %ymm2 2809; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2810; AVX-64-NEXT: retq 2811; 2812; AVX512-32-LABEL: test_v8f32_une_s: 2813; AVX512-32: # %bb.0: 2814; AVX512-32-NEXT: pushl %ebp 2815; AVX512-32-NEXT: movl %esp, %ebp 2816; AVX512-32-NEXT: andl $-32, %esp 2817; AVX512-32-NEXT: subl $32, %esp 2818; AVX512-32-NEXT: vcmpneq_usps 8(%ebp), %ymm2, %k1 2819; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2820; AVX512-32-NEXT: movl %ebp, %esp 2821; AVX512-32-NEXT: popl %ebp 2822; AVX512-32-NEXT: retl 2823; 2824; AVX512-64-LABEL: test_v8f32_une_s: 2825; AVX512-64: # %bb.0: 2826; AVX512-64-NEXT: vcmpneq_usps %ymm3, %ymm2, %k1 2827; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2828; AVX512-64-NEXT: retq 2829; 2830; AVX512F-32-LABEL: test_v8f32_une_s: 2831; AVX512F-32: # %bb.0: 2832; AVX512F-32-NEXT: pushl %ebp 2833; AVX512F-32-NEXT: movl %esp, %ebp 2834; AVX512F-32-NEXT: andl $-32, %esp 2835; AVX512F-32-NEXT: subl $32, %esp 2836; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2837; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2838; AVX512F-32-NEXT: vcmpneq_usps 8(%ebp), %ymm2, %ymm2 2839; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2840; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2841; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2842; AVX512F-32-NEXT: movl %ebp, %esp 2843; AVX512F-32-NEXT: popl %ebp 2844; AVX512F-32-NEXT: retl 2845; 2846; AVX512F-64-LABEL: test_v8f32_une_s: 2847; AVX512F-64: # %bb.0: 2848; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2849; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2850; AVX512F-64-NEXT: vcmpneq_usps %ymm3, %ymm2, %ymm2 2851; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2852; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2853; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2854; AVX512F-64-NEXT: retq 2855 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2856 <8 x float> %f1, <8 x float> %f2, metadata !"une", 2857 metadata !"fpexcept.strict") #0 2858 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2859 ret <8 x i32> %res 2860} 2861 2862define <8 x i32> @test_v8f32_uno_s(<8 x i32> %a, <8 x i32> %b, <8 x float> %f1, <8 x float> %f2) #0 { 2863; AVX-32-LABEL: test_v8f32_uno_s: 2864; AVX-32: # %bb.0: 2865; AVX-32-NEXT: pushl %ebp 2866; AVX-32-NEXT: movl %esp, %ebp 2867; AVX-32-NEXT: andl $-32, %esp 2868; AVX-32-NEXT: subl $32, %esp 2869; AVX-32-NEXT: vcmpunord_sps 8(%ebp), %ymm2, %ymm2 2870; AVX-32-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2871; AVX-32-NEXT: movl %ebp, %esp 2872; AVX-32-NEXT: popl %ebp 2873; AVX-32-NEXT: retl 2874; 2875; AVX-64-LABEL: test_v8f32_uno_s: 2876; AVX-64: # %bb.0: 2877; AVX-64-NEXT: vcmpunord_sps %ymm3, %ymm2, %ymm2 2878; AVX-64-NEXT: vblendvps %ymm2, %ymm0, %ymm1, %ymm0 2879; AVX-64-NEXT: retq 2880; 2881; AVX512-32-LABEL: test_v8f32_uno_s: 2882; AVX512-32: # %bb.0: 2883; AVX512-32-NEXT: pushl %ebp 2884; AVX512-32-NEXT: movl %esp, %ebp 2885; AVX512-32-NEXT: andl $-32, %esp 2886; AVX512-32-NEXT: subl $32, %esp 2887; AVX512-32-NEXT: vcmpunord_sps 8(%ebp), %ymm2, %k1 2888; AVX512-32-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2889; AVX512-32-NEXT: movl %ebp, %esp 2890; AVX512-32-NEXT: popl %ebp 2891; AVX512-32-NEXT: retl 2892; 2893; AVX512-64-LABEL: test_v8f32_uno_s: 2894; AVX512-64: # %bb.0: 2895; AVX512-64-NEXT: vcmpunord_sps %ymm3, %ymm2, %k1 2896; AVX512-64-NEXT: vpblendmd %ymm0, %ymm1, %ymm0 {%k1} 2897; AVX512-64-NEXT: retq 2898; 2899; AVX512F-32-LABEL: test_v8f32_uno_s: 2900; AVX512F-32: # %bb.0: 2901; AVX512F-32-NEXT: pushl %ebp 2902; AVX512F-32-NEXT: movl %esp, %ebp 2903; AVX512F-32-NEXT: andl $-32, %esp 2904; AVX512F-32-NEXT: subl $32, %esp 2905; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2906; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2907; AVX512F-32-NEXT: vcmpunord_sps 8(%ebp), %ymm2, %ymm2 2908; AVX512F-32-NEXT: vptestmd %zmm2, %zmm2, %k1 2909; AVX512F-32-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2910; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2911; AVX512F-32-NEXT: movl %ebp, %esp 2912; AVX512F-32-NEXT: popl %ebp 2913; AVX512F-32-NEXT: retl 2914; 2915; AVX512F-64-LABEL: test_v8f32_uno_s: 2916; AVX512F-64: # %bb.0: 2917; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2918; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2919; AVX512F-64-NEXT: vcmpunord_sps %ymm3, %ymm2, %ymm2 2920; AVX512F-64-NEXT: vptestmd %zmm2, %zmm2, %k1 2921; AVX512F-64-NEXT: vpblendmd %zmm0, %zmm1, %zmm0 {%k1} 2922; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2923; AVX512F-64-NEXT: retq 2924 %cond = call <8 x i1> @llvm.experimental.constrained.fcmps.v8f32( 2925 <8 x float> %f1, <8 x float> %f2, metadata !"uno", 2926 metadata !"fpexcept.strict") #0 2927 %res = select <8 x i1> %cond, <8 x i32> %a, <8 x i32> %b 2928 ret <8 x i32> %res 2929} 2930 2931define <4 x i64> @test_v4f64_oeq_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 2932; AVX-32-LABEL: test_v4f64_oeq_s: 2933; AVX-32: # %bb.0: 2934; AVX-32-NEXT: pushl %ebp 2935; AVX-32-NEXT: movl %esp, %ebp 2936; AVX-32-NEXT: andl $-32, %esp 2937; AVX-32-NEXT: subl $32, %esp 2938; AVX-32-NEXT: vcmpeq_ospd 8(%ebp), %ymm2, %ymm2 2939; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 2940; AVX-32-NEXT: movl %ebp, %esp 2941; AVX-32-NEXT: popl %ebp 2942; AVX-32-NEXT: retl 2943; 2944; AVX-64-LABEL: test_v4f64_oeq_s: 2945; AVX-64: # %bb.0: 2946; AVX-64-NEXT: vcmpeq_ospd %ymm3, %ymm2, %ymm2 2947; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 2948; AVX-64-NEXT: retq 2949; 2950; AVX512-32-LABEL: test_v4f64_oeq_s: 2951; AVX512-32: # %bb.0: 2952; AVX512-32-NEXT: pushl %ebp 2953; AVX512-32-NEXT: movl %esp, %ebp 2954; AVX512-32-NEXT: andl $-32, %esp 2955; AVX512-32-NEXT: subl $32, %esp 2956; AVX512-32-NEXT: vcmpeq_ospd 8(%ebp), %ymm2, %k1 2957; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 2958; AVX512-32-NEXT: movl %ebp, %esp 2959; AVX512-32-NEXT: popl %ebp 2960; AVX512-32-NEXT: retl 2961; 2962; AVX512-64-LABEL: test_v4f64_oeq_s: 2963; AVX512-64: # %bb.0: 2964; AVX512-64-NEXT: vcmpeq_ospd %ymm3, %ymm2, %k1 2965; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 2966; AVX512-64-NEXT: retq 2967; 2968; AVX512F-32-LABEL: test_v4f64_oeq_s: 2969; AVX512F-32: # %bb.0: 2970; AVX512F-32-NEXT: pushl %ebp 2971; AVX512F-32-NEXT: movl %esp, %ebp 2972; AVX512F-32-NEXT: andl $-32, %esp 2973; AVX512F-32-NEXT: subl $32, %esp 2974; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2975; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2976; AVX512F-32-NEXT: vcmpeq_ospd 8(%ebp), %ymm2, %ymm2 2977; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 2978; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 2979; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2980; AVX512F-32-NEXT: movl %ebp, %esp 2981; AVX512F-32-NEXT: popl %ebp 2982; AVX512F-32-NEXT: retl 2983; 2984; AVX512F-64-LABEL: test_v4f64_oeq_s: 2985; AVX512F-64: # %bb.0: 2986; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 2987; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 2988; AVX512F-64-NEXT: vcmpeq_ospd %ymm3, %ymm2, %ymm2 2989; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 2990; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 2991; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 2992; AVX512F-64-NEXT: retq 2993 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 2994 <4 x double> %f1, <4 x double> %f2, metadata !"oeq", 2995 metadata !"fpexcept.strict") #0 2996 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 2997 ret <4 x i64> %res 2998} 2999 3000define <4 x i64> @test_v4f64_ogt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3001; AVX-32-LABEL: test_v4f64_ogt_s: 3002; AVX-32: # %bb.0: 3003; AVX-32-NEXT: pushl %ebp 3004; AVX-32-NEXT: movl %esp, %ebp 3005; AVX-32-NEXT: andl $-32, %esp 3006; AVX-32-NEXT: subl $32, %esp 3007; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3 3008; AVX-32-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2 3009; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3010; AVX-32-NEXT: movl %ebp, %esp 3011; AVX-32-NEXT: popl %ebp 3012; AVX-32-NEXT: retl 3013; 3014; AVX-64-LABEL: test_v4f64_ogt_s: 3015; AVX-64: # %bb.0: 3016; AVX-64-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2 3017; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3018; AVX-64-NEXT: retq 3019; 3020; AVX512-32-LABEL: test_v4f64_ogt_s: 3021; AVX512-32: # %bb.0: 3022; AVX512-32-NEXT: pushl %ebp 3023; AVX512-32-NEXT: movl %esp, %ebp 3024; AVX512-32-NEXT: andl $-32, %esp 3025; AVX512-32-NEXT: subl $32, %esp 3026; AVX512-32-NEXT: vcmpgtpd 8(%ebp), %ymm2, %k1 3027; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3028; AVX512-32-NEXT: movl %ebp, %esp 3029; AVX512-32-NEXT: popl %ebp 3030; AVX512-32-NEXT: retl 3031; 3032; AVX512-64-LABEL: test_v4f64_ogt_s: 3033; AVX512-64: # %bb.0: 3034; AVX512-64-NEXT: vcmpltpd %ymm2, %ymm3, %k1 3035; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3036; AVX512-64-NEXT: retq 3037; 3038; AVX512F-32-LABEL: test_v4f64_ogt_s: 3039; AVX512F-32: # %bb.0: 3040; AVX512F-32-NEXT: pushl %ebp 3041; AVX512F-32-NEXT: movl %esp, %ebp 3042; AVX512F-32-NEXT: andl $-32, %esp 3043; AVX512F-32-NEXT: subl $32, %esp 3044; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3045; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3046; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 3047; AVX512F-32-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2 3048; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3049; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3050; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3051; AVX512F-32-NEXT: movl %ebp, %esp 3052; AVX512F-32-NEXT: popl %ebp 3053; AVX512F-32-NEXT: retl 3054; 3055; AVX512F-64-LABEL: test_v4f64_ogt_s: 3056; AVX512F-64: # %bb.0: 3057; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3058; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3059; AVX512F-64-NEXT: vcmpltpd %ymm2, %ymm3, %ymm2 3060; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3061; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3062; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3063; AVX512F-64-NEXT: retq 3064 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3065 <4 x double> %f1, <4 x double> %f2, metadata !"ogt", 3066 metadata !"fpexcept.strict") #0 3067 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3068 ret <4 x i64> %res 3069} 3070 3071define <4 x i64> @test_v4f64_oge_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3072; AVX-32-LABEL: test_v4f64_oge_s: 3073; AVX-32: # %bb.0: 3074; AVX-32-NEXT: pushl %ebp 3075; AVX-32-NEXT: movl %esp, %ebp 3076; AVX-32-NEXT: andl $-32, %esp 3077; AVX-32-NEXT: subl $32, %esp 3078; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3 3079; AVX-32-NEXT: vcmplepd %ymm2, %ymm3, %ymm2 3080; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3081; AVX-32-NEXT: movl %ebp, %esp 3082; AVX-32-NEXT: popl %ebp 3083; AVX-32-NEXT: retl 3084; 3085; AVX-64-LABEL: test_v4f64_oge_s: 3086; AVX-64: # %bb.0: 3087; AVX-64-NEXT: vcmplepd %ymm2, %ymm3, %ymm2 3088; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3089; AVX-64-NEXT: retq 3090; 3091; AVX512-32-LABEL: test_v4f64_oge_s: 3092; AVX512-32: # %bb.0: 3093; AVX512-32-NEXT: pushl %ebp 3094; AVX512-32-NEXT: movl %esp, %ebp 3095; AVX512-32-NEXT: andl $-32, %esp 3096; AVX512-32-NEXT: subl $32, %esp 3097; AVX512-32-NEXT: vcmpgepd 8(%ebp), %ymm2, %k1 3098; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3099; AVX512-32-NEXT: movl %ebp, %esp 3100; AVX512-32-NEXT: popl %ebp 3101; AVX512-32-NEXT: retl 3102; 3103; AVX512-64-LABEL: test_v4f64_oge_s: 3104; AVX512-64: # %bb.0: 3105; AVX512-64-NEXT: vcmplepd %ymm2, %ymm3, %k1 3106; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3107; AVX512-64-NEXT: retq 3108; 3109; AVX512F-32-LABEL: test_v4f64_oge_s: 3110; AVX512F-32: # %bb.0: 3111; AVX512F-32-NEXT: pushl %ebp 3112; AVX512F-32-NEXT: movl %esp, %ebp 3113; AVX512F-32-NEXT: andl $-32, %esp 3114; AVX512F-32-NEXT: subl $32, %esp 3115; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3116; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3117; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 3118; AVX512F-32-NEXT: vcmplepd %ymm2, %ymm3, %ymm2 3119; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3120; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3121; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3122; AVX512F-32-NEXT: movl %ebp, %esp 3123; AVX512F-32-NEXT: popl %ebp 3124; AVX512F-32-NEXT: retl 3125; 3126; AVX512F-64-LABEL: test_v4f64_oge_s: 3127; AVX512F-64: # %bb.0: 3128; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3129; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3130; AVX512F-64-NEXT: vcmplepd %ymm2, %ymm3, %ymm2 3131; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3132; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3133; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3134; AVX512F-64-NEXT: retq 3135 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3136 <4 x double> %f1, <4 x double> %f2, metadata !"oge", 3137 metadata !"fpexcept.strict") #0 3138 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3139 ret <4 x i64> %res 3140} 3141 3142define <4 x i64> @test_v4f64_olt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3143; AVX-32-LABEL: test_v4f64_olt_s: 3144; AVX-32: # %bb.0: 3145; AVX-32-NEXT: pushl %ebp 3146; AVX-32-NEXT: movl %esp, %ebp 3147; AVX-32-NEXT: andl $-32, %esp 3148; AVX-32-NEXT: subl $32, %esp 3149; AVX-32-NEXT: vcmpltpd 8(%ebp), %ymm2, %ymm2 3150; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3151; AVX-32-NEXT: movl %ebp, %esp 3152; AVX-32-NEXT: popl %ebp 3153; AVX-32-NEXT: retl 3154; 3155; AVX-64-LABEL: test_v4f64_olt_s: 3156; AVX-64: # %bb.0: 3157; AVX-64-NEXT: vcmpltpd %ymm3, %ymm2, %ymm2 3158; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3159; AVX-64-NEXT: retq 3160; 3161; AVX512-32-LABEL: test_v4f64_olt_s: 3162; AVX512-32: # %bb.0: 3163; AVX512-32-NEXT: pushl %ebp 3164; AVX512-32-NEXT: movl %esp, %ebp 3165; AVX512-32-NEXT: andl $-32, %esp 3166; AVX512-32-NEXT: subl $32, %esp 3167; AVX512-32-NEXT: vcmpltpd 8(%ebp), %ymm2, %k1 3168; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3169; AVX512-32-NEXT: movl %ebp, %esp 3170; AVX512-32-NEXT: popl %ebp 3171; AVX512-32-NEXT: retl 3172; 3173; AVX512-64-LABEL: test_v4f64_olt_s: 3174; AVX512-64: # %bb.0: 3175; AVX512-64-NEXT: vcmpltpd %ymm3, %ymm2, %k1 3176; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3177; AVX512-64-NEXT: retq 3178; 3179; AVX512F-32-LABEL: test_v4f64_olt_s: 3180; AVX512F-32: # %bb.0: 3181; AVX512F-32-NEXT: pushl %ebp 3182; AVX512F-32-NEXT: movl %esp, %ebp 3183; AVX512F-32-NEXT: andl $-32, %esp 3184; AVX512F-32-NEXT: subl $32, %esp 3185; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3186; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3187; AVX512F-32-NEXT: vcmpltpd 8(%ebp), %ymm2, %ymm2 3188; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3189; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3190; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3191; AVX512F-32-NEXT: movl %ebp, %esp 3192; AVX512F-32-NEXT: popl %ebp 3193; AVX512F-32-NEXT: retl 3194; 3195; AVX512F-64-LABEL: test_v4f64_olt_s: 3196; AVX512F-64: # %bb.0: 3197; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3198; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3199; AVX512F-64-NEXT: vcmpltpd %ymm3, %ymm2, %ymm2 3200; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3201; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3202; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3203; AVX512F-64-NEXT: retq 3204 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3205 <4 x double> %f1, <4 x double> %f2, metadata !"olt", 3206 metadata !"fpexcept.strict") #0 3207 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3208 ret <4 x i64> %res 3209} 3210 3211define <4 x i64> @test_v4f64_ole_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3212; AVX-32-LABEL: test_v4f64_ole_s: 3213; AVX-32: # %bb.0: 3214; AVX-32-NEXT: pushl %ebp 3215; AVX-32-NEXT: movl %esp, %ebp 3216; AVX-32-NEXT: andl $-32, %esp 3217; AVX-32-NEXT: subl $32, %esp 3218; AVX-32-NEXT: vcmplepd 8(%ebp), %ymm2, %ymm2 3219; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3220; AVX-32-NEXT: movl %ebp, %esp 3221; AVX-32-NEXT: popl %ebp 3222; AVX-32-NEXT: retl 3223; 3224; AVX-64-LABEL: test_v4f64_ole_s: 3225; AVX-64: # %bb.0: 3226; AVX-64-NEXT: vcmplepd %ymm3, %ymm2, %ymm2 3227; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3228; AVX-64-NEXT: retq 3229; 3230; AVX512-32-LABEL: test_v4f64_ole_s: 3231; AVX512-32: # %bb.0: 3232; AVX512-32-NEXT: pushl %ebp 3233; AVX512-32-NEXT: movl %esp, %ebp 3234; AVX512-32-NEXT: andl $-32, %esp 3235; AVX512-32-NEXT: subl $32, %esp 3236; AVX512-32-NEXT: vcmplepd 8(%ebp), %ymm2, %k1 3237; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3238; AVX512-32-NEXT: movl %ebp, %esp 3239; AVX512-32-NEXT: popl %ebp 3240; AVX512-32-NEXT: retl 3241; 3242; AVX512-64-LABEL: test_v4f64_ole_s: 3243; AVX512-64: # %bb.0: 3244; AVX512-64-NEXT: vcmplepd %ymm3, %ymm2, %k1 3245; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3246; AVX512-64-NEXT: retq 3247; 3248; AVX512F-32-LABEL: test_v4f64_ole_s: 3249; AVX512F-32: # %bb.0: 3250; AVX512F-32-NEXT: pushl %ebp 3251; AVX512F-32-NEXT: movl %esp, %ebp 3252; AVX512F-32-NEXT: andl $-32, %esp 3253; AVX512F-32-NEXT: subl $32, %esp 3254; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3255; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3256; AVX512F-32-NEXT: vcmplepd 8(%ebp), %ymm2, %ymm2 3257; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3258; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3259; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3260; AVX512F-32-NEXT: movl %ebp, %esp 3261; AVX512F-32-NEXT: popl %ebp 3262; AVX512F-32-NEXT: retl 3263; 3264; AVX512F-64-LABEL: test_v4f64_ole_s: 3265; AVX512F-64: # %bb.0: 3266; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3267; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3268; AVX512F-64-NEXT: vcmplepd %ymm3, %ymm2, %ymm2 3269; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3270; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3271; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3272; AVX512F-64-NEXT: retq 3273 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3274 <4 x double> %f1, <4 x double> %f2, metadata !"ole", 3275 metadata !"fpexcept.strict") #0 3276 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3277 ret <4 x i64> %res 3278} 3279 3280define <4 x i64> @test_v4f64_one_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3281; AVX-32-LABEL: test_v4f64_one_s: 3282; AVX-32: # %bb.0: 3283; AVX-32-NEXT: pushl %ebp 3284; AVX-32-NEXT: movl %esp, %ebp 3285; AVX-32-NEXT: andl $-32, %esp 3286; AVX-32-NEXT: subl $32, %esp 3287; AVX-32-NEXT: vcmpneq_ospd 8(%ebp), %ymm2, %ymm2 3288; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3289; AVX-32-NEXT: movl %ebp, %esp 3290; AVX-32-NEXT: popl %ebp 3291; AVX-32-NEXT: retl 3292; 3293; AVX-64-LABEL: test_v4f64_one_s: 3294; AVX-64: # %bb.0: 3295; AVX-64-NEXT: vcmpneq_ospd %ymm3, %ymm2, %ymm2 3296; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3297; AVX-64-NEXT: retq 3298; 3299; AVX512-32-LABEL: test_v4f64_one_s: 3300; AVX512-32: # %bb.0: 3301; AVX512-32-NEXT: pushl %ebp 3302; AVX512-32-NEXT: movl %esp, %ebp 3303; AVX512-32-NEXT: andl $-32, %esp 3304; AVX512-32-NEXT: subl $32, %esp 3305; AVX512-32-NEXT: vcmpneq_ospd 8(%ebp), %ymm2, %k1 3306; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3307; AVX512-32-NEXT: movl %ebp, %esp 3308; AVX512-32-NEXT: popl %ebp 3309; AVX512-32-NEXT: retl 3310; 3311; AVX512-64-LABEL: test_v4f64_one_s: 3312; AVX512-64: # %bb.0: 3313; AVX512-64-NEXT: vcmpneq_ospd %ymm3, %ymm2, %k1 3314; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3315; AVX512-64-NEXT: retq 3316; 3317; AVX512F-32-LABEL: test_v4f64_one_s: 3318; AVX512F-32: # %bb.0: 3319; AVX512F-32-NEXT: pushl %ebp 3320; AVX512F-32-NEXT: movl %esp, %ebp 3321; AVX512F-32-NEXT: andl $-32, %esp 3322; AVX512F-32-NEXT: subl $32, %esp 3323; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3324; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3325; AVX512F-32-NEXT: vcmpneq_ospd 8(%ebp), %ymm2, %ymm2 3326; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3327; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3328; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3329; AVX512F-32-NEXT: movl %ebp, %esp 3330; AVX512F-32-NEXT: popl %ebp 3331; AVX512F-32-NEXT: retl 3332; 3333; AVX512F-64-LABEL: test_v4f64_one_s: 3334; AVX512F-64: # %bb.0: 3335; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3336; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3337; AVX512F-64-NEXT: vcmpneq_ospd %ymm3, %ymm2, %ymm2 3338; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3339; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3340; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3341; AVX512F-64-NEXT: retq 3342 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3343 <4 x double> %f1, <4 x double> %f2, metadata !"one", 3344 metadata !"fpexcept.strict") #0 3345 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3346 ret <4 x i64> %res 3347} 3348 3349define <4 x i64> @test_v4f64_ord_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3350; AVX-32-LABEL: test_v4f64_ord_s: 3351; AVX-32: # %bb.0: 3352; AVX-32-NEXT: pushl %ebp 3353; AVX-32-NEXT: movl %esp, %ebp 3354; AVX-32-NEXT: andl $-32, %esp 3355; AVX-32-NEXT: subl $32, %esp 3356; AVX-32-NEXT: vcmpord_spd 8(%ebp), %ymm2, %ymm2 3357; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3358; AVX-32-NEXT: movl %ebp, %esp 3359; AVX-32-NEXT: popl %ebp 3360; AVX-32-NEXT: retl 3361; 3362; AVX-64-LABEL: test_v4f64_ord_s: 3363; AVX-64: # %bb.0: 3364; AVX-64-NEXT: vcmpord_spd %ymm3, %ymm2, %ymm2 3365; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3366; AVX-64-NEXT: retq 3367; 3368; AVX512-32-LABEL: test_v4f64_ord_s: 3369; AVX512-32: # %bb.0: 3370; AVX512-32-NEXT: pushl %ebp 3371; AVX512-32-NEXT: movl %esp, %ebp 3372; AVX512-32-NEXT: andl $-32, %esp 3373; AVX512-32-NEXT: subl $32, %esp 3374; AVX512-32-NEXT: vcmpord_spd 8(%ebp), %ymm2, %k1 3375; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3376; AVX512-32-NEXT: movl %ebp, %esp 3377; AVX512-32-NEXT: popl %ebp 3378; AVX512-32-NEXT: retl 3379; 3380; AVX512-64-LABEL: test_v4f64_ord_s: 3381; AVX512-64: # %bb.0: 3382; AVX512-64-NEXT: vcmpord_spd %ymm3, %ymm2, %k1 3383; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3384; AVX512-64-NEXT: retq 3385; 3386; AVX512F-32-LABEL: test_v4f64_ord_s: 3387; AVX512F-32: # %bb.0: 3388; AVX512F-32-NEXT: pushl %ebp 3389; AVX512F-32-NEXT: movl %esp, %ebp 3390; AVX512F-32-NEXT: andl $-32, %esp 3391; AVX512F-32-NEXT: subl $32, %esp 3392; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3393; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3394; AVX512F-32-NEXT: vcmpord_spd 8(%ebp), %ymm2, %ymm2 3395; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3396; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3397; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3398; AVX512F-32-NEXT: movl %ebp, %esp 3399; AVX512F-32-NEXT: popl %ebp 3400; AVX512F-32-NEXT: retl 3401; 3402; AVX512F-64-LABEL: test_v4f64_ord_s: 3403; AVX512F-64: # %bb.0: 3404; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3405; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3406; AVX512F-64-NEXT: vcmpord_spd %ymm3, %ymm2, %ymm2 3407; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3408; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3409; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3410; AVX512F-64-NEXT: retq 3411 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3412 <4 x double> %f1, <4 x double> %f2, metadata !"ord", 3413 metadata !"fpexcept.strict") #0 3414 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3415 ret <4 x i64> %res 3416} 3417 3418define <4 x i64> @test_v4f64_ueq_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3419; AVX-32-LABEL: test_v4f64_ueq_s: 3420; AVX-32: # %bb.0: 3421; AVX-32-NEXT: pushl %ebp 3422; AVX-32-NEXT: movl %esp, %ebp 3423; AVX-32-NEXT: andl $-32, %esp 3424; AVX-32-NEXT: subl $32, %esp 3425; AVX-32-NEXT: vcmpeq_uspd 8(%ebp), %ymm2, %ymm2 3426; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3427; AVX-32-NEXT: movl %ebp, %esp 3428; AVX-32-NEXT: popl %ebp 3429; AVX-32-NEXT: retl 3430; 3431; AVX-64-LABEL: test_v4f64_ueq_s: 3432; AVX-64: # %bb.0: 3433; AVX-64-NEXT: vcmpeq_uspd %ymm3, %ymm2, %ymm2 3434; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3435; AVX-64-NEXT: retq 3436; 3437; AVX512-32-LABEL: test_v4f64_ueq_s: 3438; AVX512-32: # %bb.0: 3439; AVX512-32-NEXT: pushl %ebp 3440; AVX512-32-NEXT: movl %esp, %ebp 3441; AVX512-32-NEXT: andl $-32, %esp 3442; AVX512-32-NEXT: subl $32, %esp 3443; AVX512-32-NEXT: vcmpeq_uspd 8(%ebp), %ymm2, %k1 3444; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3445; AVX512-32-NEXT: movl %ebp, %esp 3446; AVX512-32-NEXT: popl %ebp 3447; AVX512-32-NEXT: retl 3448; 3449; AVX512-64-LABEL: test_v4f64_ueq_s: 3450; AVX512-64: # %bb.0: 3451; AVX512-64-NEXT: vcmpeq_uspd %ymm3, %ymm2, %k1 3452; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3453; AVX512-64-NEXT: retq 3454; 3455; AVX512F-32-LABEL: test_v4f64_ueq_s: 3456; AVX512F-32: # %bb.0: 3457; AVX512F-32-NEXT: pushl %ebp 3458; AVX512F-32-NEXT: movl %esp, %ebp 3459; AVX512F-32-NEXT: andl $-32, %esp 3460; AVX512F-32-NEXT: subl $32, %esp 3461; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3462; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3463; AVX512F-32-NEXT: vcmpeq_uspd 8(%ebp), %ymm2, %ymm2 3464; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3465; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3466; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3467; AVX512F-32-NEXT: movl %ebp, %esp 3468; AVX512F-32-NEXT: popl %ebp 3469; AVX512F-32-NEXT: retl 3470; 3471; AVX512F-64-LABEL: test_v4f64_ueq_s: 3472; AVX512F-64: # %bb.0: 3473; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3474; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3475; AVX512F-64-NEXT: vcmpeq_uspd %ymm3, %ymm2, %ymm2 3476; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3477; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3478; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3479; AVX512F-64-NEXT: retq 3480 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3481 <4 x double> %f1, <4 x double> %f2, metadata !"ueq", 3482 metadata !"fpexcept.strict") #0 3483 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3484 ret <4 x i64> %res 3485} 3486 3487define <4 x i64> @test_v4f64_ugt_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3488; AVX-32-LABEL: test_v4f64_ugt_s: 3489; AVX-32: # %bb.0: 3490; AVX-32-NEXT: pushl %ebp 3491; AVX-32-NEXT: movl %esp, %ebp 3492; AVX-32-NEXT: andl $-32, %esp 3493; AVX-32-NEXT: subl $32, %esp 3494; AVX-32-NEXT: vcmpnlepd 8(%ebp), %ymm2, %ymm2 3495; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3496; AVX-32-NEXT: movl %ebp, %esp 3497; AVX-32-NEXT: popl %ebp 3498; AVX-32-NEXT: retl 3499; 3500; AVX-64-LABEL: test_v4f64_ugt_s: 3501; AVX-64: # %bb.0: 3502; AVX-64-NEXT: vcmpnlepd %ymm3, %ymm2, %ymm2 3503; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3504; AVX-64-NEXT: retq 3505; 3506; AVX512-32-LABEL: test_v4f64_ugt_s: 3507; AVX512-32: # %bb.0: 3508; AVX512-32-NEXT: pushl %ebp 3509; AVX512-32-NEXT: movl %esp, %ebp 3510; AVX512-32-NEXT: andl $-32, %esp 3511; AVX512-32-NEXT: subl $32, %esp 3512; AVX512-32-NEXT: vcmpnlepd 8(%ebp), %ymm2, %k1 3513; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3514; AVX512-32-NEXT: movl %ebp, %esp 3515; AVX512-32-NEXT: popl %ebp 3516; AVX512-32-NEXT: retl 3517; 3518; AVX512-64-LABEL: test_v4f64_ugt_s: 3519; AVX512-64: # %bb.0: 3520; AVX512-64-NEXT: vcmpnlepd %ymm3, %ymm2, %k1 3521; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3522; AVX512-64-NEXT: retq 3523; 3524; AVX512F-32-LABEL: test_v4f64_ugt_s: 3525; AVX512F-32: # %bb.0: 3526; AVX512F-32-NEXT: pushl %ebp 3527; AVX512F-32-NEXT: movl %esp, %ebp 3528; AVX512F-32-NEXT: andl $-32, %esp 3529; AVX512F-32-NEXT: subl $32, %esp 3530; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3531; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3532; AVX512F-32-NEXT: vcmpnlepd 8(%ebp), %ymm2, %ymm2 3533; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3534; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3535; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3536; AVX512F-32-NEXT: movl %ebp, %esp 3537; AVX512F-32-NEXT: popl %ebp 3538; AVX512F-32-NEXT: retl 3539; 3540; AVX512F-64-LABEL: test_v4f64_ugt_s: 3541; AVX512F-64: # %bb.0: 3542; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3543; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3544; AVX512F-64-NEXT: vcmpnlepd %ymm3, %ymm2, %ymm2 3545; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3546; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3547; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3548; AVX512F-64-NEXT: retq 3549 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3550 <4 x double> %f1, <4 x double> %f2, metadata !"ugt", 3551 metadata !"fpexcept.strict") #0 3552 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3553 ret <4 x i64> %res 3554} 3555 3556define <4 x i64> @test_v4f64_uge_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3557; AVX-32-LABEL: test_v4f64_uge_s: 3558; AVX-32: # %bb.0: 3559; AVX-32-NEXT: pushl %ebp 3560; AVX-32-NEXT: movl %esp, %ebp 3561; AVX-32-NEXT: andl $-32, %esp 3562; AVX-32-NEXT: subl $32, %esp 3563; AVX-32-NEXT: vcmpnltpd 8(%ebp), %ymm2, %ymm2 3564; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3565; AVX-32-NEXT: movl %ebp, %esp 3566; AVX-32-NEXT: popl %ebp 3567; AVX-32-NEXT: retl 3568; 3569; AVX-64-LABEL: test_v4f64_uge_s: 3570; AVX-64: # %bb.0: 3571; AVX-64-NEXT: vcmpnltpd %ymm3, %ymm2, %ymm2 3572; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3573; AVX-64-NEXT: retq 3574; 3575; AVX512-32-LABEL: test_v4f64_uge_s: 3576; AVX512-32: # %bb.0: 3577; AVX512-32-NEXT: pushl %ebp 3578; AVX512-32-NEXT: movl %esp, %ebp 3579; AVX512-32-NEXT: andl $-32, %esp 3580; AVX512-32-NEXT: subl $32, %esp 3581; AVX512-32-NEXT: vcmpnltpd 8(%ebp), %ymm2, %k1 3582; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3583; AVX512-32-NEXT: movl %ebp, %esp 3584; AVX512-32-NEXT: popl %ebp 3585; AVX512-32-NEXT: retl 3586; 3587; AVX512-64-LABEL: test_v4f64_uge_s: 3588; AVX512-64: # %bb.0: 3589; AVX512-64-NEXT: vcmpnltpd %ymm3, %ymm2, %k1 3590; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3591; AVX512-64-NEXT: retq 3592; 3593; AVX512F-32-LABEL: test_v4f64_uge_s: 3594; AVX512F-32: # %bb.0: 3595; AVX512F-32-NEXT: pushl %ebp 3596; AVX512F-32-NEXT: movl %esp, %ebp 3597; AVX512F-32-NEXT: andl $-32, %esp 3598; AVX512F-32-NEXT: subl $32, %esp 3599; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3600; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3601; AVX512F-32-NEXT: vcmpnltpd 8(%ebp), %ymm2, %ymm2 3602; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3603; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3604; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3605; AVX512F-32-NEXT: movl %ebp, %esp 3606; AVX512F-32-NEXT: popl %ebp 3607; AVX512F-32-NEXT: retl 3608; 3609; AVX512F-64-LABEL: test_v4f64_uge_s: 3610; AVX512F-64: # %bb.0: 3611; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3612; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3613; AVX512F-64-NEXT: vcmpnltpd %ymm3, %ymm2, %ymm2 3614; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3615; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3616; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3617; AVX512F-64-NEXT: retq 3618 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3619 <4 x double> %f1, <4 x double> %f2, metadata !"uge", 3620 metadata !"fpexcept.strict") #0 3621 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3622 ret <4 x i64> %res 3623} 3624 3625define <4 x i64> @test_v4f64_ult_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3626; AVX-32-LABEL: test_v4f64_ult_s: 3627; AVX-32: # %bb.0: 3628; AVX-32-NEXT: pushl %ebp 3629; AVX-32-NEXT: movl %esp, %ebp 3630; AVX-32-NEXT: andl $-32, %esp 3631; AVX-32-NEXT: subl $32, %esp 3632; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3 3633; AVX-32-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2 3634; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3635; AVX-32-NEXT: movl %ebp, %esp 3636; AVX-32-NEXT: popl %ebp 3637; AVX-32-NEXT: retl 3638; 3639; AVX-64-LABEL: test_v4f64_ult_s: 3640; AVX-64: # %bb.0: 3641; AVX-64-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2 3642; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3643; AVX-64-NEXT: retq 3644; 3645; AVX512-32-LABEL: test_v4f64_ult_s: 3646; AVX512-32: # %bb.0: 3647; AVX512-32-NEXT: pushl %ebp 3648; AVX512-32-NEXT: movl %esp, %ebp 3649; AVX512-32-NEXT: andl $-32, %esp 3650; AVX512-32-NEXT: subl $32, %esp 3651; AVX512-32-NEXT: vcmpngepd 8(%ebp), %ymm2, %k1 3652; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3653; AVX512-32-NEXT: movl %ebp, %esp 3654; AVX512-32-NEXT: popl %ebp 3655; AVX512-32-NEXT: retl 3656; 3657; AVX512-64-LABEL: test_v4f64_ult_s: 3658; AVX512-64: # %bb.0: 3659; AVX512-64-NEXT: vcmpnlepd %ymm2, %ymm3, %k1 3660; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3661; AVX512-64-NEXT: retq 3662; 3663; AVX512F-32-LABEL: test_v4f64_ult_s: 3664; AVX512F-32: # %bb.0: 3665; AVX512F-32-NEXT: pushl %ebp 3666; AVX512F-32-NEXT: movl %esp, %ebp 3667; AVX512F-32-NEXT: andl $-32, %esp 3668; AVX512F-32-NEXT: subl $32, %esp 3669; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3670; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3671; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 3672; AVX512F-32-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2 3673; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3674; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3675; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3676; AVX512F-32-NEXT: movl %ebp, %esp 3677; AVX512F-32-NEXT: popl %ebp 3678; AVX512F-32-NEXT: retl 3679; 3680; AVX512F-64-LABEL: test_v4f64_ult_s: 3681; AVX512F-64: # %bb.0: 3682; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3683; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3684; AVX512F-64-NEXT: vcmpnlepd %ymm2, %ymm3, %ymm2 3685; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3686; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3687; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3688; AVX512F-64-NEXT: retq 3689 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3690 <4 x double> %f1, <4 x double> %f2, metadata !"ult", 3691 metadata !"fpexcept.strict") #0 3692 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3693 ret <4 x i64> %res 3694} 3695 3696define <4 x i64> @test_v4f64_ule_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3697; AVX-32-LABEL: test_v4f64_ule_s: 3698; AVX-32: # %bb.0: 3699; AVX-32-NEXT: pushl %ebp 3700; AVX-32-NEXT: movl %esp, %ebp 3701; AVX-32-NEXT: andl $-32, %esp 3702; AVX-32-NEXT: subl $32, %esp 3703; AVX-32-NEXT: vmovapd 8(%ebp), %ymm3 3704; AVX-32-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2 3705; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3706; AVX-32-NEXT: movl %ebp, %esp 3707; AVX-32-NEXT: popl %ebp 3708; AVX-32-NEXT: retl 3709; 3710; AVX-64-LABEL: test_v4f64_ule_s: 3711; AVX-64: # %bb.0: 3712; AVX-64-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2 3713; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3714; AVX-64-NEXT: retq 3715; 3716; AVX512-32-LABEL: test_v4f64_ule_s: 3717; AVX512-32: # %bb.0: 3718; AVX512-32-NEXT: pushl %ebp 3719; AVX512-32-NEXT: movl %esp, %ebp 3720; AVX512-32-NEXT: andl $-32, %esp 3721; AVX512-32-NEXT: subl $32, %esp 3722; AVX512-32-NEXT: vcmpngtpd 8(%ebp), %ymm2, %k1 3723; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3724; AVX512-32-NEXT: movl %ebp, %esp 3725; AVX512-32-NEXT: popl %ebp 3726; AVX512-32-NEXT: retl 3727; 3728; AVX512-64-LABEL: test_v4f64_ule_s: 3729; AVX512-64: # %bb.0: 3730; AVX512-64-NEXT: vcmpnltpd %ymm2, %ymm3, %k1 3731; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3732; AVX512-64-NEXT: retq 3733; 3734; AVX512F-32-LABEL: test_v4f64_ule_s: 3735; AVX512F-32: # %bb.0: 3736; AVX512F-32-NEXT: pushl %ebp 3737; AVX512F-32-NEXT: movl %esp, %ebp 3738; AVX512F-32-NEXT: andl $-32, %esp 3739; AVX512F-32-NEXT: subl $32, %esp 3740; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3741; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3742; AVX512F-32-NEXT: vmovapd 8(%ebp), %ymm3 3743; AVX512F-32-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2 3744; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3745; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3746; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3747; AVX512F-32-NEXT: movl %ebp, %esp 3748; AVX512F-32-NEXT: popl %ebp 3749; AVX512F-32-NEXT: retl 3750; 3751; AVX512F-64-LABEL: test_v4f64_ule_s: 3752; AVX512F-64: # %bb.0: 3753; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3754; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3755; AVX512F-64-NEXT: vcmpnltpd %ymm2, %ymm3, %ymm2 3756; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3757; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3758; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3759; AVX512F-64-NEXT: retq 3760 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3761 <4 x double> %f1, <4 x double> %f2, metadata !"ule", 3762 metadata !"fpexcept.strict") #0 3763 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3764 ret <4 x i64> %res 3765} 3766 3767define <4 x i64> @test_v4f64_une_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3768; AVX-32-LABEL: test_v4f64_une_s: 3769; AVX-32: # %bb.0: 3770; AVX-32-NEXT: pushl %ebp 3771; AVX-32-NEXT: movl %esp, %ebp 3772; AVX-32-NEXT: andl $-32, %esp 3773; AVX-32-NEXT: subl $32, %esp 3774; AVX-32-NEXT: vcmpneq_uspd 8(%ebp), %ymm2, %ymm2 3775; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3776; AVX-32-NEXT: movl %ebp, %esp 3777; AVX-32-NEXT: popl %ebp 3778; AVX-32-NEXT: retl 3779; 3780; AVX-64-LABEL: test_v4f64_une_s: 3781; AVX-64: # %bb.0: 3782; AVX-64-NEXT: vcmpneq_uspd %ymm3, %ymm2, %ymm2 3783; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3784; AVX-64-NEXT: retq 3785; 3786; AVX512-32-LABEL: test_v4f64_une_s: 3787; AVX512-32: # %bb.0: 3788; AVX512-32-NEXT: pushl %ebp 3789; AVX512-32-NEXT: movl %esp, %ebp 3790; AVX512-32-NEXT: andl $-32, %esp 3791; AVX512-32-NEXT: subl $32, %esp 3792; AVX512-32-NEXT: vcmpneq_uspd 8(%ebp), %ymm2, %k1 3793; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3794; AVX512-32-NEXT: movl %ebp, %esp 3795; AVX512-32-NEXT: popl %ebp 3796; AVX512-32-NEXT: retl 3797; 3798; AVX512-64-LABEL: test_v4f64_une_s: 3799; AVX512-64: # %bb.0: 3800; AVX512-64-NEXT: vcmpneq_uspd %ymm3, %ymm2, %k1 3801; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3802; AVX512-64-NEXT: retq 3803; 3804; AVX512F-32-LABEL: test_v4f64_une_s: 3805; AVX512F-32: # %bb.0: 3806; AVX512F-32-NEXT: pushl %ebp 3807; AVX512F-32-NEXT: movl %esp, %ebp 3808; AVX512F-32-NEXT: andl $-32, %esp 3809; AVX512F-32-NEXT: subl $32, %esp 3810; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3811; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3812; AVX512F-32-NEXT: vcmpneq_uspd 8(%ebp), %ymm2, %ymm2 3813; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3814; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3815; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3816; AVX512F-32-NEXT: movl %ebp, %esp 3817; AVX512F-32-NEXT: popl %ebp 3818; AVX512F-32-NEXT: retl 3819; 3820; AVX512F-64-LABEL: test_v4f64_une_s: 3821; AVX512F-64: # %bb.0: 3822; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3823; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3824; AVX512F-64-NEXT: vcmpneq_uspd %ymm3, %ymm2, %ymm2 3825; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3826; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3827; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3828; AVX512F-64-NEXT: retq 3829 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3830 <4 x double> %f1, <4 x double> %f2, metadata !"une", 3831 metadata !"fpexcept.strict") #0 3832 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3833 ret <4 x i64> %res 3834} 3835 3836define <4 x i64> @test_v4f64_uno_s(<4 x i64> %a, <4 x i64> %b, <4 x double> %f1, <4 x double> %f2) #0 { 3837; AVX-32-LABEL: test_v4f64_uno_s: 3838; AVX-32: # %bb.0: 3839; AVX-32-NEXT: pushl %ebp 3840; AVX-32-NEXT: movl %esp, %ebp 3841; AVX-32-NEXT: andl $-32, %esp 3842; AVX-32-NEXT: subl $32, %esp 3843; AVX-32-NEXT: vcmpunord_spd 8(%ebp), %ymm2, %ymm2 3844; AVX-32-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3845; AVX-32-NEXT: movl %ebp, %esp 3846; AVX-32-NEXT: popl %ebp 3847; AVX-32-NEXT: retl 3848; 3849; AVX-64-LABEL: test_v4f64_uno_s: 3850; AVX-64: # %bb.0: 3851; AVX-64-NEXT: vcmpunord_spd %ymm3, %ymm2, %ymm2 3852; AVX-64-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 3853; AVX-64-NEXT: retq 3854; 3855; AVX512-32-LABEL: test_v4f64_uno_s: 3856; AVX512-32: # %bb.0: 3857; AVX512-32-NEXT: pushl %ebp 3858; AVX512-32-NEXT: movl %esp, %ebp 3859; AVX512-32-NEXT: andl $-32, %esp 3860; AVX512-32-NEXT: subl $32, %esp 3861; AVX512-32-NEXT: vcmpunord_spd 8(%ebp), %ymm2, %k1 3862; AVX512-32-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3863; AVX512-32-NEXT: movl %ebp, %esp 3864; AVX512-32-NEXT: popl %ebp 3865; AVX512-32-NEXT: retl 3866; 3867; AVX512-64-LABEL: test_v4f64_uno_s: 3868; AVX512-64: # %bb.0: 3869; AVX512-64-NEXT: vcmpunord_spd %ymm3, %ymm2, %k1 3870; AVX512-64-NEXT: vpblendmq %ymm0, %ymm1, %ymm0 {%k1} 3871; AVX512-64-NEXT: retq 3872; 3873; AVX512F-32-LABEL: test_v4f64_uno_s: 3874; AVX512F-32: # %bb.0: 3875; AVX512F-32-NEXT: pushl %ebp 3876; AVX512F-32-NEXT: movl %esp, %ebp 3877; AVX512F-32-NEXT: andl $-32, %esp 3878; AVX512F-32-NEXT: subl $32, %esp 3879; AVX512F-32-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3880; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3881; AVX512F-32-NEXT: vcmpunord_spd 8(%ebp), %ymm2, %ymm2 3882; AVX512F-32-NEXT: vptestmq %zmm2, %zmm2, %k1 3883; AVX512F-32-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3884; AVX512F-32-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3885; AVX512F-32-NEXT: movl %ebp, %esp 3886; AVX512F-32-NEXT: popl %ebp 3887; AVX512F-32-NEXT: retl 3888; 3889; AVX512F-64-LABEL: test_v4f64_uno_s: 3890; AVX512F-64: # %bb.0: 3891; AVX512F-64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 3892; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 3893; AVX512F-64-NEXT: vcmpunord_spd %ymm3, %ymm2, %ymm2 3894; AVX512F-64-NEXT: vptestmq %zmm2, %zmm2, %k1 3895; AVX512F-64-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1} 3896; AVX512F-64-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 3897; AVX512F-64-NEXT: retq 3898 %cond = call <4 x i1> @llvm.experimental.constrained.fcmps.v4f64( 3899 <4 x double> %f1, <4 x double> %f2, metadata !"uno", 3900 metadata !"fpexcept.strict") #0 3901 %res = select <4 x i1> %cond, <4 x i64> %a, <4 x i64> %b 3902 ret <4 x i64> %res 3903} 3904 3905attributes #0 = { strictfp nounwind } 3906 3907declare <8 x i1> @llvm.experimental.constrained.fcmp.v8f32(<8 x float>, <8 x float>, metadata, metadata) 3908declare <4 x i1> @llvm.experimental.constrained.fcmp.v4f64(<4 x double>, <4 x double>, metadata, metadata) 3909declare <8 x i1> @llvm.experimental.constrained.fcmps.v8f32(<8 x float>, <8 x float>, metadata, metadata) 3910declare <4 x i1> @llvm.experimental.constrained.fcmps.v4f64(<4 x double>, <4 x double>, metadata, metadata) 3911