2093 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=+avx2 < %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 <4 x double> @stack_fold_broadcastsd_ymm(<2 x double> %a0) {13; CHECK-LABEL: stack_fold_broadcastsd_ymm:14; CHECK: # %bb.0:15; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill16; CHECK-NEXT: #APP17; CHECK-NEXT: nop18; CHECK-NEXT: #NO_APP19; CHECK-NEXT: vbroadcastsd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload20; CHECK-NEXT: vmovsd {{.*#+}} xmm1 = [4.9406564584124654E-324,0.0E+0]21; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm022; CHECK-NEXT: retq23 %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},~{flags}"()24 %2 = shufflevector <2 x double> %a0, <2 x double> undef, <4 x i32> zeroinitializer25 ; fadd forces execution domain26 %3 = fadd <4 x double> %2, <double 0x1, double 0x0, double 0x0, double 0x0>27 ret <4 x double> %328}29 30define <4 x float> @stack_fold_broadcastss(<4 x float> %a0) {31; CHECK-LABEL: stack_fold_broadcastss:32; CHECK: # %bb.0:33; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill34; CHECK-NEXT: #APP35; CHECK-NEXT: nop36; CHECK-NEXT: #NO_APP37; CHECK-NEXT: vbroadcastss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload38; CHECK-NEXT: vmovss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]39; CHECK-NEXT: vaddps %xmm1, %xmm0, %xmm040; CHECK-NEXT: retq41 %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},~{flags}"()42 %2 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> zeroinitializer43 ; fadd forces execution domain44 %3 = fadd <4 x float> %2, <float 1.0, float 0x0, float 0x0, float 0x0>45 ret <4 x float> %346}47 48define <8 x float> @stack_fold_broadcastss_ymm(<4 x float> %a0) {49; CHECK-LABEL: stack_fold_broadcastss_ymm:50; CHECK: # %bb.0:51; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill52; CHECK-NEXT: #APP53; CHECK-NEXT: nop54; CHECK-NEXT: #NO_APP55; CHECK-NEXT: vbroadcastss {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload56; CHECK-NEXT: vmovss {{.*#+}} xmm1 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]57; CHECK-NEXT: vaddps %ymm1, %ymm0, %ymm058; CHECK-NEXT: retq59 %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},~{flags}"()60 %2 = shufflevector <4 x float> %a0, <4 x float> undef, <8 x i32> zeroinitializer61 ; fadd forces execution domain62 %3 = fadd <8 x float> %2, <float 1.0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0, float 0x0>63 ret <8 x float> %364}65 66define <4 x i32> @stack_fold_extracti128(<8 x i16> %a0, <8 x i32> %a1) {67; CHECK-LABEL: stack_fold_extracti128:68; CHECK: # %bb.0:69; CHECK-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero70; CHECK-NEXT: vextracti128 $1, %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Folded Spill71; CHECK-NEXT: #APP72; CHECK-NEXT: nop73; CHECK-NEXT: #NO_APP74; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload75; CHECK-NEXT: vzeroupper76; CHECK-NEXT: retq77 ; zext forces execution domain78 %t1 = zext <8 x i16> %a0 to <8 x i32>79 %t2 = shufflevector <8 x i32> %t1, <8 x i32> %a1, <4 x i32> <i32 4, i32 5, i32 6, i32 7>80 %t3 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()81 ret <4 x i32> %t282}83 84define <8 x i32> @stack_fold_inserti128(<4 x i32> %a0, <4 x i32> %a1) {85; CHECK-LABEL: stack_fold_inserti128:86; CHECK: # %bb.0:87; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill88; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm089; CHECK-NEXT: #APP90; CHECK-NEXT: nop91; CHECK-NEXT: #NO_APP92; CHECK-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload93; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm094; CHECK-NEXT: retq95 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()96 %2 = shufflevector <4 x i32> %a0, <4 x i32> %a1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>97 ; add forces execution domain98 %3 = add <8 x i32> %2, <i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>99 ret <8 x i32> %3100}101 102define <16 x i16> @stack_fold_mpsadbw(<32 x i8> %a0, <32 x i8> %a1) {103; CHECK-LABEL: stack_fold_mpsadbw:104; CHECK: # %bb.0:105; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill106; CHECK-NEXT: #APP107; CHECK-NEXT: nop108; CHECK-NEXT: #NO_APP109; CHECK-NEXT: vmpsadbw $7, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload110; CHECK-NEXT: retq111 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()112 %2 = call <16 x i16> @llvm.x86.avx2.mpsadbw(<32 x i8> %a0, <32 x i8> %a1, i8 7)113 ret <16 x i16> %2114}115declare <16 x i16> @llvm.x86.avx2.mpsadbw(<32 x i8>, <32 x i8>, i8) nounwind readnone116 117define <32 x i8> @stack_fold_pabsb(<32 x i8> %a0) {118; CHECK-LABEL: stack_fold_pabsb:119; CHECK: # %bb.0:120; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill121; CHECK-NEXT: #APP122; CHECK-NEXT: nop123; CHECK-NEXT: #NO_APP124; CHECK-NEXT: vpabsb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload125; CHECK-NEXT: retq126 %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},~{flags}"()127 %2 = icmp sgt <32 x i8> %a0, zeroinitializer128 %3 = sub <32 x i8> zeroinitializer, %a0129 %4 = select <32 x i1> %2, <32 x i8> %a0, <32 x i8> %3130 ret <32 x i8> %4131}132 133define <8 x i32> @stack_fold_pabsd(<8 x i32> %a0) {134; CHECK-LABEL: stack_fold_pabsd:135; CHECK: # %bb.0:136; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill137; CHECK-NEXT: #APP138; CHECK-NEXT: nop139; CHECK-NEXT: #NO_APP140; CHECK-NEXT: vpabsd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload141; CHECK-NEXT: retq142 %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},~{flags}"()143 %2 = icmp sgt <8 x i32> %a0, zeroinitializer144 %3 = sub <8 x i32> zeroinitializer, %a0145 %4 = select <8 x i1> %2, <8 x i32> %a0, <8 x i32> %3146 ret <8 x i32> %4147}148 149define <16 x i16> @stack_fold_pabsw(<16 x i16> %a0) {150; CHECK-LABEL: stack_fold_pabsw:151; CHECK: # %bb.0:152; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill153; CHECK-NEXT: #APP154; CHECK-NEXT: nop155; CHECK-NEXT: #NO_APP156; CHECK-NEXT: vpabsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload157; CHECK-NEXT: retq158 %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},~{flags}"()159 %2 = icmp sgt <16 x i16> %a0, zeroinitializer160 %3 = sub <16 x i16> zeroinitializer, %a0161 %4 = select <16 x i1> %2, <16 x i16> %a0, <16 x i16> %3162 ret <16 x i16> %4163}164 165define <16 x i16> @stack_fold_packssdw(<8 x i32> %a0, <8 x i32> %a1) {166; CHECK-LABEL: stack_fold_packssdw:167; CHECK: # %bb.0:168; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill169; CHECK-NEXT: #APP170; CHECK-NEXT: nop171; CHECK-NEXT: #NO_APP172; CHECK-NEXT: vpackssdw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload173; CHECK-NEXT: retq174 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()175 %2 = call <16 x i16> @llvm.x86.avx2.packssdw(<8 x i32> %a0, <8 x i32> %a1)176 ret <16 x i16> %2177}178declare <16 x i16> @llvm.x86.avx2.packssdw(<8 x i32>, <8 x i32>) nounwind readnone179 180define <32 x i8> @stack_fold_packsswb(<16 x i16> %a0, <16 x i16> %a1) {181; CHECK-LABEL: stack_fold_packsswb:182; CHECK: # %bb.0:183; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill184; CHECK-NEXT: #APP185; CHECK-NEXT: nop186; CHECK-NEXT: #NO_APP187; CHECK-NEXT: vpacksswb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload188; CHECK-NEXT: retq189 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()190 %2 = call <32 x i8> @llvm.x86.avx2.packsswb(<16 x i16> %a0, <16 x i16> %a1)191 ret <32 x i8> %2192}193declare <32 x i8> @llvm.x86.avx2.packsswb(<16 x i16>, <16 x i16>) nounwind readnone194 195define <16 x i16> @stack_fold_packusdw(<8 x i32> %a0, <8 x i32> %a1) {196; CHECK-LABEL: stack_fold_packusdw:197; CHECK: # %bb.0:198; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill199; CHECK-NEXT: #APP200; CHECK-NEXT: nop201; CHECK-NEXT: #NO_APP202; CHECK-NEXT: vpackusdw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload203; CHECK-NEXT: retq204 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()205 %2 = call <16 x i16> @llvm.x86.avx2.packusdw(<8 x i32> %a0, <8 x i32> %a1)206 ret <16 x i16> %2207}208declare <16 x i16> @llvm.x86.avx2.packusdw(<8 x i32>, <8 x i32>) nounwind readnone209 210define <32 x i8> @stack_fold_packuswb(<16 x i16> %a0, <16 x i16> %a1) {211; CHECK-LABEL: stack_fold_packuswb:212; CHECK: # %bb.0:213; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill214; CHECK-NEXT: #APP215; CHECK-NEXT: nop216; CHECK-NEXT: #NO_APP217; CHECK-NEXT: vpackuswb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload218; CHECK-NEXT: retq219 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()220 %2 = call <32 x i8> @llvm.x86.avx2.packuswb(<16 x i16> %a0, <16 x i16> %a1)221 ret <32 x i8> %2222}223declare <32 x i8> @llvm.x86.avx2.packuswb(<16 x i16>, <16 x i16>) nounwind readnone224 225define <32 x i8> @stack_fold_paddb(<32 x i8> %a0, <32 x i8> %a1) {226; CHECK-LABEL: stack_fold_paddb:227; CHECK: # %bb.0:228; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill229; CHECK-NEXT: #APP230; CHECK-NEXT: nop231; CHECK-NEXT: #NO_APP232; CHECK-NEXT: vpaddb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload233; CHECK-NEXT: retq234 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()235 %2 = add <32 x i8> %a0, %a1236 ret <32 x i8> %2237}238 239define <8 x i32> @stack_fold_paddd(<8 x i32> %a0, <8 x i32> %a1) {240; CHECK-LABEL: stack_fold_paddd:241; CHECK: # %bb.0:242; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill243; CHECK-NEXT: #APP244; CHECK-NEXT: nop245; CHECK-NEXT: #NO_APP246; CHECK-NEXT: vpaddd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload247; CHECK-NEXT: retq248 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()249 %2 = add <8 x i32> %a0, %a1250 ret <8 x i32> %2251}252 253define <4 x i64> @stack_fold_paddq(<4 x i64> %a0, <4 x i64> %a1) {254; CHECK-LABEL: stack_fold_paddq:255; CHECK: # %bb.0:256; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill257; CHECK-NEXT: #APP258; CHECK-NEXT: nop259; CHECK-NEXT: #NO_APP260; CHECK-NEXT: vpaddq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload261; CHECK-NEXT: retq262 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()263 %2 = add <4 x i64> %a0, %a1264 ret <4 x i64> %2265}266 267define <32 x i8> @stack_fold_paddsb(<32 x i8> %a0, <32 x i8> %a1) {268; CHECK-LABEL: stack_fold_paddsb:269; CHECK: # %bb.0:270; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill271; CHECK-NEXT: #APP272; CHECK-NEXT: nop273; CHECK-NEXT: #NO_APP274; CHECK-NEXT: vpaddsb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload275; CHECK-NEXT: retq276 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()277 %2 = call <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8> %a0, <32 x i8> %a1)278 ret <32 x i8> %2279}280declare <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8>, <32 x i8>) nounwind readnone281 282define <16 x i16> @stack_fold_paddsw(<16 x i16> %a0, <16 x i16> %a1) {283; CHECK-LABEL: stack_fold_paddsw:284; CHECK: # %bb.0:285; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill286; CHECK-NEXT: #APP287; CHECK-NEXT: nop288; CHECK-NEXT: #NO_APP289; CHECK-NEXT: vpaddsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload290; CHECK-NEXT: retq291 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()292 %2 = call <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16> %a0, <16 x i16> %a1)293 ret <16 x i16> %2294}295declare <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16>, <16 x i16>) nounwind readnone296 297define <32 x i8> @stack_fold_paddusb(<32 x i8> %a0, <32 x i8> %a1) {298; CHECK-LABEL: stack_fold_paddusb:299; CHECK: # %bb.0:300; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill301; CHECK-NEXT: #APP302; CHECK-NEXT: nop303; CHECK-NEXT: #NO_APP304; CHECK-NEXT: vpaddusb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload305; CHECK-NEXT: retq306 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()307 %2 = call <32 x i8> @llvm.uadd.sat.v32i8(<32 x i8> %a0, <32 x i8> %a1)308 ret <32 x i8> %2309}310declare <32 x i8> @llvm.uadd.sat.v32i8(<32 x i8>, <32 x i8>) nounwind readnone311 312define <16 x i16> @stack_fold_paddusw(<16 x i16> %a0, <16 x i16> %a1) {313; CHECK-LABEL: stack_fold_paddusw:314; CHECK: # %bb.0:315; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill316; CHECK-NEXT: #APP317; CHECK-NEXT: nop318; CHECK-NEXT: #NO_APP319; CHECK-NEXT: vpaddusw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload320; CHECK-NEXT: retq321 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()322 %2 = call <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16> %a0, <16 x i16> %a1)323 ret <16 x i16> %2324}325declare <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16>, <16 x i16>) nounwind readnone326 327define <16 x i16> @stack_fold_paddw(<16 x i16> %a0, <16 x i16> %a1) {328; CHECK-LABEL: stack_fold_paddw:329; CHECK: # %bb.0:330; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill331; CHECK-NEXT: #APP332; CHECK-NEXT: nop333; CHECK-NEXT: #NO_APP334; CHECK-NEXT: vpaddw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload335; CHECK-NEXT: retq336 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()337 %2 = add <16 x i16> %a0, %a1338 ret <16 x i16> %2339}340 341define <32 x i8> @stack_fold_palignr(<32 x i8> %a0, <32 x i8> %a1) {342; CHECK-LABEL: stack_fold_palignr:343; CHECK: # %bb.0:344; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill345; CHECK-NEXT: #APP346; CHECK-NEXT: nop347; CHECK-NEXT: #NO_APP348; CHECK-NEXT: vpalignr $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload349; CHECK-NEXT: # ymm0 = mem[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm0[0],mem[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm0[16]350; CHECK-NEXT: retq351 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()352 %2 = shufflevector <32 x i8> %a1, <32 x i8> %a0, <32 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48>353 ret <32 x i8> %2354}355 356define <32 x i8> @stack_fold_pand(<32 x i8> %a0, <32 x i8> %a1) {357; CHECK-LABEL: stack_fold_pand:358; CHECK: # %bb.0:359; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill360; CHECK-NEXT: #APP361; CHECK-NEXT: nop362; CHECK-NEXT: #NO_APP363; CHECK-NEXT: vpand {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload364; CHECK-NEXT: vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0365; CHECK-NEXT: retq366 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()367 %2 = and <32 x i8> %a0, %a1368 ; add forces execution domain369 %3 = add <32 x i8> %2, <i8 2, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>370 ret <32 x i8> %3371}372 373define <32 x i8> @stack_fold_pandn(<32 x i8> %a0, <32 x i8> %a1) {374; CHECK-LABEL: stack_fold_pandn:375; CHECK: # %bb.0:376; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill377; CHECK-NEXT: #APP378; CHECK-NEXT: nop379; CHECK-NEXT: #NO_APP380; CHECK-NEXT: vpandn {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload381; CHECK-NEXT: vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0382; CHECK-NEXT: retq383 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()384 %2 = xor <32 x i8> %a0, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>385 %3 = and <32 x i8> %2, %a1386 ; add forces execution domain387 %4 = add <32 x i8> %3, <i8 2, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>388 ret <32 x i8> %4389}390 391define <32 x i8> @stack_fold_pavgb(<32 x i8> %a0, <32 x i8> %a1) {392; CHECK-LABEL: stack_fold_pavgb:393; CHECK: # %bb.0:394; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill395; CHECK-NEXT: #APP396; CHECK-NEXT: nop397; CHECK-NEXT: #NO_APP398; CHECK-NEXT: vpavgb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload399; CHECK-NEXT: retq400 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()401 %2 = zext <32 x i8> %a0 to <32 x i16>402 %3 = zext <32 x i8> %a1 to <32 x i16>403 %4 = add <32 x i16> %2, %3404 %5 = add <32 x i16> %4, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>405 %6 = lshr <32 x i16> %5, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>406 %7 = trunc <32 x i16> %6 to <32 x i8>407 ret <32 x i8> %7408}409 410define <16 x i16> @stack_fold_pavgw(<16 x i16> %a0, <16 x i16> %a1) {411; CHECK-LABEL: stack_fold_pavgw:412; CHECK: # %bb.0:413; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill414; CHECK-NEXT: #APP415; CHECK-NEXT: nop416; CHECK-NEXT: #NO_APP417; CHECK-NEXT: vpavgw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload418; CHECK-NEXT: retq419 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()420 %2 = zext <16 x i16> %a0 to <16 x i32>421 %3 = zext <16 x i16> %a1 to <16 x i32>422 %4 = add <16 x i32> %2, %3423 %5 = add <16 x i32> %4, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>424 %6 = lshr <16 x i32> %5, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>425 %7 = trunc <16 x i32> %6 to <16 x i16>426 ret <16 x i16> %7427}428 429define <4 x i32> @stack_fold_pblendd(<4 x i32> %a0, <4 x i32> %a1) {430; CHECK-LABEL: stack_fold_pblendd:431; CHECK: # %bb.0:432; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill433; CHECK-NEXT: #APP434; CHECK-NEXT: nop435; CHECK-NEXT: #NO_APP436; CHECK-NEXT: vpblendd $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload437; CHECK-NEXT: # xmm0 = mem[0,1,2],xmm0[3]438; CHECK-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1439; CHECK-NEXT: vpsubd %xmm1, %xmm0, %xmm0440; CHECK-NEXT: retq441 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()442 %2 = shufflevector <4 x i32> %a0, <4 x i32> %a1, <4 x i32> <i32 4, i32 5, i32 6, i32 3>443 ; add forces execution domain444 %3 = add <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>445 ret <4 x i32> %3446}447 448define <8 x i32> @stack_fold_pblendd_ymm(<8 x i32> %a0, <8 x i32> %a1) {449; CHECK-LABEL: stack_fold_pblendd_ymm:450; CHECK: # %bb.0:451; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill452; CHECK-NEXT: #APP453; CHECK-NEXT: nop454; CHECK-NEXT: #NO_APP455; CHECK-NEXT: vpblendd $7, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload456; CHECK-NEXT: # ymm0 = mem[0,1,2],ymm0[3,4,5,6,7]457; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0458; CHECK-NEXT: retq459 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()460 %2 = shufflevector <8 x i32> %a0, <8 x i32> %a1, <8 x i32> <i32 8, i32 9, i32 10, i32 3, i32 4, i32 5, i32 6, i32 7>461 ; add forces execution domain462 %3 = add <8 x i32> %2, <i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>463 ret <8 x i32> %3464}465 466define <32 x i8> @stack_fold_pblendvb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> %c) {467; CHECK-LABEL: stack_fold_pblendvb:468; CHECK: # %bb.0:469; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill470; CHECK-NEXT: #APP471; CHECK-NEXT: nop472; CHECK-NEXT: #NO_APP473; CHECK-NEXT: vpblendvb %ymm0, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload474; CHECK-NEXT: retq475 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()476 %2 = call <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8> %a1, <32 x i8> %c, <32 x i8> %a0)477 ret <32 x i8> %2478}479declare <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8>, <32 x i8>, <32 x i8>) nounwind readnone480 481define <16 x i16> @stack_fold_pblendw(<16 x i16> %a0, <16 x i16> %a1) {482; CHECK-LABEL: stack_fold_pblendw:483; CHECK: # %bb.0:484; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill485; CHECK-NEXT: #APP486; CHECK-NEXT: nop487; CHECK-NEXT: #NO_APP488; CHECK-NEXT: vpblendw $7, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload489; CHECK-NEXT: # ymm0 = mem[0,1,2],ymm0[3,4,5,6,7],mem[8,9,10],ymm0[11,12,13,14,15]490; CHECK-NEXT: retq491 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()492 %2 = shufflevector <16 x i16> %a0, <16 x i16> %a1, <16 x i32> <i32 16, i32 17, i32 18, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 11, i32 12, i32 13, i32 14, i32 15>493 ret <16 x i16> %2494}495 496define <16 x i8> @stack_fold_pbroadcastb(<16 x i8> %a0) {497; CHECK-LABEL: stack_fold_pbroadcastb:498; CHECK: # %bb.0:499; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill500; CHECK-NEXT: #APP501; CHECK-NEXT: nop502; CHECK-NEXT: #NO_APP503; CHECK-NEXT: vpbroadcastb {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload504; CHECK-NEXT: retq505 %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},~{flags}"()506 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <16 x i32> zeroinitializer507 ret <16 x i8> %2508}509 510define <32 x i8> @stack_fold_pbroadcastb_ymm(<16 x i8> %a0) {511; CHECK-LABEL: stack_fold_pbroadcastb_ymm:512; CHECK: # %bb.0:513; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill514; CHECK-NEXT: #APP515; CHECK-NEXT: nop516; CHECK-NEXT: #NO_APP517; CHECK-NEXT: vpbroadcastb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload518; CHECK-NEXT: retq519 %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},~{flags}"()520 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <32 x i32> zeroinitializer521 ret <32 x i8> %2522}523 524define <4 x i32> @stack_fold_pbroadcastd(<4 x i32> %a0) {525; CHECK-LABEL: stack_fold_pbroadcastd:526; CHECK: # %bb.0:527; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill528; CHECK-NEXT: #APP529; CHECK-NEXT: nop530; CHECK-NEXT: #NO_APP531; CHECK-NEXT: vpbroadcastd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload532; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0533; CHECK-NEXT: retq534 %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},~{flags}"()535 %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <4 x i32> zeroinitializer536 ; add forces execution domain537 %3 = add <4 x i32> %2, <i32 2, i32 1, i32 1, i32 1>538 ret <4 x i32> %3539}540 541define <8 x i32> @stack_fold_pbroadcastd_ymm(<4 x i32> %a0) {542; CHECK-LABEL: stack_fold_pbroadcastd_ymm:543; CHECK: # %bb.0:544; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill545; CHECK-NEXT: #APP546; CHECK-NEXT: nop547; CHECK-NEXT: #NO_APP548; CHECK-NEXT: vpbroadcastd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload549; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0550; CHECK-NEXT: retq551 %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},~{flags}"()552 %2 = shufflevector <4 x i32> %a0, <4 x i32> undef, <8 x i32> zeroinitializer553 ; add forces execution domain554 %3 = add <8 x i32> %2, <i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>555 ret <8 x i32> %3556}557 558define <2 x i64> @stack_fold_pbroadcastq(<2 x i64> %a0) {559; CHECK-LABEL: stack_fold_pbroadcastq:560; CHECK: # %bb.0:561; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill562; CHECK-NEXT: #APP563; CHECK-NEXT: nop564; CHECK-NEXT: #NO_APP565; CHECK-NEXT: vpbroadcastq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload566; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0567; CHECK-NEXT: retq568 %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},~{flags}"()569 %2 = shufflevector <2 x i64> %a0, <2 x i64> undef, <2 x i32> zeroinitializer570 ; add forces execution domain571 %3 = add <2 x i64> %2, <i64 2, i64 1>572 ret <2 x i64> %3573}574 575define <4 x i64> @stack_fold_pbroadcastq_ymm(<2 x i64> %a0) {576; CHECK-LABEL: stack_fold_pbroadcastq_ymm:577; CHECK: # %bb.0:578; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill579; CHECK-NEXT: #APP580; CHECK-NEXT: nop581; CHECK-NEXT: #NO_APP582; CHECK-NEXT: vpbroadcastq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload583; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0584; CHECK-NEXT: retq585 %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},~{flags}"()586 %2 = shufflevector <2 x i64> %a0, <2 x i64> undef, <4 x i32> zeroinitializer587 ; add forces execution domain588 %3 = add <4 x i64> %2, <i64 2, i64 1, i64 1, i64 1>589 ret <4 x i64> %3590}591 592define <8 x i16> @stack_fold_pbroadcastw(<8 x i16> %a0) {593; CHECK-LABEL: stack_fold_pbroadcastw:594; CHECK: # %bb.0:595; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill596; CHECK-NEXT: #APP597; CHECK-NEXT: nop598; CHECK-NEXT: #NO_APP599; CHECK-NEXT: vpbroadcastw {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload600; CHECK-NEXT: retq601 %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},~{flags}"()602 %2 = shufflevector <8 x i16> %a0, <8 x i16> undef, <8 x i32> zeroinitializer603 ret <8 x i16> %2604}605 606define <16 x i16> @stack_fold_pbroadcastw_ymm(<8 x i16> %a0) {607; CHECK-LABEL: stack_fold_pbroadcastw_ymm:608; CHECK: # %bb.0:609; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill610; CHECK-NEXT: #APP611; CHECK-NEXT: nop612; CHECK-NEXT: #NO_APP613; CHECK-NEXT: vpbroadcastw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload614; CHECK-NEXT: retq615 %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},~{flags}"()616 %2 = shufflevector <8 x i16> %a0, <8 x i16> undef, <16 x i32> zeroinitializer617 ret <16 x i16> %2618}619 620define <32 x i8> @stack_fold_pcmpeqb(<32 x i8> %a0, <32 x i8> %a1) {621; CHECK-LABEL: stack_fold_pcmpeqb: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: vpcmpeqb {{[-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},~{flags}"()630 %2 = icmp eq <32 x i8> %a0, %a1631 %3 = sext <32 x i1> %2 to <32 x i8>632 ret <32 x i8> %3633}634 635define <8 x i32> @stack_fold_pcmpeqd(<8 x i32> %a0, <8 x i32> %a1) {636; CHECK-LABEL: stack_fold_pcmpeqd:637; CHECK: # %bb.0:638; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill639; CHECK-NEXT: #APP640; CHECK-NEXT: nop641; CHECK-NEXT: #NO_APP642; CHECK-NEXT: vpcmpeqd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload643; CHECK-NEXT: retq644 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()645 %2 = icmp eq <8 x i32> %a0, %a1646 %3 = sext <8 x i1> %2 to <8 x i32>647 ret <8 x i32> %3648}649 650define <4 x i64> @stack_fold_pcmpeqq(<4 x i64> %a0, <4 x i64> %a1) {651; CHECK-LABEL: stack_fold_pcmpeqq:652; CHECK: # %bb.0:653; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill654; CHECK-NEXT: #APP655; CHECK-NEXT: nop656; CHECK-NEXT: #NO_APP657; CHECK-NEXT: vpcmpeqq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload658; CHECK-NEXT: retq659 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()660 %2 = icmp eq <4 x i64> %a0, %a1661 %3 = sext <4 x i1> %2 to <4 x i64>662 ret <4 x i64> %3663}664 665define <16 x i16> @stack_fold_pcmpeqw(<16 x i16> %a0, <16 x i16> %a1) {666; CHECK-LABEL: stack_fold_pcmpeqw:667; CHECK: # %bb.0:668; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill669; CHECK-NEXT: #APP670; CHECK-NEXT: nop671; CHECK-NEXT: #NO_APP672; CHECK-NEXT: vpcmpeqw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload673; CHECK-NEXT: retq674 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()675 %2 = icmp eq <16 x i16> %a0, %a1676 %3 = sext <16 x i1> %2 to <16 x i16>677 ret <16 x i16> %3678}679 680define <32 x i8> @stack_fold_pcmpgtb(<32 x i8> %a0, <32 x i8> %a1) {681; CHECK-LABEL: stack_fold_pcmpgtb:682; CHECK: # %bb.0:683; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill684; CHECK-NEXT: #APP685; CHECK-NEXT: nop686; CHECK-NEXT: #NO_APP687; CHECK-NEXT: vpcmpgtb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload688; CHECK-NEXT: retq689 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()690 %2 = icmp sgt <32 x i8> %a0, %a1691 %3 = sext <32 x i1> %2 to <32 x i8>692 ret <32 x i8> %3693}694 695define <8 x i32> @stack_fold_pcmpgtd(<8 x i32> %a0, <8 x i32> %a1) {696; CHECK-LABEL: stack_fold_pcmpgtd:697; CHECK: # %bb.0:698; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill699; CHECK-NEXT: #APP700; CHECK-NEXT: nop701; CHECK-NEXT: #NO_APP702; CHECK-NEXT: vpcmpgtd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload703; CHECK-NEXT: retq704 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()705 %2 = icmp sgt <8 x i32> %a0, %a1706 %3 = sext <8 x i1> %2 to <8 x i32>707 ret <8 x i32> %3708}709 710define <4 x i64> @stack_fold_pcmpgtq(<4 x i64> %a0, <4 x i64> %a1) {711; CHECK-LABEL: stack_fold_pcmpgtq:712; CHECK: # %bb.0:713; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill714; CHECK-NEXT: #APP715; CHECK-NEXT: nop716; CHECK-NEXT: #NO_APP717; CHECK-NEXT: vpcmpgtq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload718; CHECK-NEXT: retq719 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()720 %2 = icmp sgt <4 x i64> %a0, %a1721 %3 = sext <4 x i1> %2 to <4 x i64>722 ret <4 x i64> %3723}724 725define <16 x i16> @stack_fold_pcmpgtw(<16 x i16> %a0, <16 x i16> %a1) {726; CHECK-LABEL: stack_fold_pcmpgtw:727; CHECK: # %bb.0:728; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill729; CHECK-NEXT: #APP730; CHECK-NEXT: nop731; CHECK-NEXT: #NO_APP732; CHECK-NEXT: vpcmpgtw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload733; CHECK-NEXT: retq734 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()735 %2 = icmp sgt <16 x i16> %a0, %a1736 %3 = sext <16 x i1> %2 to <16 x i16>737 ret <16 x i16> %3738}739 740define <8 x i32> @stack_fold_perm2i128(<8 x i32> %a0, <8 x i32> %a1) {741; CHECK-LABEL: stack_fold_perm2i128:742; CHECK: # %bb.0:743; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill744; CHECK-NEXT: #APP745; CHECK-NEXT: nop746; CHECK-NEXT: #NO_APP747; CHECK-NEXT: vperm2i128 $33, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload748; CHECK-NEXT: # ymm0 = ymm0[2,3],mem[0,1]749; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0750; CHECK-NEXT: retq751 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()752 %2 = shufflevector <8 x i32> %a0, <8 x i32> %a1, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>753 ; add forces execution domain754 %3 = add <8 x i32> %2, <i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>755 ret <8 x i32> %3756}757 758define <8 x i32> @stack_fold_permd(<8 x i32> %a0, <8 x i32> %a1) {759; CHECK-LABEL: stack_fold_permd:760; CHECK: # %bb.0:761; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill762; CHECK-NEXT: #APP763; CHECK-NEXT: nop764; CHECK-NEXT: #NO_APP765; CHECK-NEXT: vpermd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload766; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0767; CHECK-NEXT: retq768 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()769 %2 = call <8 x i32> @llvm.x86.avx2.permd(<8 x i32> %a1, <8 x i32> %a0)770 ; add forces execution domain771 %3 = add <8 x i32> %2, <i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>772 ret <8 x i32> %3773}774declare <8 x i32> @llvm.x86.avx2.permd(<8 x i32>, <8 x i32>) nounwind readonly775 776define <4 x double> @stack_fold_permpd(<4 x double> %a0) {777; CHECK-LABEL: stack_fold_permpd:778; CHECK: # %bb.0:779; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill780; CHECK-NEXT: #APP781; CHECK-NEXT: nop782; CHECK-NEXT: #NO_APP783; CHECK-NEXT: vpermpd $235, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload784; CHECK-NEXT: # ymm0 = mem[3,2,2,3]785; CHECK-NEXT: vxorpd %xmm1, %xmm1, %xmm1786; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0787; CHECK-NEXT: retq788 %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},~{flags}"()789 %2 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 3, i32 2, i32 2, i32 3>790 ; fadd forces execution domain791 %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>792 ret <4 x double> %3793}794 795define <8 x float> @stack_fold_permps(<8 x i32> %a0, <8 x float> %a1) {796; CHECK-LABEL: stack_fold_permps:797; CHECK: # %bb.0:798; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill799; CHECK-NEXT: #APP800; CHECK-NEXT: nop801; CHECK-NEXT: #NO_APP802; CHECK-NEXT: vpermps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload803; CHECK-NEXT: retq804 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()805 %2 = call <8 x float> @llvm.x86.avx2.permps(<8 x float> %a1, <8 x i32> %a0)806 ret <8 x float> %2807}808declare <8 x float> @llvm.x86.avx2.permps(<8 x float>, <8 x i32>) nounwind readonly809 810define <4 x i64> @stack_fold_permq(<4 x i64> %a0) {811; CHECK-LABEL: stack_fold_permq:812; CHECK: # %bb.0:813; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill814; CHECK-NEXT: #APP815; CHECK-NEXT: nop816; CHECK-NEXT: #NO_APP817; CHECK-NEXT: vpermq $235, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload818; CHECK-NEXT: # ymm0 = mem[3,2,2,3]819; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0820; CHECK-NEXT: retq821 %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},~{flags}"()822 %2 = shufflevector <4 x i64> %a0, <4 x i64> undef, <4 x i32> <i32 3, i32 2, i32 2, i32 3>823 ; add forces execution domain824 %3 = add <4 x i64> %2, <i64 2, i64 1, i64 1, i64 1>825 ret <4 x i64> %3826}827 828define <8 x i32> @stack_fold_phaddd(<8 x i32> %a0, <8 x i32> %a1) {829; CHECK-LABEL: stack_fold_phaddd:830; CHECK: # %bb.0:831; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill832; CHECK-NEXT: #APP833; CHECK-NEXT: nop834; CHECK-NEXT: #NO_APP835; CHECK-NEXT: vphaddd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload836; CHECK-NEXT: retq837 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()838 %2 = call <8 x i32> @llvm.x86.avx2.phadd.d(<8 x i32> %a0, <8 x i32> %a1)839 ret <8 x i32> %2840}841declare <8 x i32> @llvm.x86.avx2.phadd.d(<8 x i32>, <8 x i32>) nounwind readnone842 843define <16 x i16> @stack_fold_phaddsw(<16 x i16> %a0, <16 x i16> %a1) {844; CHECK-LABEL: stack_fold_phaddsw:845; CHECK: # %bb.0:846; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill847; CHECK-NEXT: #APP848; CHECK-NEXT: nop849; CHECK-NEXT: #NO_APP850; CHECK-NEXT: vphaddsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload851; CHECK-NEXT: retq852 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()853 %2 = call <16 x i16> @llvm.x86.avx2.phadd.sw(<16 x i16> %a0, <16 x i16> %a1)854 ret <16 x i16> %2855}856declare <16 x i16> @llvm.x86.avx2.phadd.sw(<16 x i16>, <16 x i16>) nounwind readnone857 858define <16 x i16> @stack_fold_phaddw(<16 x i16> %a0, <16 x i16> %a1) {859; CHECK-LABEL: stack_fold_phaddw:860; CHECK: # %bb.0:861; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill862; CHECK-NEXT: #APP863; CHECK-NEXT: nop864; CHECK-NEXT: #NO_APP865; CHECK-NEXT: vphaddw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload866; CHECK-NEXT: retq867 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()868 %2 = call <16 x i16> @llvm.x86.avx2.phadd.w(<16 x i16> %a0, <16 x i16> %a1)869 ret <16 x i16> %2870}871declare <16 x i16> @llvm.x86.avx2.phadd.w(<16 x i16>, <16 x i16>) nounwind readnone872 873define <8 x i32> @stack_fold_phsubd(<8 x i32> %a0, <8 x i32> %a1) {874; CHECK-LABEL: stack_fold_phsubd:875; CHECK: # %bb.0:876; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill877; CHECK-NEXT: #APP878; CHECK-NEXT: nop879; CHECK-NEXT: #NO_APP880; CHECK-NEXT: vphsubd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload881; CHECK-NEXT: retq882 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()883 %2 = call <8 x i32> @llvm.x86.avx2.phsub.d(<8 x i32> %a0, <8 x i32> %a1)884 ret <8 x i32> %2885}886declare <8 x i32> @llvm.x86.avx2.phsub.d(<8 x i32>, <8 x i32>) nounwind readnone887 888define <16 x i16> @stack_fold_phsubsw(<16 x i16> %a0, <16 x i16> %a1) {889; CHECK-LABEL: stack_fold_phsubsw:890; CHECK: # %bb.0:891; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill892; CHECK-NEXT: #APP893; CHECK-NEXT: nop894; CHECK-NEXT: #NO_APP895; CHECK-NEXT: vphsubsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload896; CHECK-NEXT: retq897 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()898 %2 = call <16 x i16> @llvm.x86.avx2.phsub.sw(<16 x i16> %a0, <16 x i16> %a1)899 ret <16 x i16> %2900}901declare <16 x i16> @llvm.x86.avx2.phsub.sw(<16 x i16>, <16 x i16>) nounwind readnone902 903define <16 x i16> @stack_fold_phsubw(<16 x i16> %a0, <16 x i16> %a1) {904; CHECK-LABEL: stack_fold_phsubw:905; CHECK: # %bb.0:906; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill907; CHECK-NEXT: #APP908; CHECK-NEXT: nop909; CHECK-NEXT: #NO_APP910; CHECK-NEXT: vphsubw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload911; CHECK-NEXT: retq912 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()913 %2 = call <16 x i16> @llvm.x86.avx2.phsub.w(<16 x i16> %a0, <16 x i16> %a1)914 ret <16 x i16> %2915}916declare <16 x i16> @llvm.x86.avx2.phsub.w(<16 x i16>, <16 x i16>) nounwind readnone917 918define <16 x i16> @stack_fold_pmaddubsw(<32 x i8> %a0, <32 x i8> %a1) {919; CHECK-LABEL: stack_fold_pmaddubsw:920; CHECK: # %bb.0:921; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill922; CHECK-NEXT: #APP923; CHECK-NEXT: nop924; CHECK-NEXT: #NO_APP925; CHECK-NEXT: vpmaddubsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload926; CHECK-NEXT: retq927 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()928 %2 = call <16 x i16> @llvm.x86.avx2.pmadd.ub.sw(<32 x i8> %a0, <32 x i8> %a1)929 ret <16 x i16> %2930}931declare <16 x i16> @llvm.x86.avx2.pmadd.ub.sw(<32 x i8>, <32 x i8>) nounwind readnone932 933define <8 x i32> @stack_fold_pmaddwd(<16 x i16> %a0, <16 x i16> %a1) {934; CHECK-LABEL: stack_fold_pmaddwd:935; CHECK: # %bb.0:936; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill937; CHECK-NEXT: #APP938; CHECK-NEXT: nop939; CHECK-NEXT: #NO_APP940; CHECK-NEXT: vpmaddwd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload941; CHECK-NEXT: retq942 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()943 %2 = call <8 x i32> @llvm.x86.avx2.pmadd.wd(<16 x i16> %a0, <16 x i16> %a1)944 ret <8 x i32> %2945}946declare <8 x i32> @llvm.x86.avx2.pmadd.wd(<16 x i16>, <16 x i16>) nounwind readnone947 948define <32 x i8> @stack_fold_pmaxsb(<32 x i8> %a0, <32 x i8> %a1) {949; CHECK-LABEL: stack_fold_pmaxsb:950; CHECK: # %bb.0:951; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill952; CHECK-NEXT: #APP953; CHECK-NEXT: nop954; CHECK-NEXT: #NO_APP955; CHECK-NEXT: vpmaxsb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload956; CHECK-NEXT: retq957 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()958 %2 = icmp sgt <32 x i8> %a0, %a1959 %3 = select <32 x i1> %2, <32 x i8> %a0, <32 x i8> %a1960 ret <32 x i8> %3961}962 963define <8 x i32> @stack_fold_pmaxsd(<8 x i32> %a0, <8 x i32> %a1) {964; CHECK-LABEL: stack_fold_pmaxsd: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: vpmaxsd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload971; CHECK-NEXT: retq972 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()973 %2 = icmp sgt <8 x i32> %a0, %a1974 %3 = select <8 x i1> %2, <8 x i32> %a0, <8 x i32> %a1975 ret <8 x i32> %3976}977 978define <16 x i16> @stack_fold_pmaxsw(<16 x i16> %a0, <16 x i16> %a1) {979; CHECK-LABEL: stack_fold_pmaxsw:980; CHECK: # %bb.0:981; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill982; CHECK-NEXT: #APP983; CHECK-NEXT: nop984; CHECK-NEXT: #NO_APP985; CHECK-NEXT: vpmaxsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload986; CHECK-NEXT: retq987 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()988 %2 = icmp sgt <16 x i16> %a0, %a1989 %3 = select <16 x i1> %2, <16 x i16> %a0, <16 x i16> %a1990 ret <16 x i16> %3991}992 993define <32 x i8> @stack_fold_pmaxub(<32 x i8> %a0, <32 x i8> %a1) {994; CHECK-LABEL: stack_fold_pmaxub:995; CHECK: # %bb.0:996; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill997; CHECK-NEXT: #APP998; CHECK-NEXT: nop999; CHECK-NEXT: #NO_APP1000; CHECK-NEXT: vpmaxub {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1001; CHECK-NEXT: retq1002 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1003 %2 = icmp ugt <32 x i8> %a0, %a11004 %3 = select <32 x i1> %2, <32 x i8> %a0, <32 x i8> %a11005 ret <32 x i8> %31006}1007 1008define <8 x i32> @stack_fold_pmaxud(<8 x i32> %a0, <8 x i32> %a1) {1009; CHECK-LABEL: stack_fold_pmaxud:1010; CHECK: # %bb.0:1011; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1012; CHECK-NEXT: #APP1013; CHECK-NEXT: nop1014; CHECK-NEXT: #NO_APP1015; CHECK-NEXT: vpmaxud {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1016; CHECK-NEXT: retq1017 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1018 %2 = icmp ugt <8 x i32> %a0, %a11019 %3 = select <8 x i1> %2, <8 x i32> %a0, <8 x i32> %a11020 ret <8 x i32> %31021}1022 1023define <16 x i16> @stack_fold_pmaxuw(<16 x i16> %a0, <16 x i16> %a1) {1024; CHECK-LABEL: stack_fold_pmaxuw:1025; CHECK: # %bb.0:1026; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1027; CHECK-NEXT: #APP1028; CHECK-NEXT: nop1029; CHECK-NEXT: #NO_APP1030; CHECK-NEXT: vpmaxuw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1031; CHECK-NEXT: retq1032 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1033 %2 = icmp ugt <16 x i16> %a0, %a11034 %3 = select <16 x i1> %2, <16 x i16> %a0, <16 x i16> %a11035 ret <16 x i16> %31036}1037 1038define <32 x i8> @stack_fold_pminsb(<32 x i8> %a0, <32 x i8> %a1) {1039; CHECK-LABEL: stack_fold_pminsb:1040; CHECK: # %bb.0:1041; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1042; CHECK-NEXT: #APP1043; CHECK-NEXT: nop1044; CHECK-NEXT: #NO_APP1045; CHECK-NEXT: vpminsb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1046; CHECK-NEXT: retq1047 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1048 %2 = icmp slt <32 x i8> %a0, %a11049 %3 = select <32 x i1> %2, <32 x i8> %a0, <32 x i8> %a11050 ret <32 x i8> %31051}1052 1053define <8 x i32> @stack_fold_pminsd(<8 x i32> %a0, <8 x i32> %a1) {1054; CHECK-LABEL: stack_fold_pminsd:1055; CHECK: # %bb.0:1056; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1057; CHECK-NEXT: #APP1058; CHECK-NEXT: nop1059; CHECK-NEXT: #NO_APP1060; CHECK-NEXT: vpminsd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1061; CHECK-NEXT: retq1062 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1063 %2 = icmp slt <8 x i32> %a0, %a11064 %3 = select <8 x i1> %2, <8 x i32> %a0, <8 x i32> %a11065 ret <8 x i32> %31066}1067 1068define <16 x i16> @stack_fold_pminsw(<16 x i16> %a0, <16 x i16> %a1) {1069; CHECK-LABEL: stack_fold_pminsw:1070; CHECK: # %bb.0:1071; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1072; CHECK-NEXT: #APP1073; CHECK-NEXT: nop1074; CHECK-NEXT: #NO_APP1075; CHECK-NEXT: vpminsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1076; CHECK-NEXT: retq1077 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1078 %2 = icmp slt <16 x i16> %a0, %a11079 %3 = select <16 x i1> %2, <16 x i16> %a0, <16 x i16> %a11080 ret <16 x i16> %31081}1082 1083define <32 x i8> @stack_fold_pminub(<32 x i8> %a0, <32 x i8> %a1) {1084; CHECK-LABEL: stack_fold_pminub:1085; CHECK: # %bb.0:1086; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1087; CHECK-NEXT: #APP1088; CHECK-NEXT: nop1089; CHECK-NEXT: #NO_APP1090; CHECK-NEXT: vpminub {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1091; CHECK-NEXT: retq1092 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1093 %2 = icmp ult <32 x i8> %a0, %a11094 %3 = select <32 x i1> %2, <32 x i8> %a0, <32 x i8> %a11095 ret <32 x i8> %31096}1097 1098define <8 x i32> @stack_fold_pminud(<8 x i32> %a0, <8 x i32> %a1) {1099; CHECK-LABEL: stack_fold_pminud:1100; CHECK: # %bb.0:1101; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1102; CHECK-NEXT: #APP1103; CHECK-NEXT: nop1104; CHECK-NEXT: #NO_APP1105; CHECK-NEXT: vpminud {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1106; CHECK-NEXT: retq1107 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1108 %2 = icmp ult <8 x i32> %a0, %a11109 %3 = select <8 x i1> %2, <8 x i32> %a0, <8 x i32> %a11110 ret <8 x i32> %31111}1112 1113define <16 x i16> @stack_fold_pminuw(<16 x i16> %a0, <16 x i16> %a1) {1114; CHECK-LABEL: stack_fold_pminuw:1115; CHECK: # %bb.0:1116; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1117; CHECK-NEXT: #APP1118; CHECK-NEXT: nop1119; CHECK-NEXT: #NO_APP1120; CHECK-NEXT: vpminuw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1121; CHECK-NEXT: retq1122 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1123 %2 = icmp ult <16 x i16> %a0, %a11124 %3 = select <16 x i1> %2, <16 x i16> %a0, <16 x i16> %a11125 ret <16 x i16> %31126}1127 1128define <8 x i32> @stack_fold_pmovsxbd(<16 x i8> %a0) {1129; CHECK-LABEL: stack_fold_pmovsxbd:1130; CHECK: # %bb.0:1131; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1132; CHECK-NEXT: #APP1133; CHECK-NEXT: nop1134; CHECK-NEXT: #NO_APP1135; CHECK-NEXT: vpmovsxbd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1136; CHECK-NEXT: retq1137 %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},~{flags}"()1138 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1139 %3 = sext <8 x i8> %2 to <8 x i32>1140 ret <8 x i32> %31141}1142 1143define <4 x i64> @stack_fold_pmovsxbq(<16 x i8> %a0) {1144; CHECK-LABEL: stack_fold_pmovsxbq:1145; CHECK: # %bb.0:1146; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1147; CHECK-NEXT: #APP1148; CHECK-NEXT: nop1149; CHECK-NEXT: #NO_APP1150; CHECK-NEXT: vpmovsxbq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1151; CHECK-NEXT: retq1152 %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},~{flags}"()1153 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1154 %3 = sext <4 x i8> %2 to <4 x i64>1155 ret <4 x i64> %31156}1157 1158define <16 x i16> @stack_fold_pmovsxbw(<16 x i8> %a0) {1159; CHECK-LABEL: stack_fold_pmovsxbw:1160; CHECK: # %bb.0:1161; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1162; CHECK-NEXT: #APP1163; CHECK-NEXT: nop1164; CHECK-NEXT: #NO_APP1165; CHECK-NEXT: vpmovsxbw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1166; CHECK-NEXT: retq1167 %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},~{flags}"()1168 %2 = sext <16 x i8> %a0 to <16 x i16>1169 ret <16 x i16> %21170}1171 1172define <4 x i64> @stack_fold_pmovsxdq(<4 x i32> %a0) {1173; CHECK-LABEL: stack_fold_pmovsxdq:1174; CHECK: # %bb.0:1175; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1176; CHECK-NEXT: #APP1177; CHECK-NEXT: nop1178; CHECK-NEXT: #NO_APP1179; CHECK-NEXT: vpmovsxdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1180; CHECK-NEXT: retq1181 %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},~{flags}"()1182 %2 = sext <4 x i32> %a0 to <4 x i64>1183 ret <4 x i64> %21184}1185 1186define <8 x i32> @stack_fold_pmovsxwd(<8 x i16> %a0) {1187; CHECK-LABEL: stack_fold_pmovsxwd:1188; CHECK: # %bb.0:1189; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1190; CHECK-NEXT: #APP1191; CHECK-NEXT: nop1192; CHECK-NEXT: #NO_APP1193; CHECK-NEXT: vpmovsxwd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1194; CHECK-NEXT: retq1195 %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},~{flags}"()1196 %2 = sext <8 x i16> %a0 to <8 x i32>1197 ret <8 x i32> %21198}1199 1200define <4 x i64> @stack_fold_pmovsxwq(<8 x i16> %a0) {1201; CHECK-LABEL: stack_fold_pmovsxwq:1202; CHECK: # %bb.0:1203; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1204; CHECK-NEXT: #APP1205; CHECK-NEXT: nop1206; CHECK-NEXT: #NO_APP1207; CHECK-NEXT: vpmovsxwq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1208; CHECK-NEXT: retq1209 %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},~{flags}"()1210 %2 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1211 %3 = sext <4 x i16> %2 to <4 x i64>1212 ret <4 x i64> %31213}1214 1215define <8 x i32> @stack_fold_pmovzxbd(<16 x i8> %a0) {1216; CHECK-LABEL: stack_fold_pmovzxbd:1217; CHECK: # %bb.0:1218; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1219; CHECK-NEXT: #APP1220; CHECK-NEXT: nop1221; CHECK-NEXT: #NO_APP1222; CHECK-NEXT: vpmovzxbd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1223; CHECK-NEXT: # ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero1224; CHECK-NEXT: retq1225 %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},~{flags}"()1226 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1227 %3 = zext <8 x i8> %2 to <8 x i32>1228 ret <8 x i32> %31229}1230 1231define <4 x i64> @stack_fold_pmovzxbq(<16 x i8> %a0) {1232; CHECK-LABEL: stack_fold_pmovzxbq:1233; CHECK: # %bb.0:1234; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1235; CHECK-NEXT: #APP1236; CHECK-NEXT: nop1237; CHECK-NEXT: #NO_APP1238; CHECK-NEXT: vpmovzxbq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1239; CHECK-NEXT: # ymm0 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero1240; CHECK-NEXT: retq1241 %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},~{flags}"()1242 %2 = shufflevector <16 x i8> %a0, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1243 %3 = zext <4 x i8> %2 to <4 x i64>1244 ret <4 x i64> %31245}1246 1247define <16 x i16> @stack_fold_pmovzxbw(<16 x i8> %a0) {1248; CHECK-LABEL: stack_fold_pmovzxbw:1249; CHECK: # %bb.0:1250; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1251; CHECK-NEXT: #APP1252; CHECK-NEXT: nop1253; CHECK-NEXT: #NO_APP1254; CHECK-NEXT: vpmovzxbw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1255; CHECK-NEXT: # ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero1256; CHECK-NEXT: retq1257 %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},~{flags}"()1258 %2 = zext <16 x i8> %a0 to <16 x i16>1259 ret <16 x i16> %21260}1261 1262define <4 x i64> @stack_fold_pmovzxdq(<4 x i32> %a0) {1263; CHECK-LABEL: stack_fold_pmovzxdq:1264; CHECK: # %bb.0:1265; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1266; CHECK-NEXT: #APP1267; CHECK-NEXT: nop1268; CHECK-NEXT: #NO_APP1269; CHECK-NEXT: vpmovzxdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1270; CHECK-NEXT: # ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero1271; CHECK-NEXT: retq1272 %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},~{flags}"()1273 %2 = zext <4 x i32> %a0 to <4 x i64>1274 ret <4 x i64> %21275}1276 1277define <8 x i32> @stack_fold_pmovzxwd(<8 x i16> %a0) {1278; CHECK-LABEL: stack_fold_pmovzxwd:1279; CHECK: # %bb.0:1280; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1281; CHECK-NEXT: #APP1282; CHECK-NEXT: nop1283; CHECK-NEXT: #NO_APP1284; CHECK-NEXT: vpmovzxwd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1285; CHECK-NEXT: # ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero1286; CHECK-NEXT: retq1287 %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},~{flags}"()1288 %2 = zext <8 x i16> %a0 to <8 x i32>1289 ret <8 x i32> %21290}1291 1292define <4 x i64> @stack_fold_pmovzxwq(<8 x i16> %a0) {1293; CHECK-LABEL: stack_fold_pmovzxwq:1294; CHECK: # %bb.0:1295; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1296; CHECK-NEXT: #APP1297; CHECK-NEXT: nop1298; CHECK-NEXT: #NO_APP1299; CHECK-NEXT: vpmovzxwq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 16-byte Folded Reload1300; CHECK-NEXT: # ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero1301; CHECK-NEXT: retq1302 %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},~{flags}"()1303 %2 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1304 %3 = zext <4 x i16> %2 to <4 x i64>1305 ret <4 x i64> %31306}1307 1308define <4 x i64> @stack_fold_pmuldq(<8 x i32> %a0, <8 x i32> %a1) {1309; CHECK-LABEL: stack_fold_pmuldq:1310; CHECK: # %bb.0:1311; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1312; CHECK-NEXT: #APP1313; CHECK-NEXT: nop1314; CHECK-NEXT: #NO_APP1315; CHECK-NEXT: vpmuldq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1316; CHECK-NEXT: retq1317 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1318 %2 = bitcast <8 x i32> %a0 to <4 x i64>1319 %3 = bitcast <8 x i32> %a1 to <4 x i64>1320 %4 = shl <4 x i64> %2, <i64 32, i64 32, i64 32, i64 32>1321 %5 = ashr <4 x i64> %4, <i64 32, i64 32, i64 32, i64 32>1322 %6 = shl <4 x i64> %3, <i64 32, i64 32, i64 32, i64 32>1323 %7 = ashr <4 x i64> %6, <i64 32, i64 32, i64 32, i64 32>1324 %8 = mul <4 x i64> %5, %71325 ret <4 x i64> %81326}1327 1328define <16 x i16> @stack_fold_pmulhrsw(<16 x i16> %a0, <16 x i16> %a1) {1329; CHECK-LABEL: stack_fold_pmulhrsw:1330; CHECK: # %bb.0:1331; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1332; CHECK-NEXT: #APP1333; CHECK-NEXT: nop1334; CHECK-NEXT: #NO_APP1335; CHECK-NEXT: vpmulhrsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1336; CHECK-NEXT: retq1337 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1338 %2 = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> %a0, <16 x i16> %a1)1339 ret <16 x i16> %21340}1341declare <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16>, <16 x i16>) nounwind readnone1342 1343define <16 x i16> @stack_fold_pmulhuw(<16 x i16> %a0, <16 x i16> %a1) {1344; CHECK-LABEL: stack_fold_pmulhuw:1345; CHECK: # %bb.0:1346; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1347; CHECK-NEXT: #APP1348; CHECK-NEXT: nop1349; CHECK-NEXT: #NO_APP1350; CHECK-NEXT: vpmulhuw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-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},~{flags}"()1353 %2 = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<16 x i16> %a0, <16 x i16> %a1)1354 ret <16 x i16> %21355}1356declare <16 x i16> @llvm.x86.avx2.pmulhu.w(<16 x i16>, <16 x i16>) nounwind readnone1357 1358define <16 x i16> @stack_fold_pmulhw(<16 x i16> %a0, <16 x i16> %a1) {1359; CHECK-LABEL: stack_fold_pmulhw: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: vpmulhw {{[-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},~{flags}"()1368 %2 = call <16 x i16> @llvm.x86.avx2.pmulh.w(<16 x i16> %a0, <16 x i16> %a1)1369 ret <16 x i16> %21370}1371declare <16 x i16> @llvm.x86.avx2.pmulh.w(<16 x i16>, <16 x i16>) nounwind readnone1372 1373define <8 x i32> @stack_fold_pmulld(<8 x i32> %a0, <8 x i32> %a1) {1374; CHECK-LABEL: stack_fold_pmulld: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: vpmulld {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1381; CHECK-NEXT: retq1382 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1383 %2 = mul <8 x i32> %a0, %a11384 ret <8 x i32> %21385}1386 1387define <16 x i16> @stack_fold_pmullw(<16 x i16> %a0, <16 x i16> %a1) {1388; CHECK-LABEL: stack_fold_pmullw:1389; CHECK: # %bb.0:1390; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1391; CHECK-NEXT: #APP1392; CHECK-NEXT: nop1393; CHECK-NEXT: #NO_APP1394; CHECK-NEXT: vpmullw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1395; CHECK-NEXT: retq1396 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1397 %2 = mul <16 x i16> %a0, %a11398 ret <16 x i16> %21399}1400 1401define <4 x i64> @stack_fold_pmuludq(<8 x i32> %a0, <8 x i32> %a1) {1402; CHECK-LABEL: stack_fold_pmuludq:1403; CHECK: # %bb.0:1404; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1405; CHECK-NEXT: #APP1406; CHECK-NEXT: nop1407; CHECK-NEXT: #NO_APP1408; CHECK-NEXT: vpmuludq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1409; CHECK-NEXT: retq1410 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1411 %2 = bitcast <8 x i32> %a0 to <4 x i64>1412 %3 = bitcast <8 x i32> %a1 to <4 x i64>1413 %4 = and <4 x i64> %2, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>1414 %5 = and <4 x i64> %3, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>1415 %6 = mul <4 x i64> %4, %51416 ret <4 x i64> %61417}1418 1419define <32 x i8> @stack_fold_por(<32 x i8> %a0, <32 x i8> %a1) {1420; CHECK-LABEL: stack_fold_por:1421; CHECK: # %bb.0:1422; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1423; CHECK-NEXT: #APP1424; CHECK-NEXT: nop1425; CHECK-NEXT: #NO_APP1426; CHECK-NEXT: vpor {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1427; CHECK-NEXT: vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01428; CHECK-NEXT: retq1429 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1430 %2 = or <32 x i8> %a0, %a11431 ; add forces execution domain1432 %3 = add <32 x i8> %2, <i8 2, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>1433 ret <32 x i8> %31434}1435 1436define <4 x i64> @stack_fold_psadbw(<32 x i8> %a0, <32 x i8> %a1) {1437; CHECK-LABEL: stack_fold_psadbw:1438; CHECK: # %bb.0:1439; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1440; CHECK-NEXT: #APP1441; CHECK-NEXT: nop1442; CHECK-NEXT: #NO_APP1443; CHECK-NEXT: vpsadbw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1444; CHECK-NEXT: retq1445 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1446 %2 = call <4 x i64> @llvm.x86.avx2.psad.bw(<32 x i8> %a0, <32 x i8> %a1)1447 ret <4 x i64> %21448}1449declare <4 x i64> @llvm.x86.avx2.psad.bw(<32 x i8>, <32 x i8>) nounwind readnone1450 1451define <32 x i8> @stack_fold_pshufb(<32 x i8> %a0, <32 x i8> %a1) {1452; CHECK-LABEL: stack_fold_pshufb:1453; CHECK: # %bb.0:1454; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1455; CHECK-NEXT: #APP1456; CHECK-NEXT: nop1457; CHECK-NEXT: #NO_APP1458; CHECK-NEXT: vpshufb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1459; CHECK-NEXT: retq1460 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1461 %2 = call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %a0, <32 x i8> %a1)1462 ret <32 x i8> %21463}1464declare <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8>, <32 x i8>) nounwind readnone1465 1466define <8 x i32> @stack_fold_pshufd(<8 x i32> %a0) {1467; CHECK-LABEL: stack_fold_pshufd:1468; CHECK: # %bb.0:1469; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1470; CHECK-NEXT: #APP1471; CHECK-NEXT: nop1472; CHECK-NEXT: #NO_APP1473; CHECK-NEXT: vpshufd $27, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload1474; CHECK-NEXT: # ymm0 = mem[3,2,1,0,7,6,5,4]1475; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01476; CHECK-NEXT: retq1477 %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},~{flags}"()1478 %2 = shufflevector <8 x i32> %a0, <8 x i32> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1479 ; add forces execution domain1480 %3 = add <8 x i32> %2, <i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>1481 ret <8 x i32> %31482}1483 1484define <16 x i16> @stack_fold_vpshufhw(<16 x i16> %a0) {1485; CHECK-LABEL: stack_fold_vpshufhw:1486; CHECK: # %bb.0:1487; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1488; CHECK-NEXT: #APP1489; CHECK-NEXT: nop1490; CHECK-NEXT: #NO_APP1491; CHECK-NEXT: vpshufhw $27, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload1492; CHECK-NEXT: # ymm0 = mem[0,1,2,3,7,6,5,4,8,9,10,11,15,14,13,12]1493; CHECK-NEXT: retq1494 %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},~{flags}"()1495 %2 = shufflevector <16 x i16> %a0, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 5, i32 4, i32 8, i32 9, i32 10, i32 11, i32 15, i32 14, i32 13, i32 12>1496 ret <16 x i16> %21497}1498 1499define <16 x i16> @stack_fold_vpshuflw(<16 x i16> %a0) {1500; CHECK-LABEL: stack_fold_vpshuflw:1501; CHECK: # %bb.0:1502; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1503; CHECK-NEXT: #APP1504; CHECK-NEXT: nop1505; CHECK-NEXT: #NO_APP1506; CHECK-NEXT: vpshuflw $27, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload1507; CHECK-NEXT: # ymm0 = mem[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]1508; CHECK-NEXT: retq1509 %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},~{flags}"()1510 %2 = shufflevector <16 x i16> %a0, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 9, i32 8, i32 12, i32 13, i32 14, i32 15>1511 ret <16 x i16> %21512}1513 1514define <32 x i8> @stack_fold_psignb(<32 x i8> %a0, <32 x i8> %a1) {1515; CHECK-LABEL: stack_fold_psignb:1516; CHECK: # %bb.0:1517; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1518; CHECK-NEXT: #APP1519; CHECK-NEXT: nop1520; CHECK-NEXT: #NO_APP1521; CHECK-NEXT: vpsignb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1522; CHECK-NEXT: retq1523 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1524 %2 = call <32 x i8> @llvm.x86.avx2.psign.b(<32 x i8> %a0, <32 x i8> %a1)1525 ret <32 x i8> %21526}1527declare <32 x i8> @llvm.x86.avx2.psign.b(<32 x i8>, <32 x i8>) nounwind readnone1528 1529define <8 x i32> @stack_fold_psignd(<8 x i32> %a0, <8 x i32> %a1) {1530; CHECK-LABEL: stack_fold_psignd:1531; CHECK: # %bb.0:1532; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1533; CHECK-NEXT: #APP1534; CHECK-NEXT: nop1535; CHECK-NEXT: #NO_APP1536; CHECK-NEXT: vpsignd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1537; CHECK-NEXT: retq1538 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1539 %2 = call <8 x i32> @llvm.x86.avx2.psign.d(<8 x i32> %a0, <8 x i32> %a1)1540 ret <8 x i32> %21541}1542declare <8 x i32> @llvm.x86.avx2.psign.d(<8 x i32>, <8 x i32>) nounwind readnone1543 1544define <16 x i16> @stack_fold_psignw(<16 x i16> %a0, <16 x i16> %a1) {1545; CHECK-LABEL: stack_fold_psignw:1546; CHECK: # %bb.0:1547; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1548; CHECK-NEXT: #APP1549; CHECK-NEXT: nop1550; CHECK-NEXT: #NO_APP1551; CHECK-NEXT: vpsignw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1552; CHECK-NEXT: retq1553 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1554 %2 = call <16 x i16> @llvm.x86.avx2.psign.w(<16 x i16> %a0, <16 x i16> %a1)1555 ret <16 x i16> %21556}1557declare <16 x i16> @llvm.x86.avx2.psign.w(<16 x i16>, <16 x i16>) nounwind readnone1558 1559define <8 x i32> @stack_fold_pslld(<8 x i32> %a0, <4 x i32> %a1) {1560; CHECK-LABEL: stack_fold_pslld:1561; CHECK: # %bb.0:1562; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1563; CHECK-NEXT: #APP1564; CHECK-NEXT: nop1565; CHECK-NEXT: #NO_APP1566; CHECK-NEXT: vpslld {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1567; CHECK-NEXT: retq1568 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1569 %2 = call <8 x i32> @llvm.x86.avx2.psll.d(<8 x i32> %a0, <4 x i32> %a1)1570 ret <8 x i32> %21571}1572declare <8 x i32> @llvm.x86.avx2.psll.d(<8 x i32>, <4 x i32>) nounwind readnone1573 1574define <4 x i64> @stack_fold_psllq(<4 x i64> %a0, <2 x i64> %a1) {1575; CHECK-LABEL: stack_fold_psllq:1576; CHECK: # %bb.0:1577; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1578; CHECK-NEXT: #APP1579; CHECK-NEXT: nop1580; CHECK-NEXT: #NO_APP1581; CHECK-NEXT: vpsllq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1582; CHECK-NEXT: retq1583 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1584 %2 = call <4 x i64> @llvm.x86.avx2.psll.q(<4 x i64> %a0, <2 x i64> %a1)1585 ret <4 x i64> %21586}1587declare <4 x i64> @llvm.x86.avx2.psll.q(<4 x i64>, <2 x i64>) nounwind readnone1588 1589define <4 x i32> @stack_fold_psllvd(<4 x i32> %a0, <4 x i32> %a1) {1590; CHECK-LABEL: stack_fold_psllvd:1591; CHECK: # %bb.0:1592; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1593; CHECK-NEXT: #APP1594; CHECK-NEXT: nop1595; CHECK-NEXT: #NO_APP1596; CHECK-NEXT: vpsllvd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1597; CHECK-NEXT: retq1598 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1599 %2 = call <4 x i32> @llvm.x86.avx2.psllv.d(<4 x i32> %a0, <4 x i32> %a1)1600 ret <4 x i32> %21601}1602declare <4 x i32> @llvm.x86.avx2.psllv.d(<4 x i32>, <4 x i32>) nounwind readnone1603 1604define <8 x i32> @stack_fold_psllvd_ymm(<8 x i32> %a0, <8 x i32> %a1) {1605; CHECK-LABEL: stack_fold_psllvd_ymm:1606; CHECK: # %bb.0:1607; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1608; CHECK-NEXT: #APP1609; CHECK-NEXT: nop1610; CHECK-NEXT: #NO_APP1611; CHECK-NEXT: vpsllvd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1612; CHECK-NEXT: retq1613 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1614 %2 = call <8 x i32> @llvm.x86.avx2.psllv.d.256(<8 x i32> %a0, <8 x i32> %a1)1615 ret <8 x i32> %21616}1617declare <8 x i32> @llvm.x86.avx2.psllv.d.256(<8 x i32>, <8 x i32>) nounwind readnone1618 1619define <2 x i64> @stack_fold_psllvq(<2 x i64> %a0, <2 x i64> %a1) {1620; CHECK-LABEL: stack_fold_psllvq:1621; CHECK: # %bb.0:1622; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1623; CHECK-NEXT: #APP1624; CHECK-NEXT: nop1625; CHECK-NEXT: #NO_APP1626; CHECK-NEXT: vpsllvq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1627; CHECK-NEXT: retq1628 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1629 %2 = call <2 x i64> @llvm.x86.avx2.psllv.q(<2 x i64> %a0, <2 x i64> %a1)1630 ret <2 x i64> %21631}1632declare <2 x i64> @llvm.x86.avx2.psllv.q(<2 x i64>, <2 x i64>) nounwind readnone1633 1634define <4 x i64> @stack_fold_psllvq_ymm(<4 x i64> %a0, <4 x i64> %a1) {1635; CHECK-LABEL: stack_fold_psllvq_ymm:1636; CHECK: # %bb.0:1637; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1638; CHECK-NEXT: #APP1639; CHECK-NEXT: nop1640; CHECK-NEXT: #NO_APP1641; CHECK-NEXT: vpsllvq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1642; CHECK-NEXT: retq1643 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1644 %2 = call <4 x i64> @llvm.x86.avx2.psllv.q.256(<4 x i64> %a0, <4 x i64> %a1)1645 ret <4 x i64> %21646}1647declare <4 x i64> @llvm.x86.avx2.psllv.q.256(<4 x i64>, <4 x i64>) nounwind readnone1648 1649define <16 x i16> @stack_fold_psllw(<16 x i16> %a0, <8 x i16> %a1) {1650; CHECK-LABEL: stack_fold_psllw:1651; CHECK: # %bb.0:1652; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1653; CHECK-NEXT: #APP1654; CHECK-NEXT: nop1655; CHECK-NEXT: #NO_APP1656; CHECK-NEXT: vpsllw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1657; CHECK-NEXT: retq1658 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1659 %2 = call <16 x i16> @llvm.x86.avx2.psll.w(<16 x i16> %a0, <8 x i16> %a1)1660 ret <16 x i16> %21661}1662declare <16 x i16> @llvm.x86.avx2.psll.w(<16 x i16>, <8 x i16>) nounwind readnone1663 1664define <8 x i32> @stack_fold_psrad(<8 x i32> %a0, <4 x i32> %a1) {1665; CHECK-LABEL: stack_fold_psrad:1666; CHECK: # %bb.0:1667; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1668; CHECK-NEXT: #APP1669; CHECK-NEXT: nop1670; CHECK-NEXT: #NO_APP1671; CHECK-NEXT: vpsrad {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1672; CHECK-NEXT: retq1673 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1674 %2 = call <8 x i32> @llvm.x86.avx2.psra.d(<8 x i32> %a0, <4 x i32> %a1)1675 ret <8 x i32> %21676}1677declare <8 x i32> @llvm.x86.avx2.psra.d(<8 x i32>, <4 x i32>) nounwind readnone1678 1679define <4 x i32> @stack_fold_psravd(<4 x i32> %a0, <4 x i32> %a1) {1680; CHECK-LABEL: stack_fold_psravd:1681; CHECK: # %bb.0:1682; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1683; CHECK-NEXT: #APP1684; CHECK-NEXT: nop1685; CHECK-NEXT: #NO_APP1686; CHECK-NEXT: vpsravd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1687; CHECK-NEXT: retq1688 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1689 %2 = call <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32> %a0, <4 x i32> %a1)1690 ret <4 x i32> %21691}1692declare <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32>, <4 x i32>) nounwind readnone1693 1694define <8 x i32> @stack_fold_psravd_ymm(<8 x i32> %a0, <8 x i32> %a1) {1695; CHECK-LABEL: stack_fold_psravd_ymm:1696; CHECK: # %bb.0:1697; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1698; CHECK-NEXT: #APP1699; CHECK-NEXT: nop1700; CHECK-NEXT: #NO_APP1701; CHECK-NEXT: vpsravd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1702; CHECK-NEXT: retq1703 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1704 %2 = call <8 x i32> @llvm.x86.avx2.psrav.d.256(<8 x i32> %a0, <8 x i32> %a1)1705 ret <8 x i32> %21706}1707declare <8 x i32> @llvm.x86.avx2.psrav.d.256(<8 x i32>, <8 x i32>) nounwind readnone1708 1709define <16 x i16> @stack_fold_psraw(<16 x i16> %a0, <8 x i16> %a1) {1710; CHECK-LABEL: stack_fold_psraw:1711; CHECK: # %bb.0:1712; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1713; CHECK-NEXT: #APP1714; CHECK-NEXT: nop1715; CHECK-NEXT: #NO_APP1716; CHECK-NEXT: vpsraw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1717; CHECK-NEXT: retq1718 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1719 %2 = call <16 x i16> @llvm.x86.avx2.psra.w(<16 x i16> %a0, <8 x i16> %a1)1720 ret <16 x i16> %21721}1722declare <16 x i16> @llvm.x86.avx2.psra.w(<16 x i16>, <8 x i16>) nounwind readnone1723 1724define <8 x i32> @stack_fold_psrld(<8 x i32> %a0, <4 x i32> %a1) {1725; CHECK-LABEL: stack_fold_psrld:1726; CHECK: # %bb.0:1727; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1728; CHECK-NEXT: #APP1729; CHECK-NEXT: nop1730; CHECK-NEXT: #NO_APP1731; CHECK-NEXT: vpsrld {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1732; CHECK-NEXT: retq1733 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1734 %2 = call <8 x i32> @llvm.x86.avx2.psrl.d(<8 x i32> %a0, <4 x i32> %a1)1735 ret <8 x i32> %21736}1737declare <8 x i32> @llvm.x86.avx2.psrl.d(<8 x i32>, <4 x i32>) nounwind readnone1738 1739define <4 x i64> @stack_fold_psrlq(<4 x i64> %a0, <2 x i64> %a1) {1740; CHECK-LABEL: stack_fold_psrlq:1741; CHECK: # %bb.0:1742; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1743; CHECK-NEXT: #APP1744; CHECK-NEXT: nop1745; CHECK-NEXT: #NO_APP1746; CHECK-NEXT: vpsrlq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1747; CHECK-NEXT: retq1748 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1749 %2 = call <4 x i64> @llvm.x86.avx2.psrl.q(<4 x i64> %a0, <2 x i64> %a1)1750 ret <4 x i64> %21751}1752declare <4 x i64> @llvm.x86.avx2.psrl.q(<4 x i64>, <2 x i64>) nounwind readnone1753 1754define <4 x i32> @stack_fold_psrlvd(<4 x i32> %a0, <4 x i32> %a1) {1755; CHECK-LABEL: stack_fold_psrlvd:1756; CHECK: # %bb.0:1757; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1758; CHECK-NEXT: #APP1759; CHECK-NEXT: nop1760; CHECK-NEXT: #NO_APP1761; CHECK-NEXT: vpsrlvd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1762; CHECK-NEXT: retq1763 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1764 %2 = call <4 x i32> @llvm.x86.avx2.psrlv.d(<4 x i32> %a0, <4 x i32> %a1)1765 ret <4 x i32> %21766}1767declare <4 x i32> @llvm.x86.avx2.psrlv.d(<4 x i32>, <4 x i32>) nounwind readnone1768 1769define <8 x i32> @stack_fold_psrlvd_ymm(<8 x i32> %a0, <8 x i32> %a1) {1770; CHECK-LABEL: stack_fold_psrlvd_ymm:1771; CHECK: # %bb.0:1772; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1773; CHECK-NEXT: #APP1774; CHECK-NEXT: nop1775; CHECK-NEXT: #NO_APP1776; CHECK-NEXT: vpsrlvd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1777; CHECK-NEXT: retq1778 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1779 %2 = call <8 x i32> @llvm.x86.avx2.psrlv.d.256(<8 x i32> %a0, <8 x i32> %a1)1780 ret <8 x i32> %21781}1782declare <8 x i32> @llvm.x86.avx2.psrlv.d.256(<8 x i32>, <8 x i32>) nounwind readnone1783 1784define <2 x i64> @stack_fold_psrlvq(<2 x i64> %a0, <2 x i64> %a1) {1785; CHECK-LABEL: stack_fold_psrlvq:1786; CHECK: # %bb.0:1787; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1788; CHECK-NEXT: #APP1789; CHECK-NEXT: nop1790; CHECK-NEXT: #NO_APP1791; CHECK-NEXT: vpsrlvq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1792; CHECK-NEXT: retq1793 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1794 %2 = call <2 x i64> @llvm.x86.avx2.psrlv.q(<2 x i64> %a0, <2 x i64> %a1)1795 ret <2 x i64> %21796}1797declare <2 x i64> @llvm.x86.avx2.psrlv.q(<2 x i64>, <2 x i64>) nounwind readnone1798 1799define <4 x i64> @stack_fold_psrlvq_ymm(<4 x i64> %a0, <4 x i64> %a1) {1800; CHECK-LABEL: stack_fold_psrlvq_ymm:1801; CHECK: # %bb.0:1802; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1803; CHECK-NEXT: #APP1804; CHECK-NEXT: nop1805; CHECK-NEXT: #NO_APP1806; CHECK-NEXT: vpsrlvq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1807; CHECK-NEXT: retq1808 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1809 %2 = call <4 x i64> @llvm.x86.avx2.psrlv.q.256(<4 x i64> %a0, <4 x i64> %a1)1810 ret <4 x i64> %21811}1812declare <4 x i64> @llvm.x86.avx2.psrlv.q.256(<4 x i64>, <4 x i64>) nounwind readnone1813 1814define <16 x i16> @stack_fold_psrlw(<16 x i16> %a0, <8 x i16> %a1) {1815; CHECK-LABEL: stack_fold_psrlw:1816; CHECK: # %bb.0:1817; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1818; CHECK-NEXT: #APP1819; CHECK-NEXT: nop1820; CHECK-NEXT: #NO_APP1821; CHECK-NEXT: vpsrlw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1822; CHECK-NEXT: retq1823 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1824 %2 = call <16 x i16> @llvm.x86.avx2.psrl.w(<16 x i16> %a0, <8 x i16> %a1)1825 ret <16 x i16> %21826}1827declare <16 x i16> @llvm.x86.avx2.psrl.w(<16 x i16>, <8 x i16>) nounwind readnone1828 1829define <32 x i8> @stack_fold_psubb(<32 x i8> %a0, <32 x i8> %a1) {1830; CHECK-LABEL: stack_fold_psubb:1831; CHECK: # %bb.0:1832; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1833; CHECK-NEXT: #APP1834; CHECK-NEXT: nop1835; CHECK-NEXT: #NO_APP1836; CHECK-NEXT: vpsubb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1837; CHECK-NEXT: retq1838 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1839 %2 = sub <32 x i8> %a0, %a11840 ret <32 x i8> %21841}1842 1843define <8 x i32> @stack_fold_psubd(<8 x i32> %a0, <8 x i32> %a1) {1844; CHECK-LABEL: stack_fold_psubd:1845; CHECK: # %bb.0:1846; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1847; CHECK-NEXT: #APP1848; CHECK-NEXT: nop1849; CHECK-NEXT: #NO_APP1850; CHECK-NEXT: vpsubd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1851; CHECK-NEXT: retq1852 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1853 %2 = sub <8 x i32> %a0, %a11854 ret <8 x i32> %21855}1856 1857define <4 x i64> @stack_fold_psubq(<4 x i64> %a0, <4 x i64> %a1) {1858; CHECK-LABEL: stack_fold_psubq:1859; CHECK: # %bb.0:1860; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1861; CHECK-NEXT: #APP1862; CHECK-NEXT: nop1863; CHECK-NEXT: #NO_APP1864; CHECK-NEXT: vpsubq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1865; CHECK-NEXT: retq1866 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1867 %2 = sub <4 x i64> %a0, %a11868 ret <4 x i64> %21869}1870 1871define <32 x i8> @stack_fold_psubsb(<32 x i8> %a0, <32 x i8> %a1) {1872; CHECK-LABEL: stack_fold_psubsb:1873; CHECK: # %bb.0:1874; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1875; CHECK-NEXT: #APP1876; CHECK-NEXT: nop1877; CHECK-NEXT: #NO_APP1878; CHECK-NEXT: vpsubsb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1879; CHECK-NEXT: retq1880 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1881 %2 = call <32 x i8> @llvm.ssub.sat.v32i8(<32 x i8> %a0, <32 x i8> %a1)1882 ret <32 x i8> %21883}1884declare <32 x i8> @llvm.ssub.sat.v32i8(<32 x i8>, <32 x i8>) nounwind readnone1885 1886define <16 x i16> @stack_fold_psubsw(<16 x i16> %a0, <16 x i16> %a1) {1887; CHECK-LABEL: stack_fold_psubsw:1888; CHECK: # %bb.0:1889; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1890; CHECK-NEXT: #APP1891; CHECK-NEXT: nop1892; CHECK-NEXT: #NO_APP1893; CHECK-NEXT: vpsubsw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1894; CHECK-NEXT: retq1895 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1896 %2 = call <16 x i16> @llvm.ssub.sat.v16i16(<16 x i16> %a0, <16 x i16> %a1)1897 ret <16 x i16> %21898}1899declare <16 x i16> @llvm.ssub.sat.v16i16(<16 x i16>, <16 x i16>) nounwind readnone1900 1901define <32 x i8> @stack_fold_psubusb(<32 x i8> %a0, <32 x i8> %a1) {1902; CHECK-LABEL: stack_fold_psubusb:1903; CHECK: # %bb.0:1904; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1905; CHECK-NEXT: #APP1906; CHECK-NEXT: nop1907; CHECK-NEXT: #NO_APP1908; CHECK-NEXT: vpsubusb {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1909; CHECK-NEXT: retq1910 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1911 %2 = call <32 x i8> @llvm.usub.sat.v32i8(<32 x i8> %a0, <32 x i8> %a1)1912 ret <32 x i8> %21913}1914declare <32 x i8> @llvm.usub.sat.v32i8(<32 x i8>, <32 x i8>) nounwind readnone1915 1916define <16 x i16> @stack_fold_psubusw(<16 x i16> %a0, <16 x i16> %a1) {1917; CHECK-LABEL: stack_fold_psubusw:1918; CHECK: # %bb.0:1919; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1920; CHECK-NEXT: #APP1921; CHECK-NEXT: nop1922; CHECK-NEXT: #NO_APP1923; CHECK-NEXT: vpsubusw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1924; CHECK-NEXT: retq1925 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1926 %2 = call <16 x i16> @llvm.usub.sat.v16i16(<16 x i16> %a0, <16 x i16> %a1)1927 ret <16 x i16> %21928}1929declare <16 x i16> @llvm.usub.sat.v16i16(<16 x i16>, <16 x i16>) nounwind readnone1930 1931define <16 x i16> @stack_fold_psubw(<16 x i16> %a0, <16 x i16> %a1) {1932; CHECK-LABEL: stack_fold_psubw:1933; CHECK: # %bb.0:1934; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1935; CHECK-NEXT: #APP1936; CHECK-NEXT: nop1937; CHECK-NEXT: #NO_APP1938; CHECK-NEXT: vpsubw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1939; CHECK-NEXT: retq1940 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1941 %2 = sub <16 x i16> %a0, %a11942 ret <16 x i16> %21943}1944 1945define <32 x i8> @stack_fold_punpckhbw(<32 x i8> %a0, <32 x i8> %a1) {1946; CHECK-LABEL: stack_fold_punpckhbw:1947; CHECK: # %bb.0:1948; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1949; CHECK-NEXT: #APP1950; CHECK-NEXT: nop1951; CHECK-NEXT: #NO_APP1952; CHECK-NEXT: vpunpckhbw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1953; CHECK-NEXT: # ymm0 = ymm0[8],mem[8],ymm0[9],mem[9],ymm0[10],mem[10],ymm0[11],mem[11],ymm0[12],mem[12],ymm0[13],mem[13],ymm0[14],mem[14],ymm0[15],mem[15],ymm0[24],mem[24],ymm0[25],mem[25],ymm0[26],mem[26],ymm0[27],mem[27],ymm0[28],mem[28],ymm0[29],mem[29],ymm0[30],mem[30],ymm0[31],mem[31]1954; CHECK-NEXT: retq1955 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1956 %2 = shufflevector <32 x i8> %a0, <32 x i8> %a1, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>1957 ret <32 x i8> %21958}1959 1960define <8 x i32> @stack_fold_punpckhdq(<8 x i32> %a0, <8 x i32> %a1) {1961; CHECK-LABEL: stack_fold_punpckhdq:1962; CHECK: # %bb.0:1963; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1964; CHECK-NEXT: #APP1965; CHECK-NEXT: nop1966; CHECK-NEXT: #NO_APP1967; CHECK-NEXT: vpunpckhdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1968; CHECK-NEXT: # ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1969; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01970; CHECK-NEXT: retq1971 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1972 %2 = shufflevector <8 x i32> %a0, <8 x i32> %a1, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1973 ; add forces execution domain1974 %3 = add <8 x i32> %2, <i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>1975 ret <8 x i32> %31976}1977 1978define <4 x i64> @stack_fold_punpckhqdq(<4 x i64> %a0, <4 x i64> %a1) {1979; CHECK-LABEL: stack_fold_punpckhqdq:1980; CHECK: # %bb.0:1981; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1982; CHECK-NEXT: #APP1983; CHECK-NEXT: nop1984; CHECK-NEXT: #NO_APP1985; CHECK-NEXT: vpunpckhqdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1986; CHECK-NEXT: # ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]1987; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01988; CHECK-NEXT: retq1989 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()1990 %2 = shufflevector <4 x i64> %a0, <4 x i64> %a1, <4 x i32> <i32 1, i32 5, i32 3, i32 7>1991 ; add forces execution domain1992 %3 = add <4 x i64> %2, <i64 2, i64 1, i64 1, i64 1>1993 ret <4 x i64> %31994}1995 1996define <16 x i16> @stack_fold_punpckhwd(<16 x i16> %a0, <16 x i16> %a1) {1997; CHECK-LABEL: stack_fold_punpckhwd:1998; CHECK: # %bb.0:1999; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2000; CHECK-NEXT: #APP2001; CHECK-NEXT: nop2002; CHECK-NEXT: #NO_APP2003; CHECK-NEXT: vpunpckhwd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2004; CHECK-NEXT: # ymm0 = ymm0[4],mem[4],ymm0[5],mem[5],ymm0[6],mem[6],ymm0[7],mem[7],ymm0[12],mem[12],ymm0[13],mem[13],ymm0[14],mem[14],ymm0[15],mem[15]2005; CHECK-NEXT: retq2006 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2007 %2 = shufflevector <16 x i16> %a0, <16 x i16> %a1, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>2008 ret <16 x i16> %22009}2010 2011define <32 x i8> @stack_fold_punpcklbw(<32 x i8> %a0, <32 x i8> %a1) {2012; CHECK-LABEL: stack_fold_punpcklbw:2013; CHECK: # %bb.0:2014; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2015; CHECK-NEXT: #APP2016; CHECK-NEXT: nop2017; CHECK-NEXT: #NO_APP2018; CHECK-NEXT: vpunpcklbw {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2019; CHECK-NEXT: # ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[2],mem[2],ymm0[3],mem[3],ymm0[4],mem[4],ymm0[5],mem[5],ymm0[6],mem[6],ymm0[7],mem[7],ymm0[16],mem[16],ymm0[17],mem[17],ymm0[18],mem[18],ymm0[19],mem[19],ymm0[20],mem[20],ymm0[21],mem[21],ymm0[22],mem[22],ymm0[23],mem[23]2020; CHECK-NEXT: retq2021 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2022 %2 = shufflevector <32 x i8> %a0, <32 x i8> %a1, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55>2023 ret <32 x i8> %22024}2025 2026define <8 x i32> @stack_fold_punpckldq(<8 x i32> %a0, <8 x i32> %a1) {2027; CHECK-LABEL: stack_fold_punpckldq:2028; CHECK: # %bb.0:2029; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2030; CHECK-NEXT: #APP2031; CHECK-NEXT: nop2032; CHECK-NEXT: #NO_APP2033; CHECK-NEXT: vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2034; CHECK-NEXT: # ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]2035; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02036; CHECK-NEXT: retq2037 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2038 %2 = shufflevector <8 x i32> %a0, <8 x i32> %a1, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>2039 ; add forces execution domain2040 %3 = add <8 x i32> %2, <i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>2041 ret <8 x i32> %32042}2043 2044define <4 x i64> @stack_fold_punpcklqdq(<4 x i64> %a0, <4 x i64> %a1) {2045; CHECK-LABEL: stack_fold_punpcklqdq:2046; CHECK: # %bb.0:2047; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2048; CHECK-NEXT: #APP2049; CHECK-NEXT: nop2050; CHECK-NEXT: #NO_APP2051; CHECK-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2052; CHECK-NEXT: # ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]2053; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02054; CHECK-NEXT: retq2055 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2056 %2 = shufflevector <4 x i64> %a0, <4 x i64> %a1, <4 x i32> <i32 0, i32 4, i32 2, i32 6>2057 ; add forces execution domain2058 %3 = add <4 x i64> %2, <i64 2, i64 1, i64 1, i64 1>2059 ret <4 x i64> %32060}2061 2062define <16 x i16> @stack_fold_punpcklwd(<16 x i16> %a0, <16 x i16> %a1) {2063; CHECK-LABEL: stack_fold_punpcklwd:2064; CHECK: # %bb.0:2065; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2066; CHECK-NEXT: #APP2067; CHECK-NEXT: nop2068; CHECK-NEXT: #NO_APP2069; CHECK-NEXT: vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2070; CHECK-NEXT: # ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[2],mem[2],ymm0[3],mem[3],ymm0[8],mem[8],ymm0[9],mem[9],ymm0[10],mem[10],ymm0[11],mem[11]2071; CHECK-NEXT: retq2072 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2073 %2 = shufflevector <16 x i16> %a0, <16 x i16> %a1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27>2074 ret <16 x i16> %22075}2076 2077define <32 x i8> @stack_fold_pxor(<32 x i8> %a0, <32 x i8> %a1) {2078; CHECK-LABEL: stack_fold_pxor:2079; CHECK: # %bb.0:2080; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2081; CHECK-NEXT: #APP2082; CHECK-NEXT: nop2083; CHECK-NEXT: #NO_APP2084; CHECK-NEXT: vpxor {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2085; CHECK-NEXT: vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02086; CHECK-NEXT: retq2087 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()2088 %2 = xor <32 x i8> %a0, %a12089 ; add forces execution domain2090 %3 = add <32 x i8> %2, <i8 2, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>2091 ret <32 x i8> %32092}2093