brintos

brintos / llvm-project-archived public Read only

0
0
Text · 77.9 KiB · bd56e61 Raw
1394 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=+avx512vl,+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 <2 x double> @stack_fold_addpd(<2 x double> %a0, <2 x double> %a1) {13; CHECK-LABEL: stack_fold_addpd:14; CHECK:       # %bb.0:15; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill16; CHECK-NEXT:    #APP17; CHECK-NEXT:    nop18; CHECK-NEXT:    #NO_APP19; CHECK-NEXT:    vaddpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-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 <2 x double> %a0, %a123  ret <2 x double> %224}25 26define <4 x double> @stack_fold_addpd_ymm(<4 x double> %a0, <4 x double> %a1) {27; CHECK-LABEL: stack_fold_addpd_ymm:28; CHECK:       # %bb.0:29; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill30; CHECK-NEXT:    #APP31; CHECK-NEXT:    nop32; CHECK-NEXT:    #NO_APP33; CHECK-NEXT:    vaddpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload34; CHECK-NEXT:    retq35  %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}"()36  %2 = fadd <4 x double> %a0, %a137  ret <4 x double> %238}39 40define <4 x float> @stack_fold_addps(<4 x float> %a0, <4 x float> %a1) {41; CHECK-LABEL: stack_fold_addps:42; CHECK:       # %bb.0:43; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill44; CHECK-NEXT:    #APP45; CHECK-NEXT:    nop46; CHECK-NEXT:    #NO_APP47; CHECK-NEXT:    vaddps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload48; CHECK-NEXT:    retq49  %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}"()50  %2 = fadd <4 x float> %a0, %a151  ret <4 x float> %252}53 54define <8 x float> @stack_fold_addps_ymm(<8 x float> %a0, <8 x float> %a1) {55; CHECK-LABEL: stack_fold_addps_ymm:56; CHECK:       # %bb.0:57; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill58; CHECK-NEXT:    #APP59; CHECK-NEXT:    nop60; CHECK-NEXT:    #NO_APP61; CHECK-NEXT:    vaddps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload62; CHECK-NEXT:    retq63  %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}"()64  %2 = fadd <8 x float> %a0, %a165  ret <8 x float> %266}67 68define <2 x double> @stack_fold_andnpd(<2 x double> %a0, <2 x double> %a1) {69; CHECK-LABEL: stack_fold_andnpd:70; CHECK:       # %bb.0:71; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill72; CHECK-NEXT:    #APP73; CHECK-NEXT:    nop74; CHECK-NEXT:    #NO_APP75; CHECK-NEXT:    vandnpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload76; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm177; CHECK-NEXT:    vaddpd %xmm1, %xmm0, %xmm078; CHECK-NEXT:    retq79  %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}"()80  %2 = bitcast <2 x double> %a0 to <2 x i64>81  %3 = bitcast <2 x double> %a1 to <2 x i64>82  %4 = xor <2 x i64> %2, <i64 -1, i64 -1>83  %5 = and <2 x i64> %4, %384  %6 = bitcast <2 x i64> %5 to <2 x double>85  ; fadd forces execution domain86  %7 = fadd <2 x double> %6, <double 0x0, double 0x0>87  ret <2 x double> %788}89 90define <4 x double> @stack_fold_andnpd_ymm(<4 x double> %a0, <4 x double> %a1) {91; CHECK-LABEL: stack_fold_andnpd_ymm:92; CHECK:       # %bb.0:93; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill94; CHECK-NEXT:    #APP95; CHECK-NEXT:    nop96; CHECK-NEXT:    #NO_APP97; CHECK-NEXT:    vandnpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload98; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm199; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0100; CHECK-NEXT:    retq101  %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}"()102  %2 = bitcast <4 x double> %a0 to <4 x i64>103  %3 = bitcast <4 x double> %a1 to <4 x i64>104  %4 = xor <4 x i64> %2, <i64 -1, i64 -1, i64 -1, i64 -1>105  %5 = and <4 x i64> %4, %3106  %6 = bitcast <4 x i64> %5 to <4 x double>107  ; fadd forces execution domain108  %7 = fadd <4 x double> %6, <double 0x0, double 0x0, double 0x0, double 0x0>109  ret <4 x double> %7110}111 112define <4 x float> @stack_fold_andnps(<4 x float> %a0, <4 x float> %a1) {113; CHECK-LABEL: stack_fold_andnps:114; CHECK:       # %bb.0:115; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill116; CHECK-NEXT:    #APP117; CHECK-NEXT:    nop118; CHECK-NEXT:    #NO_APP119; CHECK-NEXT:    vandnps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload120; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1121; CHECK-NEXT:    vaddps %xmm1, %xmm0, %xmm0122; CHECK-NEXT:    retq123  %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}"()124  %2 = bitcast <4 x float> %a0 to <2 x i64>125  %3 = bitcast <4 x float> %a1 to <2 x i64>126  %4 = xor <2 x i64> %2, <i64 -1, i64 -1>127  %5 = and <2 x i64> %4, %3128  %6 = bitcast <2 x i64> %5 to <4 x float>129  ; fadd forces execution domain130  %7 = fadd <4 x float> %6, <float 0x0, float 0x0, float 0x0, float 0x0>131  ret <4 x float> %7132}133 134define <8 x float> @stack_fold_andnps_ymm(<8 x float> %a0, <8 x float> %a1) {135; CHECK-LABEL: stack_fold_andnps_ymm:136; CHECK:       # %bb.0:137; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill138; CHECK-NEXT:    #APP139; CHECK-NEXT:    nop140; CHECK-NEXT:    #NO_APP141; CHECK-NEXT:    vandnps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload142; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1143; CHECK-NEXT:    vaddps %ymm1, %ymm0, %ymm0144; CHECK-NEXT:    retq145  %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}"()146  %2 = bitcast <8 x float> %a0 to <4 x i64>147  %3 = bitcast <8 x float> %a1 to <4 x i64>148  %4 = xor <4 x i64> %2, <i64 -1, i64 -1, i64 -1, i64 -1>149  %5 = and <4 x i64> %4, %3150  %6 = bitcast <4 x i64> %5 to <8 x float>151  ; fadd forces execution domain152  %7 = fadd <8 x float> %6, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>153  ret <8 x float> %7154}155 156define <2 x double> @stack_fold_andpd(<2 x double> %a0, <2 x double> %a1) {157; CHECK-LABEL: stack_fold_andpd:158; CHECK:       # %bb.0:159; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill160; CHECK-NEXT:    #APP161; CHECK-NEXT:    nop162; CHECK-NEXT:    #NO_APP163; CHECK-NEXT:    vandpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload164; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1165; CHECK-NEXT:    vaddpd %xmm1, %xmm0, %xmm0166; CHECK-NEXT:    retq167  %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}"()168  %2 = bitcast <2 x double> %a0 to <2 x i64>169  %3 = bitcast <2 x double> %a1 to <2 x i64>170  %4 = and <2 x i64> %2, %3171  %5 = bitcast <2 x i64> %4 to <2 x double>172  ; fadd forces execution domain173  %6 = fadd <2 x double> %5, <double 0x0, double 0x0>174  ret <2 x double> %6175}176 177define <4 x double> @stack_fold_andpd_ymm(<4 x double> %a0, <4 x double> %a1) {178; CHECK-LABEL: stack_fold_andpd_ymm:179; CHECK:       # %bb.0:180; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill181; CHECK-NEXT:    #APP182; CHECK-NEXT:    nop183; CHECK-NEXT:    #NO_APP184; CHECK-NEXT:    vandpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload185; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1186; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0187; CHECK-NEXT:    retq188  %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}"()189  %2 = bitcast <4 x double> %a0 to <4 x i64>190  %3 = bitcast <4 x double> %a1 to <4 x i64>191  %4 = and <4 x i64> %2, %3192  %5 = bitcast <4 x i64> %4 to <4 x double>193  ; fadd forces execution domain194  %6 = fadd <4 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0>195  ret <4 x double> %6196}197 198define <4 x float> @stack_fold_andps(<4 x float> %a0, <4 x float> %a1) {199; CHECK-LABEL: stack_fold_andps:200; CHECK:       # %bb.0:201; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill202; CHECK-NEXT:    #APP203; CHECK-NEXT:    nop204; CHECK-NEXT:    #NO_APP205; CHECK-NEXT:    vandps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload206; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1207; CHECK-NEXT:    vaddps %xmm1, %xmm0, %xmm0208; CHECK-NEXT:    retq209  %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}"()210  %2 = bitcast <4 x float> %a0 to <4 x i32>211  %3 = bitcast <4 x float> %a1 to <4 x i32>212  %4 = and <4 x i32> %2, %3213  %5 = bitcast <4 x i32> %4 to <4 x float>214  ; fadd forces execution domain215  %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>216  ret <4 x float> %6217}218 219define <8 x float> @stack_fold_andps_ymm(<8 x float> %a0, <8 x float> %a1) {220; CHECK-LABEL: stack_fold_andps_ymm:221; CHECK:       # %bb.0:222; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill223; CHECK-NEXT:    #APP224; CHECK-NEXT:    nop225; CHECK-NEXT:    #NO_APP226; CHECK-NEXT:    vandps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload227; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1228; CHECK-NEXT:    vaddps %ymm1, %ymm0, %ymm0229; CHECK-NEXT:    retq230  %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}"()231  %2 = bitcast <8 x float> %a0 to <8 x i32>232  %3 = bitcast <8 x float> %a1 to <8 x i32>233  %4 = and <8 x i32> %2, %3234  %5 = bitcast <8 x i32> %4 to <8 x float>235  ; fadd forces execution domain236  %6 = fadd <8 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>237  ret <8 x float> %6238}239 240define i8 @stack_fold_cmppd(<2 x double> %a0, <2 x double> %a1) {241; CHECK-LABEL: stack_fold_cmppd:242; CHECK:       # %bb.0:243; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill244; CHECK-NEXT:    #APP245; CHECK-NEXT:    nop246; CHECK-NEXT:    #NO_APP247; CHECK-NEXT:    vcmpeqpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %k0 # 16-byte Folded Reload248; CHECK-NEXT:    kmovw %k0, %eax249; CHECK-NEXT:    # kill: def $al killed $al killed $eax250; CHECK-NEXT:    retq251  %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}"()252  %res = call <2 x i1> @llvm.x86.avx512.mask.cmp.pd.128(<2 x double> %a0, <2 x double> %a1, i32 0, <2 x i1> <i1 true, i1 true>)253  %2 = shufflevector <2 x i1> %res, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>254  %3 = bitcast <8 x i1> %2 to i8255  ret i8 %3256}257declare <2 x i1> @llvm.x86.avx512.mask.cmp.pd.128(<2 x double>, <2 x double>, i32, <2 x i1>)258 259define i8 @stack_fold_cmppd_ymm(<4 x double> %a0, <4 x double> %a1) {260; CHECK-LABEL: stack_fold_cmppd_ymm:261; CHECK:       # %bb.0:262; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill263; CHECK-NEXT:    #APP264; CHECK-NEXT:    nop265; CHECK-NEXT:    #NO_APP266; CHECK-NEXT:    vcmpeqpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %k0 # 32-byte Folded Reload267; CHECK-NEXT:    kmovw %k0, %eax268; CHECK-NEXT:    # kill: def $al killed $al killed $eax269; CHECK-NEXT:    vzeroupper270; 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  %res = call <4 x i1> @llvm.x86.avx512.mask.cmp.pd.256(<4 x double> %a0, <4 x double> %a1, i32 0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>)273  %2 = shufflevector <4 x i1> %res, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>274  %3 = bitcast <8 x i1> %2 to i8275  ret i8 %3276}277declare <4 x i1> @llvm.x86.avx512.mask.cmp.pd.256(<4 x double>, <4 x double>, i32, <4 x i1>)278 279define i8 @stack_fold_cmpps(<4 x float> %a0, <4 x float> %a1) {280; CHECK-LABEL: stack_fold_cmpps:281; CHECK:       # %bb.0:282; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill283; CHECK-NEXT:    #APP284; CHECK-NEXT:    nop285; CHECK-NEXT:    #NO_APP286; CHECK-NEXT:    vcmpeqps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %k0 # 16-byte Folded Reload287; CHECK-NEXT:    kmovw %k0, %eax288; CHECK-NEXT:    # kill: def $al killed $al killed $eax289; CHECK-NEXT:    retq290  %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}"()291  %res = call <4 x i1> @llvm.x86.avx512.mask.cmp.ps.128(<4 x float> %a0, <4 x float> %a1, i32 0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>)292  %2 = shufflevector <4 x i1> %res, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>293  %3 = bitcast <8 x i1> %2 to i8294  ret i8 %3295}296declare <4 x i1> @llvm.x86.avx512.mask.cmp.ps.128(<4 x float>, <4 x float>, i32, <4 x i1>)297 298define i8 @stack_fold_cmpps_ymm(<8 x float> %a0, <8 x float> %a1) {299; CHECK-LABEL: stack_fold_cmpps_ymm:300; CHECK:       # %bb.0:301; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill302; CHECK-NEXT:    #APP303; CHECK-NEXT:    nop304; CHECK-NEXT:    #NO_APP305; CHECK-NEXT:    vcmpeqps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %k0 # 32-byte Folded Reload306; CHECK-NEXT:    kmovw %k0, %eax307; CHECK-NEXT:    # kill: def $al killed $al killed $eax308; CHECK-NEXT:    vzeroupper309; CHECK-NEXT:    retq310  %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}"()311  %res = call <8 x i1> @llvm.x86.avx512.mask.cmp.ps.256(<8 x float> %a0, <8 x float> %a1, i32 0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>)312  %2 = bitcast <8 x i1> %res to i8313  ret i8 %2314}315declare <8 x i1> @llvm.x86.avx512.mask.cmp.ps.256(<8 x float>, <8 x float>, i32, <8 x i1>)316 317define <2 x double> @stack_fold_divpd(<2 x double> %a0, <2 x double> %a1) {318; CHECK-LABEL: stack_fold_divpd:319; CHECK:       # %bb.0:320; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill321; CHECK-NEXT:    #APP322; CHECK-NEXT:    nop323; CHECK-NEXT:    #NO_APP324; CHECK-NEXT:    vdivpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload325; CHECK-NEXT:    retq326  %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}"()327  %2 = fdiv <2 x double> %a0, %a1328  ret <2 x double> %2329}330 331define <4 x double> @stack_fold_divpd_ymm(<4 x double> %a0, <4 x double> %a1) {332; CHECK-LABEL: stack_fold_divpd_ymm:333; CHECK:       # %bb.0:334; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill335; CHECK-NEXT:    #APP336; CHECK-NEXT:    nop337; CHECK-NEXT:    #NO_APP338; CHECK-NEXT:    vdivpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload339; CHECK-NEXT:    retq340  %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}"()341  %2 = fdiv <4 x double> %a0, %a1342  ret <4 x double> %2343}344 345define <4 x float> @stack_fold_divps(<4 x float> %a0, <4 x float> %a1) {346; CHECK-LABEL: stack_fold_divps:347; CHECK:       # %bb.0:348; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill349; CHECK-NEXT:    #APP350; CHECK-NEXT:    nop351; CHECK-NEXT:    #NO_APP352; CHECK-NEXT:    vdivps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload353; CHECK-NEXT:    retq354  %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}"()355  %2 = fdiv <4 x float> %a0, %a1356  ret <4 x float> %2357}358 359define <8 x float> @stack_fold_divps_ymm(<8 x float> %a0, <8 x float> %a1) {360; CHECK-LABEL: stack_fold_divps_ymm:361; CHECK:       # %bb.0:362; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill363; CHECK-NEXT:    #APP364; CHECK-NEXT:    nop365; CHECK-NEXT:    #NO_APP366; CHECK-NEXT:    vdivps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload367; CHECK-NEXT:    retq368  %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}"()369  %2 = fdiv <8 x float> %a0, %a1370  ret <8 x float> %2371}372 373define <2 x double> @stack_fold_cvtdq2pd(<4 x i32> %a0) {374; CHECK-LABEL: stack_fold_cvtdq2pd:375; CHECK:       # %bb.0:376; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill377; CHECK-NEXT:    #APP378; CHECK-NEXT:    nop379; CHECK-NEXT:    #NO_APP380; CHECK-NEXT:    vcvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload381; CHECK-NEXT:    retq382  %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}"()383  %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>384  %3 = sitofp <2 x i32> %2 to <2 x double>385  ret <2 x double> %3386}387 388define <4 x double> @stack_fold_cvtdq2pd_ymm(<4 x i32> %a0) {389; CHECK-LABEL: stack_fold_cvtdq2pd_ymm:390; CHECK:       # %bb.0:391; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill392; CHECK-NEXT:    #APP393; CHECK-NEXT:    nop394; CHECK-NEXT:    #NO_APP395; CHECK-NEXT:    vcvtdq2pd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload396; CHECK-NEXT:    retq397  %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}"()398  %2 = sitofp <4 x i32> %a0 to <4 x double>399  ret <4 x double> %2400}401 402define <2 x double> @stack_fold_cvtudq2pd(<4 x i32> %a0) {403; CHECK-LABEL: stack_fold_cvtudq2pd:404; CHECK:       # %bb.0:405; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill406; CHECK-NEXT:    #APP407; CHECK-NEXT:    nop408; CHECK-NEXT:    #NO_APP409; CHECK-NEXT:    vcvtudq2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload410; CHECK-NEXT:    retq411  %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}"()412  %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>413  %3 = uitofp <2 x i32> %2 to <2 x double>414  ret <2 x double> %3415}416 417define <4 x double> @stack_fold_cvtudq2pd_ymm(<4 x i32> %a0) {418; CHECK-LABEL: stack_fold_cvtudq2pd_ymm:419; CHECK:       # %bb.0:420; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill421; CHECK-NEXT:    #APP422; CHECK-NEXT:    nop423; CHECK-NEXT:    #NO_APP424; CHECK-NEXT:    vcvtudq2pd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload425; CHECK-NEXT:    retq426  %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}"()427  %2 = uitofp <4 x i32> %a0 to <4 x double>428  ret <4 x double> %2429}430 431define <2 x float> @stack_fold_cvtpd2ps(<2 x double> %a0) {432; CHECK-LABEL: stack_fold_cvtpd2ps:433; CHECK:       # %bb.0:434; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill435; CHECK-NEXT:    #APP436; CHECK-NEXT:    nop437; CHECK-NEXT:    #NO_APP438; CHECK-NEXT:    vcvtpd2psx {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload439; CHECK-NEXT:    retq440  %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}"()441  %2 = fptrunc <2 x double> %a0 to <2 x float>442  ret <2 x float> %2443}444 445define <4 x float> @stack_fold_cvtpd2ps_ymm(<4 x double> %a0) {446; CHECK-LABEL: stack_fold_cvtpd2ps_ymm:447; CHECK:       # %bb.0:448; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill449; CHECK-NEXT:    #APP450; CHECK-NEXT:    nop451; CHECK-NEXT:    #NO_APP452; CHECK-NEXT:    vcvtpd2psy {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 32-byte Folded Reload453; CHECK-NEXT:    vzeroupper454; CHECK-NEXT:    retq455  %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}"()456  %2 = fptrunc <4 x double> %a0 to <4 x float>457  ret <4 x float> %2458}459 460define <2 x double> @stack_fold_maxpd(<2 x double> %a0, <2 x double> %a1) {461; CHECK-LABEL: stack_fold_maxpd:462; CHECK:       # %bb.0:463; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill464; CHECK-NEXT:    #APP465; CHECK-NEXT:    nop466; CHECK-NEXT:    #NO_APP467; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload468; CHECK-NEXT:    retq469  %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}"()470  %2 = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %a0, <2 x double> %a1)471  ret <2 x double> %2472}473declare <2 x double> @llvm.x86.sse2.max.pd(<2 x double>, <2 x double>) nounwind readnone474 475define <2 x double> @stack_fold_maxpd_commutable(<2 x double> %a0, <2 x double> %a1) {476; CHECK-LABEL: stack_fold_maxpd_commutable:477; CHECK:       # %bb.0:478; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill479; CHECK-NEXT:    #APP480; CHECK-NEXT:    nop481; CHECK-NEXT:    #NO_APP482; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload483; CHECK-NEXT:    retq484  %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}"()485  %2 = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %a0, <2 x double> %a1)486  ret <2 x double> %2487}488 489define <4 x double> @stack_fold_maxpd_ymm(<4 x double> %a0, <4 x double> %a1) {490; CHECK-LABEL: stack_fold_maxpd_ymm:491; CHECK:       # %bb.0:492; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill493; CHECK-NEXT:    #APP494; CHECK-NEXT:    nop495; CHECK-NEXT:    #NO_APP496; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload497; CHECK-NEXT:    retq498  %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}"()499  %2 = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %a0, <4 x double> %a1)500  ret <4 x double> %2501}502declare <4 x double> @llvm.x86.avx.max.pd.256(<4 x double>, <4 x double>) nounwind readnone503 504define <4 x double> @stack_fold_maxpd_ymm_commutable(<4 x double> %a0, <4 x double> %a1) {505; CHECK-LABEL: stack_fold_maxpd_ymm_commutable:506; CHECK:       # %bb.0:507; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill508; CHECK-NEXT:    #APP509; CHECK-NEXT:    nop510; CHECK-NEXT:    #NO_APP511; CHECK-NEXT:    vmaxpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload512; CHECK-NEXT:    retq513  %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}"()514  %2 = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %a0, <4 x double> %a1)515  ret <4 x double> %2516}517 518define <4 x float> @stack_fold_maxps(<4 x float> %a0, <4 x float> %a1) {519; CHECK-LABEL: stack_fold_maxps:520; CHECK:       # %bb.0:521; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill522; CHECK-NEXT:    #APP523; CHECK-NEXT:    nop524; CHECK-NEXT:    #NO_APP525; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload526; CHECK-NEXT:    retq527  %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}"()528  %2 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)529  ret <4 x float> %2530}531declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone532 533define <4 x float> @stack_fold_maxps_commutable(<4 x float> %a0, <4 x float> %a1) {534; CHECK-LABEL: stack_fold_maxps_commutable:535; CHECK:       # %bb.0:536; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill537; CHECK-NEXT:    #APP538; CHECK-NEXT:    nop539; CHECK-NEXT:    #NO_APP540; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload541; CHECK-NEXT:    retq542  %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}"()543  %2 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)544  ret <4 x float> %2545}546 547define <8 x float> @stack_fold_maxps_ymm(<8 x float> %a0, <8 x float> %a1) {548; CHECK-LABEL: stack_fold_maxps_ymm:549; CHECK:       # %bb.0:550; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill551; CHECK-NEXT:    #APP552; CHECK-NEXT:    nop553; CHECK-NEXT:    #NO_APP554; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload555; CHECK-NEXT:    retq556  %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}"()557  %2 = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %a0, <8 x float> %a1)558  ret <8 x float> %2559}560declare <8 x float> @llvm.x86.avx.max.ps.256(<8 x float>, <8 x float>) nounwind readnone561 562define <8 x float> @stack_fold_maxps_ymm_commutable(<8 x float> %a0, <8 x float> %a1) {563; CHECK-LABEL: stack_fold_maxps_ymm_commutable:564; CHECK:       # %bb.0:565; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill566; CHECK-NEXT:    #APP567; CHECK-NEXT:    nop568; CHECK-NEXT:    #NO_APP569; CHECK-NEXT:    vmaxps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload570; CHECK-NEXT:    retq571  %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}"()572  %2 = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %a0, <8 x float> %a1)573  ret <8 x float> %2574}575 576define <4 x float> @stack_fold_minps(<4 x float> %a0, <4 x float> %a1) {577; CHECK-LABEL: stack_fold_minps:578; CHECK:       # %bb.0:579; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill580; CHECK-NEXT:    #APP581; CHECK-NEXT:    nop582; CHECK-NEXT:    #NO_APP583; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload584; CHECK-NEXT:    retq585  %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}"()586  %2 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)587  ret <4 x float> %2588}589declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone590 591define <4 x float> @stack_fold_minps_commutable(<4 x float> %a0, <4 x float> %a1) {592; CHECK-LABEL: stack_fold_minps_commutable:593; CHECK:       # %bb.0:594; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill595; CHECK-NEXT:    #APP596; CHECK-NEXT:    nop597; CHECK-NEXT:    #NO_APP598; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload599; CHECK-NEXT:    retq600  %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}"()601  %2 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)602  ret <4 x float> %2603}604 605define <8 x float> @stack_fold_minps_ymm(<8 x float> %a0, <8 x float> %a1) {606; CHECK-LABEL: stack_fold_minps_ymm:607; CHECK:       # %bb.0:608; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill609; CHECK-NEXT:    #APP610; CHECK-NEXT:    nop611; CHECK-NEXT:    #NO_APP612; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload613; CHECK-NEXT:    retq614  %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}"()615  %2 = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %a0, <8 x float> %a1)616  ret <8 x float> %2617}618declare <8 x float> @llvm.x86.avx.min.ps.256(<8 x float>, <8 x float>) nounwind readnone619 620define <8 x float> @stack_fold_minps_ymm_commutable(<8 x float> %a0, <8 x float> %a1) {621; CHECK-LABEL: stack_fold_minps_ymm_commutable:622; CHECK:       # %bb.0:623; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill624; CHECK-NEXT:    #APP625; CHECK-NEXT:    nop626; CHECK-NEXT:    #NO_APP627; CHECK-NEXT:    vminps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload628; CHECK-NEXT:    retq629  %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}"()630  %2 = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %a0, <8 x float> %a1)631  ret <8 x float> %2632}633 634define <2 x double> @stack_fold_mulpd(<2 x double> %a0, <2 x double> %a1) {635; CHECK-LABEL: stack_fold_mulpd:636; CHECK:       # %bb.0:637; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill638; CHECK-NEXT:    #APP639; CHECK-NEXT:    nop640; CHECK-NEXT:    #NO_APP641; CHECK-NEXT:    vmulpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload642; CHECK-NEXT:    retq643  %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}"()644  %2 = fmul <2 x double> %a0, %a1645  ret <2 x double> %2646}647 648define <4 x double> @stack_fold_mulpd_ymm(<4 x double> %a0, <4 x double> %a1) {649; CHECK-LABEL: stack_fold_mulpd_ymm:650; CHECK:       # %bb.0:651; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill652; CHECK-NEXT:    #APP653; CHECK-NEXT:    nop654; CHECK-NEXT:    #NO_APP655; CHECK-NEXT:    vmulpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload656; CHECK-NEXT:    retq657  %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}"()658  %2 = fmul <4 x double> %a0, %a1659  ret <4 x double> %2660}661 662define <4 x float> @stack_fold_mulps(<4 x float> %a0, <4 x float> %a1) {663; CHECK-LABEL: stack_fold_mulps:664; CHECK:       # %bb.0:665; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill666; CHECK-NEXT:    #APP667; CHECK-NEXT:    nop668; CHECK-NEXT:    #NO_APP669; CHECK-NEXT:    vmulps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload670; CHECK-NEXT:    retq671  %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}"()672  %2 = fmul <4 x float> %a0, %a1673  ret <4 x float> %2674}675 676define <8 x float> @stack_fold_mulps_ymm(<8 x float> %a0, <8 x float> %a1) {677; CHECK-LABEL: stack_fold_mulps_ymm:678; CHECK:       # %bb.0:679; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill680; CHECK-NEXT:    #APP681; CHECK-NEXT:    nop682; CHECK-NEXT:    #NO_APP683; CHECK-NEXT:    vmulps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload684; CHECK-NEXT:    retq685  %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}"()686  %2 = fmul <8 x float> %a0, %a1687  ret <8 x float> %2688}689 690define <2 x double> @stack_fold_orpd(<2 x double> %a0, <2 x double> %a1) {691; CHECK-LABEL: stack_fold_orpd:692; CHECK:       # %bb.0:693; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill694; CHECK-NEXT:    #APP695; CHECK-NEXT:    nop696; CHECK-NEXT:    #NO_APP697; CHECK-NEXT:    vorpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload698; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1699; CHECK-NEXT:    vaddpd %xmm1, %xmm0, %xmm0700; CHECK-NEXT:    retq701  %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}"()702  %2 = bitcast <2 x double> %a0 to <2 x i64>703  %3 = bitcast <2 x double> %a1 to <2 x i64>704  %4 = or <2 x i64> %2, %3705  %5 = bitcast <2 x i64> %4 to <2 x double>706  ; fadd forces execution domain707  %6 = fadd <2 x double> %5, <double 0x0, double 0x0>708  ret <2 x double> %6709}710 711define <4 x double> @stack_fold_orpd_ymm(<4 x double> %a0, <4 x double> %a1) {712; CHECK-LABEL: stack_fold_orpd_ymm:713; CHECK:       # %bb.0:714; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill715; CHECK-NEXT:    #APP716; CHECK-NEXT:    nop717; CHECK-NEXT:    #NO_APP718; CHECK-NEXT:    vorpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload719; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1720; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0721; 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 = bitcast <4 x double> %a0 to <4 x i64>724  %3 = bitcast <4 x double> %a1 to <4 x i64>725  %4 = or <4 x i64> %2, %3726  %5 = bitcast <4 x i64> %4 to <4 x double>727  ; fadd forces execution domain728  %6 = fadd <4 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0>729  ret <4 x double> %6730}731 732define <4 x float> @stack_fold_orps(<4 x float> %a0, <4 x float> %a1) {733; CHECK-LABEL: stack_fold_orps:734; CHECK:       # %bb.0:735; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill736; CHECK-NEXT:    #APP737; CHECK-NEXT:    nop738; CHECK-NEXT:    #NO_APP739; CHECK-NEXT:    vorps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload740; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1741; CHECK-NEXT:    vaddps %xmm1, %xmm0, %xmm0742; CHECK-NEXT:    retq743  %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}"()744  %2 = bitcast <4 x float> %a0 to <4 x i32>745  %3 = bitcast <4 x float> %a1 to <4 x i32>746  %4 = or <4 x i32> %2, %3747  %5 = bitcast <4 x i32> %4 to <4 x float>748  ; fadd forces execution domain749  %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>750  ret <4 x float> %6751}752 753define <8 x float> @stack_fold_orps_ymm(<8 x float> %a0, <8 x float> %a1) {754; CHECK-LABEL: stack_fold_orps_ymm:755; CHECK:       # %bb.0:756; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill757; CHECK-NEXT:    #APP758; CHECK-NEXT:    nop759; CHECK-NEXT:    #NO_APP760; CHECK-NEXT:    vorps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload761; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1762; CHECK-NEXT:    vaddps %ymm1, %ymm0, %ymm0763; CHECK-NEXT:    retq764  %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}"()765  %2 = bitcast <8 x float> %a0 to <8 x i32>766  %3 = bitcast <8 x float> %a1 to <8 x i32>767  %4 = or <8 x i32> %2, %3768  %5 = bitcast <8 x i32> %4 to <8 x float>769  ; fadd forces execution domain770  %6 = fadd <8 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>771  ret <8 x float> %6772}773 774define <4 x double> @stack_fold_shuff64x2_maskz(<4 x double> %a, <4 x double> %b, i8 %mask) {775; CHECK-LABEL: stack_fold_shuff64x2_maskz:776; CHECK:       # %bb.0:777; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill778; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill779; CHECK-NEXT:    #APP780; CHECK-NEXT:    nop781; CHECK-NEXT:    #NO_APP782; CHECK-NEXT:    kmovw %edi, %k1783; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload784; CHECK-NEXT:    vshuff64x2 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 {%k1} {z} # 32-byte Folded Reload785; CHECK-NEXT:    # ymm0 {%k1} {z} = ymm0[2,3],mem[0,1]786; CHECK-NEXT:    retq787  %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}"()788  %2 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 3, i32 4, i32 5>789  %3 = bitcast i8 %mask to <8 x i1>790  %4 = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>791  %5 = select <4 x i1> %4, <4 x double> %2, <4 x double> zeroinitializer792  ret <4 x double> %5793}794 795define <8 x float> @stack_fold_shuff32x4_maskz(<8 x float> %a, <8 x float> %b, i8 %mask) {796; CHECK-LABEL: stack_fold_shuff32x4_maskz:797; CHECK:       # %bb.0:798; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill799; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill800; CHECK-NEXT:    #APP801; CHECK-NEXT:    nop802; CHECK-NEXT:    #NO_APP803; CHECK-NEXT:    kmovw %edi, %k1804; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload805; CHECK-NEXT:    vshuff32x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 {%k1} {z} # 32-byte Folded Reload806; CHECK-NEXT:    # ymm0 {%k1} {z} = ymm0[4,5,6,7],mem[0,1,2,3]807; CHECK-NEXT:    retq808  %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}"()809  %2 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>810  %3 = bitcast i8 %mask to <8 x i1>811  %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> zeroinitializer812  ret <8 x float> %4813}814 815define <4 x float> @stack_fold_shufps(<4 x float> %a0, <4 x float> %a1) {816; CHECK-LABEL: stack_fold_shufps:817; CHECK:       # %bb.0:818; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill819; CHECK-NEXT:    #APP820; CHECK-NEXT:    nop821; CHECK-NEXT:    #NO_APP822; CHECK-NEXT:    vshufps $200, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload823; CHECK-NEXT:    # xmm0 = xmm0[0,2],mem[0,3]824; 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 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 2, i32 4, i32 7>827  ret <4 x float> %2828}829 830define <4 x float> @stack_fold_shufps_mask(ptr %passthru, <4 x float> %a0, <4 x float> %a1, i8 %mask) {831; CHECK-LABEL: stack_fold_shufps_mask:832; CHECK:       # %bb.0:833; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill834; CHECK-NEXT:    #APP835; CHECK-NEXT:    nop836; CHECK-NEXT:    #NO_APP837; CHECK-NEXT:    kmovw %esi, %k1838; CHECK-NEXT:    vmovaps (%rdi), %xmm2839; CHECK-NEXT:    vshufps $200, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload840; CHECK-NEXT:    # xmm2 {%k1} = xmm0[0,2],mem[0,3]841; CHECK-NEXT:    vmovaps %xmm2, %xmm0842; CHECK-NEXT:    retq843  %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}"()844  %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 2, i32 4, i32 7>845  %3 = bitcast i8 %mask to <8 x i1>846  %4 = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>847  %5 = load <4 x float>, ptr %passthru848  %6 = select <4 x i1> %4, <4 x float> %2, <4 x float> %5849  ret <4 x float> %6850}851 852define <4 x float> @stack_fold_shufps_maskz(<4 x float> %a0, <4 x float> %a1, i8 %mask) {853; CHECK-LABEL: stack_fold_shufps_maskz:854; CHECK:       # %bb.0:855; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill856; CHECK-NEXT:    #APP857; CHECK-NEXT:    nop858; CHECK-NEXT:    #NO_APP859; CHECK-NEXT:    kmovw %edi, %k1860; CHECK-NEXT:    vshufps $200, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload861; CHECK-NEXT:    # xmm0 {%k1} {z} = xmm0[0,2],mem[0,3]862; 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 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 2, i32 4, i32 7>865  %3 = bitcast i8 %mask to <8 x i1>866  %4 = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>867  %5 = select <4 x i1> %4, <4 x float> %2, <4 x float> zeroinitializer868  ret <4 x float> %5869}870 871define <8 x float> @stack_fold_shufps_ymm(<8 x float> %a0, <8 x float> %a1) {872; CHECK-LABEL: stack_fold_shufps_ymm:873; CHECK:       # %bb.0:874; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill875; CHECK-NEXT:    #APP876; CHECK-NEXT:    nop877; CHECK-NEXT:    #NO_APP878; CHECK-NEXT:    vshufps $148, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload879; CHECK-NEXT:    # ymm0 = ymm0[0,1],mem[1,2],ymm0[4,5],mem[5,6]880; CHECK-NEXT:    retq881  %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}"()882  %2 = shufflevector <8 x float> %a0, <8 x float> %a1, <8 x i32> <i32 0, i32 1, i32 9, i32 10, i32 4, i32 5, i32 13, i32 14>883  ret <8 x float> %2884}885 886define <2 x double> @stack_fold_subpd(<2 x double> %a0, <2 x double> %a1) {887; CHECK-LABEL: stack_fold_subpd:888; CHECK:       # %bb.0:889; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill890; CHECK-NEXT:    #APP891; CHECK-NEXT:    nop892; CHECK-NEXT:    #NO_APP893; CHECK-NEXT:    vsubpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload894; CHECK-NEXT:    retq895  %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}"()896  %2 = fsub <2 x double> %a0, %a1897  ret <2 x double> %2898}899 900define <4 x double> @stack_fold_subpd_ymm(<4 x double> %a0, <4 x double> %a1) {901; CHECK-LABEL: stack_fold_subpd_ymm:902; CHECK:       # %bb.0:903; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill904; CHECK-NEXT:    #APP905; CHECK-NEXT:    nop906; CHECK-NEXT:    #NO_APP907; CHECK-NEXT:    vsubpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload908; CHECK-NEXT:    retq909  %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}"()910  %2 = fsub <4 x double> %a0, %a1911  ret <4 x double> %2912}913 914define <4 x float> @stack_fold_subps(<4 x float> %a0, <4 x float> %a1) {915; CHECK-LABEL: stack_fold_subps:916; CHECK:       # %bb.0:917; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill918; CHECK-NEXT:    #APP919; CHECK-NEXT:    nop920; CHECK-NEXT:    #NO_APP921; CHECK-NEXT:    vsubps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload922; CHECK-NEXT:    retq923  %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}"()924  %2 = fsub <4 x float> %a0, %a1925  ret <4 x float> %2926}927 928define <8 x float> @stack_fold_subps_ymm(<8 x float> %a0, <8 x float> %a1) {929; CHECK-LABEL: stack_fold_subps_ymm:930; CHECK:       # %bb.0:931; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill932; CHECK-NEXT:    #APP933; CHECK-NEXT:    nop934; CHECK-NEXT:    #NO_APP935; CHECK-NEXT:    vsubps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload936; CHECK-NEXT:    retq937  %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}"()938  %2 = fsub <8 x float> %a0, %a1939  ret <8 x float> %2940}941 942define <2 x double> @stack_fold_xorpd(<2 x double> %a0, <2 x double> %a1) {943; CHECK-LABEL: stack_fold_xorpd:944; CHECK:       # %bb.0:945; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill946; CHECK-NEXT:    #APP947; CHECK-NEXT:    nop948; CHECK-NEXT:    #NO_APP949; CHECK-NEXT:    vxorpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload950; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1951; CHECK-NEXT:    vaddpd %xmm1, %xmm0, %xmm0952; CHECK-NEXT:    retq953  %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}"()954  %2 = bitcast <2 x double> %a0 to <2 x i64>955  %3 = bitcast <2 x double> %a1 to <2 x i64>956  %4 = xor <2 x i64> %2, %3957  %5 = bitcast <2 x i64> %4 to <2 x double>958  ; fadd forces execution domain959  %6 = fadd <2 x double> %5, <double 0x0, double 0x0>960  ret <2 x double> %6961}962 963define <4 x double> @stack_fold_xorpd_ymm(<4 x double> %a0, <4 x double> %a1) {964; CHECK-LABEL: stack_fold_xorpd_ymm:965; CHECK:       # %bb.0:966; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill967; CHECK-NEXT:    #APP968; CHECK-NEXT:    nop969; CHECK-NEXT:    #NO_APP970; CHECK-NEXT:    vxorpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload971; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1972; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0973; CHECK-NEXT:    retq974  %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}"()975  %2 = bitcast <4 x double> %a0 to <4 x i64>976  %3 = bitcast <4 x double> %a1 to <4 x i64>977  %4 = xor <4 x i64> %2, %3978  %5 = bitcast <4 x i64> %4 to <4 x double>979  ; fadd forces execution domain980  %6 = fadd <4 x double> %5, <double 0x0, double 0x0, double 0x0, double 0x0>981  ret <4 x double> %6982}983 984define <4 x float> @stack_fold_xorps(<4 x float> %a0, <4 x float> %a1) {985; CHECK-LABEL: stack_fold_xorps:986; CHECK:       # %bb.0:987; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill988; CHECK-NEXT:    #APP989; CHECK-NEXT:    nop990; CHECK-NEXT:    #NO_APP991; CHECK-NEXT:    vxorps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload992; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1993; CHECK-NEXT:    vaddps %xmm1, %xmm0, %xmm0994; CHECK-NEXT:    retq995  %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}"()996  %2 = bitcast <4 x float> %a0 to <4 x i32>997  %3 = bitcast <4 x float> %a1 to <4 x i32>998  %4 = xor <4 x i32> %2, %3999  %5 = bitcast <4 x i32> %4 to <4 x float>1000  ; fadd forces execution domain1001  %6 = fadd <4 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0>1002  ret <4 x float> %61003}1004 1005define <8 x float> @stack_fold_xorps_ymm(<8 x float> %a0, <8 x float> %a1) {1006; CHECK-LABEL: stack_fold_xorps_ymm:1007; CHECK:       # %bb.0:1008; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1009; CHECK-NEXT:    #APP1010; CHECK-NEXT:    nop1011; CHECK-NEXT:    #NO_APP1012; CHECK-NEXT:    vxorps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1013; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11014; CHECK-NEXT:    vaddps %ymm1, %ymm0, %ymm01015; CHECK-NEXT:    retq1016  %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}"()1017  %2 = bitcast <8 x float> %a0 to <8 x i32>1018  %3 = bitcast <8 x float> %a1 to <8 x i32>1019  %4 = xor <8 x i32> %2, %31020  %5 = bitcast <8 x i32> %4 to <8 x float>1021  ; fadd forces execution domain1022  %6 = fadd <8 x float> %5, <float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>1023  ret <8 x float> %61024}1025 1026define <4 x float> @stack_fold_extractf32x4(<8 x float> %a0, <8 x float> %a1) {1027; CHECK-LABEL: stack_fold_extractf32x4:1028; CHECK:       # %bb.0:1029; CHECK-NEXT:    vextractf128 $1, %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Folded Spill1030; CHECK-NEXT:    #APP1031; CHECK-NEXT:    nop1032; CHECK-NEXT:    #NO_APP1033; CHECK-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1034; CHECK-NEXT:    vzeroupper1035; CHECK-NEXT:    retq1036  %1 = shufflevector <8 x float> %a0, <8 x float> %a1, <4 x i32> <i32 4, i32 5, i32 6, i32 7>1037  %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}"()1038  ret <4 x float> %11039}1040 1041define <2 x double> @stack_fold_extractf64x2(<4 x double> %a0, <4 x double> %a1) {1042; CHECK-LABEL: stack_fold_extractf64x2:1043; CHECK:       # %bb.0:1044; CHECK-NEXT:    vextractf128 $1, %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Folded Spill1045; CHECK-NEXT:    #APP1046; CHECK-NEXT:    nop1047; CHECK-NEXT:    #NO_APP1048; CHECK-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1049; CHECK-NEXT:    vzeroupper1050; CHECK-NEXT:    retq1051  %1 = shufflevector <4 x double> %a0, <4 x double> %a1, <2 x i32> <i32 2, i32 3>1052  %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}"()1053  ret <2 x double> %11054}1055 1056define <8 x float> @stack_fold_insertf32x4(<4 x float> %a0, <4 x float> %a1) {1057; CHECK-LABEL: stack_fold_insertf32x4:1058; CHECK:       # %bb.0:1059; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1060; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01061; CHECK-NEXT:    #APP1062; CHECK-NEXT:    nop1063; CHECK-NEXT:    #NO_APP1064; CHECK-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1065; CHECK-NEXT:    retq1066  %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}"()1067  %2 = shufflevector <4 x float> %a0, <4 x float> %a1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1068  ret <8 x float> %21069}1070 1071define <4 x double> @stack_fold_insertf64x2(<2 x double> %a0, <2 x double> %a1) {1072; CHECK-LABEL: stack_fold_insertf64x2:1073; CHECK:       # %bb.0:1074; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1075; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01076; CHECK-NEXT:    #APP1077; CHECK-NEXT:    nop1078; CHECK-NEXT:    #NO_APP1079; CHECK-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1080; CHECK-NEXT:    retq1081  %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}"()1082  %2 = shufflevector <2 x double> %a0, <2 x double> %a1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1083  ret <4 x double> %21084}1085 1086define <4 x float> @stack_fold_vpermt2ps(<4 x float> %x0, <4 x i32> %x1, <4 x float> %x2) {1087; CHECK-LABEL: stack_fold_vpermt2ps:1088; CHECK:       # %bb.0:1089; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1090; CHECK-NEXT:    #APP1091; CHECK-NEXT:    nop1092; CHECK-NEXT:    #NO_APP1093; CHECK-NEXT:    vpermt2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1094; CHECK-NEXT:    retq1095  %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}"()1096  %2 = call <4 x float> @llvm.x86.avx512.vpermi2var.ps.128(<4 x float> %x0, <4 x i32> %x1, <4 x float> %x2)1097  ret <4 x float> %21098}1099 1100define <4 x float> @stack_fold_vpermi2ps(<4 x i32> %x0, <4 x float> %x1, <4 x float> %x2) {1101; CHECK-LABEL: stack_fold_vpermi2ps:1102; CHECK:       # %bb.0:1103; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1104; CHECK-NEXT:    #APP1105; CHECK-NEXT:    nop1106; CHECK-NEXT:    #NO_APP1107; CHECK-NEXT:    vpermi2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1108; CHECK-NEXT:    retq1109  %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}"()1110  %2 = call <4 x float> @llvm.x86.avx512.vpermi2var.ps.128(<4 x float> %x1, <4 x i32> %x0, <4 x float> %x2)1111  ret <4 x float> %21112}1113 1114define <2 x double> @stack_fold_vpermt2pd(<2 x double> %x0, <2 x i64> %x1, <2 x double> %x2) {1115; CHECK-LABEL: stack_fold_vpermt2pd:1116; CHECK:       # %bb.0:1117; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1118; CHECK-NEXT:    #APP1119; CHECK-NEXT:    nop1120; CHECK-NEXT:    #NO_APP1121; CHECK-NEXT:    vpermt2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1122; CHECK-NEXT:    retq1123  %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}"()1124  %2 = call <2 x double> @llvm.x86.avx512.vpermi2var.pd.128(<2 x double> %x0, <2 x i64> %x1, <2 x double> %x2)1125  ret <2 x double> %21126}1127 1128define <2 x double> @stack_fold_vpermi2pd(<2 x i64> %x0, <2 x double> %x1, <2 x double> %x2) {1129; CHECK-LABEL: stack_fold_vpermi2pd:1130; CHECK:       # %bb.0:1131; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1132; CHECK-NEXT:    #APP1133; CHECK-NEXT:    nop1134; CHECK-NEXT:    #NO_APP1135; CHECK-NEXT:    vpermi2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1136; CHECK-NEXT:    retq1137  %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}"()1138  %2 = call <2 x double> @llvm.x86.avx512.vpermi2var.pd.128(<2 x double> %x1, <2 x i64> %x0, <2 x double> %x2)1139  ret <2 x double> %21140}1141 1142define <8 x float> @stack_fold_vpermt2ps_ymm(<8 x float> %x0, <8 x i32> %x1, <8 x float> %x2) {1143; CHECK-LABEL: stack_fold_vpermt2ps_ymm:1144; CHECK:       # %bb.0:1145; CHECK-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1146; CHECK-NEXT:    #APP1147; CHECK-NEXT:    nop1148; CHECK-NEXT:    #NO_APP1149; CHECK-NEXT:    vpermt2ps {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload1150; CHECK-NEXT:    retq1151  %1 = tail call <4 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}"()1152  %2 = call <8 x float> @llvm.x86.avx512.vpermi2var.ps.256(<8 x float> %x0, <8 x i32> %x1, <8 x float> %x2)1153  ret <8 x float> %21154}1155 1156define <8 x float> @stack_fold_vpermi2ps_ymm(<8 x i32> %x0, <8 x float> %x1, <8 x float> %x2) {1157; CHECK-LABEL: stack_fold_vpermi2ps_ymm:1158; CHECK:       # %bb.0:1159; CHECK-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1160; CHECK-NEXT:    #APP1161; CHECK-NEXT:    nop1162; CHECK-NEXT:    #NO_APP1163; CHECK-NEXT:    vpermi2ps {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload1164; CHECK-NEXT:    retq1165  %1 = tail call <4 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}"()1166  %2 = call <8 x float> @llvm.x86.avx512.vpermi2var.ps.256(<8 x float> %x1, <8 x i32> %x0, <8 x float> %x2)1167  ret <8 x float> %21168}1169 1170define <4 x double> @stack_fold_vpermt2pd_ymm(<4 x double> %x0, <4 x i64> %x1, <4 x double> %x2) {1171; CHECK-LABEL: stack_fold_vpermt2pd_ymm:1172; CHECK:       # %bb.0:1173; CHECK-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1174; CHECK-NEXT:    #APP1175; CHECK-NEXT:    nop1176; CHECK-NEXT:    #NO_APP1177; CHECK-NEXT:    vpermt2pd {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload1178; CHECK-NEXT:    retq1179  %1 = tail call <4 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}"()1180  %2 = call <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %x0, <4 x i64> %x1, <4 x double> %x2)1181  ret <4 x double> %21182}1183 1184define <4 x double> @stack_fold_vpermi2pd_ymm(<4 x i64> %x0, <4 x double> %x1, <4 x double> %x2) {1185; CHECK-LABEL: stack_fold_vpermi2pd_ymm:1186; CHECK:       # %bb.0:1187; CHECK-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1188; CHECK-NEXT:    #APP1189; CHECK-NEXT:    nop1190; CHECK-NEXT:    #NO_APP1191; CHECK-NEXT:    vpermi2pd {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload1192; CHECK-NEXT:    retq1193  %1 = tail call <4 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}"()1194  %2 = call <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %x1, <4 x i64> %x0, <4 x double> %x2)1195  ret <4 x double> %21196}1197 1198define <4 x double> @stack_fold_permpd(<4 x double> %a0) {1199; CHECK-LABEL: stack_fold_permpd:1200; CHECK:       # %bb.0:1201; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1202; CHECK-NEXT:    #APP1203; CHECK-NEXT:    nop1204; CHECK-NEXT:    #NO_APP1205; CHECK-NEXT:    vpermpd $235, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload1206; CHECK-NEXT:    # ymm0 = mem[3,2,2,3]1207; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm11208; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm01209; CHECK-NEXT:    retq1210  %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}"()1211  %2 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 3, i32 2, i32 2, i32 3>1212  ; fadd forces execution domain1213  %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>1214  ret <4 x double> %31215}1216 1217define <4 x double> @stack_fold_permpdvar(<4 x i64> %a0, <4 x double> %a1) {1218; CHECK-LABEL: stack_fold_permpdvar:1219; CHECK:       # %bb.0:1220; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1221; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1222; CHECK-NEXT:    #APP1223; CHECK-NEXT:    nop1224; CHECK-NEXT:    #NO_APP1225; CHECK-NEXT:    vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1226; CHECK-NEXT:    vpermpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1227; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm11228; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm01229; CHECK-NEXT:    retq1230  %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}"()1231  %2 = call <4 x double> @llvm.x86.avx512.permvar.df.256(<4 x double> %a1, <4 x i64> %a0)1232  ; fadd forces execution domain1233  %3 = fadd <4 x double> %2, zeroinitializer1234  ret <4 x double> %31235}1236declare <4 x double> @llvm.x86.avx512.permvar.df.256(<4 x double>, <4 x i64>) nounwind readonly1237 1238define <8 x float> @stack_fold_permps(<8 x i32> %a0, <8 x float> %a1) {1239; CHECK-LABEL: stack_fold_permps:1240; CHECK:       # %bb.0:1241; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1242; CHECK-NEXT:    #APP1243; CHECK-NEXT:    nop1244; CHECK-NEXT:    #NO_APP1245; CHECK-NEXT:    vpermps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1246; CHECK-NEXT:    retq1247  %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}"()1248  %2 = call <8 x float> @llvm.x86.avx2.permps(<8 x float> %a1, <8 x i32> %a0)1249  ret <8 x float> %21250}1251declare <8 x float> @llvm.x86.avx2.permps(<8 x float>, <8 x i32>) nounwind readonly1252 1253define <2 x double> @stack_fold_permilpd(<2 x double> %a0) {1254; CHECK-LABEL: stack_fold_permilpd:1255; CHECK:       # %bb.0:1256; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1257; CHECK-NEXT:    #APP1258; CHECK-NEXT:    nop1259; CHECK-NEXT:    #NO_APP1260; CHECK-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1261; CHECK-NEXT:    # xmm0 = mem[1,0]1262; CHECK-NEXT:    retq1263  %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}"()1264  %2 = shufflevector <2 x double> %a0, <2 x double> undef, <2 x i32> <i32 1, i32 0>1265  ret <2 x double> %21266}1267 1268define <4 x double> @stack_fold_permilpd_ymm(<4 x double> %a0) {1269; CHECK-LABEL: stack_fold_permilpd_ymm:1270; CHECK:       # %bb.0:1271; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1272; CHECK-NEXT:    #APP1273; CHECK-NEXT:    nop1274; CHECK-NEXT:    #NO_APP1275; CHECK-NEXT:    vpermilpd $5, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload1276; CHECK-NEXT:    # ymm0 = mem[1,0,3,2]1277; CHECK-NEXT:    retq1278  %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}"()1279  %2 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2>1280  ret <4 x double> %21281}1282 1283define <2 x double> @stack_fold_permilpdvar(<2 x double> %a0, <2 x i64> %a1) {1284; CHECK-LABEL: stack_fold_permilpdvar:1285; CHECK:       # %bb.0:1286; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1287; CHECK-NEXT:    #APP1288; CHECK-NEXT:    nop1289; CHECK-NEXT:    #NO_APP1290; CHECK-NEXT:    vpermilpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1291; CHECK-NEXT:    retq1292  %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}"()1293  %2 = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> %a1)1294  ret <2 x double> %21295}1296declare <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double>, <2 x i64>) nounwind readnone1297 1298define <4 x double> @stack_fold_permilpdvar_ymm(<4 x double> %a0, <4 x i64> %a1) {1299; CHECK-LABEL: stack_fold_permilpdvar_ymm:1300; CHECK:       # %bb.0:1301; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1302; CHECK-NEXT:    #APP1303; CHECK-NEXT:    nop1304; CHECK-NEXT:    #NO_APP1305; CHECK-NEXT:    vpermilpd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1306; CHECK-NEXT:    retq1307  %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}"()1308  %2 = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> %a1)1309  ret <4 x double> %21310}1311declare <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double>, <4 x i64>) nounwind readnone1312 1313define <4 x float> @stack_fold_permilps(<4 x float> %a0) {1314; CHECK-LABEL: stack_fold_permilps:1315; CHECK:       # %bb.0:1316; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1317; CHECK-NEXT:    #APP1318; CHECK-NEXT:    nop1319; CHECK-NEXT:    #NO_APP1320; CHECK-NEXT:    vpermilps $27, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1321; CHECK-NEXT:    # xmm0 = mem[3,2,1,0]1322; CHECK-NEXT:    retq1323  %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}"()1324  %2 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>1325  ret <4 x float> %21326}1327 1328define <8 x float> @stack_fold_permilps_ymm(<8 x float> %a0) {1329; CHECK-LABEL: stack_fold_permilps_ymm:1330; CHECK:       # %bb.0:1331; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1332; CHECK-NEXT:    #APP1333; CHECK-NEXT:    nop1334; CHECK-NEXT:    #NO_APP1335; CHECK-NEXT:    vpermilps $27, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload1336; CHECK-NEXT:    # ymm0 = mem[3,2,1,0,7,6,5,4]1337; CHECK-NEXT:    retq1338  %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}"()1339  %2 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1340  ret <8 x float> %21341}1342 1343define <4 x float> @stack_fold_permilpsvar(<4 x float> %a0, <4 x i32> %a1) {1344; CHECK-LABEL: stack_fold_permilpsvar:1345; CHECK:       # %bb.0:1346; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1347; CHECK-NEXT:    #APP1348; CHECK-NEXT:    nop1349; CHECK-NEXT:    #NO_APP1350; CHECK-NEXT:    vpermilps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1351; CHECK-NEXT:    retq1352  %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}"()1353  %2 = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a1)1354  ret <4 x float> %21355}1356declare <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float>, <4 x i32>) nounwind readnone1357 1358define <8 x float> @stack_fold_permilpsvar_ymm(<8 x float> %a0, <8 x i32> %a1) {1359; CHECK-LABEL: stack_fold_permilpsvar_ymm:1360; CHECK:       # %bb.0:1361; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1362; CHECK-NEXT:    #APP1363; CHECK-NEXT:    nop1364; CHECK-NEXT:    #NO_APP1365; CHECK-NEXT:    vpermilps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1366; CHECK-NEXT:    retq1367  %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}"()1368  %2 = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> %a1)1369  ret <8 x float> %21370}1371declare <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float>, <8 x i32>) nounwind readnone1372 1373define <8 x float> @stack_fold_permilpsvar_ymm_maskz(<8 x float> %a0, <8 x i32> %a1, i8 %mask) {1374; CHECK-LABEL: stack_fold_permilpsvar_ymm_maskz:1375; CHECK:       # %bb.0:1376; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1377; CHECK-NEXT:    #APP1378; CHECK-NEXT:    nop1379; CHECK-NEXT:    #NO_APP1380; CHECK-NEXT:    kmovw %edi, %k11381; CHECK-NEXT:    vpermilps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 {%k1} {z} # 32-byte Folded Reload1382; CHECK-NEXT:    retq1383  %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}"()1384  %2 = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> %a1)1385  %3 = bitcast i8 %mask to <8 x i1>1386  %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> zeroinitializer1387  ret <8 x float> %41388}1389 1390declare <4 x float> @llvm.x86.avx512.vpermi2var.ps.128(<4 x float>, <4 x i32>, <4 x float>)1391declare <2 x double> @llvm.x86.avx512.vpermi2var.pd.128(<2 x double>, <2 x i64>, <2 x double>)1392declare <8 x float> @llvm.x86.avx512.vpermi2var.ps.256(<8 x float>, <8 x i32>, <8 x float>)1393declare <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double>, <4 x i64>, <4 x double>)1394