1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s --check-prefixes=ISEL,SSE 3; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=FASTISEL,SSE 4; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mcpu=corei7-avx | FileCheck %s --check-prefixes=ISEL,AVX 5; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 -mcpu=corei7-avx | FileCheck %s --check-prefixes=FASTISEL,AVX 6; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -mcpu=skylake-avx512 -verify-machineinstrs | FileCheck %s --check-prefixes=ISEL,AVX512,AVX512-ISEL 7; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -fast-isel -fast-isel-abort=1 -mcpu=skylake-avx512 -verify-machineinstrs | FileCheck %s --check-prefixes=FASTISEL,AVX512,AVX512-FASTISEL 8 9 10define float @select_fcmp_one_f32(float %a, float %b, float %c, float %d) { 11; SSE-LABEL: select_fcmp_one_f32: 12; SSE: ## %bb.0: 13; SSE-NEXT: ucomiss %xmm1, %xmm0 14; SSE-NEXT: jne LBB0_2 15; SSE-NEXT: ## %bb.1: 16; SSE-NEXT: movaps %xmm3, %xmm2 17; SSE-NEXT: LBB0_2: 18; SSE-NEXT: movaps %xmm2, %xmm0 19; SSE-NEXT: retq 20; 21; AVX-LABEL: select_fcmp_one_f32: 22; AVX: ## %bb.0: 23; AVX-NEXT: vcmpneq_oqss %xmm1, %xmm0, %xmm0 24; AVX-NEXT: vblendvps %xmm0, %xmm2, %xmm3, %xmm0 25; AVX-NEXT: retq 26; 27; AVX512-LABEL: select_fcmp_one_f32: 28; AVX512: ## %bb.0: 29; AVX512-NEXT: vcmpneq_oqss %xmm1, %xmm0, %k1 30; AVX512-NEXT: vmovss %xmm2, %xmm3, %xmm3 {%k1} 31; AVX512-NEXT: vmovaps %xmm3, %xmm0 32; AVX512-NEXT: retq 33 %1 = fcmp one float %a, %b 34 %2 = select i1 %1, float %c, float %d 35 ret float %2 36} 37 38define double @select_fcmp_one_f64(double %a, double %b, double %c, double %d) { 39; SSE-LABEL: select_fcmp_one_f64: 40; SSE: ## %bb.0: 41; SSE-NEXT: ucomisd %xmm1, %xmm0 42; SSE-NEXT: jne LBB1_2 43; SSE-NEXT: ## %bb.1: 44; SSE-NEXT: movaps %xmm3, %xmm2 45; SSE-NEXT: LBB1_2: 46; SSE-NEXT: movaps %xmm2, %xmm0 47; SSE-NEXT: retq 48; 49; AVX-LABEL: select_fcmp_one_f64: 50; AVX: ## %bb.0: 51; AVX-NEXT: vcmpneq_oqsd %xmm1, %xmm0, %xmm0 52; AVX-NEXT: vblendvpd %xmm0, %xmm2, %xmm3, %xmm0 53; AVX-NEXT: retq 54; 55; AVX512-LABEL: select_fcmp_one_f64: 56; AVX512: ## %bb.0: 57; AVX512-NEXT: vcmpneq_oqsd %xmm1, %xmm0, %k1 58; AVX512-NEXT: vmovsd %xmm2, %xmm3, %xmm3 {%k1} 59; AVX512-NEXT: vmovapd %xmm3, %xmm0 60; AVX512-NEXT: retq 61 %1 = fcmp one double %a, %b 62 %2 = select i1 %1, double %c, double %d 63 ret double %2 64} 65 66define float @select_icmp_eq_f32(i64 %a, i64 %b, float %c, float %d) { 67; SSE-LABEL: select_icmp_eq_f32: 68; SSE: ## %bb.0: 69; SSE-NEXT: cmpq %rsi, %rdi 70; SSE-NEXT: je LBB2_2 71; SSE-NEXT: ## %bb.1: 72; SSE-NEXT: movaps %xmm1, %xmm0 73; SSE-NEXT: LBB2_2: 74; SSE-NEXT: retq 75; 76; AVX-LABEL: select_icmp_eq_f32: 77; AVX: ## %bb.0: 78; AVX-NEXT: cmpq %rsi, %rdi 79; AVX-NEXT: je LBB2_2 80; AVX-NEXT: ## %bb.1: 81; AVX-NEXT: vmovaps %xmm1, %xmm0 82; AVX-NEXT: LBB2_2: 83; AVX-NEXT: retq 84; 85; AVX512-ISEL-LABEL: select_icmp_eq_f32: 86; AVX512-ISEL: ## %bb.0: 87; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 88; AVX512-ISEL-NEXT: sete %al 89; AVX512-ISEL-NEXT: kmovd %eax, %k1 90; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 91; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 92; AVX512-ISEL-NEXT: retq 93; 94; AVX512-FASTISEL-LABEL: select_icmp_eq_f32: 95; AVX512-FASTISEL: ## %bb.0: 96; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 97; AVX512-FASTISEL-NEXT: je LBB2_2 98; AVX512-FASTISEL-NEXT: ## %bb.1: 99; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 100; AVX512-FASTISEL-NEXT: LBB2_2: 101; AVX512-FASTISEL-NEXT: retq 102 %1 = icmp eq i64 %a, %b 103 %2 = select i1 %1, float %c, float %d 104 ret float %2 105} 106 107define float @select_icmp_ne_f32(i64 %a, i64 %b, float %c, float %d) { 108; SSE-LABEL: select_icmp_ne_f32: 109; SSE: ## %bb.0: 110; SSE-NEXT: cmpq %rsi, %rdi 111; SSE-NEXT: jne LBB3_2 112; SSE-NEXT: ## %bb.1: 113; SSE-NEXT: movaps %xmm1, %xmm0 114; SSE-NEXT: LBB3_2: 115; SSE-NEXT: retq 116; 117; AVX-LABEL: select_icmp_ne_f32: 118; AVX: ## %bb.0: 119; AVX-NEXT: cmpq %rsi, %rdi 120; AVX-NEXT: jne LBB3_2 121; AVX-NEXT: ## %bb.1: 122; AVX-NEXT: vmovaps %xmm1, %xmm0 123; AVX-NEXT: LBB3_2: 124; AVX-NEXT: retq 125; 126; AVX512-ISEL-LABEL: select_icmp_ne_f32: 127; AVX512-ISEL: ## %bb.0: 128; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 129; AVX512-ISEL-NEXT: setne %al 130; AVX512-ISEL-NEXT: kmovd %eax, %k1 131; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 132; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 133; AVX512-ISEL-NEXT: retq 134; 135; AVX512-FASTISEL-LABEL: select_icmp_ne_f32: 136; AVX512-FASTISEL: ## %bb.0: 137; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 138; AVX512-FASTISEL-NEXT: jne LBB3_2 139; AVX512-FASTISEL-NEXT: ## %bb.1: 140; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 141; AVX512-FASTISEL-NEXT: LBB3_2: 142; AVX512-FASTISEL-NEXT: retq 143 %1 = icmp ne i64 %a, %b 144 %2 = select i1 %1, float %c, float %d 145 ret float %2 146} 147 148define float @select_icmp_ugt_f32(i64 %a, i64 %b, float %c, float %d) { 149; SSE-LABEL: select_icmp_ugt_f32: 150; SSE: ## %bb.0: 151; SSE-NEXT: cmpq %rsi, %rdi 152; SSE-NEXT: ja LBB4_2 153; SSE-NEXT: ## %bb.1: 154; SSE-NEXT: movaps %xmm1, %xmm0 155; SSE-NEXT: LBB4_2: 156; SSE-NEXT: retq 157; 158; AVX-LABEL: select_icmp_ugt_f32: 159; AVX: ## %bb.0: 160; AVX-NEXT: cmpq %rsi, %rdi 161; AVX-NEXT: ja LBB4_2 162; AVX-NEXT: ## %bb.1: 163; AVX-NEXT: vmovaps %xmm1, %xmm0 164; AVX-NEXT: LBB4_2: 165; AVX-NEXT: retq 166; 167; AVX512-ISEL-LABEL: select_icmp_ugt_f32: 168; AVX512-ISEL: ## %bb.0: 169; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 170; AVX512-ISEL-NEXT: seta %al 171; AVX512-ISEL-NEXT: kmovd %eax, %k1 172; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 173; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 174; AVX512-ISEL-NEXT: retq 175; 176; AVX512-FASTISEL-LABEL: select_icmp_ugt_f32: 177; AVX512-FASTISEL: ## %bb.0: 178; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 179; AVX512-FASTISEL-NEXT: ja LBB4_2 180; AVX512-FASTISEL-NEXT: ## %bb.1: 181; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 182; AVX512-FASTISEL-NEXT: LBB4_2: 183; AVX512-FASTISEL-NEXT: retq 184 %1 = icmp ugt i64 %a, %b 185 %2 = select i1 %1, float %c, float %d 186 ret float %2 187} 188 189define float @select_icmp_uge_f32(i64 %a, i64 %b, float %c, float %d) { 190; SSE-LABEL: select_icmp_uge_f32: 191; SSE: ## %bb.0: 192; SSE-NEXT: cmpq %rsi, %rdi 193; SSE-NEXT: jae LBB5_2 194; SSE-NEXT: ## %bb.1: 195; SSE-NEXT: movaps %xmm1, %xmm0 196; SSE-NEXT: LBB5_2: 197; SSE-NEXT: retq 198; 199; AVX-LABEL: select_icmp_uge_f32: 200; AVX: ## %bb.0: 201; AVX-NEXT: cmpq %rsi, %rdi 202; AVX-NEXT: jae LBB5_2 203; AVX-NEXT: ## %bb.1: 204; AVX-NEXT: vmovaps %xmm1, %xmm0 205; AVX-NEXT: LBB5_2: 206; AVX-NEXT: retq 207; 208; AVX512-ISEL-LABEL: select_icmp_uge_f32: 209; AVX512-ISEL: ## %bb.0: 210; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 211; AVX512-ISEL-NEXT: setae %al 212; AVX512-ISEL-NEXT: kmovd %eax, %k1 213; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 214; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 215; AVX512-ISEL-NEXT: retq 216; 217; AVX512-FASTISEL-LABEL: select_icmp_uge_f32: 218; AVX512-FASTISEL: ## %bb.0: 219; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 220; AVX512-FASTISEL-NEXT: jae LBB5_2 221; AVX512-FASTISEL-NEXT: ## %bb.1: 222; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 223; AVX512-FASTISEL-NEXT: LBB5_2: 224; AVX512-FASTISEL-NEXT: retq 225 %1 = icmp uge i64 %a, %b 226 %2 = select i1 %1, float %c, float %d 227 ret float %2 228} 229 230define float @select_icmp_ult_f32(i64 %a, i64 %b, float %c, float %d) { 231; SSE-LABEL: select_icmp_ult_f32: 232; SSE: ## %bb.0: 233; SSE-NEXT: cmpq %rsi, %rdi 234; SSE-NEXT: jb LBB6_2 235; SSE-NEXT: ## %bb.1: 236; SSE-NEXT: movaps %xmm1, %xmm0 237; SSE-NEXT: LBB6_2: 238; SSE-NEXT: retq 239; 240; AVX-LABEL: select_icmp_ult_f32: 241; AVX: ## %bb.0: 242; AVX-NEXT: cmpq %rsi, %rdi 243; AVX-NEXT: jb LBB6_2 244; AVX-NEXT: ## %bb.1: 245; AVX-NEXT: vmovaps %xmm1, %xmm0 246; AVX-NEXT: LBB6_2: 247; AVX-NEXT: retq 248; 249; AVX512-ISEL-LABEL: select_icmp_ult_f32: 250; AVX512-ISEL: ## %bb.0: 251; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 252; AVX512-ISEL-NEXT: setb %al 253; AVX512-ISEL-NEXT: kmovd %eax, %k1 254; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 255; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 256; AVX512-ISEL-NEXT: retq 257; 258; AVX512-FASTISEL-LABEL: select_icmp_ult_f32: 259; AVX512-FASTISEL: ## %bb.0: 260; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 261; AVX512-FASTISEL-NEXT: jb LBB6_2 262; AVX512-FASTISEL-NEXT: ## %bb.1: 263; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 264; AVX512-FASTISEL-NEXT: LBB6_2: 265; AVX512-FASTISEL-NEXT: retq 266 %1 = icmp ult i64 %a, %b 267 %2 = select i1 %1, float %c, float %d 268 ret float %2 269} 270 271define float @select_icmp_ule_f32(i64 %a, i64 %b, float %c, float %d) { 272; SSE-LABEL: select_icmp_ule_f32: 273; SSE: ## %bb.0: 274; SSE-NEXT: cmpq %rsi, %rdi 275; SSE-NEXT: jbe LBB7_2 276; SSE-NEXT: ## %bb.1: 277; SSE-NEXT: movaps %xmm1, %xmm0 278; SSE-NEXT: LBB7_2: 279; SSE-NEXT: retq 280; 281; AVX-LABEL: select_icmp_ule_f32: 282; AVX: ## %bb.0: 283; AVX-NEXT: cmpq %rsi, %rdi 284; AVX-NEXT: jbe LBB7_2 285; AVX-NEXT: ## %bb.1: 286; AVX-NEXT: vmovaps %xmm1, %xmm0 287; AVX-NEXT: LBB7_2: 288; AVX-NEXT: retq 289; 290; AVX512-ISEL-LABEL: select_icmp_ule_f32: 291; AVX512-ISEL: ## %bb.0: 292; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 293; AVX512-ISEL-NEXT: setbe %al 294; AVX512-ISEL-NEXT: kmovd %eax, %k1 295; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 296; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 297; AVX512-ISEL-NEXT: retq 298; 299; AVX512-FASTISEL-LABEL: select_icmp_ule_f32: 300; AVX512-FASTISEL: ## %bb.0: 301; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 302; AVX512-FASTISEL-NEXT: jbe LBB7_2 303; AVX512-FASTISEL-NEXT: ## %bb.1: 304; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 305; AVX512-FASTISEL-NEXT: LBB7_2: 306; AVX512-FASTISEL-NEXT: retq 307 %1 = icmp ule i64 %a, %b 308 %2 = select i1 %1, float %c, float %d 309 ret float %2 310} 311 312define float @select_icmp_sgt_f32(i64 %a, i64 %b, float %c, float %d) { 313; SSE-LABEL: select_icmp_sgt_f32: 314; SSE: ## %bb.0: 315; SSE-NEXT: cmpq %rsi, %rdi 316; SSE-NEXT: jg LBB8_2 317; SSE-NEXT: ## %bb.1: 318; SSE-NEXT: movaps %xmm1, %xmm0 319; SSE-NEXT: LBB8_2: 320; SSE-NEXT: retq 321; 322; AVX-LABEL: select_icmp_sgt_f32: 323; AVX: ## %bb.0: 324; AVX-NEXT: cmpq %rsi, %rdi 325; AVX-NEXT: jg LBB8_2 326; AVX-NEXT: ## %bb.1: 327; AVX-NEXT: vmovaps %xmm1, %xmm0 328; AVX-NEXT: LBB8_2: 329; AVX-NEXT: retq 330; 331; AVX512-ISEL-LABEL: select_icmp_sgt_f32: 332; AVX512-ISEL: ## %bb.0: 333; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 334; AVX512-ISEL-NEXT: setg %al 335; AVX512-ISEL-NEXT: kmovd %eax, %k1 336; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 337; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 338; AVX512-ISEL-NEXT: retq 339; 340; AVX512-FASTISEL-LABEL: select_icmp_sgt_f32: 341; AVX512-FASTISEL: ## %bb.0: 342; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 343; AVX512-FASTISEL-NEXT: jg LBB8_2 344; AVX512-FASTISEL-NEXT: ## %bb.1: 345; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 346; AVX512-FASTISEL-NEXT: LBB8_2: 347; AVX512-FASTISEL-NEXT: retq 348 %1 = icmp sgt i64 %a, %b 349 %2 = select i1 %1, float %c, float %d 350 ret float %2 351} 352 353define float @select_icmp_sge_f32(i64 %a, i64 %b, float %c, float %d) { 354; SSE-LABEL: select_icmp_sge_f32: 355; SSE: ## %bb.0: 356; SSE-NEXT: cmpq %rsi, %rdi 357; SSE-NEXT: jge LBB9_2 358; SSE-NEXT: ## %bb.1: 359; SSE-NEXT: movaps %xmm1, %xmm0 360; SSE-NEXT: LBB9_2: 361; SSE-NEXT: retq 362; 363; AVX-LABEL: select_icmp_sge_f32: 364; AVX: ## %bb.0: 365; AVX-NEXT: cmpq %rsi, %rdi 366; AVX-NEXT: jge LBB9_2 367; AVX-NEXT: ## %bb.1: 368; AVX-NEXT: vmovaps %xmm1, %xmm0 369; AVX-NEXT: LBB9_2: 370; AVX-NEXT: retq 371; 372; AVX512-ISEL-LABEL: select_icmp_sge_f32: 373; AVX512-ISEL: ## %bb.0: 374; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 375; AVX512-ISEL-NEXT: setge %al 376; AVX512-ISEL-NEXT: kmovd %eax, %k1 377; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 378; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 379; AVX512-ISEL-NEXT: retq 380; 381; AVX512-FASTISEL-LABEL: select_icmp_sge_f32: 382; AVX512-FASTISEL: ## %bb.0: 383; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 384; AVX512-FASTISEL-NEXT: jge LBB9_2 385; AVX512-FASTISEL-NEXT: ## %bb.1: 386; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 387; AVX512-FASTISEL-NEXT: LBB9_2: 388; AVX512-FASTISEL-NEXT: retq 389 %1 = icmp sge i64 %a, %b 390 %2 = select i1 %1, float %c, float %d 391 ret float %2 392} 393 394define float @select_icmp_slt_f32(i64 %a, i64 %b, float %c, float %d) { 395; SSE-LABEL: select_icmp_slt_f32: 396; SSE: ## %bb.0: 397; SSE-NEXT: cmpq %rsi, %rdi 398; SSE-NEXT: jl LBB10_2 399; SSE-NEXT: ## %bb.1: 400; SSE-NEXT: movaps %xmm1, %xmm0 401; SSE-NEXT: LBB10_2: 402; SSE-NEXT: retq 403; 404; AVX-LABEL: select_icmp_slt_f32: 405; AVX: ## %bb.0: 406; AVX-NEXT: cmpq %rsi, %rdi 407; AVX-NEXT: jl LBB10_2 408; AVX-NEXT: ## %bb.1: 409; AVX-NEXT: vmovaps %xmm1, %xmm0 410; AVX-NEXT: LBB10_2: 411; AVX-NEXT: retq 412; 413; AVX512-ISEL-LABEL: select_icmp_slt_f32: 414; AVX512-ISEL: ## %bb.0: 415; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 416; AVX512-ISEL-NEXT: setl %al 417; AVX512-ISEL-NEXT: kmovd %eax, %k1 418; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 419; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 420; AVX512-ISEL-NEXT: retq 421; 422; AVX512-FASTISEL-LABEL: select_icmp_slt_f32: 423; AVX512-FASTISEL: ## %bb.0: 424; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 425; AVX512-FASTISEL-NEXT: jl LBB10_2 426; AVX512-FASTISEL-NEXT: ## %bb.1: 427; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 428; AVX512-FASTISEL-NEXT: LBB10_2: 429; AVX512-FASTISEL-NEXT: retq 430 %1 = icmp slt i64 %a, %b 431 %2 = select i1 %1, float %c, float %d 432 ret float %2 433} 434 435define float @select_icmp_sle_f32(i64 %a, i64 %b, float %c, float %d) { 436; SSE-LABEL: select_icmp_sle_f32: 437; SSE: ## %bb.0: 438; SSE-NEXT: cmpq %rsi, %rdi 439; SSE-NEXT: jle LBB11_2 440; SSE-NEXT: ## %bb.1: 441; SSE-NEXT: movaps %xmm1, %xmm0 442; SSE-NEXT: LBB11_2: 443; SSE-NEXT: retq 444; 445; AVX-LABEL: select_icmp_sle_f32: 446; AVX: ## %bb.0: 447; AVX-NEXT: cmpq %rsi, %rdi 448; AVX-NEXT: jle LBB11_2 449; AVX-NEXT: ## %bb.1: 450; AVX-NEXT: vmovaps %xmm1, %xmm0 451; AVX-NEXT: LBB11_2: 452; AVX-NEXT: retq 453; 454; AVX512-ISEL-LABEL: select_icmp_sle_f32: 455; AVX512-ISEL: ## %bb.0: 456; AVX512-ISEL-NEXT: cmpq %rsi, %rdi 457; AVX512-ISEL-NEXT: setle %al 458; AVX512-ISEL-NEXT: kmovd %eax, %k1 459; AVX512-ISEL-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1} 460; AVX512-ISEL-NEXT: vmovaps %xmm1, %xmm0 461; AVX512-ISEL-NEXT: retq 462; 463; AVX512-FASTISEL-LABEL: select_icmp_sle_f32: 464; AVX512-FASTISEL: ## %bb.0: 465; AVX512-FASTISEL-NEXT: cmpq %rsi, %rdi 466; AVX512-FASTISEL-NEXT: jle LBB11_2 467; AVX512-FASTISEL-NEXT: ## %bb.1: 468; AVX512-FASTISEL-NEXT: vmovaps %xmm1, %xmm0 469; AVX512-FASTISEL-NEXT: LBB11_2: 470; AVX512-FASTISEL-NEXT: retq 471 %1 = icmp sle i64 %a, %b 472 %2 = select i1 %1, float %c, float %d 473 ret float %2 474} 475 476define i8 @select_icmp_sle_i8(i64 %a, i64 %b, i8 %c, i8 %d) { 477; ISEL-LABEL: select_icmp_sle_i8: 478; ISEL: ## %bb.0: 479; ISEL-NEXT: movl %edx, %eax 480; ISEL-NEXT: cmpq %rsi, %rdi 481; ISEL-NEXT: cmovgl %ecx, %eax 482; ISEL-NEXT: ## kill: def $al killed $al killed $eax 483; ISEL-NEXT: retq 484; 485; FASTISEL-LABEL: select_icmp_sle_i8: 486; FASTISEL: ## %bb.0: 487; FASTISEL-NEXT: cmpq %rsi, %rdi 488; FASTISEL-NEXT: jle LBB12_1 489; FASTISEL-NEXT: ## %bb.2: 490; FASTISEL-NEXT: movl %ecx, %eax 491; FASTISEL-NEXT: ## kill: def $al killed $al killed $eax 492; FASTISEL-NEXT: retq 493; FASTISEL-NEXT: LBB12_1: 494; FASTISEL-NEXT: movl %edx, %eax 495; FASTISEL-NEXT: ## kill: def $al killed $al killed $eax 496; FASTISEL-NEXT: retq 497 %1 = icmp sle i64 %a, %b 498 %2 = select i1 %1, i8 %c, i8 %d 499 ret i8 %2 500} 501