1474 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512fp16 < %s | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-unknown"6 7; Stack reload folding tests.8;9; By including a nop call with sideeffects we can force a partial register spill of the10; relevant registers and check that the reload is correctly folded into the instruction.11 12define <8 x half> @stack_fold_addph(<8 x half> %a0, <8 x half> %a1) {13; CHECK-LABEL: stack_fold_addph:14; CHECK: # %bb.0:15; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill16; CHECK-NEXT: #APP17; CHECK-NEXT: nop18; CHECK-NEXT: #NO_APP19; CHECK-NEXT: vaddph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload20; CHECK-NEXT: retq21 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()22 %2 = fadd <8 x half> %a0, %a123 ret <8 x half> %224}25 26define <16 x half> @stack_fold_addph_ymm(<16 x half> %a0, <16 x half> %a1) {27; CHECK-LABEL: stack_fold_addph_ymm:28; CHECK: # %bb.0:29; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill30; CHECK-NEXT: #APP31; CHECK-NEXT: nop32; CHECK-NEXT: #NO_APP33; CHECK-NEXT: vaddph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload34; CHECK-NEXT: retq35 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()36 %2 = fadd <16 x half> %a0, %a137 ret <16 x half> %238}39 40define i8 @stack_fold_cmpph(<8 x half> %a0, <8 x half> %a1) {41; CHECK-LABEL: stack_fold_cmpph:42; CHECK: # %bb.0:43; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill44; CHECK-NEXT: #APP45; CHECK-NEXT: nop46; CHECK-NEXT: #NO_APP47; CHECK-NEXT: vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %k0 # 16-byte Folded Reload48; CHECK-NEXT: kmovd %k0, %eax49; CHECK-NEXT: # kill: def $al killed $al killed $eax50; CHECK-NEXT: retq51 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()52 %res = call <8 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.128(<8 x half> %a0, <8 x half> %a1, i32 0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>)53 %2 = bitcast <8 x i1> %res to i854 ret i8 %255}56declare <8 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.128(<8 x half>, <8 x half>, i32, <8 x i1>)57 58define i16 @stack_fold_cmpph_ymm(<16 x half> %a0, <16 x half> %a1) {59; CHECK-LABEL: stack_fold_cmpph_ymm:60; CHECK: # %bb.0:61; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill62; CHECK-NEXT: #APP63; CHECK-NEXT: nop64; CHECK-NEXT: #NO_APP65; CHECK-NEXT: vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %k0 # 32-byte Folded Reload66; CHECK-NEXT: kmovd %k0, %eax67; CHECK-NEXT: # kill: def $ax killed $ax killed $eax68; CHECK-NEXT: vzeroupper69; CHECK-NEXT: retq70 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()71 %res = call <16 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.256(<16 x half> %a0, <16 x half> %a1, i32 0, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>)72 %2 = bitcast <16 x i1> %res to i1673 ret i16 %274}75declare <16 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.256(<16 x half>, <16 x half>, i32, <16 x i1>)76 77define <8 x half> @stack_fold_divph(<8 x half> %a0, <8 x half> %a1) {78; CHECK-LABEL: stack_fold_divph:79; CHECK: # %bb.0:80; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill81; CHECK-NEXT: #APP82; CHECK-NEXT: nop83; CHECK-NEXT: #NO_APP84; CHECK-NEXT: vdivph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload85; CHECK-NEXT: retq86 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()87 %2 = fdiv <8 x half> %a0, %a188 ret <8 x half> %289}90 91define <16 x half> @stack_fold_divph_ymm(<16 x half> %a0, <16 x half> %a1) {92; CHECK-LABEL: stack_fold_divph_ymm:93; CHECK: # %bb.0:94; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill95; CHECK-NEXT: #APP96; CHECK-NEXT: nop97; CHECK-NEXT: #NO_APP98; CHECK-NEXT: vdivph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload99; CHECK-NEXT: retq100 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()101 %2 = fdiv <16 x half> %a0, %a1102 ret <16 x half> %2103}104 105define i8 @stack_fold_fpclassph(<8 x half> %a0) {106; CHECK-LABEL: stack_fold_fpclassph:107; CHECK: # %bb.0:108; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill109; CHECK-NEXT: #APP110; CHECK-NEXT: nop111; CHECK-NEXT: #NO_APP112; CHECK-NEXT: vfpclassphx $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 16-byte Folded Reload113; CHECK-NEXT: # k0 = isNegativeZero(mem)114; CHECK-NEXT: kmovd %k0, %eax115; CHECK-NEXT: # kill: def $al killed $al killed $eax116; CHECK-NEXT: retq117 %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}"()118 %2 = call <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half> %a0, i32 4)119 %3 = bitcast <8 x i1> %2 to i8120 ret i8 %3121}122declare <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half>, i32)123 124define i8 @stack_fold_fpclassph_mask(<8 x half> %a0, ptr %p) {125; CHECK-LABEL: stack_fold_fpclassph_mask:126; CHECK: # %bb.0:127; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill128; CHECK-NEXT: #APP129; CHECK-NEXT: nop130; CHECK-NEXT: #NO_APP131; CHECK-NEXT: movzbl (%rdi), %eax132; CHECK-NEXT: kmovd %eax, %k1133; CHECK-NEXT: vfpclassphx $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 {%k1} # 16-byte Folded Reload134; CHECK-NEXT: kmovd %k0, %eax135; CHECK-NEXT: # kill: def $al killed $al killed $eax136; CHECK-NEXT: retq137 %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}"()138 %2 = call <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half> %a0, i32 4)139 %mask = load <8 x i1>, ptr %p140 %3 = and <8 x i1> %2, %mask141 %4 = bitcast <8 x i1> %3 to i8142 ret i8 %4143}144 145define i16 @stack_fold_fpclassph_ymm(<16 x half> %a0) {146; CHECK-LABEL: stack_fold_fpclassph_ymm:147; CHECK: # %bb.0:148; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill149; CHECK-NEXT: #APP150; CHECK-NEXT: nop151; CHECK-NEXT: #NO_APP152; CHECK-NEXT: vfpclassphy $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 32-byte Folded Reload153; CHECK-NEXT: # k0 = isNegativeZero(mem)154; CHECK-NEXT: kmovd %k0, %eax155; CHECK-NEXT: # kill: def $ax killed $ax killed $eax156; CHECK-NEXT: vzeroupper157; CHECK-NEXT: retq158 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()159 %2 = call <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half> %a0, i32 4)160 %3 = bitcast <16 x i1> %2 to i16161 ret i16 %3162}163declare <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half>, i32)164 165define i16 @stack_fold_fpclassph_mask_ymm(<16 x half> %a0, ptr %p) {166; CHECK-LABEL: stack_fold_fpclassph_mask_ymm:167; CHECK: # %bb.0:168; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill169; CHECK-NEXT: #APP170; CHECK-NEXT: nop171; CHECK-NEXT: #NO_APP172; CHECK-NEXT: kmovw (%rdi), %k1173; CHECK-NEXT: vfpclassphy $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 {%k1} # 32-byte Folded Reload174; CHECK-NEXT: kmovd %k0, %eax175; CHECK-NEXT: # kill: def $ax killed $ax killed $eax176; CHECK-NEXT: vzeroupper177; CHECK-NEXT: retq178 %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}"()179 %2 = call <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half> %a0, i32 4)180 %mask = load <16 x i1>, ptr %p181 %3 = and <16 x i1> %2, %mask182 %4 = bitcast <16 x i1> %3 to i16183 ret i16 %4184}185 186define <8 x half> @stack_fold_getexpph(<8 x half> %a0) {187; CHECK-LABEL: stack_fold_getexpph:188; CHECK: # %bb.0:189; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill190; CHECK-NEXT: #APP191; CHECK-NEXT: nop192; CHECK-NEXT: #NO_APP193; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload194; CHECK-NEXT: retq195 %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}"()196 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %a0, <8 x half> undef, i8 -1)197 ret <8 x half> %2198}199declare <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half>, <8 x half>, i8)200 201define <8 x half> @stack_fold_getexpph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {202; CHECK-LABEL: stack_fold_getexpph_mask:203; CHECK: # %bb.0:204; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill205; CHECK-NEXT: kmovd %esi, %k1206; CHECK-NEXT: #APP207; CHECK-NEXT: nop208; CHECK-NEXT: #NO_APP209; CHECK-NEXT: vmovaps (%rdi), %xmm1210; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload211; CHECK-NEXT: vmovaps %xmm1, %xmm0212; CHECK-NEXT: retq213 %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}"()214 %2 = load <8 x half>, ptr %passthru215 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %a0, <8 x half> %2, i8 %mask)216 ret <8 x half> %3217}218 219define <8 x half> @stack_fold_getexpph_maskz(<8 x half> %a0, ptr %mask) {220; CHECK-LABEL: stack_fold_getexpph_maskz:221; CHECK: # %bb.0:222; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill223; CHECK-NEXT: #APP224; CHECK-NEXT: nop225; CHECK-NEXT: #NO_APP226; CHECK-NEXT: movzbl (%rdi), %eax227; CHECK-NEXT: kmovd %eax, %k1228; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload229; CHECK-NEXT: retq230 %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}"()231 %2 = load i8, ptr %mask232 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %a0, <8 x half> zeroinitializer, i8 %2)233 ret <8 x half> %3234}235 236define <16 x half> @stack_fold_getexpph_ymm(<16 x half> %a0) {237; CHECK-LABEL: stack_fold_getexpph_ymm:238; CHECK: # %bb.0:239; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill240; CHECK-NEXT: #APP241; CHECK-NEXT: nop242; CHECK-NEXT: #NO_APP243; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload244; CHECK-NEXT: retq245 %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}"()246 %2 = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %a0, <16 x half> undef, i16 -1)247 ret <16 x half> %2248}249declare <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half>, <16 x half>, i16)250 251define <16 x half> @stack_fold_getexpph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {252; CHECK-LABEL: stack_fold_getexpph_mask_ymm:253; CHECK: # %bb.0:254; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill255; CHECK-NEXT: kmovd %esi, %k1256; CHECK-NEXT: #APP257; CHECK-NEXT: nop258; CHECK-NEXT: #NO_APP259; CHECK-NEXT: vmovaps (%rdi), %ymm1260; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload261; CHECK-NEXT: vmovaps %ymm1, %ymm0262; CHECK-NEXT: retq263 %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}"()264 %2 = load <16 x half>, ptr %passthru265 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %a0, <16 x half> %2, i16 %mask)266 ret <16 x half> %3267}268 269define <16 x half> @stack_fold_getexpph_maskz_ymm(<16 x half> %a0, ptr %mask) {270; CHECK-LABEL: stack_fold_getexpph_maskz_ymm:271; CHECK: # %bb.0:272; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill273; CHECK-NEXT: #APP274; CHECK-NEXT: nop275; CHECK-NEXT: #NO_APP276; CHECK-NEXT: kmovw (%rdi), %k1277; CHECK-NEXT: vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload278; CHECK-NEXT: retq279 %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}"()280 %2 = load i16, ptr %mask281 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %a0, <16 x half> zeroinitializer, i16 %2)282 ret <16 x half> %3283}284 285define <8 x half> @stack_fold_getmantph(<8 x half> %a0) {286; CHECK-LABEL: stack_fold_getmantph:287; CHECK: # %bb.0:288; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill289; CHECK-NEXT: #APP290; CHECK-NEXT: nop291; CHECK-NEXT: #NO_APP292; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload293; CHECK-NEXT: retq294 %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}"()295 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half> %a0, i32 8, <8 x half> undef, i8 -1)296 ret <8 x half> %2297}298declare <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half>, i32, <8 x half>, i8)299 300define <8 x half> @stack_fold_getmantph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {301; CHECK-LABEL: stack_fold_getmantph_mask:302; CHECK: # %bb.0:303; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill304; CHECK-NEXT: kmovd %esi, %k1305; CHECK-NEXT: #APP306; CHECK-NEXT: nop307; CHECK-NEXT: #NO_APP308; CHECK-NEXT: vmovaps (%rdi), %xmm1309; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload310; CHECK-NEXT: vmovaps %xmm1, %xmm0311; CHECK-NEXT: retq312 %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}"()313 %2 = load <8 x half>, ptr %passthru314 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half> %a0, i32 8, <8 x half> %2, i8 %mask)315 ret <8 x half> %3316}317 318define <8 x half> @stack_fold_getmantph_maskz(<8 x half> %a0, ptr %mask) {319; CHECK-LABEL: stack_fold_getmantph_maskz:320; CHECK: # %bb.0:321; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill322; CHECK-NEXT: #APP323; CHECK-NEXT: nop324; CHECK-NEXT: #NO_APP325; CHECK-NEXT: movzbl (%rdi), %eax326; CHECK-NEXT: kmovd %eax, %k1327; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload328; CHECK-NEXT: retq329 %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}"()330 %2 = load i8, ptr %mask331 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half> %a0, i32 8, <8 x half> zeroinitializer, i8 %2)332 ret <8 x half> %3333}334 335define <16 x half> @stack_fold_getmantph_ymm(<16 x half> %a0) {336; CHECK-LABEL: stack_fold_getmantph_ymm:337; CHECK: # %bb.0:338; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill339; CHECK-NEXT: #APP340; CHECK-NEXT: nop341; CHECK-NEXT: #NO_APP342; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload343; CHECK-NEXT: retq344 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()345 %2 = call <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half> %a0, i32 8, <16 x half> undef, i16 -1)346 ret <16 x half> %2347}348declare <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half>, i32, <16 x half>, i16)349 350define <16 x half> @stack_fold_getmantph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {351; CHECK-LABEL: stack_fold_getmantph_mask_ymm:352; CHECK: # %bb.0:353; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill354; CHECK-NEXT: kmovd %esi, %k1355; CHECK-NEXT: #APP356; CHECK-NEXT: nop357; CHECK-NEXT: #NO_APP358; CHECK-NEXT: vmovaps (%rdi), %ymm1359; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload360; CHECK-NEXT: vmovaps %ymm1, %ymm0361; CHECK-NEXT: retq362 %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}"()363 %2 = load <16 x half>, ptr %passthru364 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half> %a0, i32 8, <16 x half> %2, i16 %mask)365 ret <16 x half> %3366}367 368define <16 x half> @stack_fold_getmantph_maskz_ymm(<16 x half> %a0, ptr %mask) {369; CHECK-LABEL: stack_fold_getmantph_maskz_ymm:370; CHECK: # %bb.0:371; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill372; CHECK-NEXT: #APP373; CHECK-NEXT: nop374; CHECK-NEXT: #NO_APP375; CHECK-NEXT: kmovw (%rdi), %k1376; CHECK-NEXT: vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload377; CHECK-NEXT: retq378 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()379 %2 = load i16, ptr %mask380 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half> %a0, i32 8, <16 x half> zeroinitializer, i16 %2)381 ret <16 x half> %3382}383 384define <8 x half> @stack_fold_maxph(<8 x half> %a0, <8 x half> %a1) {385; CHECK-LABEL: stack_fold_maxph:386; CHECK: # %bb.0:387; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill388; CHECK-NEXT: #APP389; CHECK-NEXT: nop390; CHECK-NEXT: #NO_APP391; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload392; CHECK-NEXT: retq393 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()394 %2 = call <8 x half> @llvm.x86.avx512fp16.max.ph.128(<8 x half> %a0, <8 x half> %a1)395 ret <8 x half> %2396}397declare <8 x half> @llvm.x86.avx512fp16.max.ph.128(<8 x half>, <8 x half>) nounwind readnone398 399define <8 x half> @stack_fold_maxph_commutable(<8 x half> %a0, <8 x half> %a1) {400; CHECK-LABEL: stack_fold_maxph_commutable:401; CHECK: # %bb.0:402; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill403; CHECK-NEXT: #APP404; CHECK-NEXT: nop405; CHECK-NEXT: #NO_APP406; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload407; CHECK-NEXT: retq408 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()409 %2 = call <8 x half> @llvm.x86.avx512fp16.max.ph.128(<8 x half> %a0, <8 x half> %a1)410 ret <8 x half> %2411}412 413define <16 x half> @stack_fold_maxph_ymm(<16 x half> %a0, <16 x half> %a1) {414; CHECK-LABEL: stack_fold_maxph_ymm:415; CHECK: # %bb.0:416; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill417; CHECK-NEXT: #APP418; CHECK-NEXT: nop419; CHECK-NEXT: #NO_APP420; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload421; CHECK-NEXT: retq422 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()423 %2 = call <16 x half> @llvm.x86.avx512fp16.max.ph.256(<16 x half> %a0, <16 x half> %a1)424 ret <16 x half> %2425}426declare <16 x half> @llvm.x86.avx512fp16.max.ph.256(<16 x half>, <16 x half>) nounwind readnone427 428define <16 x half> @stack_fold_maxph_ymm_commutable(<16 x half> %a0, <16 x half> %a1) {429; CHECK-LABEL: stack_fold_maxph_ymm_commutable:430; CHECK: # %bb.0:431; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill432; CHECK-NEXT: #APP433; CHECK-NEXT: nop434; CHECK-NEXT: #NO_APP435; CHECK-NEXT: vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload436; CHECK-NEXT: retq437 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()438 %2 = call <16 x half> @llvm.x86.avx512fp16.max.ph.256(<16 x half> %a0, <16 x half> %a1)439 ret <16 x half> %2440}441 442define <8 x half> @stack_fold_minph(<8 x half> %a0, <8 x half> %a1) {443; CHECK-LABEL: stack_fold_minph:444; CHECK: # %bb.0:445; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill446; CHECK-NEXT: #APP447; CHECK-NEXT: nop448; CHECK-NEXT: #NO_APP449; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload450; CHECK-NEXT: retq451 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()452 %2 = call <8 x half> @llvm.x86.avx512fp16.min.ph.128(<8 x half> %a0, <8 x half> %a1)453 ret <8 x half> %2454}455declare <8 x half> @llvm.x86.avx512fp16.min.ph.128(<8 x half>, <8 x half>) nounwind readnone456 457define <8 x half> @stack_fold_minph_commutable(<8 x half> %a0, <8 x half> %a1) {458; CHECK-LABEL: stack_fold_minph_commutable:459; CHECK: # %bb.0:460; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill461; CHECK-NEXT: #APP462; CHECK-NEXT: nop463; CHECK-NEXT: #NO_APP464; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload465; CHECK-NEXT: retq466 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()467 %2 = call <8 x half> @llvm.x86.avx512fp16.min.ph.128(<8 x half> %a0, <8 x half> %a1)468 ret <8 x half> %2469}470 471define <16 x half> @stack_fold_minph_ymm(<16 x half> %a0, <16 x half> %a1) {472; CHECK-LABEL: stack_fold_minph_ymm:473; CHECK: # %bb.0:474; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill475; CHECK-NEXT: #APP476; CHECK-NEXT: nop477; CHECK-NEXT: #NO_APP478; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload479; CHECK-NEXT: retq480 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()481 %2 = call <16 x half> @llvm.x86.avx512fp16.min.ph.256(<16 x half> %a0, <16 x half> %a1)482 ret <16 x half> %2483}484declare <16 x half> @llvm.x86.avx512fp16.min.ph.256(<16 x half>, <16 x half>) nounwind readnone485 486define <16 x half> @stack_fold_minph_ymm_commutable(<16 x half> %a0, <16 x half> %a1) {487; CHECK-LABEL: stack_fold_minph_ymm_commutable:488; CHECK: # %bb.0:489; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill490; CHECK-NEXT: #APP491; CHECK-NEXT: nop492; CHECK-NEXT: #NO_APP493; CHECK-NEXT: vminph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload494; CHECK-NEXT: retq495 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()496 %2 = call <16 x half> @llvm.x86.avx512fp16.min.ph.256(<16 x half> %a0, <16 x half> %a1)497 ret <16 x half> %2498}499 500define <8 x half> @stack_fold_mulph(<8 x half> %a0, <8 x half> %a1) {501; CHECK-LABEL: stack_fold_mulph:502; CHECK: # %bb.0:503; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill504; CHECK-NEXT: #APP505; CHECK-NEXT: nop506; CHECK-NEXT: #NO_APP507; CHECK-NEXT: vmulph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload508; CHECK-NEXT: retq509 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()510 %2 = fmul <8 x half> %a0, %a1511 ret <8 x half> %2512}513 514define <16 x half> @stack_fold_mulph_ymm(<16 x half> %a0, <16 x half> %a1) {515; CHECK-LABEL: stack_fold_mulph_ymm:516; CHECK: # %bb.0:517; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill518; CHECK-NEXT: #APP519; CHECK-NEXT: nop520; CHECK-NEXT: #NO_APP521; CHECK-NEXT: vmulph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload522; CHECK-NEXT: retq523 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()524 %2 = fmul <16 x half> %a0, %a1525 ret <16 x half> %2526}527 528define <8 x half> @stack_fold_rcpph(<8 x half> %a0) {529; CHECK-LABEL: stack_fold_rcpph:530; CHECK: # %bb.0:531; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill532; CHECK-NEXT: #APP533; CHECK-NEXT: nop534; CHECK-NEXT: #NO_APP535; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload536; CHECK-NEXT: retq537 %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}"()538 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half> %a0, <8 x half> undef, i8 -1)539 ret <8 x half> %2540}541declare <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half>, <8 x half>, i8)542 543define <8 x half> @stack_fold_rcpph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {544; CHECK-LABEL: stack_fold_rcpph_mask:545; CHECK: # %bb.0:546; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill547; CHECK-NEXT: kmovd %esi, %k1548; CHECK-NEXT: #APP549; CHECK-NEXT: nop550; CHECK-NEXT: #NO_APP551; CHECK-NEXT: vmovaps (%rdi), %xmm1552; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload553; CHECK-NEXT: vmovaps %xmm1, %xmm0554; CHECK-NEXT: retq555 %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}"()556 %2 = load <8 x half>, ptr %passthru557 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half> %a0, <8 x half> %2, i8 %mask)558 ret <8 x half> %3559}560 561define <8 x half> @stack_fold_rcpph_maskz(<8 x half> %a0, ptr %mask) {562; CHECK-LABEL: stack_fold_rcpph_maskz:563; CHECK: # %bb.0:564; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill565; CHECK-NEXT: #APP566; CHECK-NEXT: nop567; CHECK-NEXT: #NO_APP568; CHECK-NEXT: movzbl (%rdi), %eax569; CHECK-NEXT: kmovd %eax, %k1570; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload571; CHECK-NEXT: retq572 %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}"()573 %2 = load i8, ptr %mask574 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half> %a0, <8 x half> zeroinitializer, i8 %2)575 ret <8 x half> %3576}577 578define <16 x half> @stack_fold_rcpph_ymm(<16 x half> %a0) {579; CHECK-LABEL: stack_fold_rcpph_ymm:580; CHECK: # %bb.0:581; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill582; CHECK-NEXT: #APP583; CHECK-NEXT: nop584; CHECK-NEXT: #NO_APP585; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload586; CHECK-NEXT: retq587 %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}"()588 %2 = call <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half> %a0, <16 x half> undef, i16 -1)589 ret <16 x half> %2590}591declare <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half>, <16 x half>, i16)592 593define <16 x half> @stack_fold_rcpph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {594; CHECK-LABEL: stack_fold_rcpph_mask_ymm:595; CHECK: # %bb.0:596; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill597; CHECK-NEXT: kmovd %esi, %k1598; CHECK-NEXT: #APP599; CHECK-NEXT: nop600; CHECK-NEXT: #NO_APP601; CHECK-NEXT: vmovaps (%rdi), %ymm1602; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload603; CHECK-NEXT: vmovaps %ymm1, %ymm0604; CHECK-NEXT: retq605 %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}"()606 %2 = load <16 x half>, ptr %passthru607 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half> %a0, <16 x half> %2, i16 %mask)608 ret <16 x half> %3609}610 611define <16 x half> @stack_fold_rcpph_maskz_ymm(<16 x half> %a0, ptr %mask) {612; CHECK-LABEL: stack_fold_rcpph_maskz_ymm:613; CHECK: # %bb.0:614; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill615; CHECK-NEXT: #APP616; CHECK-NEXT: nop617; CHECK-NEXT: #NO_APP618; CHECK-NEXT: kmovw (%rdi), %k1619; CHECK-NEXT: vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload620; CHECK-NEXT: retq621 %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}"()622 %2 = load i16, ptr %mask623 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half> %a0, <16 x half> zeroinitializer, i16 %2)624 ret <16 x half> %3625}626 627define <8 x half> @stack_fold_reduceph(<8 x half> %a0) {628; CHECK-LABEL: stack_fold_reduceph:629; CHECK: # %bb.0:630; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill631; CHECK-NEXT: #APP632; CHECK-NEXT: nop633; CHECK-NEXT: #NO_APP634; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload635; CHECK-NEXT: retq636 %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}"()637 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half> %a0, i32 8, <8 x half> undef, i8 -1)638 ret <8 x half> %2639}640declare <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half>, i32, <8 x half>, i8)641 642define <8 x half> @stack_fold_reduceph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {643; CHECK-LABEL: stack_fold_reduceph_mask:644; CHECK: # %bb.0:645; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill646; CHECK-NEXT: kmovd %esi, %k1647; CHECK-NEXT: #APP648; CHECK-NEXT: nop649; CHECK-NEXT: #NO_APP650; CHECK-NEXT: vmovaps (%rdi), %xmm1651; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload652; CHECK-NEXT: vmovaps %xmm1, %xmm0653; CHECK-NEXT: retq654 %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}"()655 %2 = load <8 x half>, ptr %passthru656 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half> %a0, i32 8, <8 x half> %2, i8 %mask)657 ret <8 x half> %3658}659 660define <8 x half> @stack_fold_reduceph_maskz(<8 x half> %a0, ptr %mask) {661; CHECK-LABEL: stack_fold_reduceph_maskz:662; CHECK: # %bb.0:663; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill664; CHECK-NEXT: #APP665; CHECK-NEXT: nop666; CHECK-NEXT: #NO_APP667; CHECK-NEXT: movzbl (%rdi), %eax668; CHECK-NEXT: kmovd %eax, %k1669; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload670; CHECK-NEXT: retq671 %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}"()672 %2 = load i8, ptr %mask673 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half> %a0, i32 8, <8 x half> zeroinitializer, i8 %2)674 ret <8 x half> %3675}676 677define <16 x half> @stack_fold_reduceph_ymm(<16 x half> %a0) {678; CHECK-LABEL: stack_fold_reduceph_ymm:679; CHECK: # %bb.0:680; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill681; CHECK-NEXT: #APP682; CHECK-NEXT: nop683; CHECK-NEXT: #NO_APP684; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload685; CHECK-NEXT: retq686 %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}"()687 %2 = call <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half> %a0, i32 8, <16 x half> undef, i16 -1)688 ret <16 x half> %2689}690declare <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half>, i32, <16 x half>, i16)691 692define <16 x half> @stack_fold_reduceph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {693; CHECK-LABEL: stack_fold_reduceph_mask_ymm:694; CHECK: # %bb.0:695; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill696; CHECK-NEXT: kmovd %esi, %k1697; CHECK-NEXT: #APP698; CHECK-NEXT: nop699; CHECK-NEXT: #NO_APP700; CHECK-NEXT: vmovaps (%rdi), %ymm1701; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload702; CHECK-NEXT: vmovaps %ymm1, %ymm0703; CHECK-NEXT: retq704 %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}"()705 %2 = load <16 x half>, ptr %passthru706 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half> %a0, i32 8, <16 x half> %2, i16 %mask)707 ret <16 x half> %3708}709 710define <16 x half> @stack_fold_reduceph_maskz_ymm(<16 x half> %a0, ptr %mask) {711; CHECK-LABEL: stack_fold_reduceph_maskz_ymm:712; CHECK: # %bb.0:713; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill714; CHECK-NEXT: #APP715; CHECK-NEXT: nop716; CHECK-NEXT: #NO_APP717; CHECK-NEXT: kmovw (%rdi), %k1718; CHECK-NEXT: vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload719; CHECK-NEXT: retq720 %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}"()721 %2 = load i16, ptr %mask722 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half> %a0, i32 8, <16 x half> zeroinitializer, i16 %2)723 ret <16 x half> %3724}725 726define <8 x half> @stack_fold_rndscaleph(<8 x half> %a0) {727; CHECK-LABEL: stack_fold_rndscaleph:728; CHECK: # %bb.0:729; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill730; CHECK-NEXT: #APP731; CHECK-NEXT: nop732; CHECK-NEXT: #NO_APP733; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload734; CHECK-NEXT: retq735 %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}"()736 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half> %a0, i32 8, <8 x half> undef, i8 -1)737 ret <8 x half> %2738}739declare <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half>, i32, <8 x half>, i8)740 741define <8 x half> @stack_fold_rndscaleph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {742; CHECK-LABEL: stack_fold_rndscaleph_mask:743; CHECK: # %bb.0:744; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill745; CHECK-NEXT: kmovd %esi, %k1746; CHECK-NEXT: #APP747; CHECK-NEXT: nop748; CHECK-NEXT: #NO_APP749; CHECK-NEXT: vmovaps (%rdi), %xmm1750; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload751; CHECK-NEXT: vmovaps %xmm1, %xmm0752; CHECK-NEXT: retq753 %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}"()754 %2 = load <8 x half>, ptr %passthru755 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half> %a0, i32 8, <8 x half> %2, i8 %mask)756 ret <8 x half> %3757}758 759define <8 x half> @stack_fold_rndscaleph_maskz(<8 x half> %a0, ptr %mask) {760; CHECK-LABEL: stack_fold_rndscaleph_maskz:761; CHECK: # %bb.0:762; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill763; CHECK-NEXT: #APP764; CHECK-NEXT: nop765; CHECK-NEXT: #NO_APP766; CHECK-NEXT: movzbl (%rdi), %eax767; CHECK-NEXT: kmovd %eax, %k1768; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload769; CHECK-NEXT: retq770 %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}"()771 %2 = load i8, ptr %mask772 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half> %a0, i32 8, <8 x half> zeroinitializer, i8 %2)773 ret <8 x half> %3774}775 776define <16 x half> @stack_fold_rndscaleph_ymm(<16 x half> %a0) {777; CHECK-LABEL: stack_fold_rndscaleph_ymm:778; CHECK: # %bb.0:779; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill780; CHECK-NEXT: #APP781; CHECK-NEXT: nop782; CHECK-NEXT: #NO_APP783; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload784; CHECK-NEXT: retq785 %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}"()786 %2 = call <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half> %a0, i32 8, <16 x half> undef, i16 -1)787 ret <16 x half> %2788}789declare <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half>, i32, <16 x half>, i16)790 791define <16 x half> @stack_fold_rndscaleph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {792; CHECK-LABEL: stack_fold_rndscaleph_mask_ymm:793; CHECK: # %bb.0:794; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill795; CHECK-NEXT: kmovd %esi, %k1796; CHECK-NEXT: #APP797; CHECK-NEXT: nop798; CHECK-NEXT: #NO_APP799; CHECK-NEXT: vmovaps (%rdi), %ymm1800; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload801; CHECK-NEXT: vmovaps %ymm1, %ymm0802; CHECK-NEXT: retq803 %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}"()804 %2 = load <16 x half>, ptr %passthru805 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half> %a0, i32 8, <16 x half> %2, i16 %mask)806 ret <16 x half> %3807}808 809define <16 x half> @stack_fold_rndscaleph_maskz_ymm(<16 x half> %a0, ptr %mask) {810; CHECK-LABEL: stack_fold_rndscaleph_maskz_ymm:811; CHECK: # %bb.0:812; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill813; CHECK-NEXT: #APP814; CHECK-NEXT: nop815; CHECK-NEXT: #NO_APP816; CHECK-NEXT: kmovw (%rdi), %k1817; CHECK-NEXT: vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload818; CHECK-NEXT: retq819 %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}"()820 %2 = load i16, ptr %mask821 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half> %a0, i32 8, <16 x half> zeroinitializer, i16 %2)822 ret <16 x half> %3823}824 825define <8 x half> @stack_fold_rsqrtph(<8 x half> %a0) {826; CHECK-LABEL: stack_fold_rsqrtph:827; CHECK: # %bb.0:828; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill829; CHECK-NEXT: #APP830; CHECK-NEXT: nop831; CHECK-NEXT: #NO_APP832; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload833; CHECK-NEXT: retq834 %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}"()835 %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half> %a0, <8 x half> undef, i8 -1)836 ret <8 x half> %2837}838declare <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half>, <8 x half>, i8)839 840define <8 x half> @stack_fold_rsqrtph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {841; CHECK-LABEL: stack_fold_rsqrtph_mask:842; CHECK: # %bb.0:843; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill844; CHECK-NEXT: kmovd %esi, %k1845; CHECK-NEXT: #APP846; CHECK-NEXT: nop847; CHECK-NEXT: #NO_APP848; CHECK-NEXT: vmovaps (%rdi), %xmm1849; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload850; CHECK-NEXT: vmovaps %xmm1, %xmm0851; CHECK-NEXT: retq852 %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}"()853 %2 = load <8 x half>, ptr %passthru854 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half> %a0, <8 x half> %2, i8 %mask)855 ret <8 x half> %3856}857 858define <8 x half> @stack_fold_rsqrtph_maskz(<8 x half> %a0, ptr %mask) {859; CHECK-LABEL: stack_fold_rsqrtph_maskz:860; CHECK: # %bb.0:861; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill862; CHECK-NEXT: #APP863; CHECK-NEXT: nop864; CHECK-NEXT: #NO_APP865; CHECK-NEXT: movzbl (%rdi), %eax866; CHECK-NEXT: kmovd %eax, %k1867; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload868; CHECK-NEXT: retq869 %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}"()870 %2 = load i8, ptr %mask871 %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half> %a0, <8 x half> zeroinitializer, i8 %2)872 ret <8 x half> %3873}874 875define <16 x half> @stack_fold_rsqrtph_ymm(<16 x half> %a0) {876; CHECK-LABEL: stack_fold_rsqrtph_ymm:877; CHECK: # %bb.0:878; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill879; CHECK-NEXT: #APP880; CHECK-NEXT: nop881; CHECK-NEXT: #NO_APP882; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload883; CHECK-NEXT: retq884 %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}"()885 %2 = call <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half> %a0, <16 x half> undef, i16 -1)886 ret <16 x half> %2887}888declare <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half>, <16 x half>, i16)889 890define <16 x half> @stack_fold_rsqrtph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {891; CHECK-LABEL: stack_fold_rsqrtph_mask_ymm:892; CHECK: # %bb.0:893; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill894; CHECK-NEXT: kmovd %esi, %k1895; CHECK-NEXT: #APP896; CHECK-NEXT: nop897; CHECK-NEXT: #NO_APP898; CHECK-NEXT: vmovaps (%rdi), %ymm1899; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload900; CHECK-NEXT: vmovaps %ymm1, %ymm0901; CHECK-NEXT: retq902 %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}"()903 %2 = load <16 x half>, ptr %passthru904 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half> %a0, <16 x half> %2, i16 %mask)905 ret <16 x half> %3906}907 908define <16 x half> @stack_fold_rsqrtph_maskz_ymm(<16 x half> %a0, ptr %mask) {909; CHECK-LABEL: stack_fold_rsqrtph_maskz_ymm:910; CHECK: # %bb.0:911; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill912; CHECK-NEXT: #APP913; CHECK-NEXT: nop914; CHECK-NEXT: #NO_APP915; CHECK-NEXT: kmovw (%rdi), %k1916; CHECK-NEXT: vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload917; CHECK-NEXT: retq918 %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}"()919 %2 = load i16, ptr %mask920 %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half> %a0, <16 x half> zeroinitializer, i16 %2)921 ret <16 x half> %3922}923 924define <8 x half> @stack_fold_sqrtph(<8 x half> %a0) {925; CHECK-LABEL: stack_fold_sqrtph:926; CHECK: # %bb.0:927; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill928; CHECK-NEXT: #APP929; CHECK-NEXT: nop930; CHECK-NEXT: #NO_APP931; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload932; CHECK-NEXT: retq933 %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}"()934 %2 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)935 ret <8 x half> %2936}937declare <8 x half> @llvm.sqrt.v8f16(<8 x half>)938 939define <8 x half> @stack_fold_sqrtph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {940; CHECK-LABEL: stack_fold_sqrtph_mask:941; CHECK: # %bb.0:942; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill943; CHECK-NEXT: #APP944; CHECK-NEXT: nop945; CHECK-NEXT: #NO_APP946; CHECK-NEXT: vmovaps (%rdi), %xmm1947; CHECK-NEXT: kmovd %esi, %k1948; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload949; CHECK-NEXT: vmovaps %xmm1, %xmm0950; CHECK-NEXT: retq951 %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}"()952 %2 = load <8 x half>, ptr %passthru953 %3 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)954 %4 = bitcast i8 %mask to <8 x i1>955 %5 = select <8 x i1> %4, <8 x half> %3, <8 x half> %2956 ret <8 x half> %5957}958 959define <8 x half> @stack_fold_sqrtph_maskz(<8 x half> %a0, ptr %mask) {960; CHECK-LABEL: stack_fold_sqrtph_maskz:961; CHECK: # %bb.0:962; CHECK-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill963; CHECK-NEXT: #APP964; CHECK-NEXT: nop965; CHECK-NEXT: #NO_APP966; CHECK-NEXT: movzbl (%rdi), %eax967; CHECK-NEXT: kmovd %eax, %k1968; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload969; CHECK-NEXT: retq970 %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}"()971 %2 = load i8, ptr %mask972 %3 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)973 %4 = bitcast i8 %2 to <8 x i1>974 %5 = select <8 x i1> %4, <8 x half> %3, <8 x half> zeroinitializer975 ret <8 x half> %5976}977 978define <16 x half> @stack_fold_sqrtph_ymm(<16 x half> %a0) {979; CHECK-LABEL: stack_fold_sqrtph_ymm:980; CHECK: # %bb.0:981; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill982; CHECK-NEXT: #APP983; CHECK-NEXT: nop984; CHECK-NEXT: #NO_APP985; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload986; CHECK-NEXT: retq987 %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}"()988 %2 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)989 ret <16 x half> %2990}991declare <16 x half> @llvm.sqrt.v16f16(<16 x half>)992 993define <16 x half> @stack_fold_sqrtph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {994; CHECK-LABEL: stack_fold_sqrtph_mask_ymm:995; CHECK: # %bb.0:996; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill997; CHECK-NEXT: #APP998; CHECK-NEXT: nop999; CHECK-NEXT: #NO_APP1000; CHECK-NEXT: vmovaps (%rdi), %ymm11001; CHECK-NEXT: kmovd %esi, %k11002; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload1003; CHECK-NEXT: vmovaps %ymm1, %ymm01004; CHECK-NEXT: retq1005 %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}"()1006 %2 = load <16 x half>, ptr %passthru1007 %3 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)1008 %4 = bitcast i16 %mask to <16 x i1>1009 %5 = select <16 x i1> %4, <16 x half> %3, <16 x half> %21010 ret <16 x half> %51011}1012 1013define <16 x half> @stack_fold_sqrtph_maskz_ymm(<16 x half> %a0, ptr %mask) {1014; CHECK-LABEL: stack_fold_sqrtph_maskz_ymm:1015; CHECK: # %bb.0:1016; CHECK-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1017; CHECK-NEXT: #APP1018; CHECK-NEXT: nop1019; CHECK-NEXT: #NO_APP1020; CHECK-NEXT: kmovw (%rdi), %k11021; CHECK-NEXT: vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload1022; CHECK-NEXT: retq1023 %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}"()1024 %2 = load i16, ptr %mask1025 %3 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)1026 %4 = bitcast i16 %2 to <16 x i1>1027 %5 = select <16 x i1> %4, <16 x half> %3, <16 x half> zeroinitializer1028 ret <16 x half> %51029}1030 1031define <8 x half> @stack_fold_subph(<8 x half> %a0, <8 x half> %a1) {1032; CHECK-LABEL: stack_fold_subph:1033; CHECK: # %bb.0:1034; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1035; CHECK-NEXT: #APP1036; CHECK-NEXT: nop1037; CHECK-NEXT: #NO_APP1038; CHECK-NEXT: vsubph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-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 = fsub <8 x half> %a0, %a11042 ret <8 x half> %21043}1044 1045define <16 x half> @stack_fold_subph_ymm(<16 x half> %a0, <16 x half> %a1) {1046; CHECK-LABEL: stack_fold_subph_ymm:1047; CHECK: # %bb.0:1048; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1049; CHECK-NEXT: #APP1050; CHECK-NEXT: nop1051; CHECK-NEXT: #NO_APP1052; CHECK-NEXT: vsubph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload1053; CHECK-NEXT: retq1054 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1055 %2 = fsub <16 x half> %a0, %a11056 ret <16 x half> %21057}1058 1059define <4 x float> @stack_fold_fmulc(<4 x float> %a0, <4 x float> %a1) {1060; CHECK-LABEL: stack_fold_fmulc:1061; CHECK: # %bb.0:1062; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1063; CHECK-NEXT: #APP1064; CHECK-NEXT: nop1065; CHECK-NEXT: #NO_APP1066; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload1067; CHECK-NEXT: vmovaps %xmm2, %xmm01068; CHECK-NEXT: retq1069 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1070 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> undef, i8 -1)1071 ret <4 x float> %21072}1073declare <4 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)1074 1075define <4 x float> @stack_fold_fmulc_mask(<4 x float> %a0, <4 x float> %a1, ptr %passthru, i8 %mask) {1076; CHECK-LABEL: stack_fold_fmulc_mask:1077; CHECK: # %bb.0:1078; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1079; CHECK-NEXT: kmovd %esi, %k11080; CHECK-NEXT: #APP1081; CHECK-NEXT: nop1082; CHECK-NEXT: #NO_APP1083; CHECK-NEXT: vmovaps (%rdi), %xmm21084; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1085; CHECK-NEXT: vmovaps %xmm2, %xmm01086; 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 = load <4 x float>, ptr %passthru1089 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> %2, i8 %mask)1090 ret <4 x float> %31091}1092 1093define <4 x float> @stack_fold_fmulc_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {1094; CHECK-LABEL: stack_fold_fmulc_maskz: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: movzbl (%rdi), %eax1101; CHECK-NEXT: kmovd %eax, %k11102; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} {z} # 16-byte Folded Reload1103; CHECK-NEXT: vmovaps %xmm2, %xmm01104; CHECK-NEXT: retq1105 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1106 %2 = load i8, ptr %mask1107 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer, i8 %2)1108 ret <4 x float> %31109}1110 1111define <4 x float> @stack_fold_fcmulc(<4 x float> %a0, <4 x float> %a1) {1112; CHECK-LABEL: stack_fold_fcmulc:1113; CHECK: # %bb.0:1114; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1115; CHECK-NEXT: #APP1116; CHECK-NEXT: nop1117; CHECK-NEXT: #NO_APP1118; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload1119; CHECK-NEXT: vmovaps %xmm2, %xmm01120; CHECK-NEXT: retq1121 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1122 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> undef, i8 -1)1123 ret <4 x float> %21124}1125declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)1126 1127define <4 x float> @stack_fold_fcmulc_mask(<4 x float> %a0, <4 x float> %a1, ptr %passthru, i8 %mask) {1128; CHECK-LABEL: stack_fold_fcmulc_mask:1129; CHECK: # %bb.0:1130; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1131; CHECK-NEXT: kmovd %esi, %k11132; CHECK-NEXT: #APP1133; CHECK-NEXT: nop1134; CHECK-NEXT: #NO_APP1135; CHECK-NEXT: vmovaps (%rdi), %xmm21136; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1137; CHECK-NEXT: vmovaps %xmm2, %xmm01138; CHECK-NEXT: retq1139 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1140 %2 = load <4 x float>, ptr %passthru1141 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> %2, i8 %mask)1142 ret <4 x float> %31143}1144 1145define <4 x float> @stack_fold_fcmulc_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {1146; CHECK-LABEL: stack_fold_fcmulc_maskz:1147; CHECK: # %bb.0:1148; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1149; CHECK-NEXT: #APP1150; CHECK-NEXT: nop1151; CHECK-NEXT: #NO_APP1152; CHECK-NEXT: movzbl (%rdi), %eax1153; CHECK-NEXT: kmovd %eax, %k11154; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} {z} # 16-byte Folded Reload1155; CHECK-NEXT: vmovaps %xmm2, %xmm01156; CHECK-NEXT: retq1157 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1158 %2 = load i8, ptr %mask1159 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer, i8 %2)1160 ret <4 x float> %31161}1162 1163define <4 x float> @stack_fold_fmaddc(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {1164; CHECK-LABEL: stack_fold_fmaddc:1165; CHECK: # %bb.0:1166; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1167; CHECK-NEXT: #APP1168; CHECK-NEXT: nop1169; CHECK-NEXT: #NO_APP1170; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1171; CHECK-NEXT: retq1172 %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}"()1173 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 -1)1174 ret <4 x float> %21175}1176declare <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)1177 1178define <4 x float> @stack_fold_fmaddc_mask(ptr %p, <4 x float> %a1, <4 x float> %a2, i8 %mask) {1179; CHECK-LABEL: stack_fold_fmaddc_mask:1180; CHECK: # %bb.0:1181; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1182; CHECK-NEXT: kmovd %esi, %k11183; CHECK-NEXT: #APP1184; CHECK-NEXT: nop1185; CHECK-NEXT: #NO_APP1186; CHECK-NEXT: vmovaps (%rdi), %xmm21187; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1188; CHECK-NEXT: vmovaps %xmm2, %xmm01189; CHECK-NEXT: retq1190 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1191 %a0 = load <4 x float>, ptr %p1192 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 %mask)1193 ret <4 x float> %21194}1195 1196define <4 x float> @stack_fold_fmaddc_maskz(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, ptr %mask) {1197; CHECK-LABEL: stack_fold_fmaddc_maskz:1198; CHECK: # %bb.0:1199; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1200; CHECK-NEXT: #APP1201; CHECK-NEXT: nop1202; CHECK-NEXT: #NO_APP1203; CHECK-NEXT: movzbl (%rdi), %eax1204; CHECK-NEXT: kmovd %eax, %k11205; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm01206; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload1207; CHECK-NEXT: retq1208 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1209 %2 = load i8, ptr %mask1210 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> zeroinitializer, i8 %2)1211 ret <4 x float> %31212}1213declare <4 x float> @llvm.x86.avx512fp16.maskz.vfmadd.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)1214 1215define <4 x float> @stack_fold_fcmaddc(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {1216; CHECK-LABEL: stack_fold_fcmaddc:1217; CHECK: # %bb.0:1218; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1219; CHECK-NEXT: #APP1220; CHECK-NEXT: nop1221; CHECK-NEXT: #NO_APP1222; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1223; CHECK-NEXT: retq1224 %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}"()1225 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 -1)1226 ret <4 x float> %21227}1228declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)1229 1230define <4 x float> @stack_fold_fcmaddc_mask(ptr %p, <4 x float> %a1, <4 x float> %a2, i8 %mask) {1231; CHECK-LABEL: stack_fold_fcmaddc_mask:1232; CHECK: # %bb.0:1233; CHECK-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1234; CHECK-NEXT: kmovd %esi, %k11235; CHECK-NEXT: #APP1236; CHECK-NEXT: nop1237; CHECK-NEXT: #NO_APP1238; CHECK-NEXT: vmovaps (%rdi), %xmm21239; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload1240; CHECK-NEXT: vmovaps %xmm2, %xmm01241; CHECK-NEXT: retq1242 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1243 %a0 = load <4 x float>, ptr %p1244 %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 %mask)1245 ret <4 x float> %21246}1247 1248define <4 x float> @stack_fold_fcmaddc_maskz(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, ptr %mask) {1249; CHECK-LABEL: stack_fold_fcmaddc_maskz:1250; CHECK: # %bb.0:1251; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1252; CHECK-NEXT: #APP1253; CHECK-NEXT: nop1254; CHECK-NEXT: #NO_APP1255; CHECK-NEXT: movzbl (%rdi), %eax1256; CHECK-NEXT: kmovd %eax, %k11257; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm01258; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload1259; CHECK-NEXT: retq1260 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1261 %2 = load i8, ptr %mask1262 %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> zeroinitializer, i8 %2)1263 ret <4 x float> %31264}1265declare <4 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)1266 1267define <8 x float> @stack_fold_fmulc_ymm(<8 x float> %a0, <8 x float> %a1) {1268; CHECK-LABEL: stack_fold_fmulc_ymm:1269; CHECK: # %bb.0:1270; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1271; CHECK-NEXT: #APP1272; CHECK-NEXT: nop1273; CHECK-NEXT: #NO_APP1274; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 # 32-byte Folded Reload1275; CHECK-NEXT: vmovaps %ymm2, %ymm01276; CHECK-NEXT: retq1277 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1278 %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> undef, i8 -1)1279 ret <8 x float> %21280}1281declare <8 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)1282 1283define <8 x float> @stack_fold_fmulc_mask_ymm(<8 x float> %a0, <8 x float> %a1, ptr %passthru, i8 %mask) {1284; CHECK-LABEL: stack_fold_fmulc_mask_ymm:1285; CHECK: # %bb.0:1286; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1287; CHECK-NEXT: kmovd %esi, %k11288; CHECK-NEXT: #APP1289; CHECK-NEXT: nop1290; CHECK-NEXT: #NO_APP1291; CHECK-NEXT: vmovaps (%rdi), %ymm21292; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} # 32-byte Folded Reload1293; CHECK-NEXT: vmovaps %ymm2, %ymm01294; CHECK-NEXT: retq1295 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1296 %2 = load <8 x float>, ptr %passthru1297 %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %2, i8 %mask)1298 ret <8 x float> %31299}1300 1301define <8 x float> @stack_fold_fmulc_maskz_ymm(<8 x float> %a0, <8 x float> %a1, ptr %mask) {1302; CHECK-LABEL: stack_fold_fmulc_maskz_ymm:1303; CHECK: # %bb.0:1304; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1305; CHECK-NEXT: #APP1306; CHECK-NEXT: nop1307; CHECK-NEXT: #NO_APP1308; CHECK-NEXT: movzbl (%rdi), %eax1309; CHECK-NEXT: kmovd %eax, %k11310; CHECK-NEXT: vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} {z} # 32-byte Folded Reload1311; CHECK-NEXT: vmovaps %ymm2, %ymm01312; CHECK-NEXT: retq1313 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1314 %2 = load i8, ptr %mask1315 %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> zeroinitializer, i8 %2)1316 ret <8 x float> %31317}1318 1319define <8 x float> @stack_fold_fcmulc_ymm(<8 x float> %a0, <8 x float> %a1) {1320; CHECK-LABEL: stack_fold_fcmulc_ymm:1321; CHECK: # %bb.0:1322; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1323; CHECK-NEXT: #APP1324; CHECK-NEXT: nop1325; CHECK-NEXT: #NO_APP1326; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 # 32-byte Folded Reload1327; CHECK-NEXT: vmovaps %ymm2, %ymm01328; CHECK-NEXT: retq1329 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1330 %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> undef, i8 -1)1331 ret <8 x float> %21332}1333declare <8 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)1334 1335define <8 x float> @stack_fold_fcmulc_mask_ymm(<8 x float> %a0, <8 x float> %a1, ptr %passthru, i8 %mask) {1336; CHECK-LABEL: stack_fold_fcmulc_mask_ymm:1337; CHECK: # %bb.0:1338; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1339; CHECK-NEXT: kmovd %esi, %k11340; CHECK-NEXT: #APP1341; CHECK-NEXT: nop1342; CHECK-NEXT: #NO_APP1343; CHECK-NEXT: vmovaps (%rdi), %ymm21344; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} # 32-byte Folded Reload1345; CHECK-NEXT: vmovaps %ymm2, %ymm01346; CHECK-NEXT: retq1347 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1348 %2 = load <8 x float>, ptr %passthru1349 %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %2, i8 %mask)1350 ret <8 x float> %31351}1352 1353define <8 x float> @stack_fold_fcmulc_maskz_ymm(<8 x float> %a0, <8 x float> %a1, ptr %mask) {1354; CHECK-LABEL: stack_fold_fcmulc_maskz_ymm:1355; CHECK: # %bb.0:1356; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1357; CHECK-NEXT: #APP1358; CHECK-NEXT: nop1359; CHECK-NEXT: #NO_APP1360; CHECK-NEXT: movzbl (%rdi), %eax1361; CHECK-NEXT: kmovd %eax, %k11362; CHECK-NEXT: vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} {z} # 32-byte Folded Reload1363; CHECK-NEXT: vmovaps %ymm2, %ymm01364; CHECK-NEXT: retq1365 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1366 %2 = load i8, ptr %mask1367 %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> zeroinitializer, i8 %2)1368 ret <8 x float> %31369}1370 1371define <8 x float> @stack_fold_fmaddc_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {1372; CHECK-LABEL: stack_fold_fmaddc_ymm:1373; CHECK: # %bb.0:1374; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1375; CHECK-NEXT: #APP1376; CHECK-NEXT: nop1377; CHECK-NEXT: #NO_APP1378; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload1379; CHECK-NEXT: retq1380 %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}"()1381 %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> %a0, i8 -1)1382 ret <8 x float> %21383}1384declare <8 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)1385 1386define <8 x float> @stack_fold_fmaddc_mask_ymm(ptr %p, <8 x float> %a1, <8 x float> %a2, i8 %mask) {1387; CHECK-LABEL: stack_fold_fmaddc_mask_ymm:1388; CHECK: # %bb.0:1389; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1390; CHECK-NEXT: kmovd %esi, %k11391; CHECK-NEXT: #APP1392; CHECK-NEXT: nop1393; CHECK-NEXT: #NO_APP1394; CHECK-NEXT: vmovaps (%rdi), %ymm21395; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} # 32-byte Folded Reload1396; CHECK-NEXT: vmovaps %ymm2, %ymm01397; CHECK-NEXT: retq1398 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1399 %a0 = load <8 x float>, ptr %p1400 %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> %a0, i8 %mask)1401 ret <8 x float> %21402}1403 1404define <8 x float> @stack_fold_fmaddc_maskz_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, ptr %mask) {1405; CHECK-LABEL: stack_fold_fmaddc_maskz_ymm:1406; CHECK: # %bb.0:1407; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1408; CHECK-NEXT: #APP1409; CHECK-NEXT: nop1410; CHECK-NEXT: #NO_APP1411; CHECK-NEXT: movzbl (%rdi), %eax1412; CHECK-NEXT: kmovd %eax, %k11413; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm01414; CHECK-NEXT: vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 {%k1} {z} # 32-byte Folded Reload1415; CHECK-NEXT: retq1416 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1417 %2 = load i8, ptr %mask1418 %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> zeroinitializer, i8 %2)1419 ret <8 x float> %31420}1421declare <8 x float> @llvm.x86.avx512fp16.maskz.vfmadd.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)1422 1423define <8 x float> @stack_fold_fcmaddc_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {1424; CHECK-LABEL: stack_fold_fcmaddc_ymm:1425; CHECK: # %bb.0:1426; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1427; CHECK-NEXT: #APP1428; CHECK-NEXT: nop1429; CHECK-NEXT: #NO_APP1430; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload1431; CHECK-NEXT: retq1432 %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}"()1433 %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> %a0, i8 -1)1434 ret <8 x float> %21435}1436declare <8 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)1437 1438define <8 x float> @stack_fold_fcmaddc_mask_ymm(ptr %p, <8 x float> %a1, <8 x float> %a2, i8 %mask) {1439; CHECK-LABEL: stack_fold_fcmaddc_mask_ymm:1440; CHECK: # %bb.0:1441; CHECK-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1442; CHECK-NEXT: kmovd %esi, %k11443; CHECK-NEXT: #APP1444; CHECK-NEXT: nop1445; CHECK-NEXT: #NO_APP1446; CHECK-NEXT: vmovaps (%rdi), %ymm21447; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} # 32-byte Folded Reload1448; CHECK-NEXT: vmovaps %ymm2, %ymm01449; CHECK-NEXT: retq1450 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{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 %a0 = load <8 x float>, ptr %p1452 %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> %a0, i8 %mask)1453 ret <8 x float> %21454}1455 1456define <8 x float> @stack_fold_fcmaddc_maskz_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, ptr %mask) {1457; CHECK-LABEL: stack_fold_fcmaddc_maskz_ymm:1458; CHECK: # %bb.0:1459; CHECK-NEXT: vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1460; CHECK-NEXT: #APP1461; CHECK-NEXT: nop1462; CHECK-NEXT: #NO_APP1463; CHECK-NEXT: movzbl (%rdi), %eax1464; CHECK-NEXT: kmovd %eax, %k11465; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm01466; CHECK-NEXT: vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 {%k1} {z} # 32-byte Folded Reload1467; CHECK-NEXT: retq1468 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{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 i8, ptr %mask1470 %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> zeroinitializer, i8 %2)1471 ret <8 x float> %31472}1473declare <8 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)1474