brintos

brintos / llvm-project-archived public Read only

0
0
Text · 116.2 KiB · 43743d5 Raw
2062 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512dq < %s | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-unknown"6 7; Stack reload folding tests.8;9; By including a nop call with sideeffects we can force a partial register spill of the10; relevant registers and check that the reload is correctly folded into the instruction.11 12define <8 x double> @stack_fold_addpd_zmm(<8 x double> %a0, <8 x double> %a1) {13; CHECK-LABEL: stack_fold_addpd_zmm:14; CHECK:       # %bb.0:15; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill16; CHECK-NEXT:    #APP17; CHECK-NEXT:    nop18; CHECK-NEXT:    #NO_APP19; CHECK-NEXT:    vaddpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload20; CHECK-NEXT:    retq21  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()22  %2 = fadd <8 x double> %a0, %a123  ret <8 x double> %224}25 26define <8 x double> @stack_fold_addpd_zmm_k(<8 x double> %a0, <8 x double> %a1, i8 %mask, ptr %passthru) {27; CHECK-LABEL: stack_fold_addpd_zmm_k:28; CHECK:       # %bb.0:29; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill30; CHECK-NEXT:    #APP31; CHECK-NEXT:    nop32; CHECK-NEXT:    #NO_APP33; CHECK-NEXT:    kmovw %edi, %k134; CHECK-NEXT:    vmovapd (%rsi), %zmm235; CHECK-NEXT:    vaddpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload36; CHECK-NEXT:    vmovapd %zmm2, %zmm037; CHECK-NEXT:    retq38  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()39  %2 = fadd <8 x double> %a0, %a140  %3 = bitcast i8 %mask to <8 x i1>41  %4 = load <8 x double>, ptr %passthru42  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %443  ret <8 x double> %544}45 46define <8 x double> @stack_fold_addpd_zmm_k_commuted(<8 x double> %a0, <8 x double> %a1, i8 %mask, ptr %passthru) {47; CHECK-LABEL: stack_fold_addpd_zmm_k_commuted:48; CHECK:       # %bb.0:49; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill50; CHECK-NEXT:    #APP51; CHECK-NEXT:    nop52; CHECK-NEXT:    #NO_APP53; CHECK-NEXT:    kmovw %edi, %k154; CHECK-NEXT:    vmovapd (%rsi), %zmm255; CHECK-NEXT:    vaddpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload56; CHECK-NEXT:    vmovapd %zmm2, %zmm057; CHECK-NEXT:    retq58  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()59  %2 = fadd <8 x double> %a1, %a060  %3 = bitcast i8 %mask to <8 x i1>61  %4 = load <8 x double>, ptr %passthru62  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %463  ret <8 x double> %564}65 66define <8 x double> @stack_fold_addpd_zmm_kz(<8 x double> %a0, <8 x double> %a1, i8 %mask) {67; CHECK-LABEL: stack_fold_addpd_zmm_kz:68; CHECK:       # %bb.0:69; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill70; CHECK-NEXT:    #APP71; CHECK-NEXT:    nop72; CHECK-NEXT:    #NO_APP73; CHECK-NEXT:    kmovw %edi, %k174; CHECK-NEXT:    vaddpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload75; CHECK-NEXT:    retq76  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()77  %2 = fadd <8 x double> %a1, %a078  %3 = bitcast i8 %mask to <8 x i1>79  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer80  ret <8 x double> %481}82 83define <16 x float> @stack_fold_addps_zmm(<16 x float> %a0, <16 x float> %a1) {84; CHECK-LABEL: stack_fold_addps_zmm:85; CHECK:       # %bb.0:86; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill87; CHECK-NEXT:    #APP88; CHECK-NEXT:    nop89; CHECK-NEXT:    #NO_APP90; CHECK-NEXT:    vaddps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload91; CHECK-NEXT:    retq92  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()93  %2 = fadd <16 x float> %a0, %a194  ret <16 x float> %295}96 97define <16 x float> @stack_fold_addps_zmm_k(<16 x float> %a0, <16 x float> %a1, i16 %mask, ptr %passthru) {98; CHECK-LABEL: stack_fold_addps_zmm_k:99; CHECK:       # %bb.0:100; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill101; CHECK-NEXT:    #APP102; CHECK-NEXT:    nop103; CHECK-NEXT:    #NO_APP104; CHECK-NEXT:    kmovw %edi, %k1105; CHECK-NEXT:    vmovaps (%rsi), %zmm2106; CHECK-NEXT:    vaddps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload107; CHECK-NEXT:    vmovaps %zmm2, %zmm0108; CHECK-NEXT:    retq109  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()110  %2 = fadd <16 x float> %a0, %a1111  %3 = bitcast i16 %mask to <16 x i1>112  %4 = load <16 x float>, ptr %passthru113  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %4114  ret <16 x float> %5115}116 117define <16 x float> @stack_fold_addps_zmm_k_commuted(<16 x float> %a0, <16 x float> %a1, i16 %mask, ptr %passthru) {118; CHECK-LABEL: stack_fold_addps_zmm_k_commuted:119; CHECK:       # %bb.0:120; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill121; CHECK-NEXT:    #APP122; CHECK-NEXT:    nop123; CHECK-NEXT:    #NO_APP124; CHECK-NEXT:    kmovw %edi, %k1125; CHECK-NEXT:    vmovaps (%rsi), %zmm2126; CHECK-NEXT:    vaddps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload127; CHECK-NEXT:    vmovaps %zmm2, %zmm0128; CHECK-NEXT:    retq129  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()130  %2 = fadd <16 x float> %a1, %a0131  %3 = bitcast i16 %mask to <16 x i1>132  %4 = load <16 x float>, ptr %passthru133  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %4134  ret <16 x float> %5135}136 137define <16 x float> @stack_fold_addps_zmm_kz(<16 x float> %a0, <16 x float> %a1, i16 %mask) {138; CHECK-LABEL: stack_fold_addps_zmm_kz:139; CHECK:       # %bb.0:140; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill141; CHECK-NEXT:    #APP142; CHECK-NEXT:    nop143; CHECK-NEXT:    #NO_APP144; CHECK-NEXT:    kmovw %edi, %k1145; CHECK-NEXT:    vaddps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload146; CHECK-NEXT:    retq147  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()148  %2 = fadd <16 x float> %a1, %a0149  %3 = bitcast i16 %mask to <16 x i1>150  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer151  ret <16 x float> %4152}153 154define double @stack_fold_addsd(double %a0, double %a1) {155; CHECK-LABEL: stack_fold_addsd:156; CHECK:       # %bb.0:157; CHECK-NEXT:    vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill158; CHECK-NEXT:    #APP159; CHECK-NEXT:    nop160; CHECK-NEXT:    #NO_APP161; CHECK-NEXT:    vaddsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload162; CHECK-NEXT:    retq163  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()164  %2 = fadd double %a0, %a1165  ret double %2166}167 168define <2 x double> @stack_fold_addsd_int(<2 x double> %a0, <2 x double> %a1) {169; CHECK-LABEL: stack_fold_addsd_int:170; CHECK:       # %bb.0:171; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill172; CHECK-NEXT:    #APP173; CHECK-NEXT:    nop174; CHECK-NEXT:    #NO_APP175; CHECK-NEXT:    vaddsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload176; CHECK-NEXT:    retq177  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()178  %2 = extractelement <2 x double> %a0, i32 0179  %3 = extractelement <2 x double> %a1, i32 0180  %4 = fadd double %2, %3181  %5 = insertelement <2 x double> %a0, double %4, i32 0182  ret <2 x double> %5183}184 185define float @stack_fold_addss(float %a0, float %a1) {186; CHECK-LABEL: stack_fold_addss:187; CHECK:       # %bb.0:188; CHECK-NEXT:    vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill189; CHECK-NEXT:    #APP190; CHECK-NEXT:    nop191; CHECK-NEXT:    #NO_APP192; CHECK-NEXT:    vaddss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload193; CHECK-NEXT:    retq194  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()195  %2 = fadd float %a0, %a1196  ret float %2197}198 199define <4 x float> @stack_fold_addss_int(<4 x float> %a0, <4 x float> %a1) {200; CHECK-LABEL: stack_fold_addss_int:201; CHECK:       # %bb.0:202; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill203; CHECK-NEXT:    #APP204; CHECK-NEXT:    nop205; CHECK-NEXT:    #NO_APP206; CHECK-NEXT:    vaddss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload207; CHECK-NEXT:    retq208  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()209  %2 = extractelement <4 x float> %a0, i32 0210  %3 = extractelement <4 x float> %a1, i32 0211  %4 = fadd float %2, %3212  %5 = insertelement <4 x float> %a0, float %4, i32 0213  ret <4 x float> %5214}215 216define <8 x double> @stack_fold_andnpd_zmm(<8 x double> %a0, <8 x double> %a1) {217; CHECK-LABEL: stack_fold_andnpd_zmm:218; CHECK:       # %bb.0:219; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill220; CHECK-NEXT:    #APP221; CHECK-NEXT:    nop222; CHECK-NEXT:    #NO_APP223; CHECK-NEXT:    vandnpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload224; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1225; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm0226; CHECK-NEXT:    retq227  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()228  %2 = bitcast <8 x double> %a0 to <8 x i64>229  %3 = bitcast <8 x double> %a1 to <8 x i64>230  %4 = xor <8 x i64> %2, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>231  %5 = and <8 x i64> %4, %3232  %6 = bitcast <8 x i64> %5 to <8 x double>233  ; fadd forces execution domain234  %7 = fadd <8 x double> %6, <double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0>235  ret <8 x double> %7236}237 238define <16 x float> @stack_fold_andnps_zmm(<16 x float> %a0, <16 x float> %a1) {239; CHECK-LABEL: stack_fold_andnps_zmm:240; CHECK:       # %bb.0:241; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill242; CHECK-NEXT:    #APP243; CHECK-NEXT:    nop244; CHECK-NEXT:    #NO_APP245; CHECK-NEXT:    vandnps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload246; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1247; CHECK-NEXT:    vaddps %zmm1, %zmm0, %zmm0248; CHECK-NEXT:    retq249  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()250  %2 = bitcast <16 x float> %a0 to <16 x i32>251  %3 = bitcast <16 x float> %a1 to <16 x i32>252  %4 = xor <16 x i32> %2, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>253  %5 = and <16 x i32> %4, %3254  %6 = bitcast <16 x i32> %5 to <16 x float>255  ; fadd forces execution domain256  %7 = fadd <16 x float> %6, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>257  ret <16 x float> %7258}259 260define <8 x double> @stack_fold_andpd_zmm(<8 x double> %a0, <8 x double> %a1) {261; CHECK-LABEL: stack_fold_andpd_zmm:262; CHECK:       # %bb.0:263; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill264; CHECK-NEXT:    #APP265; CHECK-NEXT:    nop266; CHECK-NEXT:    #NO_APP267; CHECK-NEXT:    vandpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload268; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1269; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm0270; CHECK-NEXT:    retq271  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()272  %2 = bitcast <8 x double> %a0 to <8 x i64>273  %3 = bitcast <8 x double> %a1 to <8 x i64>274  %4 = and <8 x i64> %2, %3275  %5 = bitcast <8 x i64> %4 to <8 x double>276  ; fadd forces execution domain277  %6 = fadd <8 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0>278  ret <8 x double> %6279}280 281define <16 x float> @stack_fold_andps_zmm(<16 x float> %a0, <16 x float> %a1) {282; CHECK-LABEL: stack_fold_andps_zmm:283; CHECK:       # %bb.0:284; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill285; CHECK-NEXT:    #APP286; CHECK-NEXT:    nop287; CHECK-NEXT:    #NO_APP288; CHECK-NEXT:    vandps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload289; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1290; CHECK-NEXT:    vaddps %zmm1, %zmm0, %zmm0291; CHECK-NEXT:    retq292  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()293  %2 = bitcast <16 x float> %a0 to <16 x i32>294  %3 = bitcast <16 x float> %a1 to <16 x i32>295  %4 = and <16 x i32> %2, %3296  %5 = bitcast <16 x i32> %4 to <16 x float>297  ; fadd forces execution domain298  %6 = fadd <16 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>299  ret <16 x float> %6300}301 302define i8 @stack_fold_cmppd(<8 x double> %a0, <8 x double> %a1) {303; CHECK-LABEL: stack_fold_cmppd:304; CHECK:       # %bb.0:305; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill306; CHECK-NEXT:    #APP307; CHECK-NEXT:    nop308; CHECK-NEXT:    #NO_APP309; CHECK-NEXT:    vcmpeqpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload310; CHECK-NEXT:    kmovw %k0, %eax311; CHECK-NEXT:    # kill: def $al killed $al killed $eax312; CHECK-NEXT:    vzeroupper313; CHECK-NEXT:    retq314  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()315  %res = call <8 x i1> @llvm.x86.avx512.mask.cmp.pd.512(<8 x double> %a0, <8 x double> %a1, i32 0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)316  %2 = bitcast <8 x i1> %res to i8317  ret i8 %2318}319declare <8 x i1> @llvm.x86.avx512.mask.cmp.pd.512(<8 x double>, <8 x double>, i32, <8 x i1>, i32)320 321define <8 x double> @stack_fold_cmppd_mask(<8 x double> %a0, <8 x double> %a1, ptr %a2, i8 %mask, <8 x double> %b0, <8 x double> %b1) {322; CHECK-LABEL: stack_fold_cmppd_mask:323; CHECK:       # %bb.0:324; CHECK-NEXT:    subq $136, %rsp325; CHECK-NEXT:    .cfi_def_cfa_offset 144326; CHECK-NEXT:    vmovups %zmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill327; CHECK-NEXT:    vmovups %zmm2, (%rsp) # 64-byte Spill328; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill329; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill330; CHECK-NEXT:    #APP331; CHECK-NEXT:    nop332; CHECK-NEXT:    #NO_APP333; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload334; CHECK-NEXT:    vaddpd (%rdi), %zmm0, %zmm0335; CHECK-NEXT:    vcmpeqpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload336; CHECK-NEXT:    kmovw %esi, %k1337; CHECK-NEXT:    kandb %k0, %k1, %k1338; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload339; CHECK-NEXT:    vmovupd (%rsp), %zmm1 # 64-byte Reload340; CHECK-NEXT:    vmovapd %zmm1, %zmm0 {%k1}341; CHECK-NEXT:    addq $136, %rsp342; CHECK-NEXT:    .cfi_def_cfa_offset 8343; CHECK-NEXT:    retq344  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()345  ; load and fadd are here to keep the operations below the side effecting block and to avoid folding the wrong load346  %2 = load <8 x double>, ptr %a2347  %3 = fadd <8 x double> %a1, %2348  %4 = bitcast i8 %mask to <8 x i1>349  %5 = call <8 x i1> @llvm.x86.avx512.mask.cmp.pd.512(<8 x double> %3, <8 x double> %a0, i32 0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)350  %6 = and <8 x i1> %4, %5351  %7 = select <8 x i1> %6, <8 x double> %b0, <8 x double> %b1352  ret <8 x double> %7353}354 355define <8 x double> @stack_fold_cmppd_mask_commuted(<8 x double> %a0, <8 x double> %a1, ptr %a2, i8 %mask, <8 x double> %b0, <8 x double> %b1) {356; CHECK-LABEL: stack_fold_cmppd_mask_commuted:357; CHECK:       # %bb.0:358; CHECK-NEXT:    subq $136, %rsp359; CHECK-NEXT:    .cfi_def_cfa_offset 144360; CHECK-NEXT:    vmovups %zmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill361; CHECK-NEXT:    vmovups %zmm2, (%rsp) # 64-byte Spill362; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill363; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill364; CHECK-NEXT:    #APP365; CHECK-NEXT:    nop366; CHECK-NEXT:    #NO_APP367; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload368; CHECK-NEXT:    vaddpd (%rdi), %zmm0, %zmm0369; CHECK-NEXT:    vcmpeqpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload370; CHECK-NEXT:    kmovw %esi, %k1371; CHECK-NEXT:    kandb %k0, %k1, %k1372; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload373; CHECK-NEXT:    vmovupd (%rsp), %zmm1 # 64-byte Reload374; CHECK-NEXT:    vmovapd %zmm1, %zmm0 {%k1}375; CHECK-NEXT:    addq $136, %rsp376; CHECK-NEXT:    .cfi_def_cfa_offset 8377; CHECK-NEXT:    retq378  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()379  ; load and fadd are here to keep the operations below the side effecting block and to avoid folding the wrong load380  %2 = load <8 x double>, ptr %a2381  %3 = fadd <8 x double> %a1, %2382  %4 = bitcast i8 %mask to <8 x i1>383  %5 = call <8 x i1> @llvm.x86.avx512.mask.cmp.pd.512(<8 x double> %a0, <8 x double> %3, i32 0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)384  %6 = and <8 x i1> %4, %5385  %7 = select <8 x i1> %6, <8 x double> %b0, <8 x double> %b1386  ret <8 x double> %7387}388 389define i16 @stack_fold_cmpps(<16 x float> %a0, <16 x float> %a1) {390; CHECK-LABEL: stack_fold_cmpps:391; CHECK:       # %bb.0:392; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill393; CHECK-NEXT:    #APP394; CHECK-NEXT:    nop395; CHECK-NEXT:    #NO_APP396; CHECK-NEXT:    vcmpeqps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload397; CHECK-NEXT:    kmovw %k0, %eax398; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax399; CHECK-NEXT:    vzeroupper400; CHECK-NEXT:    retq401  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()402  %res = call <16 x i1> @llvm.x86.avx512.mask.cmp.ps.512(<16 x float> %a0, <16 x float> %a1, i32 0,  <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)403  %2 = bitcast <16 x i1> %res to i16404  ret i16 %2405}406declare <16 x i1> @llvm.x86.avx512.mask.cmp.ps.512(<16 x float>, <16 x float>, i32, <16 x i1>, i32)407 408define <16 x float> @stack_fold_cmpps_mask(<16 x float> %a0, <16 x float> %a1, ptr %a2, i16 %mask, <16 x float> %b0, <16 x float> %b1) {409; CHECK-LABEL: stack_fold_cmpps_mask:410; CHECK:       # %bb.0:411; CHECK-NEXT:    subq $136, %rsp412; CHECK-NEXT:    .cfi_def_cfa_offset 144413; CHECK-NEXT:    vmovups %zmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill414; CHECK-NEXT:    vmovups %zmm2, (%rsp) # 64-byte Spill415; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill416; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill417; CHECK-NEXT:    #APP418; CHECK-NEXT:    nop419; CHECK-NEXT:    #NO_APP420; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload421; CHECK-NEXT:    vaddps (%rdi), %zmm0, %zmm0422; CHECK-NEXT:    vcmpeqps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload423; CHECK-NEXT:    kmovw %esi, %k1424; CHECK-NEXT:    kandw %k0, %k1, %k1425; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload426; CHECK-NEXT:    vmovups (%rsp), %zmm1 # 64-byte Reload427; CHECK-NEXT:    vmovaps %zmm1, %zmm0 {%k1}428; CHECK-NEXT:    addq $136, %rsp429; CHECK-NEXT:    .cfi_def_cfa_offset 8430; CHECK-NEXT:    retq431  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()432  ; load and fadd are here to keep the operations below the side effecting block and to avoid folding the wrong load433  %2 = load <16 x float>, ptr %a2434  %3 = fadd <16 x float> %a1, %2435  %4 = bitcast i16 %mask to <16 x i1>436  %5 = call <16 x i1> @llvm.x86.avx512.mask.cmp.ps.512(<16 x float> %3, <16 x float> %a0, i32 0,  <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)437  %6 = and <16 x i1> %4, %5438  %7 = select <16 x i1> %6, <16 x float> %b0, <16 x float> %b1439  ret <16 x float> %7440}441 442define <16 x float> @stack_fold_cmpps_mask_commuted(<16 x float> %a0, <16 x float> %a1, ptr %a2, i16 %mask, <16 x float> %b0, <16 x float> %b1) {443; CHECK-LABEL: stack_fold_cmpps_mask_commuted:444; CHECK:       # %bb.0:445; CHECK-NEXT:    subq $136, %rsp446; CHECK-NEXT:    .cfi_def_cfa_offset 144447; CHECK-NEXT:    vmovups %zmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill448; CHECK-NEXT:    vmovups %zmm2, (%rsp) # 64-byte Spill449; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill450; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill451; CHECK-NEXT:    #APP452; CHECK-NEXT:    nop453; CHECK-NEXT:    #NO_APP454; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload455; CHECK-NEXT:    vaddps (%rdi), %zmm0, %zmm0456; CHECK-NEXT:    vcmpeqps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload457; CHECK-NEXT:    kmovw %esi, %k1458; CHECK-NEXT:    kandw %k0, %k1, %k1459; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload460; CHECK-NEXT:    vmovups (%rsp), %zmm1 # 64-byte Reload461; CHECK-NEXT:    vmovaps %zmm1, %zmm0 {%k1}462; CHECK-NEXT:    addq $136, %rsp463; CHECK-NEXT:    .cfi_def_cfa_offset 8464; CHECK-NEXT:    retq465  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()466  ; load and fadd are here to keep the operations below the side effecting block and to avoid folding the wrong load467  %2 = load <16 x float>, ptr %a2468  %3 = fadd <16 x float> %a1, %2469  %4 = bitcast i16 %mask to <16 x i1>470  %5 = call <16 x i1> @llvm.x86.avx512.mask.cmp.ps.512(<16 x float> %a0, <16 x float> %3, i32 0, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)471  %6 = and <16 x i1> %4, %5472  %7 = select <16 x i1> %6, <16 x float> %b0, <16 x float> %b1473  ret <16 x float> %7474}475 476define <2 x double> @stack_fold_divsd_int(<2 x double> %a0, <2 x double> %a1) {477; CHECK-LABEL: stack_fold_divsd_int:478; CHECK:       # %bb.0:479; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill480; CHECK-NEXT:    #APP481; CHECK-NEXT:    nop482; CHECK-NEXT:    #NO_APP483; CHECK-NEXT:    vdivsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload484; CHECK-NEXT:    retq485  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()486  %2 = extractelement <2 x double> %a0, i32 0487  %3 = extractelement <2 x double> %a1, i32 0488  %4 = fdiv double %2, %3489  %5 = insertelement <2 x double> %a0, double %4, i32 0490  ret <2 x double> %5491}492 493define float @stack_fold_divss(float %a0, float %a1) {494; CHECK-LABEL: stack_fold_divss:495; CHECK:       # %bb.0:496; CHECK-NEXT:    vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill497; CHECK-NEXT:    #APP498; CHECK-NEXT:    nop499; CHECK-NEXT:    #NO_APP500; CHECK-NEXT:    vdivss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload501; CHECK-NEXT:    retq502  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()503  %2 = fdiv float %a0, %a1504  ret float %2505}506 507define <4 x float> @stack_fold_divss_int(<4 x float> %a0, <4 x float> %a1) {508; CHECK-LABEL: stack_fold_divss_int:509; CHECK:       # %bb.0:510; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill511; CHECK-NEXT:    #APP512; CHECK-NEXT:    nop513; CHECK-NEXT:    #NO_APP514; CHECK-NEXT:    vdivss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload515; CHECK-NEXT:    retq516  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()517  %2 = extractelement <4 x float> %a0, i32 0518  %3 = extractelement <4 x float> %a1, i32 0519  %4 = fdiv float %2, %3520  %5 = insertelement <4 x float> %a0, float %4, i32 0521  ret <4 x float> %5522}523 524define <8 x double> @stack_fold_cvtdq2pd(<8 x i32> %a0) {525; CHECK-LABEL: stack_fold_cvtdq2pd:526; CHECK:       # %bb.0:527; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill528; CHECK-NEXT:    #APP529; CHECK-NEXT:    nop530; CHECK-NEXT:    #NO_APP531; CHECK-NEXT:    vcvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 32-byte Folded Reload532; CHECK-NEXT:    retq533  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()534  %2 = sitofp <8 x i32> %a0 to <8 x double>535  ret <8 x double> %2536}537 538define <8 x double> @stack_fold_cvtudq2pd(<8 x i32> %a0) {539; CHECK-LABEL: stack_fold_cvtudq2pd:540; CHECK:       # %bb.0:541; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill542; CHECK-NEXT:    #APP543; CHECK-NEXT:    nop544; CHECK-NEXT:    #NO_APP545; CHECK-NEXT:    vcvtudq2pd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 32-byte Folded Reload546; CHECK-NEXT:    retq547  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()548  %2 = uitofp <8 x i32> %a0 to <8 x double>549  ret <8 x double> %2550}551 552define <8 x float> @stack_fold_cvtpd2ps(<8 x double> %a0) {553; CHECK-LABEL: stack_fold_cvtpd2ps:554; CHECK:       # %bb.0:555; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill556; CHECK-NEXT:    #APP557; CHECK-NEXT:    nop558; CHECK-NEXT:    #NO_APP559; CHECK-NEXT:    vcvtpd2ps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 64-byte Folded Reload560; CHECK-NEXT:    retq561  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()562  %2 = fptrunc <8 x double> %a0 to <8 x float>563  ret <8 x float> %2564}565 566define <16 x float> @stack_fold_cvtph2ps(<16 x i16> %a0) {567; CHECK-LABEL: stack_fold_cvtph2ps:568; CHECK:       # %bb.0:569; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill570; CHECK-NEXT:    #APP571; CHECK-NEXT:    nop572; CHECK-NEXT:    #NO_APP573; CHECK-NEXT:    vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 32-byte Folded Reload574; CHECK-NEXT:    retq575  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()576  %2 = call <16 x float> @llvm.x86.avx512.mask.vcvtph2ps.512(<16 x i16> %a0, <16 x float> undef, i16 -1, i32 4)577  ret <16 x float> %2578}579declare <16 x float> @llvm.x86.avx512.mask.vcvtph2ps.512(<16 x i16>, <16 x float>, i16, i32) nounwind readonly580 581define <16 x i16> @stack_fold_cvtps2ph(<16 x float> %a0) {582; CHECK-LABEL: stack_fold_cvtps2ph:583; CHECK:       # %bb.0:584; CHECK-NEXT:    vcvtps2ph $0, %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Folded Spill585; CHECK-NEXT:    #APP586; CHECK-NEXT:    nop587; CHECK-NEXT:    #NO_APP588; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload589; CHECK-NEXT:    retq590  %1 = call <16 x i16> @llvm.x86.avx512.mask.vcvtps2ph.512(<16 x float> %a0, i32 0, <16 x i16> undef, i16 -1)591  %2 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()592  ret <16 x i16> %1593}594declare <16 x i16> @llvm.x86.avx512.mask.vcvtps2ph.512(<16 x float>, i32, <16 x i16>, i16) nounwind readonly595 596define <4 x float> @stack_fold_insertps(<4 x float> %a0, <4 x float> %a1) {597; CHECK-LABEL: stack_fold_insertps:598; CHECK:       # %bb.0:599; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill600; CHECK-NEXT:    #APP601; CHECK-NEXT:    nop602; CHECK-NEXT:    #NO_APP603; CHECK-NEXT:    vinsertps $17, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload604; CHECK-NEXT:    # xmm0 = zero,mem[0],xmm0[2,3]605; CHECK-NEXT:    retq606  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()607  %2 = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %a1, i8 209)608  ret <4 x float> %2609}610declare <4 x float> @llvm.x86.sse41.insertps(<4 x float>, <4 x float>, i8) nounwind readnone611 612define <8 x double> @stack_fold_maxpd_zmm(<8 x double> %a0, <8 x double> %a1) {613; CHECK-LABEL: stack_fold_maxpd_zmm:614; CHECK:       # %bb.0:615; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill616; CHECK-NEXT:    #APP617; CHECK-NEXT:    nop618; CHECK-NEXT:    #NO_APP619; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload620; CHECK-NEXT:    retq621  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()622  %2 = call <8 x double> @llvm.x86.avx512.max.pd.512(<8 x double> %a0, <8 x double> %a1, i32 4)623  ret <8 x double> %2624}625declare <8 x double> @llvm.x86.avx512.max.pd.512(<8 x double>, <8 x double>, i32) nounwind readnone626 627define <8 x double> @stack_fold_maxpd_zmm_commutable(<8 x double> %a0, <8 x double> %a1) #1 {628; CHECK-LABEL: stack_fold_maxpd_zmm_commutable:629; CHECK:       # %bb.0:630; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill631; CHECK-NEXT:    #APP632; CHECK-NEXT:    nop633; CHECK-NEXT:    #NO_APP634; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload635; CHECK-NEXT:    retq636  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()637  %2 = call <8 x double> @llvm.x86.avx512.max.pd.512(<8 x double> %a0, <8 x double> %a1, i32 4)638  ret <8 x double> %2639}640 641define <8 x double> @stack_fold_maxpd_zmm_commutable_k(<8 x double> %a0, <8 x double> %a1, i8 %mask, ptr %passthru) #1 {642; CHECK-LABEL: stack_fold_maxpd_zmm_commutable_k:643; CHECK:       # %bb.0:644; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill645; CHECK-NEXT:    #APP646; CHECK-NEXT:    nop647; CHECK-NEXT:    #NO_APP648; CHECK-NEXT:    kmovw %edi, %k1649; CHECK-NEXT:    vmovapd (%rsi), %zmm2650; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload651; CHECK-NEXT:    vmovapd %zmm2, %zmm0652; CHECK-NEXT:    retq653  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()654  %2 = call <8 x double> @llvm.x86.avx512.max.pd.512(<8 x double> %a0, <8 x double> %a1, i32 4)655  %3 = bitcast i8 %mask to <8 x i1>656  %4 = load <8 x double>, ptr %passthru657  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %4658  ret <8 x double> %5659}660 661define <8 x double> @stack_fold_maxpd_zmm_commutable_k_commuted(<8 x double> %a0, <8 x double> %a1, i8 %mask, ptr %passthru) #1 {662; CHECK-LABEL: stack_fold_maxpd_zmm_commutable_k_commuted:663; CHECK:       # %bb.0:664; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill665; CHECK-NEXT:    #APP666; CHECK-NEXT:    nop667; CHECK-NEXT:    #NO_APP668; CHECK-NEXT:    kmovw %edi, %k1669; CHECK-NEXT:    vmovapd (%rsi), %zmm2670; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload671; CHECK-NEXT:    vmovapd %zmm2, %zmm0672; CHECK-NEXT:    retq673  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()674  %2 = call <8 x double> @llvm.x86.avx512.max.pd.512(<8 x double> %a1, <8 x double> %a0, i32 4)675  %3 = bitcast i8 %mask to <8 x i1>676  %4 = load <8 x double>, ptr %passthru677  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %4678  ret <8 x double> %5679}680 681define <8 x double> @stack_fold_maxpd_zmm_commutable_kz(<8 x double> %a0, <8 x double> %a1, i8 %mask) #1 {682; CHECK-LABEL: stack_fold_maxpd_zmm_commutable_kz:683; CHECK:       # %bb.0:684; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill685; CHECK-NEXT:    #APP686; CHECK-NEXT:    nop687; CHECK-NEXT:    #NO_APP688; CHECK-NEXT:    kmovw %edi, %k1689; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload690; CHECK-NEXT:    retq691  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()692  %2 = call <8 x double> @llvm.x86.avx512.max.pd.512(<8 x double> %a1, <8 x double> %a0, i32 4)693  %3 = bitcast i8 %mask to <8 x i1>694  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer695  ret <8 x double> %4696}697 698define <16 x float> @stack_fold_maxps_zmm(<16 x float> %a0, <16 x float> %a1) {699; CHECK-LABEL: stack_fold_maxps_zmm:700; CHECK:       # %bb.0:701; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill702; CHECK-NEXT:    #APP703; CHECK-NEXT:    nop704; CHECK-NEXT:    #NO_APP705; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload706; CHECK-NEXT:    retq707  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()708  %2 = call <16 x float> @llvm.x86.avx512.max.ps.512(<16 x float> %a0, <16 x float> %a1, i32 4)709  ret <16 x float> %2710}711declare <16 x float> @llvm.x86.avx512.max.ps.512(<16 x float>, <16 x float>, i32) nounwind readnone712 713define <16 x float> @stack_fold_maxps_zmm_commutable(<16 x float> %a0, <16 x float> %a1) #1 {714; CHECK-LABEL: stack_fold_maxps_zmm_commutable:715; CHECK:       # %bb.0:716; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill717; CHECK-NEXT:    #APP718; CHECK-NEXT:    nop719; CHECK-NEXT:    #NO_APP720; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload721; CHECK-NEXT:    retq722  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()723  %2 = call <16 x float> @llvm.x86.avx512.max.ps.512(<16 x float> %a0, <16 x float> %a1, i32 4)724  ret <16 x float> %2725}726 727define <16 x float> @stack_fold_maxps_zmm_commutable_k(<16 x float> %a0, <16 x float> %a1, i16 %mask, ptr %passthru) #1 {728; CHECK-LABEL: stack_fold_maxps_zmm_commutable_k:729; CHECK:       # %bb.0:730; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill731; CHECK-NEXT:    #APP732; CHECK-NEXT:    nop733; CHECK-NEXT:    #NO_APP734; CHECK-NEXT:    kmovw %edi, %k1735; CHECK-NEXT:    vmovaps (%rsi), %zmm2736; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload737; CHECK-NEXT:    vmovaps %zmm2, %zmm0738; CHECK-NEXT:    retq739  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()740  %2 = call <16 x float> @llvm.x86.avx512.max.ps.512(<16 x float> %a0, <16 x float> %a1, i32 4)741  %3 = bitcast i16 %mask to <16 x i1>742  %4 = load <16 x float>, ptr %passthru743  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %4744  ret <16 x float> %5745}746 747define <16 x float> @stack_fold_maxps_zmm_commutable_k_commuted(<16 x float> %a0, <16 x float> %a1, i16 %mask, ptr %passthru) #1 {748; CHECK-LABEL: stack_fold_maxps_zmm_commutable_k_commuted:749; CHECK:       # %bb.0:750; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill751; CHECK-NEXT:    #APP752; CHECK-NEXT:    nop753; CHECK-NEXT:    #NO_APP754; CHECK-NEXT:    kmovw %edi, %k1755; CHECK-NEXT:    vmovaps (%rsi), %zmm2756; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload757; CHECK-NEXT:    vmovaps %zmm2, %zmm0758; CHECK-NEXT:    retq759  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()760  %2 = call <16 x float> @llvm.x86.avx512.max.ps.512(<16 x float> %a1, <16 x float> %a0, i32 4)761  %3 = bitcast i16 %mask to <16 x i1>762  %4 = load <16 x float>, ptr %passthru763  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %4764  ret <16 x float> %5765}766 767define <16 x float> @stack_fold_maxps_zmm_commutable_kz(<16 x float> %a0, <16 x float> %a1, i16 %mask) #1 {768; CHECK-LABEL: stack_fold_maxps_zmm_commutable_kz:769; CHECK:       # %bb.0:770; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill771; CHECK-NEXT:    #APP772; CHECK-NEXT:    nop773; CHECK-NEXT:    #NO_APP774; CHECK-NEXT:    kmovw %edi, %k1775; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload776; CHECK-NEXT:    retq777  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()778  %2 = call <16 x float> @llvm.x86.avx512.max.ps.512(<16 x float> %a1, <16 x float> %a0, i32 4)779  %3 = bitcast i16 %mask to <16 x i1>780  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer781  ret <16 x float> %4782}783 784define <8 x double> @stack_fold_minpd_zmm(<8 x double> %a0, <8 x double> %a1) {785; CHECK-LABEL: stack_fold_minpd_zmm:786; CHECK:       # %bb.0:787; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill788; CHECK-NEXT:    #APP789; CHECK-NEXT:    nop790; CHECK-NEXT:    #NO_APP791; CHECK-NEXT:    vminpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload792; CHECK-NEXT:    retq793  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()794  %2 = call <8 x double> @llvm.x86.avx512.min.pd.512(<8 x double> %a0, <8 x double> %a1, i32 4)795  ret <8 x double> %2796}797declare <8 x double> @llvm.x86.avx512.min.pd.512(<8 x double>, <8 x double>, i32) nounwind readnone798 799define <8 x double> @stack_fold_minpd_zmm_commutable(<8 x double> %a0, <8 x double> %a1) #1 {800; CHECK-LABEL: stack_fold_minpd_zmm_commutable:801; CHECK:       # %bb.0:802; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill803; CHECK-NEXT:    #APP804; CHECK-NEXT:    nop805; CHECK-NEXT:    #NO_APP806; CHECK-NEXT:    vminpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload807; CHECK-NEXT:    retq808  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()809  %2 = call <8 x double> @llvm.x86.avx512.min.pd.512(<8 x double> %a0, <8 x double> %a1, i32 4)810  ret <8 x double> %2811}812 813define <8 x double> @stack_fold_minpd_zmm_commutable_k(<8 x double> %a0, <8 x double> %a1, i8 %mask, ptr %passthru) #1 {814; CHECK-LABEL: stack_fold_minpd_zmm_commutable_k:815; CHECK:       # %bb.0:816; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill817; CHECK-NEXT:    #APP818; CHECK-NEXT:    nop819; CHECK-NEXT:    #NO_APP820; CHECK-NEXT:    kmovw %edi, %k1821; CHECK-NEXT:    vmovapd (%rsi), %zmm2822; CHECK-NEXT:    vminpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload823; CHECK-NEXT:    vmovapd %zmm2, %zmm0824; CHECK-NEXT:    retq825  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()826  %2 = call <8 x double> @llvm.x86.avx512.min.pd.512(<8 x double> %a0, <8 x double> %a1, i32 4)827  %3 = bitcast i8 %mask to <8 x i1>828  %4 = load <8 x double>, ptr %passthru829  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %4830  ret <8 x double> %5831}832 833define <8 x double> @stack_fold_minpd_zmm_commutable_k_commuted(<8 x double> %a0, <8 x double> %a1, i8 %mask, ptr %passthru) #1 {834; CHECK-LABEL: stack_fold_minpd_zmm_commutable_k_commuted:835; CHECK:       # %bb.0:836; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill837; CHECK-NEXT:    #APP838; CHECK-NEXT:    nop839; CHECK-NEXT:    #NO_APP840; CHECK-NEXT:    kmovw %edi, %k1841; CHECK-NEXT:    vmovapd (%rsi), %zmm2842; CHECK-NEXT:    vminpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload843; CHECK-NEXT:    vmovapd %zmm2, %zmm0844; CHECK-NEXT:    retq845  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()846  %2 = call <8 x double> @llvm.x86.avx512.min.pd.512(<8 x double> %a1, <8 x double> %a0, i32 4)847  %3 = bitcast i8 %mask to <8 x i1>848  %4 = load <8 x double>, ptr %passthru849  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %4850  ret <8 x double> %5851}852 853define <8 x double> @stack_fold_minpd_zmm_commutable_kz(<8 x double> %a0, <8 x double> %a1, i8 %mask) #1 {854; CHECK-LABEL: stack_fold_minpd_zmm_commutable_kz:855; CHECK:       # %bb.0:856; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill857; CHECK-NEXT:    #APP858; CHECK-NEXT:    nop859; CHECK-NEXT:    #NO_APP860; CHECK-NEXT:    kmovw %edi, %k1861; CHECK-NEXT:    vminpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload862; CHECK-NEXT:    retq863  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()864  %2 = call <8 x double> @llvm.x86.avx512.min.pd.512(<8 x double> %a1, <8 x double> %a0, i32 4)865  %3 = bitcast i8 %mask to <8 x i1>866  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer867  ret <8 x double> %4868}869 870define <16 x float> @stack_fold_minps_zmm(<16 x float> %a0, <16 x float> %a1) {871; CHECK-LABEL: stack_fold_minps_zmm:872; CHECK:       # %bb.0:873; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill874; CHECK-NEXT:    #APP875; CHECK-NEXT:    nop876; CHECK-NEXT:    #NO_APP877; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload878; CHECK-NEXT:    retq879  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()880  %2 = call <16 x float> @llvm.x86.avx512.min.ps.512(<16 x float> %a0, <16 x float> %a1, i32 4)881  ret <16 x float> %2882}883declare <16 x float> @llvm.x86.avx512.min.ps.512(<16 x float>, <16 x float>, i32) nounwind readnone884 885define <16 x float> @stack_fold_minps_zmm_commutable(<16 x float> %a0, <16 x float> %a1) #1 {886; CHECK-LABEL: stack_fold_minps_zmm_commutable:887; CHECK:       # %bb.0:888; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill889; CHECK-NEXT:    #APP890; CHECK-NEXT:    nop891; CHECK-NEXT:    #NO_APP892; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload893; CHECK-NEXT:    retq894  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()895  %2 = call <16 x float> @llvm.x86.avx512.min.ps.512(<16 x float> %a0, <16 x float> %a1, i32 4)896  ret <16 x float> %2897}898 899define <16 x float> @stack_fold_minps_zmm_commutable_k(<16 x float> %a0, <16 x float> %a1, i16 %mask, ptr %passthru) #1 {900; CHECK-LABEL: stack_fold_minps_zmm_commutable_k:901; CHECK:       # %bb.0:902; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill903; CHECK-NEXT:    #APP904; CHECK-NEXT:    nop905; CHECK-NEXT:    #NO_APP906; CHECK-NEXT:    kmovw %edi, %k1907; CHECK-NEXT:    vmovaps (%rsi), %zmm2908; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload909; CHECK-NEXT:    vmovaps %zmm2, %zmm0910; CHECK-NEXT:    retq911  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()912  %2 = call <16 x float> @llvm.x86.avx512.min.ps.512(<16 x float> %a0, <16 x float> %a1, i32 4)913  %3 = bitcast i16 %mask to <16 x i1>914  %4 = load <16 x float>, ptr %passthru915  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %4916  ret <16 x float> %5917}918 919define <16 x float> @stack_fold_minps_zmm_commutable_k_commuted(<16 x float> %a0, <16 x float> %a1, i16 %mask, ptr %passthru) #1 {920; CHECK-LABEL: stack_fold_minps_zmm_commutable_k_commuted:921; CHECK:       # %bb.0:922; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill923; CHECK-NEXT:    #APP924; CHECK-NEXT:    nop925; CHECK-NEXT:    #NO_APP926; CHECK-NEXT:    kmovw %edi, %k1927; CHECK-NEXT:    vmovaps (%rsi), %zmm2928; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload929; CHECK-NEXT:    vmovaps %zmm2, %zmm0930; CHECK-NEXT:    retq931  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()932  %2 = call <16 x float> @llvm.x86.avx512.min.ps.512(<16 x float> %a1, <16 x float> %a0, i32 4)933  %3 = bitcast i16 %mask to <16 x i1>934  %4 = load <16 x float>, ptr %passthru935  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %4936  ret <16 x float> %5937}938 939define <16 x float> @stack_fold_minps_zmm_commutable_kz(<16 x float> %a0, <16 x float> %a1, i16 %mask) #1 {940; CHECK-LABEL: stack_fold_minps_zmm_commutable_kz:941; CHECK:       # %bb.0:942; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill943; CHECK-NEXT:    #APP944; CHECK-NEXT:    nop945; CHECK-NEXT:    #NO_APP946; CHECK-NEXT:    kmovw %edi, %k1947; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload948; CHECK-NEXT:    retq949  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()950  %2 = call <16 x float> @llvm.x86.avx512.min.ps.512(<16 x float> %a1, <16 x float> %a0, i32 4)951  %3 = bitcast i16 %mask to <16 x i1>952  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer953  ret <16 x float> %4954}955 956define <8 x double> @stack_fold_mulpd_zmm(<8 x double> %a0, <8 x double> %a1) {957; CHECK-LABEL: stack_fold_mulpd_zmm:958; CHECK:       # %bb.0:959; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill960; CHECK-NEXT:    #APP961; CHECK-NEXT:    nop962; CHECK-NEXT:    #NO_APP963; CHECK-NEXT:    vmulpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload964; CHECK-NEXT:    retq965  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()966  %2 = fmul <8 x double> %a0, %a1967  ret <8 x double> %2968}969 970define <8 x double> @stack_fold_mulpd_zmm_k(<8 x double> %a0, <8 x double> %a1, i8 %mask, ptr %passthru) {971; CHECK-LABEL: stack_fold_mulpd_zmm_k:972; CHECK:       # %bb.0:973; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill974; CHECK-NEXT:    #APP975; CHECK-NEXT:    nop976; CHECK-NEXT:    #NO_APP977; CHECK-NEXT:    kmovw %edi, %k1978; CHECK-NEXT:    vmovapd (%rsi), %zmm2979; CHECK-NEXT:    vmulpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload980; CHECK-NEXT:    vmovapd %zmm2, %zmm0981; CHECK-NEXT:    retq982  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()983  %2 = fmul <8 x double> %a0, %a1984  %3 = bitcast i8 %mask to <8 x i1>985  %4 = load <8 x double>, ptr %passthru986  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %4987  ret <8 x double> %5988}989 990define <8 x double> @stack_fold_mulpd_zmm_k_commuted(<8 x double> %a0, <8 x double> %a1, i8 %mask, ptr %passthru) {991; CHECK-LABEL: stack_fold_mulpd_zmm_k_commuted:992; CHECK:       # %bb.0:993; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill994; CHECK-NEXT:    #APP995; CHECK-NEXT:    nop996; CHECK-NEXT:    #NO_APP997; CHECK-NEXT:    kmovw %edi, %k1998; CHECK-NEXT:    vmovapd (%rsi), %zmm2999; CHECK-NEXT:    vmulpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1000; CHECK-NEXT:    vmovapd %zmm2, %zmm01001; CHECK-NEXT:    retq1002  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1003  %2 = fmul <8 x double> %a1, %a01004  %3 = bitcast i8 %mask to <8 x i1>1005  %4 = load <8 x double>, ptr %passthru1006  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %41007  ret <8 x double> %51008}1009 1010define <8 x double> @stack_fold_mulpd_zmm_kz(<8 x double> %a0, <8 x double> %a1, i8 %mask) {1011; CHECK-LABEL: stack_fold_mulpd_zmm_kz:1012; CHECK:       # %bb.0:1013; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1014; CHECK-NEXT:    #APP1015; CHECK-NEXT:    nop1016; CHECK-NEXT:    #NO_APP1017; CHECK-NEXT:    kmovw %edi, %k11018; CHECK-NEXT:    vmulpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload1019; CHECK-NEXT:    retq1020  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1021  %2 = fmul <8 x double> %a1, %a01022  %3 = bitcast i8 %mask to <8 x i1>1023  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer1024  ret <8 x double> %41025}1026 1027define <16 x float> @stack_fold_mulps_zmm(<16 x float> %a0, <16 x float> %a1) {1028; CHECK-LABEL: stack_fold_mulps_zmm:1029; CHECK:       # %bb.0:1030; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1031; CHECK-NEXT:    #APP1032; CHECK-NEXT:    nop1033; CHECK-NEXT:    #NO_APP1034; CHECK-NEXT:    vmulps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1035; CHECK-NEXT:    retq1036  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1037  %2 = fmul <16 x float> %a0, %a11038  ret <16 x float> %21039}1040 1041define <16 x float> @stack_fold_mulps_zmm_k(<16 x float> %a0, <16 x float> %a1, i16 %mask, ptr %passthru) {1042; CHECK-LABEL: stack_fold_mulps_zmm_k:1043; CHECK:       # %bb.0:1044; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1045; CHECK-NEXT:    #APP1046; CHECK-NEXT:    nop1047; CHECK-NEXT:    #NO_APP1048; CHECK-NEXT:    kmovw %edi, %k11049; CHECK-NEXT:    vmovaps (%rsi), %zmm21050; CHECK-NEXT:    vmulps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1051; CHECK-NEXT:    vmovaps %zmm2, %zmm01052; CHECK-NEXT:    retq1053  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1054  %2 = fmul <16 x float> %a0, %a11055  %3 = bitcast i16 %mask to <16 x i1>1056  %4 = load <16 x float>, ptr %passthru1057  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %41058  ret <16 x float> %51059}1060 1061define <16 x float> @stack_fold_mulps_zmm_k_commuted(<16 x float> %a0, <16 x float> %a1, i16 %mask, ptr %passthru) {1062; CHECK-LABEL: stack_fold_mulps_zmm_k_commuted:1063; CHECK:       # %bb.0:1064; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1065; CHECK-NEXT:    #APP1066; CHECK-NEXT:    nop1067; CHECK-NEXT:    #NO_APP1068; CHECK-NEXT:    kmovw %edi, %k11069; CHECK-NEXT:    vmovaps (%rsi), %zmm21070; CHECK-NEXT:    vmulps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1071; CHECK-NEXT:    vmovaps %zmm2, %zmm01072; CHECK-NEXT:    retq1073  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1074  %2 = fmul <16 x float> %a1, %a01075  %3 = bitcast i16 %mask to <16 x i1>1076  %4 = load <16 x float>, ptr %passthru1077  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %41078  ret <16 x float> %51079}1080 1081define <16 x float> @stack_fold_mulps_zmm_kz(<16 x float> %a0, <16 x float> %a1, i16 %mask) {1082; CHECK-LABEL: stack_fold_mulps_zmm_kz:1083; CHECK:       # %bb.0:1084; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1085; CHECK-NEXT:    #APP1086; CHECK-NEXT:    nop1087; CHECK-NEXT:    #NO_APP1088; CHECK-NEXT:    kmovw %edi, %k11089; CHECK-NEXT:    vmulps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload1090; CHECK-NEXT:    retq1091  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1092  %2 = fmul <16 x float> %a1, %a01093  %3 = bitcast i16 %mask to <16 x i1>1094  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer1095  ret <16 x float> %41096}1097 1098define double @stack_fold_mulsd(double %a0, double %a1) {1099; CHECK-LABEL: stack_fold_mulsd:1100; CHECK:       # %bb.0:1101; CHECK-NEXT:    vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1102; CHECK-NEXT:    #APP1103; CHECK-NEXT:    nop1104; CHECK-NEXT:    #NO_APP1105; CHECK-NEXT:    vmulsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload1106; CHECK-NEXT:    retq1107  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1108  %2 = fmul double %a0, %a11109  ret double %21110}1111 1112define <2 x double> @stack_fold_mulsd_int(<2 x double> %a0, <2 x double> %a1) {1113; CHECK-LABEL: stack_fold_mulsd_int:1114; CHECK:       # %bb.0:1115; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1116; CHECK-NEXT:    #APP1117; CHECK-NEXT:    nop1118; CHECK-NEXT:    #NO_APP1119; CHECK-NEXT:    vmulsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1120; CHECK-NEXT:    retq1121  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1122  %2 = extractelement <2 x double> %a0, i32 01123  %3 = extractelement <2 x double> %a1, i32 01124  %4 = fmul double %2, %31125  %5 = insertelement <2 x double> %a0, double %4, i32 01126  ret <2 x double> %51127}1128 1129define float @stack_fold_mulss(float %a0, float %a1) {1130; CHECK-LABEL: stack_fold_mulss:1131; CHECK:       # %bb.0:1132; CHECK-NEXT:    vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1133; CHECK-NEXT:    #APP1134; CHECK-NEXT:    nop1135; CHECK-NEXT:    #NO_APP1136; CHECK-NEXT:    vmulss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1137; CHECK-NEXT:    retq1138  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1139  %2 = fmul float %a0, %a11140  ret float %21141}1142 1143define <4 x float> @stack_fold_mulss_int(<4 x float> %a0, <4 x float> %a1) {1144; CHECK-LABEL: stack_fold_mulss_int:1145; CHECK:       # %bb.0:1146; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1147; CHECK-NEXT:    #APP1148; CHECK-NEXT:    nop1149; CHECK-NEXT:    #NO_APP1150; CHECK-NEXT:    vmulss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1151; CHECK-NEXT:    retq1152  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1153  %2 = extractelement <4 x float> %a0, i32 01154  %3 = extractelement <4 x float> %a1, i32 01155  %4 = fmul float %2, %31156  %5 = insertelement <4 x float> %a0, float %4, i32 01157  ret <4 x float> %51158}1159 1160define <8 x double> @stack_fold_orpd_zmm(<8 x double> %a0, <8 x double> %a1) {1161; CHECK-LABEL: stack_fold_orpd_zmm:1162; CHECK:       # %bb.0:1163; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1164; CHECK-NEXT:    #APP1165; CHECK-NEXT:    nop1166; CHECK-NEXT:    #NO_APP1167; CHECK-NEXT:    vorpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1168; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm11169; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm01170; CHECK-NEXT:    retq1171  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1172  %2 = bitcast <8 x double> %a0 to <8 x i64>1173  %3 = bitcast <8 x double> %a1 to <8 x i64>1174  %4 = or <8 x i64> %2, %31175  %5 = bitcast <8 x i64> %4 to <8 x double>1176  ; fadd forces execution domain1177  %6 = fadd <8 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0>1178  ret <8 x double> %61179}1180 1181define <16 x float> @stack_fold_orps_zmm(<16 x float> %a0, <16 x float> %a1) {1182; CHECK-LABEL: stack_fold_orps_zmm:1183; CHECK:       # %bb.0:1184; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1185; CHECK-NEXT:    #APP1186; CHECK-NEXT:    nop1187; CHECK-NEXT:    #NO_APP1188; CHECK-NEXT:    vorps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1189; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11190; CHECK-NEXT:    vaddps %zmm1, %zmm0, %zmm01191; CHECK-NEXT:    retq1192  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1193  %2 = bitcast <16 x float> %a0 to <16 x i32>1194  %3 = bitcast <16 x float> %a1 to <16 x i32>1195  %4 = or <16 x i32> %2, %31196  %5 = bitcast <16 x i32> %4 to <16 x float>1197  ; fadd forces execution domain1198  %6 = fadd <16 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>1199  ret <16 x float> %61200}1201 1202define <8 x double> @stack_fold_shuff64x2(<8 x double> %a, <8 x double> %b) {1203; CHECK-LABEL: stack_fold_shuff64x2:1204; CHECK:       # %bb.0:1205; CHECK-NEXT:    pushq %rax1206; CHECK-NEXT:    .cfi_def_cfa_offset 161207; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1208; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1209; CHECK-NEXT:    #APP1210; CHECK-NEXT:    nop1211; CHECK-NEXT:    #NO_APP1212; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1213; CHECK-NEXT:    vshuff64x2 $24, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1214; CHECK-NEXT:    # zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]1215; CHECK-NEXT:    popq %rax1216; CHECK-NEXT:    .cfi_def_cfa_offset 81217; CHECK-NEXT:    retq1218  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1219  %2 = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1220  ret <8 x double> %21221}1222 1223define <8 x double> @stack_fold_shuff64x2_mask(<8 x double> %a, <8 x double> %b, i8 %mask, ptr %passthru) {1224; CHECK-LABEL: stack_fold_shuff64x2_mask:1225; CHECK:       # %bb.0:1226; CHECK-NEXT:    pushq %rax1227; CHECK-NEXT:    .cfi_def_cfa_offset 161228; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1229; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1230; CHECK-NEXT:    #APP1231; CHECK-NEXT:    nop1232; CHECK-NEXT:    #NO_APP1233; CHECK-NEXT:    kmovw %edi, %k11234; CHECK-NEXT:    vmovapd (%rsi), %zmm11235; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1236; CHECK-NEXT:    vshuff64x2 $24, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm1 {%k1} # 64-byte Folded Reload1237; CHECK-NEXT:    # zmm1 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]1238; CHECK-NEXT:    vmovapd %zmm1, %zmm01239; CHECK-NEXT:    popq %rax1240; CHECK-NEXT:    .cfi_def_cfa_offset 81241; CHECK-NEXT:    retq1242  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1243  %2 = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1244  %3 = bitcast i8 %mask to <8 x i1>1245  ; load needed to keep the operation from being scheduled above the asm block1246  %4 = load <8 x double>, ptr %passthru1247  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %41248  ret <8 x double> %51249}1250 1251define <8 x double> @stack_fold_shuff64x2_maskz(<8 x double> %a, <8 x double> %b, i8 %mask, ptr %passthru) {1252; CHECK-LABEL: stack_fold_shuff64x2_maskz:1253; CHECK:       # %bb.0:1254; CHECK-NEXT:    pushq %rax1255; CHECK-NEXT:    .cfi_def_cfa_offset 161256; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1257; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1258; CHECK-NEXT:    #APP1259; CHECK-NEXT:    nop1260; CHECK-NEXT:    #NO_APP1261; CHECK-NEXT:    kmovw %edi, %k11262; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1263; CHECK-NEXT:    vshuff64x2 $24, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload1264; CHECK-NEXT:    # zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]1265; CHECK-NEXT:    popq %rax1266; CHECK-NEXT:    .cfi_def_cfa_offset 81267; CHECK-NEXT:    retq1268  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1269  %2 = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1270  %3 = bitcast i8 %mask to <8 x i1>1271  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer1272  ret <8 x double> %41273}1274 1275define <16 x float> @stack_fold_shuff32x4_mask(<16 x float> %a, <16 x float> %b, i16 %mask, ptr %passthru) {1276; CHECK-LABEL: stack_fold_shuff32x4_mask:1277; CHECK:       # %bb.0:1278; CHECK-NEXT:    pushq %rax1279; CHECK-NEXT:    .cfi_def_cfa_offset 161280; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1281; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1282; CHECK-NEXT:    #APP1283; CHECK-NEXT:    nop1284; CHECK-NEXT:    #NO_APP1285; CHECK-NEXT:    kmovw %edi, %k11286; CHECK-NEXT:    vmovaps (%rsi), %zmm11287; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1288; CHECK-NEXT:    vshuff32x4 $20, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm1 {%k1} # 64-byte Folded Reload1289; CHECK-NEXT:    # zmm1 {%k1} = zmm0[0,1,2,3,4,5,6,7],mem[4,5,6,7,0,1,2,3]1290; CHECK-NEXT:    vmovaps %zmm1, %zmm01291; CHECK-NEXT:    popq %rax1292; CHECK-NEXT:    .cfi_def_cfa_offset 81293; CHECK-NEXT:    retq1294  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1295  %2 = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 20, i32 21, i32 22, i32 23, i32 16, i32 17, i32 18, i32 19>1296  %3 = bitcast i16 %mask to <16 x i1>1297  ; load needed to keep the operation from being scheduled above the asm block1298  %4 = load <16 x float>, ptr %passthru1299  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %41300  ret <16 x float> %51301}1302 1303define <16 x float> @stack_fold_shuff32x4_maskz(<16 x float> %a, <16 x float> %b, i16 %mask) {1304; CHECK-LABEL: stack_fold_shuff32x4_maskz:1305; CHECK:       # %bb.0:1306; CHECK-NEXT:    pushq %rax1307; CHECK-NEXT:    .cfi_def_cfa_offset 161308; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1309; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1310; CHECK-NEXT:    #APP1311; CHECK-NEXT:    nop1312; CHECK-NEXT:    #NO_APP1313; CHECK-NEXT:    kmovw %edi, %k11314; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload1315; CHECK-NEXT:    vshuff32x4 $20, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload1316; CHECK-NEXT:    # zmm0 {%k1} {z} = zmm0[0,1,2,3,4,5,6,7],mem[4,5,6,7,0,1,2,3]1317; CHECK-NEXT:    popq %rax1318; CHECK-NEXT:    .cfi_def_cfa_offset 81319; CHECK-NEXT:    retq1320  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1321  %2 = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 20, i32 21, i32 22, i32 23, i32 16, i32 17, i32 18, i32 19>1322  %3 = bitcast i16 %mask to <16 x i1>1323  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer1324  ret <16 x float> %41325}1326 1327define <8 x double> @stack_fold_subpd_zmm(<8 x double> %a0, <8 x double> %a1) {1328; CHECK-LABEL: stack_fold_subpd_zmm:1329; CHECK:       # %bb.0:1330; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1331; CHECK-NEXT:    #APP1332; CHECK-NEXT:    nop1333; CHECK-NEXT:    #NO_APP1334; CHECK-NEXT:    vsubpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1335; CHECK-NEXT:    retq1336  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1337  %2 = fsub <8 x double> %a0, %a11338  ret <8 x double> %21339}1340 1341define <16 x float> @stack_fold_subps_zmm(<16 x float> %a0, <16 x float> %a1) {1342; CHECK-LABEL: stack_fold_subps_zmm:1343; CHECK:       # %bb.0:1344; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1345; CHECK-NEXT:    #APP1346; CHECK-NEXT:    nop1347; CHECK-NEXT:    #NO_APP1348; CHECK-NEXT:    vsubps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1349; CHECK-NEXT:    retq1350  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1351  %2 = fsub <16 x float> %a0, %a11352  ret <16 x float> %21353}1354 1355define double @stack_fold_subsd(double %a0, double %a1) {1356; CHECK-LABEL: stack_fold_subsd:1357; CHECK:       # %bb.0:1358; CHECK-NEXT:    vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill1359; CHECK-NEXT:    #APP1360; CHECK-NEXT:    nop1361; CHECK-NEXT:    #NO_APP1362; CHECK-NEXT:    vsubsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 8-byte Folded Reload1363; CHECK-NEXT:    retq1364  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1365  %2 = fsub double %a0, %a11366  ret double %21367}1368 1369define <2 x double> @stack_fold_subsd_int(<2 x double> %a0, <2 x double> %a1) {1370; CHECK-LABEL: stack_fold_subsd_int:1371; CHECK:       # %bb.0:1372; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1373; CHECK-NEXT:    #APP1374; CHECK-NEXT:    nop1375; CHECK-NEXT:    #NO_APP1376; CHECK-NEXT:    vsubsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1377; CHECK-NEXT:    retq1378  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1379  %2 = extractelement <2 x double> %a0, i32 01380  %3 = extractelement <2 x double> %a1, i32 01381  %4 = fsub double %2, %31382  %5 = insertelement <2 x double> %a0, double %4, i32 01383  ret <2 x double> %51384}1385 1386define float @stack_fold_subss(float %a0, float %a1) {1387; CHECK-LABEL: stack_fold_subss:1388; CHECK:       # %bb.0:1389; CHECK-NEXT:    vmovss %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1390; CHECK-NEXT:    #APP1391; CHECK-NEXT:    nop1392; CHECK-NEXT:    #NO_APP1393; CHECK-NEXT:    vsubss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1394; CHECK-NEXT:    retq1395  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1396  %2 = fsub float %a0, %a11397  ret float %21398}1399 1400define <4 x float> @stack_fold_subss_int(<4 x float> %a0, <4 x float> %a1) {1401; CHECK-LABEL: stack_fold_subss_int:1402; CHECK:       # %bb.0:1403; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1404; CHECK-NEXT:    #APP1405; CHECK-NEXT:    nop1406; CHECK-NEXT:    #NO_APP1407; CHECK-NEXT:    vsubss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1408; CHECK-NEXT:    retq1409  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1410  %2 = extractelement <4 x float> %a0, i32 01411  %3 = extractelement <4 x float> %a1, i32 01412  %4 = fsub float %2, %31413  %5 = insertelement <4 x float> %a0, float %4, i32 01414  ret <4 x float> %51415}1416 1417define <8 x double> @stack_fold_xorpd_zmm(<8 x double> %a0, <8 x double> %a1) {1418; CHECK-LABEL: stack_fold_xorpd_zmm:1419; CHECK:       # %bb.0:1420; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1421; CHECK-NEXT:    #APP1422; CHECK-NEXT:    nop1423; CHECK-NEXT:    #NO_APP1424; CHECK-NEXT:    vxorpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1425; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm11426; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm01427; CHECK-NEXT:    retq1428  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1429  %2 = bitcast <8 x double> %a0 to <8 x i64>1430  %3 = bitcast <8 x double> %a1 to <8 x i64>1431  %4 = xor <8 x i64> %2, %31432  %5 = bitcast <8 x i64> %4 to <8 x double>1433  ; fadd forces execution domain1434  %6 = fadd <8 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0>1435  ret <8 x double> %61436}1437 1438define <16 x float> @stack_fold_xorps_zmm(<16 x float> %a0, <16 x float> %a1) {1439; CHECK-LABEL: stack_fold_xorps_zmm:1440; CHECK:       # %bb.0:1441; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1442; CHECK-NEXT:    #APP1443; CHECK-NEXT:    nop1444; CHECK-NEXT:    #NO_APP1445; CHECK-NEXT:    vxorps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1446; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11447; CHECK-NEXT:    vaddps %zmm1, %zmm0, %zmm01448; CHECK-NEXT:    retq1449  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1450  %2 = bitcast <16 x float> %a0 to <16 x i32>1451  %3 = bitcast <16 x float> %a1 to <16 x i32>1452  %4 = xor <16 x i32> %2, %31453  %5 = bitcast <16 x i32> %4 to <16 x float>1454  ; fadd forces execution domain1455  %6 = fadd <16 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>1456  ret <16 x float> %61457}1458 1459define i32 @stack_fold_extractps(<4 x float> %a0) {1460; CHECK-LABEL: stack_fold_extractps:1461; CHECK:       # %bb.0:1462; CHECK-NEXT:    pushq %rbp1463; CHECK-NEXT:    .cfi_def_cfa_offset 161464; CHECK-NEXT:    pushq %r151465; CHECK-NEXT:    .cfi_def_cfa_offset 241466; CHECK-NEXT:    pushq %r141467; CHECK-NEXT:    .cfi_def_cfa_offset 321468; CHECK-NEXT:    pushq %r131469; CHECK-NEXT:    .cfi_def_cfa_offset 401470; CHECK-NEXT:    pushq %r121471; CHECK-NEXT:    .cfi_def_cfa_offset 481472; CHECK-NEXT:    pushq %rbx1473; CHECK-NEXT:    .cfi_def_cfa_offset 561474; CHECK-NEXT:    .cfi_offset %rbx, -561475; CHECK-NEXT:    .cfi_offset %r12, -481476; CHECK-NEXT:    .cfi_offset %r13, -401477; CHECK-NEXT:    .cfi_offset %r14, -321478; CHECK-NEXT:    .cfi_offset %r15, -241479; CHECK-NEXT:    .cfi_offset %rbp, -161480; CHECK-NEXT:    vextractps $1, %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill1481; CHECK-NEXT:    #APP1482; CHECK-NEXT:    nop1483; CHECK-NEXT:    #NO_APP1484; CHECK-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload1485; CHECK-NEXT:    popq %rbx1486; CHECK-NEXT:    .cfi_def_cfa_offset 481487; CHECK-NEXT:    popq %r121488; CHECK-NEXT:    .cfi_def_cfa_offset 401489; CHECK-NEXT:    popq %r131490; CHECK-NEXT:    .cfi_def_cfa_offset 321491; CHECK-NEXT:    popq %r141492; CHECK-NEXT:    .cfi_def_cfa_offset 241493; CHECK-NEXT:    popq %r151494; CHECK-NEXT:    .cfi_def_cfa_offset 161495; CHECK-NEXT:    popq %rbp1496; CHECK-NEXT:    .cfi_def_cfa_offset 81497; CHECK-NEXT:    retq1498  %1 = extractelement <4 x float> %a0, i32 11499  %2 = bitcast float %1 to i321500  %3 = tail call <2 x i64> asm sideeffect "nop", "=x,~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{rbp},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"()1501  ret i32 %21502}1503 1504define <4 x float> @stack_fold_extracti32x4(<16 x float> %a0) {1505; CHECK-LABEL: stack_fold_extracti32x4:1506; CHECK:       # %bb.0:1507; CHECK-NEXT:    vextractf32x4 $3, %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Folded Spill1508; CHECK-NEXT:    #APP1509; CHECK-NEXT:    nop1510; CHECK-NEXT:    #NO_APP1511; CHECK-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1512; CHECK-NEXT:    vzeroupper1513; CHECK-NEXT:    retq1514  %1 = shufflevector <16 x float> %a0, <16 x float> undef, <4 x i32> <i32 12, i32 13, i32 14, i32 15>1515  %2 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1516  ret <4 x float> %11517}1518 1519define <2 x double> @stack_fold_extractf64x2(<8 x double> %a0) {1520; CHECK-LABEL: stack_fold_extractf64x2:1521; CHECK:       # %bb.0:1522; CHECK-NEXT:    vextractf32x4 $3, %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Folded Spill1523; CHECK-NEXT:    #APP1524; CHECK-NEXT:    nop1525; CHECK-NEXT:    #NO_APP1526; CHECK-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1527; CHECK-NEXT:    vzeroupper1528; CHECK-NEXT:    retq1529  %1 = shufflevector <8 x double> %a0, <8 x double> undef, <2 x i32> <i32 6, i32 7>1530  %2 = tail call <2 x double> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1531  ret <2 x double> %11532}1533 1534define <8 x float> @stack_fold_extracti32x8(<16 x float> %a0) {1535; CHECK-LABEL: stack_fold_extracti32x8:1536; CHECK:       # %bb.0:1537; CHECK-NEXT:    vextractf64x4 $1, %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Folded Spill1538; CHECK-NEXT:    #APP1539; CHECK-NEXT:    nop1540; CHECK-NEXT:    #NO_APP1541; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1542; CHECK-NEXT:    retq1543  %1 = shufflevector <16 x float> %a0, <16 x float> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>1544  %2 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1545  ret <8 x float> %11546}1547 1548define <4 x double> @stack_fold_extractf64x4(<8 x double> %a0) {1549; CHECK-LABEL: stack_fold_extractf64x4:1550; CHECK:       # %bb.0:1551; CHECK-NEXT:    vextractf64x4 $1, %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Folded Spill1552; CHECK-NEXT:    #APP1553; CHECK-NEXT:    nop1554; CHECK-NEXT:    #NO_APP1555; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1556; CHECK-NEXT:    retq1557  %1 = shufflevector <8 x double> %a0, <8 x double> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>1558  %2 = tail call <2 x double> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1559  ret <4 x double> %11560}1561 1562define <16 x float> @stack_fold_insertf32x8(<8 x float> %a0, <8 x float> %a1) {1563; CHECK-LABEL: stack_fold_insertf32x8:1564; CHECK:       # %bb.0:1565; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1566; CHECK-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01567; CHECK-NEXT:    #APP1568; CHECK-NEXT:    nop1569; CHECK-NEXT:    #NO_APP1570; CHECK-NEXT:    vinsertf64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload1571; CHECK-NEXT:    retq1572  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1573  %2 = shufflevector <8 x float> %a0, <8 x float> %a1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>1574  ret <16 x float> %21575}1576 1577define <8 x double> @stack_fold_insertf64x4(<4 x double> %a0, <4 x double> %a1) {1578; CHECK-LABEL: stack_fold_insertf64x4:1579; CHECK:       # %bb.0:1580; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1581; CHECK-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01582; CHECK-NEXT:    #APP1583; CHECK-NEXT:    nop1584; CHECK-NEXT:    #NO_APP1585; CHECK-NEXT:    vinsertf64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload1586; CHECK-NEXT:    retq1587  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1588  %2 = shufflevector <4 x double> %a0, <4 x double> %a1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1589  ret <8 x double> %21590}1591 1592define <8 x double> @stack_fold_insertf64x4_mask(ptr %passthru, <4 x double> %a0, <4 x double> %a1, i8 %mask) {1593; CHECK-LABEL: stack_fold_insertf64x4_mask:1594; CHECK:       # %bb.0:1595; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1596; CHECK-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01597; CHECK-NEXT:    #APP1598; CHECK-NEXT:    nop1599; CHECK-NEXT:    #NO_APP1600; CHECK-NEXT:    kmovw %esi, %k11601; CHECK-NEXT:    vmovapd (%rdi), %zmm21602; CHECK-NEXT:    vinsertf64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 32-byte Folded Reload1603; CHECK-NEXT:    vmovapd %zmm2, %zmm01604; CHECK-NEXT:    retq1605  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1606  %2 = shufflevector <4 x double> %a0, <4 x double> %a1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1607  %3 = bitcast i8 %mask to <8 x i1>1608  %4 = load <8 x double>, ptr %passthru1609  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %41610  ret <8 x double> %51611}1612 1613define <8 x double> @stack_fold_insertf64x4_maskz(<4 x double> %a0, <4 x double> %a1, i8 %mask) {1614; CHECK-LABEL: stack_fold_insertf64x4_maskz:1615; CHECK:       # %bb.0:1616; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1617; CHECK-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01618; CHECK-NEXT:    #APP1619; CHECK-NEXT:    nop1620; CHECK-NEXT:    #NO_APP1621; CHECK-NEXT:    kmovw %edi, %k11622; CHECK-NEXT:    vinsertf64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 32-byte Folded Reload1623; CHECK-NEXT:    retq1624  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1625  %2 = shufflevector <4 x double> %a0, <4 x double> %a1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1626  %3 = bitcast i8 %mask to <8 x i1>1627  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer1628  ret <8 x double> %41629}1630 1631define <16 x float> @stack_fold_vpermt2ps(<16 x float> %x0, <16 x i32> %x1, <16 x float> %x2) {1632; CHECK-LABEL: stack_fold_vpermt2ps:1633; CHECK:       # %bb.0:1634; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1635; CHECK-NEXT:    #APP1636; CHECK-NEXT:    nop1637; CHECK-NEXT:    #NO_APP1638; CHECK-NEXT:    vpermt2ps {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1639; CHECK-NEXT:    retq1640  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1641  %2 = call <16 x float> @llvm.x86.avx512.vpermi2var.ps.512(<16 x float> %x0, <16 x i32> %x1, <16 x float> %x2)1642  ret <16 x float> %21643}1644declare <16 x float> @llvm.x86.avx512.vpermi2var.ps.512(<16 x float>, <16 x i32>, <16 x float>)1645 1646define <16 x float> @stack_fold_vpermi2ps(<16 x i32> %x0, <16 x float> %x1, <16 x float> %x2) {1647; CHECK-LABEL: stack_fold_vpermi2ps:1648; CHECK:       # %bb.0:1649; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1650; CHECK-NEXT:    #APP1651; CHECK-NEXT:    nop1652; CHECK-NEXT:    #NO_APP1653; CHECK-NEXT:    vpermi2ps {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1654; CHECK-NEXT:    retq1655  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1656  %2 = call <16 x float> @llvm.x86.avx512.vpermi2var.ps.512(<16 x float> %x1, <16 x i32> %x0, <16 x float> %x2)1657  ret <16 x float> %21658}1659 1660define <16 x float> @stack_fold_vpermi2ps_mask(<16 x float> %x0, ptr %x1, <16 x float> %x2, i16 %mask) {1661; CHECK-LABEL: stack_fold_vpermi2ps_mask:1662; CHECK:       # %bb.0:1663; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1664; CHECK-NEXT:    #APP1665; CHECK-NEXT:    nop1666; CHECK-NEXT:    #NO_APP1667; CHECK-NEXT:    vmovaps (%rdi), %zmm21668; CHECK-NEXT:    kmovw %esi, %k11669; CHECK-NEXT:    vpermi2ps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1670; CHECK-NEXT:    vmovaps %zmm2, %zmm01671; CHECK-NEXT:    retq1672  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1673  %x1b = load <16 x i32>, ptr %x11674  %2 = call <16 x float> @llvm.x86.avx512.vpermi2var.ps.512(<16 x float> %x0, <16 x i32> %x1b, <16 x float> %x2)1675  %3 = bitcast <16 x i32> %x1b to <16 x float>1676  %4 = bitcast i16 %mask to <16 x i1>1677  %5 = select <16 x i1> %4, <16 x float> %2, <16 x float> %31678  ret <16 x float> %51679}1680 1681define <16 x float> @stack_fold_vpermt2ps_mask(ptr %x0, <16 x float> %x1, <16 x float> %x2, i16 %mask) {1682; CHECK-LABEL: stack_fold_vpermt2ps_mask:1683; CHECK:       # %bb.0:1684; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1685; CHECK-NEXT:    #APP1686; CHECK-NEXT:    nop1687; CHECK-NEXT:    #NO_APP1688; CHECK-NEXT:    vmovaps (%rdi), %zmm11689; CHECK-NEXT:    kmovw %esi, %k11690; CHECK-NEXT:    vpermt2ps {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} # 64-byte Folded Reload1691; CHECK-NEXT:    retq1692  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1693  %x0b = load <16 x i32>, ptr %x01694  %2 = call <16 x float> @llvm.x86.avx512.vpermi2var.ps.512(<16 x float> %x1, <16 x i32> %x0b, <16 x float> %x2)1695  %3 = bitcast i16 %mask to <16 x i1>1696  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %x11697  ret <16 x float> %41698}1699 1700define <16 x float> @stack_fold_vpermt2ps_maskz(ptr %x0, <16 x float> %x1, <16 x float> %x2, i16 %mask) {1701; CHECK-LABEL: stack_fold_vpermt2ps_maskz:1702; CHECK:       # %bb.0:1703; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1704; CHECK-NEXT:    #APP1705; CHECK-NEXT:    nop1706; CHECK-NEXT:    #NO_APP1707; CHECK-NEXT:    vmovaps (%rdi), %zmm11708; CHECK-NEXT:    kmovw %esi, %k11709; CHECK-NEXT:    vpermt2ps {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload1710; CHECK-NEXT:    retq1711  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1712  %x0b = load <16 x i32>, ptr %x01713  %2 = call <16 x float> @llvm.x86.avx512.vpermi2var.ps.512(<16 x float> %x1, <16 x i32> %x0b, <16 x float> %x2)1714  %3 = bitcast i16 %mask to <16 x i1>1715  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer1716  ret <16 x float> %41717}1718 1719define <8 x double> @stack_fold_vpermt2pd(<8 x double> %x0, <8 x i64> %x1, <8 x double> %x2) {1720; CHECK-LABEL: stack_fold_vpermt2pd:1721; CHECK:       # %bb.0:1722; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1723; CHECK-NEXT:    #APP1724; CHECK-NEXT:    nop1725; CHECK-NEXT:    #NO_APP1726; CHECK-NEXT:    vpermt2pd {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1727; CHECK-NEXT:    retq1728  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1729  %2 = call <8 x double> @llvm.x86.avx512.vpermi2var.pd.512(<8 x double> %x0, <8 x i64> %x1, <8 x double> %x2)1730  %3 = bitcast <8 x i64> %x1 to <8 x double>1731  ret <8 x double> %21732}1733declare <8 x double> @llvm.x86.avx512.vpermi2var.pd.512(<8 x double>, <8 x i64>, <8 x double>)1734 1735define <8 x double> @stack_fold_vpermi2pd(<8 x i64> %x0, <8 x double> %x1, <8 x double> %x2) {1736; CHECK-LABEL: stack_fold_vpermi2pd:1737; CHECK:       # %bb.0:1738; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1739; CHECK-NEXT:    #APP1740; CHECK-NEXT:    nop1741; CHECK-NEXT:    #NO_APP1742; CHECK-NEXT:    vpermi2pd {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1743; CHECK-NEXT:    retq1744  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1745  %2 = call <8 x double> @llvm.x86.avx512.vpermi2var.pd.512(<8 x double> %x1, <8 x i64> %x0, <8 x double> %x2)1746  ret <8 x double> %21747}1748 1749define <8 x double> @stack_fold_permpd(<8 x double> %a0) {1750; CHECK-LABEL: stack_fold_permpd:1751; CHECK:       # %bb.0:1752; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1753; CHECK-NEXT:    #APP1754; CHECK-NEXT:    nop1755; CHECK-NEXT:    #NO_APP1756; CHECK-NEXT:    vpermpd $235, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload1757; CHECK-NEXT:    # zmm0 = mem[3,2,2,3,7,6,6,7]1758; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm11759; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm01760; CHECK-NEXT:    retq1761  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1762  %2 = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 3, i32 2, i32 2, i32 3, i32 7, i32 6, i32 6, i32 7>1763  ; fadd forces execution domain1764  %3 = fadd <8 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0>1765  ret <8 x double> %31766}1767 1768define <8 x double> @stack_fold_permpd_mask(ptr %passthru, <8 x double> %a0, i8 %mask) {1769; CHECK-LABEL: stack_fold_permpd_mask:1770; CHECK:       # %bb.0:1771; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1772; CHECK-NEXT:    #APP1773; CHECK-NEXT:    nop1774; CHECK-NEXT:    #NO_APP1775; CHECK-NEXT:    kmovw %esi, %k11776; CHECK-NEXT:    vmovapd (%rdi), %zmm01777; CHECK-NEXT:    vpermpd $235, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} # 64-byte Folded Reload1778; CHECK-NEXT:    # zmm0 {%k1} = mem[3,2,2,3,7,6,6,7]1779; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm11780; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm01781; CHECK-NEXT:    retq1782  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1783  %2 = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 3, i32 2, i32 2, i32 3, i32 7, i32 6, i32 6, i32 7>1784  %3 = bitcast i8 %mask to <8 x i1>1785  ; load needed to keep the operation from being scheduled above the asm block1786  %4 = load <8 x double>, ptr %passthru1787  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %41788  ; fadd forces execution domain1789  %6 = fadd <8 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0, double 0x0>1790  ret <8 x double> %61791}1792 1793define <8 x double> @stack_fold_permpd_maskz(<8 x double> %a0, i8 %mask) {1794; CHECK-LABEL: stack_fold_permpd_maskz:1795; CHECK:       # %bb.0:1796; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1797; CHECK-NEXT:    #APP1798; CHECK-NEXT:    nop1799; CHECK-NEXT:    #NO_APP1800; CHECK-NEXT:    kmovw %edi, %k11801; CHECK-NEXT:    vpermpd $235, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload1802; CHECK-NEXT:    # zmm0 {%k1} {z} = mem[3,2,2,3,7,6,6,7]1803; CHECK-NEXT:    retq1804  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1805  %2 = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 3, i32 2, i32 2, i32 3, i32 7, i32 6, i32 6, i32 7>1806  %3 = bitcast i8 %mask to <8 x i1>1807  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer1808  ret <8 x double> %41809}1810 1811define <8 x double> @stack_fold_permpdvar(<8 x i64> %a0, <8 x double> %a1) {1812; CHECK-LABEL: stack_fold_permpdvar:1813; CHECK:       # %bb.0:1814; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1815; CHECK-NEXT:    #APP1816; CHECK-NEXT:    nop1817; CHECK-NEXT:    #NO_APP1818; CHECK-NEXT:    vpermpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1819; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm11820; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm01821; CHECK-NEXT:    retq1822  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1823  %2 = call <8 x double> @llvm.x86.avx512.permvar.df.512(<8 x double> %a1, <8 x i64> %a0)1824  ; fadd forces execution domain1825  %3 = fadd <8 x double> %2, zeroinitializer1826  ret <8 x double> %31827}1828declare <8 x double> @llvm.x86.avx512.permvar.df.512(<8 x double>, <8 x i64>) nounwind readonly1829 1830define <16 x float> @stack_fold_permps(<16 x i32> %a0, <16 x float> %a1) {1831; CHECK-LABEL: stack_fold_permps:1832; CHECK:       # %bb.0:1833; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1834; CHECK-NEXT:    #APP1835; CHECK-NEXT:    nop1836; CHECK-NEXT:    #NO_APP1837; CHECK-NEXT:    vpermps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1838; CHECK-NEXT:    retq1839  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1840  %2 = call <16 x float> @llvm.x86.avx512.permvar.sf.512(<16 x float> %a1, <16 x i32> %a0)1841  ret <16 x float> %21842}1843declare <16 x float> @llvm.x86.avx512.permvar.sf.512(<16 x float>, <16 x i32>) nounwind readonly1844 1845define <8 x double> @stack_fold_permilpd_zmm(<8 x double> %a0) {1846; CHECK-LABEL: stack_fold_permilpd_zmm:1847; CHECK:       # %bb.0:1848; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1849; CHECK-NEXT:    #APP1850; CHECK-NEXT:    nop1851; CHECK-NEXT:    #NO_APP1852; CHECK-NEXT:    vpermilpd $85, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload1853; CHECK-NEXT:    # zmm0 = mem[1,0,3,2,5,4,7,6]1854; CHECK-NEXT:    retq1855  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1856  %2 = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>1857  ret <8 x double> %21858}1859 1860define <8 x double> @stack_fold_permilpd_zmm_mask(ptr %passthru, <8 x double> %a0, i8 %mask) {1861; CHECK-LABEL: stack_fold_permilpd_zmm_mask:1862; CHECK:       # %bb.0:1863; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1864; CHECK-NEXT:    #APP1865; CHECK-NEXT:    nop1866; CHECK-NEXT:    #NO_APP1867; CHECK-NEXT:    kmovw %esi, %k11868; CHECK-NEXT:    vmovapd (%rdi), %zmm11869; CHECK-NEXT:    vpermilpd $85, {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload1870; CHECK-NEXT:    # zmm1 {%k1} = mem[1,0,3,2,5,4,7,6]1871; CHECK-NEXT:    vmovapd %zmm1, %zmm01872; CHECK-NEXT:    retq1873  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1874  %2 = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>1875  %3 = bitcast i8 %mask to <8 x i1>1876  ; load needed to keep the operation from being scheduled above the asm block1877  %4 = load <8 x double>, ptr %passthru1878  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %41879  ret <8 x double> %51880}1881 1882define <8 x double> @stack_fold_permilpd_zmm_maskz(<8 x double> %a0, i8 %mask) {1883; CHECK-LABEL: stack_fold_permilpd_zmm_maskz:1884; CHECK:       # %bb.0:1885; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1886; CHECK-NEXT:    #APP1887; CHECK-NEXT:    nop1888; CHECK-NEXT:    #NO_APP1889; CHECK-NEXT:    kmovw %edi, %k11890; CHECK-NEXT:    vpermilpd $85, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload1891; CHECK-NEXT:    # zmm0 {%k1} {z} = mem[1,0,3,2,5,4,7,6]1892; CHECK-NEXT:    retq1893  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1894  %2 = shufflevector <8 x double> %a0, <8 x double> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>1895  %3 = bitcast i8 %mask to <8 x i1>1896  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer1897  ret <8 x double> %41898}1899 1900define <8 x double> @stack_fold_permilpdvar_zmm(<8 x double> %a0, <8 x i64> %a1) {1901; CHECK-LABEL: stack_fold_permilpdvar_zmm:1902; CHECK:       # %bb.0:1903; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1904; CHECK-NEXT:    #APP1905; CHECK-NEXT:    nop1906; CHECK-NEXT:    #NO_APP1907; CHECK-NEXT:    vpermilpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1908; CHECK-NEXT:    retq1909  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1910  %2 = call <8 x double> @llvm.x86.avx512.vpermilvar.pd.512(<8 x double> %a0, <8 x i64> %a1)1911  ret <8 x double> %21912}1913declare <8 x double> @llvm.x86.avx512.vpermilvar.pd.512(<8 x double>, <8 x i64>) nounwind readnone1914 1915define <8 x double> @stack_fold_permilpdvar_zmm_mask(ptr %passthru, <8 x double> %a0, <8 x i64> %a1, i8 %mask) {1916; CHECK-LABEL: stack_fold_permilpdvar_zmm_mask:1917; CHECK:       # %bb.0:1918; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1919; CHECK-NEXT:    #APP1920; CHECK-NEXT:    nop1921; CHECK-NEXT:    #NO_APP1922; CHECK-NEXT:    kmovw %esi, %k11923; CHECK-NEXT:    vmovapd (%rdi), %zmm21924; CHECK-NEXT:    vpermilpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1925; CHECK-NEXT:    vmovapd %zmm2, %zmm01926; CHECK-NEXT:    retq1927  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1928  %2 = call <8 x double> @llvm.x86.avx512.vpermilvar.pd.512(<8 x double> %a0, <8 x i64> %a1)1929  %3 = bitcast i8 %mask to <8 x i1>1930  ; load needed to keep the operation from being scheduled above the asm block1931  %4 = load <8 x double>, ptr %passthru1932  %5 = select <8 x i1> %3, <8 x double> %2, <8 x double> %41933  ret <8 x double> %51934}1935 1936define <8 x double> @stack_fold_permilpdvar_zmm_maskz(<8 x double> %a0, <8 x i64> %a1, i8 %mask) {1937; CHECK-LABEL: stack_fold_permilpdvar_zmm_maskz:1938; CHECK:       # %bb.0:1939; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1940; CHECK-NEXT:    #APP1941; CHECK-NEXT:    nop1942; CHECK-NEXT:    #NO_APP1943; CHECK-NEXT:    kmovw %edi, %k11944; CHECK-NEXT:    vpermilpd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload1945; CHECK-NEXT:    retq1946  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1947  %2 = call <8 x double> @llvm.x86.avx512.vpermilvar.pd.512(<8 x double> %a0, <8 x i64> %a1)1948  %3 = bitcast i8 %mask to <8 x i1>1949  %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer1950  ret <8 x double> %41951}1952 1953define <16 x float> @stack_fold_permilps_zmm(<16 x float> %a0) {1954; CHECK-LABEL: stack_fold_permilps_zmm:1955; CHECK:       # %bb.0:1956; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1957; CHECK-NEXT:    #APP1958; CHECK-NEXT:    nop1959; CHECK-NEXT:    #NO_APP1960; CHECK-NEXT:    vpermilps $27, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload1961; CHECK-NEXT:    # zmm0 = mem[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]1962; CHECK-NEXT:    retq1963  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1964  %2 = shufflevector <16 x float> %a0, <16 x float> undef, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>1965  ret <16 x float> %21966}1967 1968define <16 x float> @stack_fold_permilps_zmm_mask(ptr %passthru, <16 x float> %a0, i16 %mask) {1969; CHECK-LABEL: stack_fold_permilps_zmm_mask:1970; CHECK:       # %bb.0:1971; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1972; CHECK-NEXT:    #APP1973; CHECK-NEXT:    nop1974; CHECK-NEXT:    #NO_APP1975; CHECK-NEXT:    kmovw %esi, %k11976; CHECK-NEXT:    vmovaps (%rdi), %zmm11977; CHECK-NEXT:    vpermilps $27, {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload1978; CHECK-NEXT:    # zmm1 {%k1} = mem[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]1979; CHECK-NEXT:    vmovaps %zmm1, %zmm01980; CHECK-NEXT:    retq1981  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1982  %2 = shufflevector <16 x float> %a0, <16 x float> undef, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>1983  %3 = bitcast i16 %mask to <16 x i1>1984  ; load needed to keep the operation from being scheduled above the asm block1985  %4 = load <16 x float>, ptr %passthru1986  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %41987  ret <16 x float> %51988}1989 1990define <16 x float> @stack_fold_permilps_zmm_maskz(<16 x float> %a0, i16 %mask) {1991; CHECK-LABEL: stack_fold_permilps_zmm_maskz:1992; CHECK:       # %bb.0:1993; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1994; CHECK-NEXT:    #APP1995; CHECK-NEXT:    nop1996; CHECK-NEXT:    #NO_APP1997; CHECK-NEXT:    kmovw %edi, %k11998; CHECK-NEXT:    vpermilps $27, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload1999; CHECK-NEXT:    # zmm0 {%k1} {z} = mem[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]2000; CHECK-NEXT:    retq2001  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2002  %2 = shufflevector <16 x float> %a0, <16 x float> undef, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>2003  %3 = bitcast i16 %mask to <16 x i1>2004  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer2005  ret <16 x float> %42006}2007 2008define <16 x float> @stack_fold_permilpsvar_zmm(<16 x float> %a0, <16 x i32> %a1) {2009; CHECK-LABEL: stack_fold_permilpsvar_zmm:2010; CHECK:       # %bb.0:2011; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill2012; CHECK-NEXT:    #APP2013; CHECK-NEXT:    nop2014; CHECK-NEXT:    #NO_APP2015; CHECK-NEXT:    vpermilps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload2016; CHECK-NEXT:    retq2017  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2018  %2 = call <16 x float> @llvm.x86.avx512.vpermilvar.ps.512(<16 x float> %a0, <16 x i32> %a1)2019  ret <16 x float> %22020}2021declare <16 x float> @llvm.x86.avx512.vpermilvar.ps.512(<16 x float>, <16 x i32>) nounwind readnone2022 2023define <16 x float> @stack_fold_permilpsvar_zmm_mask(ptr %passthru, <16 x float> %a0, <16 x i32> %a1, i16 %mask) {2024; CHECK-LABEL: stack_fold_permilpsvar_zmm_mask:2025; CHECK:       # %bb.0:2026; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill2027; CHECK-NEXT:    #APP2028; CHECK-NEXT:    nop2029; CHECK-NEXT:    #NO_APP2030; CHECK-NEXT:    kmovw %esi, %k12031; CHECK-NEXT:    vmovaps (%rdi), %zmm22032; CHECK-NEXT:    vpermilps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload2033; CHECK-NEXT:    vmovaps %zmm2, %zmm02034; CHECK-NEXT:    retq2035  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2036  %2 = call <16 x float> @llvm.x86.avx512.vpermilvar.ps.512(<16 x float> %a0, <16 x i32> %a1)2037  %3 = bitcast i16 %mask to <16 x i1>2038  ; load needed to keep the operation from being scheduled above the asm block2039  %4 = load <16 x float>, ptr %passthru2040  %5 = select <16 x i1> %3, <16 x float> %2, <16 x float> %42041  ret <16 x float> %52042}2043 2044define <16 x float> @stack_fold_permilpsvar_zmm_maskz(<16 x float> %a0, <16 x i32> %a1, i16 %mask) {2045; CHECK-LABEL: stack_fold_permilpsvar_zmm_maskz:2046; CHECK:       # %bb.0:2047; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill2048; CHECK-NEXT:    #APP2049; CHECK-NEXT:    nop2050; CHECK-NEXT:    #NO_APP2051; CHECK-NEXT:    kmovw %edi, %k12052; CHECK-NEXT:    vpermilps {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload2053; CHECK-NEXT:    retq2054  %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2055  %2 = call <16 x float> @llvm.x86.avx512.vpermilvar.ps.512(<16 x float> %a0, <16 x i32> %a1)2056  %3 = bitcast i16 %mask to <16 x i1>2057  %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer2058  ret <16 x float> %42059}2060 2061attributes #1 = { "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" }2062