2320 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=+avx512fp16,+avx512vl < %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 <32 x half> @stack_fold_addph_zmm(<32 x half> %a0, <32 x half> %a1) {13; CHECK-LABEL: stack_fold_addph_zmm:14; CHECK: # %bb.0:15; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill16; CHECK-NEXT: #APP17; CHECK-NEXT: nop18; CHECK-NEXT: #NO_APP19; CHECK-NEXT: vaddph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload20; CHECK-NEXT: retq21 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()22 %2 = fadd <32 x half> %a0, %a123 ret <32 x half> %224}25 26define <32 x half> @stack_fold_addph_zmm_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {27; CHECK-LABEL: stack_fold_addph_zmm_k:28; CHECK: # %bb.0:29; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill30; CHECK-NEXT: #APP31; CHECK-NEXT: nop32; CHECK-NEXT: #NO_APP33; CHECK-NEXT: kmovd %edi, %k134; CHECK-NEXT: vmovaps (%rsi), %zmm235; CHECK-NEXT: vaddph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload36; CHECK-NEXT: vmovaps %zmm2, %zmm037; CHECK-NEXT: retq38 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()39 %2 = fadd <32 x half> %a0, %a140 %3 = bitcast i32 %mask to <32 x i1>41 %4 = load <32 x half>, ptr %passthru42 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %443 ret <32 x half> %544}45 46define <32 x half> @stack_fold_addph_zmm_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {47; CHECK-LABEL: stack_fold_addph_zmm_k_commuted:48; CHECK: # %bb.0:49; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill50; CHECK-NEXT: #APP51; CHECK-NEXT: nop52; CHECK-NEXT: #NO_APP53; CHECK-NEXT: kmovd %edi, %k154; CHECK-NEXT: vmovaps (%rsi), %zmm255; CHECK-NEXT: vaddph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload56; CHECK-NEXT: vmovaps %zmm2, %zmm057; CHECK-NEXT: retq58 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()59 %2 = fadd <32 x half> %a1, %a060 %3 = bitcast i32 %mask to <32 x i1>61 %4 = load <32 x half>, ptr %passthru62 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %463 ret <32 x half> %564}65 66define <32 x half> @stack_fold_addph_zmm_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) {67; CHECK-LABEL: stack_fold_addph_zmm_kz:68; CHECK: # %bb.0:69; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill70; CHECK-NEXT: #APP71; CHECK-NEXT: nop72; CHECK-NEXT: #NO_APP73; CHECK-NEXT: kmovd %edi, %k174; CHECK-NEXT: vaddph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload75; CHECK-NEXT: retq76 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()77 %2 = fadd <32 x half> %a1, %a078 %3 = bitcast i32 %mask to <32 x i1>79 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer80 ret <32 x half> %481}82 83define half @stack_fold_addsh(half %a0, half %a1) {84; CHECK-LABEL: stack_fold_addsh:85; CHECK: # %bb.0:86; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill87; CHECK-NEXT: #APP88; CHECK-NEXT: nop89; CHECK-NEXT: #NO_APP90; CHECK-NEXT: vaddsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload91; CHECK-NEXT: retq92 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()93 %2 = fadd half %a0, %a194 ret half %295}96 97define <8 x half> @stack_fold_addsh_int(<8 x half> %a0, <8 x half> %a1) {98; CHECK-LABEL: stack_fold_addsh_int:99; CHECK: # %bb.0:100; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill101; CHECK-NEXT: #APP102; CHECK-NEXT: nop103; CHECK-NEXT: #NO_APP104; CHECK-NEXT: vaddsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload105; CHECK-NEXT: retq106 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()107 %2 = extractelement <8 x half> %a0, i32 0108 %3 = extractelement <8 x half> %a1, i32 0109 %4 = fadd half %2, %3110 %5 = insertelement <8 x half> %a0, half %4, i32 0111 ret <8 x half> %5112}113 114define i32 @stack_fold_cmpph(<32 x half> %a0, <32 x half> %a1) {115; CHECK-LABEL: stack_fold_cmpph:116; CHECK: # %bb.0:117; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill118; CHECK-NEXT: #APP119; CHECK-NEXT: nop120; CHECK-NEXT: #NO_APP121; CHECK-NEXT: vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload122; CHECK-NEXT: kmovd %k0, %eax123; CHECK-NEXT: vzeroupper124; CHECK-NEXT: retq125 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()126 %res = call <32 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.512(<32 x half> %a0, <32 x half> %a1, i32 0, <32 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)127 %2 = bitcast <32 x i1> %res to i32128 ret i32 %2129}130declare <32 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.512(<32 x half>, <32 x half>, i32, <32 x i1>, i32)131 132define <32 x half> @stack_fold_cmpph_mask(<32 x half> %a0, <32 x half> %a1, ptr %a2, i32 %mask, <32 x half> %b0, <32 x half> %b1) {133; CHECK-LABEL: stack_fold_cmpph_mask:134; CHECK: # %bb.0:135; CHECK-NEXT: subq $136, %rsp136; CHECK-NEXT: .cfi_def_cfa_offset 144137; CHECK-NEXT: vmovups %zmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill138; CHECK-NEXT: vmovups %zmm2, (%rsp) # 64-byte Spill139; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill140; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill141; CHECK-NEXT: #APP142; CHECK-NEXT: nop143; CHECK-NEXT: #NO_APP144; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload145; CHECK-NEXT: vaddph (%rdi), %zmm0, %zmm0146; CHECK-NEXT: vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload147; CHECK-NEXT: kmovd %esi, %k1148; CHECK-NEXT: kandd %k0, %k1, %k1149; CHECK-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload150; CHECK-NEXT: vmovdqu16 (%rsp), %zmm0 {%k1} # 64-byte Folded Reload151; CHECK-NEXT: addq $136, %rsp152; CHECK-NEXT: .cfi_def_cfa_offset 8153; CHECK-NEXT: retq154 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()155 ; load and fadd are here to keep the operations below the side effecting block and to avoid folding the wrong load156 %2 = load <32 x half>, ptr %a2157 %3 = fadd <32 x half> %a1, %2158 %4 = bitcast i32 %mask to <32 x i1>159 %5 = call <32 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.512(<32 x half> %3, <32 x half> %a0, i32 0, <32 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)160 %6 = and <32 x i1> %4, %5161 %7 = select <32 x i1> %6, <32 x half> %b0, <32 x half> %b1162 ret <32 x half> %7163}164 165define <32 x half> @stack_fold_cmpph_mask_commuted(<32 x half> %a0, <32 x half> %a1, ptr %a2, i32 %mask, <32 x half> %b0, <32 x half> %b1) {166; CHECK-LABEL: stack_fold_cmpph_mask_commuted:167; CHECK: # %bb.0:168; CHECK-NEXT: subq $136, %rsp169; CHECK-NEXT: .cfi_def_cfa_offset 144170; CHECK-NEXT: vmovups %zmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill171; CHECK-NEXT: vmovups %zmm2, (%rsp) # 64-byte Spill172; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill173; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill174; CHECK-NEXT: #APP175; CHECK-NEXT: nop176; CHECK-NEXT: #NO_APP177; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload178; CHECK-NEXT: vaddph (%rdi), %zmm0, %zmm0179; CHECK-NEXT: vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload180; CHECK-NEXT: kmovd %esi, %k1181; CHECK-NEXT: kandd %k0, %k1, %k1182; CHECK-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload183; CHECK-NEXT: vmovdqu16 (%rsp), %zmm0 {%k1} # 64-byte Folded Reload184; CHECK-NEXT: addq $136, %rsp185; CHECK-NEXT: .cfi_def_cfa_offset 8186; CHECK-NEXT: retq187 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()188 ; load and fadd are here to keep the operations below the side effecting block and to avoid folding the wrong load189 %2 = load <32 x half>, ptr %a2190 %3 = fadd <32 x half> %a1, %2191 %4 = bitcast i32 %mask to <32 x i1>192 %5 = call <32 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.512(<32 x half> %a0, <32 x half> %3, i32 0, <32 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)193 %6 = and <32 x i1> %4, %5194 %7 = select <32 x i1> %6, <32 x half> %b0, <32 x half> %b1195 ret <32 x half> %7196}197 198define half @stack_fold_divsh(half %a0, half %a1) {199; CHECK-LABEL: stack_fold_divsh:200; CHECK: # %bb.0:201; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill202; CHECK-NEXT: #APP203; CHECK-NEXT: nop204; CHECK-NEXT: #NO_APP205; CHECK-NEXT: vdivsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload206; CHECK-NEXT: retq207 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()208 %2 = fdiv half %a0, %a1209 ret half %2210}211 212define <8 x half> @stack_fold_divsh_int(<8 x half> %a0, <8 x half> %a1) {213; CHECK-LABEL: stack_fold_divsh_int:214; CHECK: # %bb.0:215; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill216; CHECK-NEXT: #APP217; CHECK-NEXT: nop218; CHECK-NEXT: #NO_APP219; CHECK-NEXT: vdivsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload220; CHECK-NEXT: retq221 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()222 %2 = extractelement <8 x half> %a0, i32 0223 %3 = extractelement <8 x half> %a1, i32 0224 %4 = fdiv half %2, %3225 %5 = insertelement <8 x half> %a0, half %4, i32 0226 ret <8 x half> %5227}228 229define i32 @stack_fold_fpclassph(<32 x half> %a0) {230; CHECK-LABEL: stack_fold_fpclassph:231; CHECK: # %bb.0:232; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill233; CHECK-NEXT: #APP234; CHECK-NEXT: nop235; CHECK-NEXT: #NO_APP236; CHECK-NEXT: vfpclassphz $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 64-byte Folded Reload237; CHECK-NEXT: # k0 = isNegativeZero(mem)238; CHECK-NEXT: kmovd %k0, %eax239; CHECK-NEXT: vzeroupper240; CHECK-NEXT: retq241 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()242 %2 = call <32 x i1> @llvm.x86.avx512fp16.fpclass.ph.512(<32 x half> %a0, i32 4)243 %3 = bitcast <32 x i1> %2 to i32244 ret i32 %3245}246declare <32 x i1> @llvm.x86.avx512fp16.fpclass.ph.512(<32 x half>, i32)247 248define i32 @stack_fold_fpclassph_mask(<32 x half> %a0, ptr %p) {249; CHECK-LABEL: stack_fold_fpclassph_mask:250; CHECK: # %bb.0:251; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill252; CHECK-NEXT: #APP253; CHECK-NEXT: nop254; CHECK-NEXT: #NO_APP255; CHECK-NEXT: kmovd (%rdi), %k1256; CHECK-NEXT: vfpclassphz $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 {%k1} # 64-byte Folded Reload257; CHECK-NEXT: # k0 {%k1} = isNegativeZero(mem)258; CHECK-NEXT: kmovd %k0, %eax259; CHECK-NEXT: vzeroupper260; CHECK-NEXT: retq261 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()262 %2 = call <32 x i1> @llvm.x86.avx512fp16.fpclass.ph.512(<32 x half> %a0, i32 4)263 %mask = load <32 x i1>, ptr %p264 %3 = and <32 x i1> %2, %mask265 %4 = bitcast <32 x i1> %3 to i32266 ret i32 %4267}268 269define i8 @stack_fold_fpclasssh(<8 x half> %a0) {270; CHECK-LABEL: stack_fold_fpclasssh:271; CHECK: # %bb.0:272; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill273; CHECK-NEXT: #APP274; CHECK-NEXT: nop275; CHECK-NEXT: #NO_APP276; CHECK-NEXT: vfpclasssh $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 16-byte Folded Reload277; CHECK-NEXT: # k0 = isNegativeZero(mem)278; CHECK-NEXT: kmovd %k0, %eax279; CHECK-NEXT: # kill: def $al killed $al killed $eax280; CHECK-NEXT: retq281 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()282 %2 = call i8 @llvm.x86.avx512fp16.mask.fpclass.sh(<8 x half> %a0, i32 4, i8 -1)283 ret i8 %2284}285declare i8 @llvm.x86.avx512fp16.mask.fpclass.sh(<8 x half>, i32, i8)286 287define i8 @stack_fold_fpclasssh_mask(<8 x half> %a0, ptr %p) {288; CHECK-LABEL: stack_fold_fpclasssh_mask:289; CHECK: # %bb.0:290; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill291; CHECK-NEXT: #APP292; CHECK-NEXT: nop293; CHECK-NEXT: #NO_APP294; CHECK-NEXT: movzbl (%rdi), %eax295; CHECK-NEXT: kmovd %eax, %k1296; CHECK-NEXT: vfpclasssh $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 {%k1} # 16-byte Folded Reload297; CHECK-NEXT: # k0 {%k1} = isNegativeZero(mem)298; CHECK-NEXT: kmovd %k0, %eax299; CHECK-NEXT: # kill: def $al killed $al killed $eax300; CHECK-NEXT: retq301 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()302 %mask = load i8, ptr %p303 %2 = call i8 @llvm.x86.avx512fp16.mask.fpclass.sh(<8 x half> %a0, i32 4, i8 %mask)304 ret i8 %2305}306 307define <32 x half> @stack_fold_getexpph(<32 x half> %a0) {308; CHECK-LABEL: stack_fold_getexpph:309; CHECK: # %bb.0:310; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill311; CHECK-NEXT: #APP312; CHECK-NEXT: nop313; CHECK-NEXT: #NO_APP314; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload315; CHECK-NEXT: retq316 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()317 %2 = call <32 x half> @llvm.x86.avx512fp16.mask.getexp.ph.512(<32 x half> %a0, <32 x half> undef, i32 -1, i32 4)318 ret <32 x half> %2319}320declare <32 x half> @llvm.x86.avx512fp16.mask.getexp.ph.512(<32 x half>, <32 x half>, i32, i32)321 322define <32 x half> @stack_fold_getexpph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {323; CHECK-LABEL: stack_fold_getexpph_mask:324; CHECK: # %bb.0:325; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill326; CHECK-NEXT: kmovd %esi, %k1327; CHECK-NEXT: #APP328; CHECK-NEXT: nop329; CHECK-NEXT: #NO_APP330; CHECK-NEXT: vmovaps (%rdi), %zmm1331; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload332; CHECK-NEXT: vmovaps %zmm1, %zmm0333; CHECK-NEXT: retq334 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()335 %2 = load <32 x half>, ptr %passthru336 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.getexp.ph.512(<32 x half> %a0, <32 x half> %2, i32 %mask, i32 4)337 ret <32 x half> %3338}339 340define <32 x half> @stack_fold_getexpph_maskz(<32 x half> %a0, ptr %mask) {341; CHECK-LABEL: stack_fold_getexpph_maskz:342; CHECK: # %bb.0:343; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill344; CHECK-NEXT: #APP345; CHECK-NEXT: nop346; CHECK-NEXT: #NO_APP347; CHECK-NEXT: kmovd (%rdi), %k1348; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload349; CHECK-NEXT: retq350 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()351 %2 = load i32, ptr %mask352 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.getexp.ph.512(<32 x half> %a0, <32 x half> zeroinitializer, i32 %2, i32 4)353 ret <32 x half> %3354}355 356define <8 x half> @stack_fold_getexpsh(<8 x half> %a0, <8 x half> %a1) {357; CHECK-LABEL: stack_fold_getexpsh:358; CHECK: # %bb.0:359; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill360; CHECK-NEXT: #APP361; CHECK-NEXT: nop362; CHECK-NEXT: #NO_APP363; CHECK-NEXT: vgetexpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload364; CHECK-NEXT: retq365 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()366 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 4)367 ret <8 x half> %2368}369declare <8 x half> @llvm.x86.avx512fp16.mask.getexp.sh(<8 x half>, <8 x half>, <8 x half>, i8, i32)370 371define <8 x half> @stack_fold_getexpsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {372; CHECK-LABEL: stack_fold_getexpsh_mask:373; CHECK: # %bb.0:374; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill375; CHECK-NEXT: kmovd %esi, %k1376; CHECK-NEXT: #APP377; CHECK-NEXT: nop378; CHECK-NEXT: #NO_APP379; CHECK-NEXT: vmovaps (%rdi), %xmm2380; CHECK-NEXT: vgetexpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload381; CHECK-NEXT: vmovaps %xmm2, %xmm0382; 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},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()384 %2 = load <8 x half>, ptr %passthru385 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 4)386 ret <8 x half> %3387}388 389define <8 x half> @stack_fold_getexpsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {390; CHECK-LABEL: stack_fold_getexpsh_maskz:391; CHECK: # %bb.0:392; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill393; CHECK-NEXT: #APP394; CHECK-NEXT: nop395; CHECK-NEXT: #NO_APP396; CHECK-NEXT: movzbl (%rdi), %eax397; CHECK-NEXT: kmovd %eax, %k1398; CHECK-NEXT: vgetexpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-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},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()401 %2 = load i8, ptr %mask402 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2, i32 4)403 ret <8 x half> %3404}405 406define <32 x half> @stack_fold_getmantph(<32 x half> %a0) {407; CHECK-LABEL: stack_fold_getmantph:408; CHECK: # %bb.0:409; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill410; CHECK-NEXT: #APP411; CHECK-NEXT: nop412; CHECK-NEXT: #NO_APP413; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload414; CHECK-NEXT: retq415 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()416 %2 = call <32 x half> @llvm.x86.avx512fp16.mask.getmant.ph.512(<32 x half> %a0, i32 8, <32 x half> undef, i32 -1, i32 4)417 ret <32 x half> %2418}419declare <32 x half> @llvm.x86.avx512fp16.mask.getmant.ph.512(<32 x half>, i32, <32 x half>, i32, i32)420 421define <32 x half> @stack_fold_getmantph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {422; CHECK-LABEL: stack_fold_getmantph_mask:423; CHECK: # %bb.0:424; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill425; CHECK-NEXT: kmovd %esi, %k1426; CHECK-NEXT: #APP427; CHECK-NEXT: nop428; CHECK-NEXT: #NO_APP429; CHECK-NEXT: vmovaps (%rdi), %zmm1430; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload431; CHECK-NEXT: vmovaps %zmm1, %zmm0432; CHECK-NEXT: retq433 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()434 %2 = load <32 x half>, ptr %passthru435 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.getmant.ph.512(<32 x half> %a0, i32 8, <32 x half> %2, i32 %mask, i32 4)436 ret <32 x half> %3437}438 439define <32 x half> @stack_fold_getmantph_maskz(<32 x half> %a0, ptr %mask) {440; CHECK-LABEL: stack_fold_getmantph_maskz:441; CHECK: # %bb.0:442; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill443; CHECK-NEXT: #APP444; CHECK-NEXT: nop445; CHECK-NEXT: #NO_APP446; CHECK-NEXT: kmovd (%rdi), %k1447; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload448; CHECK-NEXT: retq449 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()450 %2 = load i32, ptr %mask451 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.getmant.ph.512(<32 x half> %a0, i32 8, <32 x half> zeroinitializer, i32 %2, i32 4)452 ret <32 x half> %3453}454 455define <8 x half> @stack_fold_getmantsh(<8 x half> %a0, <8 x half> %a1) {456; CHECK-LABEL: stack_fold_getmantsh:457; CHECK: # %bb.0:458; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill459; CHECK-NEXT: #APP460; CHECK-NEXT: nop461; CHECK-NEXT: #NO_APP462; CHECK-NEXT: vgetmantsh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload463; CHECK-NEXT: retq464 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()465 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 8, <8 x half> undef, i8 -1, i32 4)466 ret <8 x half> %2467}468declare <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half>, <8 x half>, i32, <8 x half>, i8, i32)469 470define <8 x half> @stack_fold_getmantsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {471; CHECK-LABEL: stack_fold_getmantsh_mask:472; CHECK: # %bb.0:473; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill474; CHECK-NEXT: kmovd %esi, %k1475; CHECK-NEXT: #APP476; CHECK-NEXT: nop477; CHECK-NEXT: #NO_APP478; CHECK-NEXT: vmovaps (%rdi), %xmm2479; CHECK-NEXT: vgetmantsh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload480; CHECK-NEXT: vmovaps %xmm2, %xmm0481; CHECK-NEXT: retq482 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()483 %2 = load <8 x half>, ptr %passthru484 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 8, <8 x half> %2, i8 %mask, i32 4)485 ret <8 x half> %3486}487 488define <8 x half> @stack_fold_getmantsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {489; CHECK-LABEL: stack_fold_getmantsh_maskz:490; CHECK: # %bb.0:491; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill492; CHECK-NEXT: #APP493; CHECK-NEXT: nop494; CHECK-NEXT: #NO_APP495; CHECK-NEXT: movzbl (%rdi), %eax496; CHECK-NEXT: kmovd %eax, %k1497; CHECK-NEXT: vgetmantsh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload498; CHECK-NEXT: retq499 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()500 %2 = load i8, ptr %mask501 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 8, <8 x half> zeroinitializer, i8 %2, i32 4)502 ret <8 x half> %3503}504 505define <32 x half> @stack_fold_maxph_zmm(<32 x half> %a0, <32 x half> %a1) {506; CHECK-LABEL: stack_fold_maxph_zmm:507; CHECK: # %bb.0:508; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill509; CHECK-NEXT: #APP510; CHECK-NEXT: nop511; CHECK-NEXT: #NO_APP512; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload513; CHECK-NEXT: retq514 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()515 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)516 ret <32 x half> %2517}518declare <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half>, <32 x half>, i32) nounwind readnone519 520define <32 x half> @stack_fold_maxph_zmm_commuted(<32 x half> %a0, <32 x half> %a1) {521; CHECK-LABEL: stack_fold_maxph_zmm_commuted:522; CHECK: # %bb.0:523; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill524; CHECK-NEXT: #APP525; CHECK-NEXT: nop526; CHECK-NEXT: #NO_APP527; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload528; CHECK-NEXT: vmaxph %zmm0, %zmm1, %zmm0529; CHECK-NEXT: retq530 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()531 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)532 ret <32 x half> %2533}534 535define <32 x half> @stack_fold_maxph_zmm_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {536; CHECK-LABEL: stack_fold_maxph_zmm_k:537; CHECK: # %bb.0:538; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill539; CHECK-NEXT: #APP540; CHECK-NEXT: nop541; CHECK-NEXT: #NO_APP542; CHECK-NEXT: kmovd %edi, %k1543; CHECK-NEXT: vmovaps (%rsi), %zmm2544; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload545; CHECK-NEXT: vmovaps %zmm2, %zmm0546; CHECK-NEXT: retq547 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()548 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)549 %3 = bitcast i32 %mask to <32 x i1>550 %4 = load <32 x half>, ptr %passthru551 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4552 ret <32 x half> %5553}554 555define <32 x half> @stack_fold_maxph_zmm_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {556; CHECK-LABEL: stack_fold_maxph_zmm_k_commuted:557; CHECK: # %bb.0:558; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill559; CHECK-NEXT: #APP560; CHECK-NEXT: nop561; CHECK-NEXT: #NO_APP562; CHECK-NEXT: kmovd %edi, %k1563; CHECK-NEXT: vmovaps (%rsi), %zmm2564; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload565; CHECK-NEXT: vmaxph %zmm0, %zmm1, %zmm2 {%k1}566; CHECK-NEXT: vmovaps %zmm2, %zmm0567; CHECK-NEXT: retq568 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()569 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)570 %3 = bitcast i32 %mask to <32 x i1>571 %4 = load <32 x half>, ptr %passthru572 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4573 ret <32 x half> %5574}575 576define <32 x half> @stack_fold_maxph_zmm_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) {577; CHECK-LABEL: stack_fold_maxph_zmm_kz:578; CHECK: # %bb.0:579; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill580; CHECK-NEXT: #APP581; CHECK-NEXT: nop582; CHECK-NEXT: #NO_APP583; CHECK-NEXT: kmovd %edi, %k1584; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload585; CHECK-NEXT: retq586 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()587 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)588 %3 = bitcast i32 %mask to <32 x i1>589 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer590 ret <32 x half> %4591}592 593define <32 x half> @stack_fold_maxph_zmm_kz_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask) {594; CHECK-LABEL: stack_fold_maxph_zmm_kz_commuted:595; CHECK: # %bb.0:596; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill597; CHECK-NEXT: #APP598; CHECK-NEXT: nop599; CHECK-NEXT: #NO_APP600; CHECK-NEXT: kmovd %edi, %k1601; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload602; CHECK-NEXT: vmaxph %zmm0, %zmm1, %zmm0 {%k1} {z}603; CHECK-NEXT: retq604 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()605 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)606 %3 = bitcast i32 %mask to <32 x i1>607 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer608 ret <32 x half> %4609}610 611define <32 x half> @stack_fold_maxph_zmm_commutable(<32 x half> %a0, <32 x half> %a1) #1 {612; CHECK-LABEL: stack_fold_maxph_zmm_commutable:613; CHECK: # %bb.0:614; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill615; CHECK-NEXT: #APP616; CHECK-NEXT: nop617; CHECK-NEXT: #NO_APP618; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload619; CHECK-NEXT: retq620 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()621 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)622 ret <32 x half> %2623}624 625define <32 x half> @stack_fold_maxph_zmm_commutable_commuted(<32 x half> %a0, <32 x half> %a1) #1 {626; CHECK-LABEL: stack_fold_maxph_zmm_commutable_commuted:627; CHECK: # %bb.0:628; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill629; CHECK-NEXT: #APP630; CHECK-NEXT: nop631; CHECK-NEXT: #NO_APP632; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload633; CHECK-NEXT: retq634 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()635 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)636 ret <32 x half> %2637}638 639define <32 x half> @stack_fold_maxph_zmm_commutable_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #1 {640; CHECK-LABEL: stack_fold_maxph_zmm_commutable_k:641; CHECK: # %bb.0:642; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill643; CHECK-NEXT: #APP644; CHECK-NEXT: nop645; CHECK-NEXT: #NO_APP646; CHECK-NEXT: kmovd %edi, %k1647; CHECK-NEXT: vmovaps (%rsi), %zmm2648; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload649; CHECK-NEXT: vmovaps %zmm2, %zmm0650; CHECK-NEXT: retq651 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()652 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)653 %3 = bitcast i32 %mask to <32 x i1>654 %4 = load <32 x half>, ptr %passthru655 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4656 ret <32 x half> %5657}658 659define <32 x half> @stack_fold_maxph_zmm_commutable_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #1 {660; CHECK-LABEL: stack_fold_maxph_zmm_commutable_k_commuted:661; CHECK: # %bb.0:662; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill663; CHECK-NEXT: #APP664; CHECK-NEXT: nop665; CHECK-NEXT: #NO_APP666; CHECK-NEXT: kmovd %edi, %k1667; CHECK-NEXT: vmovaps (%rsi), %zmm2668; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload669; CHECK-NEXT: vmovaps %zmm2, %zmm0670; CHECK-NEXT: retq671 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()672 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)673 %3 = bitcast i32 %mask to <32 x i1>674 %4 = load <32 x half>, ptr %passthru675 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4676 ret <32 x half> %5677}678 679define <32 x half> @stack_fold_maxph_zmm_commutable_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) #1 {680; CHECK-LABEL: stack_fold_maxph_zmm_commutable_kz:681; CHECK: # %bb.0:682; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill683; CHECK-NEXT: #APP684; CHECK-NEXT: nop685; CHECK-NEXT: #NO_APP686; CHECK-NEXT: kmovd %edi, %k1687; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-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},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()690 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)691 %3 = bitcast i32 %mask to <32 x i1>692 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer693 ret <32 x half> %4694}695 696define <32 x half> @stack_fold_maxph_zmm_commutable_kz_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask) #1 {697; CHECK-LABEL: stack_fold_maxph_zmm_commutable_kz_commuted:698; CHECK: # %bb.0:699; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill700; CHECK-NEXT: #APP701; CHECK-NEXT: nop702; CHECK-NEXT: #NO_APP703; CHECK-NEXT: kmovd %edi, %k1704; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload705; CHECK-NEXT: retq706 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()707 %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)708 %3 = bitcast i32 %mask to <32 x i1>709 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer710 ret <32 x half> %4711}712 713define half @stack_fold_maxsh(half %a0, half %a1) {714; CHECK-LABEL: stack_fold_maxsh:715; CHECK: # %bb.0:716; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill717; CHECK-NEXT: #APP718; CHECK-NEXT: nop719; CHECK-NEXT: #NO_APP720; CHECK-NEXT: vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload721; CHECK-NEXT: retq722 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()723 %2 = fcmp ogt half %a0, %a1724 %3 = select i1 %2, half %a0, half %a1725 ret half %3726}727 728define half @stack_fold_maxsh_commuted(half %a0, half %a1) {729; CHECK-LABEL: stack_fold_maxsh_commuted:730; CHECK: # %bb.0:731; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill732; CHECK-NEXT: #APP733; CHECK-NEXT: nop734; CHECK-NEXT: #NO_APP735; CHECK-NEXT: vmovsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload736; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero737; CHECK-NEXT: vmaxsh %xmm0, %xmm1, %xmm0738; CHECK-NEXT: retq739 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()740 %2 = fcmp ogt half %a1, %a0741 %3 = select i1 %2, half %a1, half %a0742 ret half %3743}744 745define half @stack_fold_maxsh_commutable(half %a0, half %a1) #1 {746; CHECK-LABEL: stack_fold_maxsh_commutable:747; CHECK: # %bb.0:748; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill749; CHECK-NEXT: #APP750; CHECK-NEXT: nop751; CHECK-NEXT: #NO_APP752; CHECK-NEXT: vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload753; CHECK-NEXT: retq754 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()755 %2 = fcmp ogt half %a0, %a1756 %3 = select i1 %2, half %a0, half %a1757 ret half %3758}759 760define half @stack_fold_maxsh_commutable_commuted(half %a0, half %a1) #1 {761; CHECK-LABEL: stack_fold_maxsh_commutable_commuted:762; CHECK: # %bb.0:763; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill764; CHECK-NEXT: #APP765; CHECK-NEXT: nop766; CHECK-NEXT: #NO_APP767; CHECK-NEXT: vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload768; CHECK-NEXT: retq769 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()770 %2 = fcmp ogt half %a1, %a0771 %3 = select i1 %2, half %a1, half %a0772 ret half %3773}774 775define <8 x half> @stack_fold_maxsh_int(<8 x half> %a0, <8 x half> %a1) {776; CHECK-LABEL: stack_fold_maxsh_int:777; CHECK: # %bb.0:778; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill779; CHECK-NEXT: #APP780; CHECK-NEXT: nop781; CHECK-NEXT: #NO_APP782; CHECK-NEXT: vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload783; CHECK-NEXT: retq784 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()785 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.max.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 4)786 ret <8 x half> %2787}788declare <8 x half> @llvm.x86.avx512fp16.mask.max.sh.round(<8 x half>, <8 x half>, <8 x half>, i8, i32)789 790define <8 x half> @stack_fold_maxsh_mask(<8 x half> %a0, <8 x half> %a1, i8 %mask, ptr %passthru) {791; CHECK-LABEL: stack_fold_maxsh_mask:792; CHECK: # %bb.0:793; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill794; CHECK-NEXT: kmovd %edi, %k1795; CHECK-NEXT: #APP796; CHECK-NEXT: nop797; CHECK-NEXT: #NO_APP798; CHECK-NEXT: vmovaps (%rsi), %xmm2799; CHECK-NEXT: vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload800; CHECK-NEXT: vmovaps %xmm2, %xmm0801; CHECK-NEXT: retq802 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()803 %2 = load <8 x half>, ptr %passthru804 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.max.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 4)805 ret <8 x half> %3806}807 808define <8 x half> @stack_fold_maxsh_maskz(<8 x half> %a0, <8 x half> %a1, i8 %mask) {809; CHECK-LABEL: stack_fold_maxsh_maskz:810; CHECK: # %bb.0:811; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill812; CHECK-NEXT: kmovd %edi, %k1813; CHECK-NEXT: #APP814; CHECK-NEXT: nop815; CHECK-NEXT: #NO_APP816; CHECK-NEXT: vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload817; CHECK-NEXT: retq818 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()819 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.max.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %mask, i32 4)820 ret <8 x half> %2821}822 823define <32 x half> @stack_fold_minph_zmm(<32 x half> %a0, <32 x half> %a1) {824; CHECK-LABEL: stack_fold_minph_zmm:825; CHECK: # %bb.0:826; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill827; CHECK-NEXT: #APP828; CHECK-NEXT: nop829; CHECK-NEXT: #NO_APP830; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload831; CHECK-NEXT: retq832 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()833 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)834 ret <32 x half> %2835}836declare <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half>, <32 x half>, i32) nounwind readnone837 838define <32 x half> @stack_fold_minph_zmm_commuted(<32 x half> %a0, <32 x half> %a1) {839; CHECK-LABEL: stack_fold_minph_zmm_commuted:840; CHECK: # %bb.0:841; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill842; CHECK-NEXT: #APP843; CHECK-NEXT: nop844; CHECK-NEXT: #NO_APP845; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload846; CHECK-NEXT: vminph %zmm0, %zmm1, %zmm0847; CHECK-NEXT: retq848 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()849 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)850 ret <32 x half> %2851}852 853define <32 x half> @stack_fold_minph_zmm_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {854; CHECK-LABEL: stack_fold_minph_zmm_k:855; CHECK: # %bb.0:856; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill857; CHECK-NEXT: #APP858; CHECK-NEXT: nop859; CHECK-NEXT: #NO_APP860; CHECK-NEXT: kmovd %edi, %k1861; CHECK-NEXT: vmovaps (%rsi), %zmm2862; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload863; CHECK-NEXT: vmovaps %zmm2, %zmm0864; CHECK-NEXT: retq865 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()866 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)867 %3 = bitcast i32 %mask to <32 x i1>868 %4 = load <32 x half>, ptr %passthru869 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4870 ret <32 x half> %5871}872 873define <32 x half> @stack_fold_minph_zmm_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {874; CHECK-LABEL: stack_fold_minph_zmm_k_commuted:875; CHECK: # %bb.0:876; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill877; CHECK-NEXT: #APP878; CHECK-NEXT: nop879; CHECK-NEXT: #NO_APP880; CHECK-NEXT: kmovd %edi, %k1881; CHECK-NEXT: vmovaps (%rsi), %zmm2882; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload883; CHECK-NEXT: vminph %zmm0, %zmm1, %zmm2 {%k1}884; CHECK-NEXT: vmovaps %zmm2, %zmm0885; CHECK-NEXT: retq886 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()887 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)888 %3 = bitcast i32 %mask to <32 x i1>889 %4 = load <32 x half>, ptr %passthru890 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4891 ret <32 x half> %5892}893 894define <32 x half> @stack_fold_minph_zmm_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) {895; CHECK-LABEL: stack_fold_minph_zmm_kz:896; CHECK: # %bb.0:897; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill898; CHECK-NEXT: #APP899; CHECK-NEXT: nop900; CHECK-NEXT: #NO_APP901; CHECK-NEXT: kmovd %edi, %k1902; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload903; CHECK-NEXT: retq904 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()905 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)906 %3 = bitcast i32 %mask to <32 x i1>907 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer908 ret <32 x half> %4909}910 911define <32 x half> @stack_fold_minph_zmm_kz_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask) {912; CHECK-LABEL: stack_fold_minph_zmm_kz_commuted:913; CHECK: # %bb.0:914; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill915; CHECK-NEXT: #APP916; CHECK-NEXT: nop917; CHECK-NEXT: #NO_APP918; CHECK-NEXT: kmovd %edi, %k1919; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload920; CHECK-NEXT: vminph %zmm0, %zmm1, %zmm0 {%k1} {z}921; CHECK-NEXT: retq922 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()923 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)924 %3 = bitcast i32 %mask to <32 x i1>925 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer926 ret <32 x half> %4927}928 929define <32 x half> @stack_fold_minph_zmm_commutable(<32 x half> %a0, <32 x half> %a1) #1 {930; CHECK-LABEL: stack_fold_minph_zmm_commutable:931; CHECK: # %bb.0:932; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill933; CHECK-NEXT: #APP934; CHECK-NEXT: nop935; CHECK-NEXT: #NO_APP936; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload937; CHECK-NEXT: retq938 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()939 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)940 ret <32 x half> %2941}942 943define <32 x half> @stack_fold_minph_zmm_commutable_commuted(<32 x half> %a0, <32 x half> %a1) #1 {944; CHECK-LABEL: stack_fold_minph_zmm_commutable_commuted:945; CHECK: # %bb.0:946; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill947; CHECK-NEXT: #APP948; CHECK-NEXT: nop949; CHECK-NEXT: #NO_APP950; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload951; CHECK-NEXT: retq952 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()953 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)954 ret <32 x half> %2955}956 957define <32 x half> @stack_fold_minph_zmm_commutable_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #1 {958; CHECK-LABEL: stack_fold_minph_zmm_commutable_k:959; CHECK: # %bb.0:960; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill961; CHECK-NEXT: #APP962; CHECK-NEXT: nop963; CHECK-NEXT: #NO_APP964; CHECK-NEXT: kmovd %edi, %k1965; CHECK-NEXT: vmovaps (%rsi), %zmm2966; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload967; CHECK-NEXT: vmovaps %zmm2, %zmm0968; CHECK-NEXT: retq969 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()970 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)971 %3 = bitcast i32 %mask to <32 x i1>972 %4 = load <32 x half>, ptr %passthru973 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4974 ret <32 x half> %5975}976 977define <32 x half> @stack_fold_minph_zmm_commutable_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #1 {978; CHECK-LABEL: stack_fold_minph_zmm_commutable_k_commuted:979; CHECK: # %bb.0:980; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill981; CHECK-NEXT: #APP982; CHECK-NEXT: nop983; CHECK-NEXT: #NO_APP984; CHECK-NEXT: kmovd %edi, %k1985; CHECK-NEXT: vmovaps (%rsi), %zmm2986; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload987; CHECK-NEXT: vmovaps %zmm2, %zmm0988; CHECK-NEXT: retq989 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()990 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)991 %3 = bitcast i32 %mask to <32 x i1>992 %4 = load <32 x half>, ptr %passthru993 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4994 ret <32 x half> %5995}996 997define <32 x half> @stack_fold_minph_zmm_commutable_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) #1 {998; CHECK-LABEL: stack_fold_minph_zmm_commutable_kz:999; CHECK: # %bb.0:1000; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1001; CHECK-NEXT: #APP1002; CHECK-NEXT: nop1003; CHECK-NEXT: #NO_APP1004; CHECK-NEXT: kmovd %edi, %k11005; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload1006; CHECK-NEXT: retq1007 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1008 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)1009 %3 = bitcast i32 %mask to <32 x i1>1010 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer1011 ret <32 x half> %41012}1013 1014define <32 x half> @stack_fold_minph_zmm_commutable_kz_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask) #1 {1015; CHECK-LABEL: stack_fold_minph_zmm_commutable_kz_commuted:1016; CHECK: # %bb.0:1017; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1018; CHECK-NEXT: #APP1019; CHECK-NEXT: nop1020; CHECK-NEXT: #NO_APP1021; CHECK-NEXT: kmovd %edi, %k11022; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload1023; CHECK-NEXT: retq1024 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1025 %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)1026 %3 = bitcast i32 %mask to <32 x i1>1027 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer1028 ret <32 x half> %41029}1030 1031define half @stack_fold_minsh(half %a0, half %a1) {1032; CHECK-LABEL: stack_fold_minsh:1033; CHECK: # %bb.0:1034; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1035; CHECK-NEXT: #APP1036; CHECK-NEXT: nop1037; CHECK-NEXT: #NO_APP1038; CHECK-NEXT: vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1039; CHECK-NEXT: retq1040 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1041 %2 = fcmp olt half %a0, %a11042 %3 = select i1 %2, half %a0, half %a11043 ret half %31044}1045 1046define half @stack_fold_minsh_commuted(half %a0, half %a1) {1047; CHECK-LABEL: stack_fold_minsh_commuted:1048; CHECK: # %bb.0:1049; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1050; CHECK-NEXT: #APP1051; CHECK-NEXT: nop1052; CHECK-NEXT: #NO_APP1053; CHECK-NEXT: vmovsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload1054; CHECK-NEXT: # xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero1055; CHECK-NEXT: vminsh %xmm0, %xmm1, %xmm01056; CHECK-NEXT: retq1057 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1058 %2 = fcmp olt half %a1, %a01059 %3 = select i1 %2, half %a1, half %a01060 ret half %31061}1062 1063define half @stack_fold_minsh_commutable(half %a0, half %a1) #1 {1064; CHECK-LABEL: stack_fold_minsh_commutable:1065; CHECK: # %bb.0:1066; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1067; CHECK-NEXT: #APP1068; CHECK-NEXT: nop1069; CHECK-NEXT: #NO_APP1070; CHECK-NEXT: vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1071; CHECK-NEXT: retq1072 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1073 %2 = fcmp olt half %a0, %a11074 %3 = select i1 %2, half %a0, half %a11075 ret half %31076}1077 1078define half @stack_fold_minsh_commutable_commuted(half %a0, half %a1) #1 {1079; CHECK-LABEL: stack_fold_minsh_commutable_commuted:1080; CHECK: # %bb.0:1081; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1082; CHECK-NEXT: #APP1083; CHECK-NEXT: nop1084; CHECK-NEXT: #NO_APP1085; CHECK-NEXT: vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1086; CHECK-NEXT: retq1087 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1088 %2 = fcmp olt half %a1, %a01089 %3 = select i1 %2, half %a1, half %a01090 ret half %31091}1092 1093define <8 x half> @stack_fold_minsh_int(<8 x half> %a0, <8 x half> %a1) {1094; CHECK-LABEL: stack_fold_minsh_int:1095; CHECK: # %bb.0:1096; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1097; CHECK-NEXT: #APP1098; CHECK-NEXT: nop1099; CHECK-NEXT: #NO_APP1100; CHECK-NEXT: vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1101; CHECK-NEXT: retq1102 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1103 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.min.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 4)1104 ret <8 x half> %21105}1106declare <8 x half> @llvm.x86.avx512fp16.mask.min.sh.round(<8 x half>, <8 x half>, <8 x half>, i8, i32)1107 1108define <8 x half> @stack_fold_minsh_mask(<8 x half> %a0, <8 x half> %a1, i8 %mask, ptr %passthru) {1109; CHECK-LABEL: stack_fold_minsh_mask:1110; CHECK: # %bb.0:1111; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1112; CHECK-NEXT: kmovd %edi, %k11113; CHECK-NEXT: #APP1114; CHECK-NEXT: nop1115; CHECK-NEXT: #NO_APP1116; CHECK-NEXT: vmovaps (%rsi), %xmm21117; CHECK-NEXT: vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1118; CHECK-NEXT: vmovaps %xmm2, %xmm01119; CHECK-NEXT: retq1120 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1121 %2 = load <8 x half>, ptr %passthru1122 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.min.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 4)1123 ret <8 x half> %31124}1125 1126define <8 x half> @stack_fold_minsh_maskz(<8 x half> %a0, <8 x half> %a1, i8 %mask) {1127; CHECK-LABEL: stack_fold_minsh_maskz:1128; CHECK: # %bb.0:1129; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1130; CHECK-NEXT: kmovd %edi, %k11131; CHECK-NEXT: #APP1132; CHECK-NEXT: nop1133; CHECK-NEXT: #NO_APP1134; CHECK-NEXT: vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload1135; CHECK-NEXT: retq1136 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1137 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.min.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %mask, i32 4)1138 ret <8 x half> %21139}1140 1141define <32 x half> @stack_fold_mulph_zmm(<32 x half> %a0, <32 x half> %a1) {1142; CHECK-LABEL: stack_fold_mulph_zmm:1143; CHECK: # %bb.0:1144; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1145; CHECK-NEXT: #APP1146; CHECK-NEXT: nop1147; CHECK-NEXT: #NO_APP1148; CHECK-NEXT: vmulph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1149; CHECK-NEXT: retq1150 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1151 %2 = fmul <32 x half> %a0, %a11152 ret <32 x half> %21153}1154 1155define <32 x half> @stack_fold_mulph_zmm_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {1156; CHECK-LABEL: stack_fold_mulph_zmm_k:1157; CHECK: # %bb.0:1158; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1159; CHECK-NEXT: #APP1160; CHECK-NEXT: nop1161; CHECK-NEXT: #NO_APP1162; CHECK-NEXT: kmovd %edi, %k11163; CHECK-NEXT: vmovaps (%rsi), %zmm21164; CHECK-NEXT: vmulph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1165; CHECK-NEXT: vmovaps %zmm2, %zmm01166; CHECK-NEXT: retq1167 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1168 %2 = fmul <32 x half> %a0, %a11169 %3 = bitcast i32 %mask to <32 x i1>1170 %4 = load <32 x half>, ptr %passthru1171 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %41172 ret <32 x half> %51173}1174 1175define <32 x half> @stack_fold_mulph_zmm_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {1176; CHECK-LABEL: stack_fold_mulph_zmm_k_commuted:1177; CHECK: # %bb.0:1178; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1179; CHECK-NEXT: #APP1180; CHECK-NEXT: nop1181; CHECK-NEXT: #NO_APP1182; CHECK-NEXT: kmovd %edi, %k11183; CHECK-NEXT: vmovaps (%rsi), %zmm21184; CHECK-NEXT: vmulph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1185; CHECK-NEXT: vmovaps %zmm2, %zmm01186; CHECK-NEXT: retq1187 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1188 %2 = fmul <32 x half> %a1, %a01189 %3 = bitcast i32 %mask to <32 x i1>1190 %4 = load <32 x half>, ptr %passthru1191 %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %41192 ret <32 x half> %51193}1194 1195define <32 x half> @stack_fold_mulph_zmm_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) {1196; CHECK-LABEL: stack_fold_mulph_zmm_kz:1197; CHECK: # %bb.0:1198; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1199; CHECK-NEXT: #APP1200; CHECK-NEXT: nop1201; CHECK-NEXT: #NO_APP1202; CHECK-NEXT: kmovd %edi, %k11203; CHECK-NEXT: vmulph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload1204; CHECK-NEXT: retq1205 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1206 %2 = fmul <32 x half> %a1, %a01207 %3 = bitcast i32 %mask to <32 x i1>1208 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer1209 ret <32 x half> %41210}1211 1212define half @stack_fold_mulsh(half %a0, half %a1) {1213; CHECK-LABEL: stack_fold_mulsh:1214; CHECK: # %bb.0:1215; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1216; CHECK-NEXT: #APP1217; CHECK-NEXT: nop1218; CHECK-NEXT: #NO_APP1219; CHECK-NEXT: vmulsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1220; CHECK-NEXT: retq1221 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1222 %2 = fmul half %a0, %a11223 ret half %21224}1225 1226define <8 x half> @stack_fold_mulsh_int(<8 x half> %a0, <8 x half> %a1) {1227; CHECK-LABEL: stack_fold_mulsh_int:1228; CHECK: # %bb.0:1229; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1230; CHECK-NEXT: #APP1231; CHECK-NEXT: nop1232; CHECK-NEXT: #NO_APP1233; CHECK-NEXT: vmulsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1234; CHECK-NEXT: retq1235 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1236 %2 = extractelement <8 x half> %a0, i32 01237 %3 = extractelement <8 x half> %a1, i32 01238 %4 = fmul half %2, %31239 %5 = insertelement <8 x half> %a0, half %4, i32 01240 ret <8 x half> %51241}1242 1243define <32 x half> @stack_fold_rcpph(<32 x half> %a0) {1244; CHECK-LABEL: stack_fold_rcpph:1245; CHECK: # %bb.0:1246; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1247; CHECK-NEXT: #APP1248; CHECK-NEXT: nop1249; CHECK-NEXT: #NO_APP1250; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload1251; CHECK-NEXT: retq1252 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1253 %2 = call <32 x half> @llvm.x86.avx512fp16.mask.rcp.ph.512(<32 x half> %a0, <32 x half> undef, i32 -1)1254 ret <32 x half> %21255}1256declare <32 x half> @llvm.x86.avx512fp16.mask.rcp.ph.512(<32 x half>, <32 x half>, i32)1257 1258define <32 x half> @stack_fold_rcpph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {1259; CHECK-LABEL: stack_fold_rcpph_mask:1260; CHECK: # %bb.0:1261; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1262; CHECK-NEXT: kmovd %esi, %k11263; CHECK-NEXT: #APP1264; CHECK-NEXT: nop1265; CHECK-NEXT: #NO_APP1266; CHECK-NEXT: vmovaps (%rdi), %zmm11267; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload1268; CHECK-NEXT: vmovaps %zmm1, %zmm01269; CHECK-NEXT: retq1270 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1271 %2 = load <32 x half>, ptr %passthru1272 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rcp.ph.512(<32 x half> %a0, <32 x half> %2, i32 %mask)1273 ret <32 x half> %31274}1275 1276define <32 x half> @stack_fold_rcpph_maskz(<32 x half> %a0, ptr %mask) {1277; CHECK-LABEL: stack_fold_rcpph_maskz:1278; CHECK: # %bb.0:1279; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1280; CHECK-NEXT: #APP1281; CHECK-NEXT: nop1282; CHECK-NEXT: #NO_APP1283; CHECK-NEXT: kmovd (%rdi), %k11284; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload1285; CHECK-NEXT: retq1286 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1287 %2 = load i32, ptr %mask1288 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rcp.ph.512(<32 x half> %a0, <32 x half> zeroinitializer, i32 %2)1289 ret <32 x half> %31290}1291 1292define <8 x half> @stack_fold_rcpsh(<8 x half> %a0, <8 x half> %a1) {1293; CHECK-LABEL: stack_fold_rcpsh:1294; CHECK: # %bb.0:1295; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1296; CHECK-NEXT: #APP1297; CHECK-NEXT: nop1298; CHECK-NEXT: #NO_APP1299; CHECK-NEXT: vrcpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1300; CHECK-NEXT: retq1301 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1302 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1)1303 ret <8 x half> %21304}1305declare <8 x half> @llvm.x86.avx512fp16.mask.rcp.sh(<8 x half>, <8 x half>, <8 x half>, i8)1306 1307define <8 x half> @stack_fold_rcpsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {1308; CHECK-LABEL: stack_fold_rcpsh_mask:1309; CHECK: # %bb.0:1310; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1311; CHECK-NEXT: kmovd %esi, %k11312; CHECK-NEXT: #APP1313; CHECK-NEXT: nop1314; CHECK-NEXT: #NO_APP1315; CHECK-NEXT: vmovaps (%rdi), %xmm21316; CHECK-NEXT: vrcpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1317; CHECK-NEXT: vmovaps %xmm2, %xmm01318; CHECK-NEXT: retq1319 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1320 %2 = load <8 x half>, ptr %passthru1321 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask)1322 ret <8 x half> %31323}1324 1325define <8 x half> @stack_fold_rcpsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {1326; CHECK-LABEL: stack_fold_rcpsh_maskz:1327; CHECK: # %bb.0:1328; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1329; CHECK-NEXT: #APP1330; CHECK-NEXT: nop1331; CHECK-NEXT: #NO_APP1332; CHECK-NEXT: movzbl (%rdi), %eax1333; CHECK-NEXT: kmovd %eax, %k11334; CHECK-NEXT: vrcpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload1335; CHECK-NEXT: retq1336 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1337 %2 = load i8, ptr %mask1338 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2)1339 ret <8 x half> %31340}1341 1342define <32 x half> @stack_fold_reduceph(<32 x half> %a0) {1343; CHECK-LABEL: stack_fold_reduceph:1344; CHECK: # %bb.0:1345; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1346; CHECK-NEXT: #APP1347; CHECK-NEXT: nop1348; CHECK-NEXT: #NO_APP1349; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload1350; CHECK-NEXT: retq1351 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1352 %2 = call <32 x half> @llvm.x86.avx512fp16.mask.reduce.ph.512(<32 x half> %a0, i32 8, <32 x half> undef, i32 -1, i32 4)1353 ret <32 x half> %21354}1355declare <32 x half> @llvm.x86.avx512fp16.mask.reduce.ph.512(<32 x half>, i32, <32 x half>, i32, i32)1356 1357define <32 x half> @stack_fold_reduceph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {1358; CHECK-LABEL: stack_fold_reduceph_mask:1359; CHECK: # %bb.0:1360; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1361; CHECK-NEXT: kmovd %esi, %k11362; CHECK-NEXT: #APP1363; CHECK-NEXT: nop1364; CHECK-NEXT: #NO_APP1365; CHECK-NEXT: vmovaps (%rdi), %zmm11366; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload1367; CHECK-NEXT: vmovaps %zmm1, %zmm01368; CHECK-NEXT: retq1369 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1370 %2 = load <32 x half>, ptr %passthru1371 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.reduce.ph.512(<32 x half> %a0, i32 8, <32 x half> %2, i32 %mask, i32 4)1372 ret <32 x half> %31373}1374 1375define <32 x half> @stack_fold_reduceph_maskz(<32 x half> %a0, ptr %mask) {1376; CHECK-LABEL: stack_fold_reduceph_maskz:1377; CHECK: # %bb.0:1378; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1379; CHECK-NEXT: #APP1380; CHECK-NEXT: nop1381; CHECK-NEXT: #NO_APP1382; CHECK-NEXT: kmovd (%rdi), %k11383; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload1384; CHECK-NEXT: retq1385 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1386 %2 = load i32, ptr %mask1387 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.reduce.ph.512(<32 x half> %a0, i32 8, <32 x half> zeroinitializer, i32 %2, i32 4)1388 ret <32 x half> %31389}1390 1391define <8 x half> @stack_fold_reducesh(<8 x half> %a0, <8 x half> %a1) {1392; CHECK-LABEL: stack_fold_reducesh:1393; CHECK: # %bb.0:1394; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1395; CHECK-NEXT: #APP1396; CHECK-NEXT: nop1397; CHECK-NEXT: #NO_APP1398; CHECK-NEXT: vreducesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1399; CHECK-NEXT: retq1400 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1401 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 8, i32 4)1402 ret <8 x half> %21403}1404declare <8 x half> @llvm.x86.avx512fp16.mask.reduce.sh(<8 x half>, <8 x half>, <8 x half>, i8, i32, i32)1405 1406define <8 x half> @stack_fold_reducesh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {1407; CHECK-LABEL: stack_fold_reducesh_mask:1408; CHECK: # %bb.0:1409; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1410; CHECK-NEXT: kmovd %esi, %k11411; CHECK-NEXT: #APP1412; CHECK-NEXT: nop1413; CHECK-NEXT: #NO_APP1414; CHECK-NEXT: vmovaps (%rdi), %xmm21415; CHECK-NEXT: vreducesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1416; CHECK-NEXT: vmovaps %xmm2, %xmm01417; CHECK-NEXT: retq1418 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1419 %2 = load <8 x half>, ptr %passthru1420 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 8, i32 4)1421 ret <8 x half> %31422}1423 1424define <8 x half> @stack_fold_reducesh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {1425; CHECK-LABEL: stack_fold_reducesh_maskz:1426; CHECK: # %bb.0:1427; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1428; CHECK-NEXT: #APP1429; CHECK-NEXT: nop1430; CHECK-NEXT: #NO_APP1431; CHECK-NEXT: movzbl (%rdi), %eax1432; CHECK-NEXT: kmovd %eax, %k11433; CHECK-NEXT: vreducesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload1434; CHECK-NEXT: retq1435 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1436 %2 = load i8, ptr %mask1437 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2, i32 8, i32 4)1438 ret <8 x half> %31439}1440 1441define <32 x half> @stack_fold_rndscaleph(<32 x half> %a0) {1442; CHECK-LABEL: stack_fold_rndscaleph:1443; CHECK: # %bb.0:1444; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1445; CHECK-NEXT: #APP1446; CHECK-NEXT: nop1447; CHECK-NEXT: #NO_APP1448; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload1449; CHECK-NEXT: retq1450 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1451 %2 = call <32 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.512(<32 x half> %a0, i32 8, <32 x half> undef, i32 -1, i32 4)1452 ret <32 x half> %21453}1454declare <32 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.512(<32 x half>, i32, <32 x half>, i32, i32)1455 1456define <32 x half> @stack_fold_rndscaleph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {1457; CHECK-LABEL: stack_fold_rndscaleph_mask:1458; CHECK: # %bb.0:1459; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1460; CHECK-NEXT: kmovd %esi, %k11461; CHECK-NEXT: #APP1462; CHECK-NEXT: nop1463; CHECK-NEXT: #NO_APP1464; CHECK-NEXT: vmovaps (%rdi), %zmm11465; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload1466; CHECK-NEXT: vmovaps %zmm1, %zmm01467; CHECK-NEXT: retq1468 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1469 %2 = load <32 x half>, ptr %passthru1470 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.512(<32 x half> %a0, i32 8, <32 x half> %2, i32 %mask, i32 4)1471 ret <32 x half> %31472}1473 1474define <32 x half> @stack_fold_rndscaleph_maskz(<32 x half> %a0, ptr %mask) {1475; CHECK-LABEL: stack_fold_rndscaleph_maskz:1476; CHECK: # %bb.0:1477; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1478; CHECK-NEXT: #APP1479; CHECK-NEXT: nop1480; CHECK-NEXT: #NO_APP1481; CHECK-NEXT: kmovd (%rdi), %k11482; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload1483; CHECK-NEXT: retq1484 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1485 %2 = load i32, ptr %mask1486 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.512(<32 x half> %a0, i32 8, <32 x half> zeroinitializer, i32 %2, i32 4)1487 ret <32 x half> %31488}1489 1490define <8 x half> @stack_fold_rndscalesh(<8 x half> %a0, <8 x half> %a1) {1491; CHECK-LABEL: stack_fold_rndscalesh:1492; CHECK: # %bb.0:1493; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1494; CHECK-NEXT: #APP1495; CHECK-NEXT: nop1496; CHECK-NEXT: #NO_APP1497; CHECK-NEXT: vrndscalesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1498; CHECK-NEXT: retq1499 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1500 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 8, i32 4)1501 ret <8 x half> %21502}1503declare <8 x half> @llvm.x86.avx512fp16.mask.rndscale.sh(<8 x half>, <8 x half>, <8 x half>, i8, i32, i32)1504 1505define <8 x half> @stack_fold_rndscalesh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {1506; CHECK-LABEL: stack_fold_rndscalesh_mask:1507; CHECK: # %bb.0:1508; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1509; CHECK-NEXT: kmovd %esi, %k11510; CHECK-NEXT: #APP1511; CHECK-NEXT: nop1512; CHECK-NEXT: #NO_APP1513; CHECK-NEXT: vmovaps (%rdi), %xmm21514; CHECK-NEXT: vrndscalesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1515; CHECK-NEXT: vmovaps %xmm2, %xmm01516; CHECK-NEXT: retq1517 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1518 %2 = load <8 x half>, ptr %passthru1519 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 8, i32 4)1520 ret <8 x half> %31521}1522 1523define <8 x half> @stack_fold_rndscalesh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {1524; CHECK-LABEL: stack_fold_rndscalesh_maskz:1525; CHECK: # %bb.0:1526; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1527; CHECK-NEXT: #APP1528; CHECK-NEXT: nop1529; CHECK-NEXT: #NO_APP1530; CHECK-NEXT: movzbl (%rdi), %eax1531; CHECK-NEXT: kmovd %eax, %k11532; CHECK-NEXT: vrndscalesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload1533; CHECK-NEXT: retq1534 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1535 %2 = load i8, ptr %mask1536 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2, i32 8, i32 4)1537 ret <8 x half> %31538}1539 1540define <32 x half> @stack_fold_rsqrtph(<32 x half> %a0) {1541; CHECK-LABEL: stack_fold_rsqrtph:1542; CHECK: # %bb.0:1543; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1544; CHECK-NEXT: #APP1545; CHECK-NEXT: nop1546; CHECK-NEXT: #NO_APP1547; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload1548; CHECK-NEXT: retq1549 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1550 %2 = call <32 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.512(<32 x half> %a0, <32 x half> undef, i32 -1)1551 ret <32 x half> %21552}1553declare <32 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.512(<32 x half>, <32 x half>, i32)1554 1555define <32 x half> @stack_fold_rsqrtph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {1556; CHECK-LABEL: stack_fold_rsqrtph_mask:1557; CHECK: # %bb.0:1558; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1559; CHECK-NEXT: kmovd %esi, %k11560; CHECK-NEXT: #APP1561; CHECK-NEXT: nop1562; CHECK-NEXT: #NO_APP1563; CHECK-NEXT: vmovaps (%rdi), %zmm11564; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload1565; CHECK-NEXT: vmovaps %zmm1, %zmm01566; CHECK-NEXT: retq1567 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1568 %2 = load <32 x half>, ptr %passthru1569 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.512(<32 x half> %a0, <32 x half> %2, i32 %mask)1570 ret <32 x half> %31571}1572 1573define <32 x half> @stack_fold_rsqrtph_maskz(<32 x half> %a0, ptr %mask) {1574; CHECK-LABEL: stack_fold_rsqrtph_maskz:1575; CHECK: # %bb.0:1576; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1577; CHECK-NEXT: #APP1578; CHECK-NEXT: nop1579; CHECK-NEXT: #NO_APP1580; CHECK-NEXT: kmovd (%rdi), %k11581; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload1582; CHECK-NEXT: retq1583 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1584 %2 = load i32, ptr %mask1585 %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.512(<32 x half> %a0, <32 x half> zeroinitializer, i32 %2)1586 ret <32 x half> %31587}1588 1589define <8 x half> @stack_fold_rsqrtsh(<8 x half> %a0, <8 x half> %a1) {1590; CHECK-LABEL: stack_fold_rsqrtsh: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: vrsqrtsh {{[-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},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1599 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1)1600 ret <8 x half> %21601}1602declare <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.sh(<8 x half>, <8 x half>, <8 x half>, i8)1603 1604define <8 x half> @stack_fold_rsqrtsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {1605; CHECK-LABEL: stack_fold_rsqrtsh_mask:1606; CHECK: # %bb.0:1607; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1608; CHECK-NEXT: kmovd %esi, %k11609; CHECK-NEXT: #APP1610; CHECK-NEXT: nop1611; CHECK-NEXT: #NO_APP1612; CHECK-NEXT: vmovaps (%rdi), %xmm21613; CHECK-NEXT: vrsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1614; CHECK-NEXT: vmovaps %xmm2, %xmm01615; CHECK-NEXT: retq1616 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1617 %2 = load <8 x half>, ptr %passthru1618 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask)1619 ret <8 x half> %31620}1621 1622define <8 x half> @stack_fold_rsqrtsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {1623; CHECK-LABEL: stack_fold_rsqrtsh_maskz:1624; CHECK: # %bb.0:1625; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1626; CHECK-NEXT: #APP1627; CHECK-NEXT: nop1628; CHECK-NEXT: #NO_APP1629; CHECK-NEXT: movzbl (%rdi), %eax1630; CHECK-NEXT: kmovd %eax, %k11631; CHECK-NEXT: vrsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload1632; CHECK-NEXT: retq1633 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1634 %2 = load i8, ptr %mask1635 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2)1636 ret <8 x half> %31637}1638 1639define <32 x half> @stack_fold_sqrtph(<32 x half> %a0) {1640; CHECK-LABEL: stack_fold_sqrtph:1641; CHECK: # %bb.0:1642; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1643; CHECK-NEXT: #APP1644; CHECK-NEXT: nop1645; CHECK-NEXT: #NO_APP1646; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload1647; CHECK-NEXT: retq1648 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1649 %2 = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %a0)1650 ret <32 x half> %21651}1652declare <32 x half> @llvm.sqrt.v32f16(<32 x half>)1653 1654define <32 x half> @stack_fold_sqrtph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {1655; CHECK-LABEL: stack_fold_sqrtph_mask:1656; CHECK: # %bb.0:1657; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1658; CHECK-NEXT: #APP1659; CHECK-NEXT: nop1660; CHECK-NEXT: #NO_APP1661; CHECK-NEXT: vmovaps (%rdi), %zmm11662; CHECK-NEXT: kmovd %esi, %k11663; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload1664; CHECK-NEXT: vmovaps %zmm1, %zmm01665; CHECK-NEXT: retq1666 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1667 %2 = load <32 x half>, ptr %passthru1668 %3 = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %a0)1669 %4 = bitcast i32 %mask to <32 x i1>1670 %5 = select <32 x i1> %4, <32 x half> %3, <32 x half> %21671 ret <32 x half> %51672}1673 1674define <32 x half> @stack_fold_sqrtph_maskz(<32 x half> %a0, ptr %mask) {1675; CHECK-LABEL: stack_fold_sqrtph_maskz:1676; CHECK: # %bb.0:1677; CHECK-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1678; CHECK-NEXT: #APP1679; CHECK-NEXT: nop1680; CHECK-NEXT: #NO_APP1681; CHECK-NEXT: kmovd (%rdi), %k11682; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload1683; CHECK-NEXT: retq1684 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1685 %2 = load i32, ptr %mask1686 %3 = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %a0)1687 %4 = bitcast i32 %2 to <32 x i1>1688 %5 = select <32 x i1> %4, <32 x half> %3, <32 x half> zeroinitializer1689 ret <32 x half> %51690}1691 1692define <8 x half> @stack_fold_sqrtsh(<8 x half> %a0, <8 x half> %a1) {1693; CHECK-LABEL: stack_fold_sqrtsh:1694; CHECK: # %bb.0:1695; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1696; CHECK-NEXT: #APP1697; CHECK-NEXT: nop1698; CHECK-NEXT: #NO_APP1699; CHECK-NEXT: vsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1700; CHECK-NEXT: retq1701 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1702 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 4)1703 ret <8 x half> %21704}1705declare <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half>, <8 x half>, <8 x half>, i8, i32)1706 1707define <8 x half> @stack_fold_sqrtsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {1708; CHECK-LABEL: stack_fold_sqrtsh_mask:1709; CHECK: # %bb.0:1710; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1711; CHECK-NEXT: kmovd %esi, %k11712; CHECK-NEXT: #APP1713; CHECK-NEXT: nop1714; CHECK-NEXT: #NO_APP1715; CHECK-NEXT: vmovaps (%rdi), %xmm21716; CHECK-NEXT: vsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1717; CHECK-NEXT: vmovaps %xmm2, %xmm01718; CHECK-NEXT: retq1719 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1720 %2 = load <8 x half>, ptr %passthru1721 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 4)1722 ret <8 x half> %31723}1724 1725define <8 x half> @stack_fold_sqrtsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {1726; CHECK-LABEL: stack_fold_sqrtsh_maskz:1727; CHECK: # %bb.0:1728; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1729; CHECK-NEXT: #APP1730; CHECK-NEXT: nop1731; CHECK-NEXT: #NO_APP1732; CHECK-NEXT: movzbl (%rdi), %eax1733; CHECK-NEXT: kmovd %eax, %k11734; CHECK-NEXT: vsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload1735; CHECK-NEXT: retq1736 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1737 %2 = load i8, ptr %mask1738 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2, i32 4)1739 ret <8 x half> %31740}1741 1742define <32 x half> @stack_fold_subph_zmm(<32 x half> %a0, <32 x half> %a1) {1743; CHECK-LABEL: stack_fold_subph_zmm:1744; CHECK: # %bb.0:1745; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1746; CHECK-NEXT: #APP1747; CHECK-NEXT: nop1748; CHECK-NEXT: #NO_APP1749; CHECK-NEXT: vsubph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload1750; CHECK-NEXT: retq1751 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1752 %2 = fsub <32 x half> %a0, %a11753 ret <32 x half> %21754}1755 1756define half @stack_fold_subsh(half %a0, half %a1) {1757; CHECK-LABEL: stack_fold_subsh:1758; CHECK: # %bb.0:1759; CHECK-NEXT: vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1760; CHECK-NEXT: #APP1761; CHECK-NEXT: nop1762; CHECK-NEXT: #NO_APP1763; CHECK-NEXT: vsubsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1764; CHECK-NEXT: retq1765 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1766 %2 = fsub half %a0, %a11767 ret half %21768}1769 1770define <8 x half> @stack_fold_subsh_int(<8 x half> %a0, <8 x half> %a1) {1771; CHECK-LABEL: stack_fold_subsh_int:1772; CHECK: # %bb.0:1773; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1774; CHECK-NEXT: #APP1775; CHECK-NEXT: nop1776; CHECK-NEXT: #NO_APP1777; CHECK-NEXT: vsubsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1778; CHECK-NEXT: retq1779 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1780 %2 = extractelement <8 x half> %a0, i32 01781 %3 = extractelement <8 x half> %a1, i32 01782 %4 = fsub half %2, %31783 %5 = insertelement <8 x half> %a0, half %4, i32 01784 ret <8 x half> %51785}1786 1787define <16 x float> @stack_fold_fmulcph(<16 x float> %a0, <16 x float> %a1) {1788; CHECK-LABEL: stack_fold_fmulcph:1789; CHECK: # %bb.0:1790; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1791; CHECK-NEXT: #APP1792; CHECK-NEXT: nop1793; CHECK-NEXT: #NO_APP1794; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 # 64-byte Folded Reload1795; CHECK-NEXT: vmovaps %zmm2, %zmm01796; CHECK-NEXT: retq1797 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1798 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> undef, i16 -1, i32 4)1799 ret <16 x float> %21800}1801 1802define <16 x float> @stack_fold_fmulcph_commute(<16 x float> %a0, <16 x float> %a1) {1803; CHECK-LABEL: stack_fold_fmulcph_commute:1804; CHECK: # %bb.0:1805; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1806; CHECK-NEXT: #APP1807; CHECK-NEXT: nop1808; CHECK-NEXT: #NO_APP1809; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 # 64-byte Folded Reload1810; CHECK-NEXT: vmovaps %zmm2, %zmm01811; CHECK-NEXT: retq1812 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1813 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> %a1, <16 x float> %a0, <16 x float> undef, i16 -1, i32 4)1814 ret <16 x float> %21815}1816declare <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)1817 1818define <16 x float> @stack_fold_fmulcph_mask(<16 x float> %a0, <16 x float> %a1, ptr %passthru, i16 %mask) {1819; CHECK-LABEL: stack_fold_fmulcph_mask:1820; CHECK: # %bb.0:1821; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1822; CHECK-NEXT: kmovd %esi, %k11823; CHECK-NEXT: #APP1824; CHECK-NEXT: nop1825; CHECK-NEXT: #NO_APP1826; CHECK-NEXT: vmovaps (%rdi), %zmm21827; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1828; CHECK-NEXT: vmovaps %zmm2, %zmm01829; CHECK-NEXT: retq1830 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1831 %2 = load <16 x float>, ptr %passthru1832 %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %2, i16 %mask, i32 4)1833 ret <16 x float> %31834}1835 1836define <16 x float> @stack_fold_fmulcph_maskz(<16 x float> %a0, <16 x float> %a1, ptr %mask) {1837; CHECK-LABEL: stack_fold_fmulcph_maskz:1838; CHECK: # %bb.0:1839; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1840; CHECK-NEXT: #APP1841; CHECK-NEXT: nop1842; CHECK-NEXT: #NO_APP1843; CHECK-NEXT: kmovw (%rdi), %k11844; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} {z} # 64-byte Folded Reload1845; CHECK-NEXT: vmovaps %zmm2, %zmm01846; CHECK-NEXT: retq1847 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1848 %2 = load i16, ptr %mask1849 %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> zeroinitializer, i16 %2, i32 4)1850 ret <16 x float> %31851}1852 1853define <16 x float> @stack_fold_fcmulcph(<16 x float> %a0, <16 x float> %a1) {1854; CHECK-LABEL: stack_fold_fcmulcph:1855; CHECK: # %bb.0:1856; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1857; CHECK-NEXT: #APP1858; CHECK-NEXT: nop1859; CHECK-NEXT: #NO_APP1860; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 # 64-byte Folded Reload1861; CHECK-NEXT: vmovaps %zmm2, %zmm01862; CHECK-NEXT: retq1863 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1864 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> undef, i16 -1, i32 4)1865 ret <16 x float> %21866}1867 1868define <16 x float> @stack_fold_fcmulcph_commute(<16 x float> %a0, <16 x float> %a1) {1869; CHECK-LABEL: stack_fold_fcmulcph_commute:1870; CHECK: # %bb.0:1871; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1872; CHECK-NEXT: #APP1873; CHECK-NEXT: nop1874; CHECK-NEXT: #NO_APP1875; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload1876; CHECK-NEXT: vfcmulcph %zmm0, %zmm1, %zmm21877; CHECK-NEXT: vmovaps %zmm2, %zmm01878; CHECK-NEXT: retq1879 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1880 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float> %a1, <16 x float> %a0, <16 x float> undef, i16 -1, i32 4)1881 ret <16 x float> %21882}1883declare <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)1884 1885define <16 x float> @stack_fold_fcmulcph_mask(<16 x float> %a0, <16 x float> %a1, ptr %passthru, i16 %mask) {1886; CHECK-LABEL: stack_fold_fcmulcph_mask:1887; CHECK: # %bb.0:1888; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1889; CHECK-NEXT: kmovd %esi, %k11890; CHECK-NEXT: #APP1891; CHECK-NEXT: nop1892; CHECK-NEXT: #NO_APP1893; CHECK-NEXT: vmovaps (%rdi), %zmm21894; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1895; CHECK-NEXT: vmovaps %zmm2, %zmm01896; CHECK-NEXT: retq1897 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1898 %2 = load <16 x float>, ptr %passthru1899 %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %2, i16 %mask, i32 4)1900 ret <16 x float> %31901}1902 1903define <16 x float> @stack_fold_fcmulcph_maskz(<16 x float> %a0, <16 x float> %a1, ptr %mask) {1904; CHECK-LABEL: stack_fold_fcmulcph_maskz:1905; CHECK: # %bb.0:1906; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1907; CHECK-NEXT: #APP1908; CHECK-NEXT: nop1909; CHECK-NEXT: #NO_APP1910; CHECK-NEXT: kmovw (%rdi), %k11911; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} {z} # 64-byte Folded Reload1912; CHECK-NEXT: vmovaps %zmm2, %zmm01913; CHECK-NEXT: retq1914 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1915 %2 = load i16, ptr %mask1916 %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> zeroinitializer, i16 %2, i32 4)1917 ret <16 x float> %31918}1919 1920define <16 x float> @stack_fold_fmaddcph(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {1921; CHECK-LABEL: stack_fold_fmaddcph:1922; CHECK: # %bb.0:1923; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1924; CHECK-NEXT: #APP1925; CHECK-NEXT: nop1926; CHECK-NEXT: #NO_APP1927; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1928; CHECK-NEXT: retq1929 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1930 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> %a0, i16 -1, i32 4)1931 ret <16 x float> %21932}1933 1934define <16 x float> @stack_fold_fmaddcph_commute(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {1935; CHECK-LABEL: stack_fold_fmaddcph_commute:1936; CHECK: # %bb.0:1937; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1938; CHECK-NEXT: #APP1939; CHECK-NEXT: nop1940; CHECK-NEXT: #NO_APP1941; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1942; CHECK-NEXT: retq1943 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1944 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float> %a2, <16 x float> %a1, <16 x float> %a0, i16 -1, i32 4)1945 ret <16 x float> %21946}1947declare <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)1948 1949define <16 x float> @stack_fold_fmaddcph_mask(ptr %p, <16 x float> %a1, <16 x float> %a2, i16 %mask) {1950; CHECK-LABEL: stack_fold_fmaddcph_mask:1951; CHECK: # %bb.0:1952; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1953; CHECK-NEXT: kmovd %esi, %k11954; CHECK-NEXT: #APP1955; CHECK-NEXT: nop1956; CHECK-NEXT: #NO_APP1957; CHECK-NEXT: vmovaps (%rdi), %zmm21958; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1959; CHECK-NEXT: vmovaps %zmm2, %zmm01960; CHECK-NEXT: retq1961 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1962 %a0 = load <16 x float>, ptr %p1963 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> %a0, i16 %mask, i32 4)1964 ret <16 x float> %21965}1966 1967define <16 x float> @stack_fold_fmaddcph_maskz(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, ptr %mask) {1968; CHECK-LABEL: stack_fold_fmaddcph_maskz:1969; CHECK: # %bb.0:1970; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1971; CHECK-NEXT: #APP1972; CHECK-NEXT: nop1973; CHECK-NEXT: #NO_APP1974; CHECK-NEXT: kmovw (%rdi), %k11975; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm01976; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload1977; CHECK-NEXT: retq1978 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1979 %2 = load i16, ptr %mask1980 %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> zeroinitializer, i16 %2, i32 4)1981 ret <16 x float> %31982}1983declare <16 x float> @llvm.x86.avx512fp16.maskz.vfmadd.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)1984 1985define <16 x float> @stack_fold_fcmaddcph(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {1986; CHECK-LABEL: stack_fold_fcmaddcph:1987; CHECK: # %bb.0:1988; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1989; CHECK-NEXT: #APP1990; CHECK-NEXT: nop1991; CHECK-NEXT: #NO_APP1992; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1993; CHECK-NEXT: retq1994 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1995 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> %a0, i16 -1, i32 4)1996 ret <16 x float> %21997}1998 1999define <16 x float> @stack_fold_fcmaddcph_commute(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {2000; CHECK-LABEL: stack_fold_fcmaddcph_commute:2001; CHECK: # %bb.0:2002; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill2003; CHECK-NEXT: #APP2004; CHECK-NEXT: nop2005; CHECK-NEXT: #NO_APP2006; CHECK-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm2 # 64-byte Reload2007; CHECK-NEXT: vfcmaddcph %zmm1, %zmm2, %zmm02008; CHECK-NEXT: retq2009 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2010 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float> %a2, <16 x float> %a1, <16 x float> %a0, i16 -1, i32 4)2011 ret <16 x float> %22012}2013declare <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)2014 2015define <16 x float> @stack_fold_fcmaddcph_mask(ptr %p, <16 x float> %a1, <16 x float> %a2, i16 %mask) {2016; CHECK-LABEL: stack_fold_fcmaddcph_mask:2017; CHECK: # %bb.0:2018; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill2019; CHECK-NEXT: kmovd %esi, %k12020; CHECK-NEXT: #APP2021; CHECK-NEXT: nop2022; CHECK-NEXT: #NO_APP2023; CHECK-NEXT: vmovaps (%rdi), %zmm22024; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload2025; CHECK-NEXT: vmovaps %zmm2, %zmm02026; CHECK-NEXT: retq2027 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2028 %a0 = load <16 x float>, ptr %p2029 %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> %a0, i16 %mask, i32 4)2030 ret <16 x float> %22031}2032 2033define <16 x float> @stack_fold_fcmaddcph_maskz(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, ptr %mask) {2034; CHECK-LABEL: stack_fold_fcmaddcph_maskz:2035; CHECK: # %bb.0:2036; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill2037; CHECK-NEXT: #APP2038; CHECK-NEXT: nop2039; CHECK-NEXT: #NO_APP2040; CHECK-NEXT: kmovw (%rdi), %k12041; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm02042; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload2043; CHECK-NEXT: retq2044 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2045 %2 = load i16, ptr %mask2046 %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> zeroinitializer, i16 %2, i32 4)2047 ret <16 x float> %32048}2049declare <16 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)2050 2051define <4 x float> @stack_fold_fmulcsh(<4 x float> %a0, <4 x float> %a1) {2052; CHECK-LABEL: stack_fold_fmulcsh:2053; CHECK: # %bb.0:2054; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2055; CHECK-NEXT: #APP2056; CHECK-NEXT: nop2057; CHECK-NEXT: #NO_APP2058; CHECK-NEXT: vfmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload2059; CHECK-NEXT: vmovaps %xmm2, %xmm02060; CHECK-NEXT: retq2061 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2062 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> undef, i8 -1, i32 4)2063 ret <4 x float> %22064}2065 2066define <4 x float> @stack_fold_fmulcsh_commute(<4 x float> %a0, <4 x float> %a1) {2067; CHECK-LABEL: stack_fold_fmulcsh_commute:2068; CHECK: # %bb.0:2069; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2070; CHECK-NEXT: #APP2071; CHECK-NEXT: nop2072; CHECK-NEXT: #NO_APP2073; CHECK-NEXT: vfmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload2074; CHECK-NEXT: vmovaps %xmm2, %xmm02075; CHECK-NEXT: retq2076 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2077 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %a1, <4 x float> %a0, <4 x float> undef, i8 -1, i32 4)2078 ret <4 x float> %22079}2080declare <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)2081 2082define <4 x float> @stack_fold_fmulcsh_mask(<4 x float> %a0, <4 x float> %a1, ptr %passthru, i8 %mask) {2083; CHECK-LABEL: stack_fold_fmulcsh_mask:2084; CHECK: # %bb.0:2085; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2086; CHECK-NEXT: kmovd %esi, %k12087; CHECK-NEXT: #APP2088; CHECK-NEXT: nop2089; CHECK-NEXT: #NO_APP2090; CHECK-NEXT: vmovaps (%rdi), %xmm22091; CHECK-NEXT: vfmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload2092; CHECK-NEXT: vmovaps %xmm2, %xmm02093; CHECK-NEXT: retq2094 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2095 %2 = load <4 x float>, ptr %passthru2096 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> %2, i8 %mask, i32 4)2097 ret <4 x float> %32098}2099 2100define <4 x float> @stack_fold_fmulcsh_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {2101; CHECK-LABEL: stack_fold_fmulcsh_maskz:2102; CHECK: # %bb.0:2103; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2104; CHECK-NEXT: #APP2105; CHECK-NEXT: nop2106; CHECK-NEXT: #NO_APP2107; CHECK-NEXT: movzbl (%rdi), %eax2108; CHECK-NEXT: kmovd %eax, %k12109; CHECK-NEXT: vfmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} {z} # 16-byte Folded Reload2110; CHECK-NEXT: vmovaps %xmm2, %xmm02111; CHECK-NEXT: retq2112 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2113 %2 = load i8, ptr %mask2114 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer, i8 %2, i32 4)2115 ret <4 x float> %32116}2117 2118define <4 x float> @stack_fold_fcmulcsh(<4 x float> %a0, <4 x float> %a1) {2119; CHECK-LABEL: stack_fold_fcmulcsh:2120; CHECK: # %bb.0:2121; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2122; CHECK-NEXT: #APP2123; CHECK-NEXT: nop2124; CHECK-NEXT: #NO_APP2125; CHECK-NEXT: vfcmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload2126; CHECK-NEXT: vmovaps %xmm2, %xmm02127; CHECK-NEXT: retq2128 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2129 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> undef, i8 -1, i32 4)2130 ret <4 x float> %22131}2132 2133define <4 x float> @stack_fold_fcmulcsh_commute(<4 x float> %a0, <4 x float> %a1) {2134; CHECK-LABEL: stack_fold_fcmulcsh_commute:2135; CHECK: # %bb.0:2136; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2137; CHECK-NEXT: #APP2138; CHECK-NEXT: nop2139; CHECK-NEXT: #NO_APP2140; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2141; CHECK-NEXT: vfcmulcsh %xmm0, %xmm1, %xmm22142; CHECK-NEXT: vmovaps %xmm2, %xmm02143; CHECK-NEXT: retq2144 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2145 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %a1, <4 x float> %a0, <4 x float> undef, i8 -1, i32 4)2146 ret <4 x float> %22147}2148declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)2149 2150define <4 x float> @stack_fold_fcmulcsh_mask(<4 x float> %a0, <4 x float> %a1, ptr %passthru, i8 %mask) {2151; CHECK-LABEL: stack_fold_fcmulcsh_mask:2152; CHECK: # %bb.0:2153; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2154; CHECK-NEXT: kmovd %esi, %k12155; CHECK-NEXT: #APP2156; CHECK-NEXT: nop2157; CHECK-NEXT: #NO_APP2158; CHECK-NEXT: vmovaps (%rdi), %xmm22159; CHECK-NEXT: vfcmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload2160; CHECK-NEXT: vmovaps %xmm2, %xmm02161; CHECK-NEXT: retq2162 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2163 %2 = load <4 x float>, ptr %passthru2164 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> %2, i8 %mask, i32 4)2165 ret <4 x float> %32166}2167 2168define <4 x float> @stack_fold_fcmulcsh_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {2169; CHECK-LABEL: stack_fold_fcmulcsh_maskz:2170; CHECK: # %bb.0:2171; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2172; CHECK-NEXT: #APP2173; CHECK-NEXT: nop2174; CHECK-NEXT: #NO_APP2175; CHECK-NEXT: movzbl (%rdi), %eax2176; CHECK-NEXT: kmovd %eax, %k12177; CHECK-NEXT: vfcmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} {z} # 16-byte Folded Reload2178; CHECK-NEXT: vmovaps %xmm2, %xmm02179; CHECK-NEXT: retq2180 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2181 %2 = load i8, ptr %mask2182 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer, i8 %2, i32 4)2183 ret <4 x float> %32184}2185 2186define <4 x float> @stack_fold_fmaddcsh(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {2187; CHECK-LABEL: stack_fold_fmaddcsh:2188; CHECK: # %bb.0:2189; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2190; CHECK-NEXT: #APP2191; CHECK-NEXT: nop2192; CHECK-NEXT: #NO_APP2193; CHECK-NEXT: vfmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2194; CHECK-NEXT: retq2195 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2196 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 -1, i32 4)2197 ret <4 x float> %22198}2199 2200define <4 x float> @stack_fold_fmaddcsh_commute(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {2201; CHECK-LABEL: stack_fold_fmaddcsh_commute:2202; CHECK: # %bb.0:2203; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2204; CHECK-NEXT: #APP2205; CHECK-NEXT: nop2206; CHECK-NEXT: #NO_APP2207; CHECK-NEXT: vfmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2208; CHECK-NEXT: retq2209 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2210 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %a2, <4 x float> %a1, <4 x float> %a0, i8 -1, i32 4)2211 ret <4 x float> %22212}2213declare <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)2214 2215define <4 x float> @stack_fold_fmaddcsh_mask(ptr %p, <4 x float> %a1, <4 x float> %a2, i8 %mask) {2216; CHECK-LABEL: stack_fold_fmaddcsh_mask:2217; CHECK: # %bb.0:2218; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2219; CHECK-NEXT: kmovd %esi, %k12220; CHECK-NEXT: #APP2221; CHECK-NEXT: nop2222; CHECK-NEXT: #NO_APP2223; CHECK-NEXT: vmovaps (%rdi), %xmm22224; CHECK-NEXT: vfmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload2225; CHECK-NEXT: vmovaps %xmm2, %xmm02226; CHECK-NEXT: retq2227 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2228 %a0 = load <4 x float>, ptr %p2229 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 %mask, i32 4)2230 ret <4 x float> %22231}2232 2233define <4 x float> @stack_fold_fmaddcsh_maskz(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, ptr %mask) {2234; CHECK-LABEL: stack_fold_fmaddcsh_maskz:2235; CHECK: # %bb.0:2236; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2237; CHECK-NEXT: #APP2238; CHECK-NEXT: nop2239; CHECK-NEXT: #NO_APP2240; CHECK-NEXT: movzbl (%rdi), %eax2241; CHECK-NEXT: kmovd %eax, %k12242; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm02243; CHECK-NEXT: vfmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2244; CHECK-NEXT: retq2245 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2246 %2 = load i8, ptr %mask2247 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> zeroinitializer, i8 %2, i32 4)2248 ret <4 x float> %32249}2250declare <4 x float> @llvm.x86.avx512fp16.maskz.vfmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)2251 2252define <4 x float> @stack_fold_fcmaddcsh(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {2253; CHECK-LABEL: stack_fold_fcmaddcsh:2254; CHECK: # %bb.0:2255; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2256; CHECK-NEXT: #APP2257; CHECK-NEXT: nop2258; CHECK-NEXT: #NO_APP2259; CHECK-NEXT: vfcmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2260; CHECK-NEXT: retq2261 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2262 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 -1, i32 4)2263 ret <4 x float> %22264}2265 2266define <4 x float> @stack_fold_fcmaddcsh_commute(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {2267; CHECK-LABEL: stack_fold_fcmaddcsh_commute:2268; CHECK: # %bb.0:2269; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2270; CHECK-NEXT: #APP2271; CHECK-NEXT: nop2272; CHECK-NEXT: #NO_APP2273; CHECK-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload2274; CHECK-NEXT: vfcmaddcsh %xmm1, %xmm2, %xmm02275; CHECK-NEXT: retq2276 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2277 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %a2, <4 x float> %a1, <4 x float> %a0, i8 -1, i32 4)2278 ret <4 x float> %22279}2280declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)2281 2282define <4 x float> @stack_fold_fcmaddcsh_mask(ptr %p, <4 x float> %a1, <4 x float> %a2, i8 %mask) {2283; CHECK-LABEL: stack_fold_fcmaddcsh_mask:2284; CHECK: # %bb.0:2285; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2286; CHECK-NEXT: kmovd %esi, %k12287; CHECK-NEXT: #APP2288; CHECK-NEXT: nop2289; CHECK-NEXT: #NO_APP2290; CHECK-NEXT: vmovaps (%rdi), %xmm22291; CHECK-NEXT: vfcmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload2292; CHECK-NEXT: vmovaps %xmm2, %xmm02293; CHECK-NEXT: retq2294 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2295 %a0 = load <4 x float>, ptr %p2296 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 %mask, i32 4)2297 ret <4 x float> %22298}2299 2300define <4 x float> @stack_fold_fcmaddcsh_maskz(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, ptr %mask) {2301; CHECK-LABEL: stack_fold_fcmaddcsh_maskz:2302; CHECK: # %bb.0:2303; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2304; CHECK-NEXT: #APP2305; CHECK-NEXT: nop2306; CHECK-NEXT: #NO_APP2307; CHECK-NEXT: movzbl (%rdi), %eax2308; CHECK-NEXT: kmovd %eax, %k12309; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm02310; CHECK-NEXT: vfcmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2311; CHECK-NEXT: retq2312 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()2313 %2 = load i8, ptr %mask2314 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> zeroinitializer, i8 %2, i32 4)2315 ret <4 x float> %32316}2317declare <4 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)2318 2319attributes #1 = { "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" }2320