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