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