3992 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 < %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_fmadd123ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {13; CHECK-LABEL: stack_fold_fmadd123ph:14; CHECK: # %bb.0:15; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill16; CHECK-NEXT: #APP17; CHECK-NEXT: nop18; CHECK-NEXT: #NO_APP19; CHECK-NEXT: vfmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload20; CHECK-NEXT: retq21 %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}"()22 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2)23 ret <32 x half> %224}25declare <32 x half> @llvm.fma.v32f16(<32 x half>, <32 x half>, <32 x half>)26 27define <32 x half> @stack_fold_fmadd213ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {28; CHECK-LABEL: stack_fold_fmadd213ph:29; CHECK: # %bb.0:30; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill31; CHECK-NEXT: #APP32; CHECK-NEXT: nop33; CHECK-NEXT: #NO_APP34; CHECK-NEXT: vfmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload35; CHECK-NEXT: retq36 %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}"()37 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a0, <32 x half> %a2)38 ret <32 x half> %239}40 41define <32 x half> @stack_fold_fmadd231ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {42; CHECK-LABEL: stack_fold_fmadd231ph:43; CHECK: # %bb.0:44; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill45; CHECK-NEXT: #APP46; CHECK-NEXT: nop47; CHECK-NEXT: #NO_APP48; CHECK-NEXT: vfmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload49; CHECK-NEXT: retq50 %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}"()51 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a2, <32 x half> %a0)52 ret <32 x half> %253}54 55define <32 x half> @stack_fold_fmadd321ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {56; CHECK-LABEL: stack_fold_fmadd321ph:57; CHECK: # %bb.0:58; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill59; CHECK-NEXT: #APP60; CHECK-NEXT: nop61; CHECK-NEXT: #NO_APP62; CHECK-NEXT: vfmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload63; CHECK-NEXT: retq64 %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}"()65 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a1, <32 x half> %a0)66 ret <32 x half> %267}68 69define <32 x half> @stack_fold_fmadd132ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {70; CHECK-LABEL: stack_fold_fmadd132ph:71; CHECK: # %bb.0:72; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill73; CHECK-NEXT: #APP74; CHECK-NEXT: nop75; CHECK-NEXT: #NO_APP76; CHECK-NEXT: vfmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload77; CHECK-NEXT: retq78 %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}"()79 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a2, <32 x half> %a1)80 ret <32 x half> %281}82 83define <32 x half> @stack_fold_fmadd312ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {84; CHECK-LABEL: stack_fold_fmadd312ph:85; CHECK: # %bb.0:86; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill87; CHECK-NEXT: #APP88; CHECK-NEXT: nop89; CHECK-NEXT: #NO_APP90; CHECK-NEXT: vfmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload91; CHECK-NEXT: retq92 %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}"()93 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a0, <32 x half> %a1)94 ret <32 x half> %295}96 97define <32 x half> @stack_fold_fmadd123ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {98; CHECK-LABEL: stack_fold_fmadd123ph_mask:99; CHECK: # %bb.0:100; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill101; CHECK-NEXT: #APP102; CHECK-NEXT: nop103; CHECK-NEXT: #NO_APP104; CHECK-NEXT: vmovaps (%rdi), %zmm2105; CHECK-NEXT: kmovd %esi, %k1106; CHECK-NEXT: vfmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload107; CHECK-NEXT: vmovaps %zmm2, %zmm0108; CHECK-NEXT: retq109 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()110 %a0 = load <32 x half>, ptr %p111 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2)112 %3 = bitcast i32 %mask to <32 x i1>113 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0114 ret <32 x half> %4115}116 117define <32 x half> @stack_fold_fmadd213ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {118; CHECK-LABEL: stack_fold_fmadd213ph_mask:119; CHECK: # %bb.0:120; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill121; CHECK-NEXT: #APP122; CHECK-NEXT: nop123; CHECK-NEXT: #NO_APP124; CHECK-NEXT: vmovaps (%rdi), %zmm2125; CHECK-NEXT: kmovd %esi, %k1126; CHECK-NEXT: vfmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload127; CHECK-NEXT: vmovaps %zmm2, %zmm0128; CHECK-NEXT: retq129 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()130 %a0 = load <32 x half>, ptr %p131 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a0, <32 x half> %a2)132 %3 = bitcast i32 %mask to <32 x i1>133 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0134 ret <32 x half> %4135}136 137define <32 x half> @stack_fold_fmadd231ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {138; CHECK-LABEL: stack_fold_fmadd231ph_mask:139; CHECK: # %bb.0:140; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill141; CHECK-NEXT: #APP142; CHECK-NEXT: nop143; CHECK-NEXT: #NO_APP144; CHECK-NEXT: vmovaps (%rdi), %zmm2145; CHECK-NEXT: kmovd %esi, %k1146; CHECK-NEXT: vfmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload147; CHECK-NEXT: vmovaps %zmm2, %zmm0148; CHECK-NEXT: retq149 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()150 %a0 = load <32 x half>, ptr %p151 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a2, <32 x half> %a0)152 %3 = bitcast i32 %mask to <32 x i1>153 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0154 ret <32 x half> %4155}156 157define <32 x half> @stack_fold_fmadd321ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {158; CHECK-LABEL: stack_fold_fmadd321ph_mask:159; CHECK: # %bb.0:160; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill161; CHECK-NEXT: #APP162; CHECK-NEXT: nop163; CHECK-NEXT: #NO_APP164; CHECK-NEXT: vmovaps (%rdi), %zmm2165; CHECK-NEXT: kmovd %esi, %k1166; CHECK-NEXT: vfmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload167; CHECK-NEXT: vmovaps %zmm2, %zmm0168; CHECK-NEXT: retq169 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()170 %a0 = load <32 x half>, ptr %p171 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a1, <32 x half> %a0)172 %3 = bitcast i32 %mask to <32 x i1>173 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0174 ret <32 x half> %4175}176 177define <32 x half> @stack_fold_fmadd132ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {178; CHECK-LABEL: stack_fold_fmadd132ph_mask:179; CHECK: # %bb.0:180; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill181; CHECK-NEXT: #APP182; CHECK-NEXT: nop183; CHECK-NEXT: #NO_APP184; CHECK-NEXT: vmovaps (%rdi), %zmm2185; CHECK-NEXT: kmovd %esi, %k1186; CHECK-NEXT: vfmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload187; CHECK-NEXT: vmovaps %zmm2, %zmm0188; CHECK-NEXT: retq189 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()190 %a0 = load <32 x half>, ptr %p191 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a2, <32 x half> %a1)192 %3 = bitcast i32 %mask to <32 x i1>193 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0194 ret <32 x half> %4195}196 197define <32 x half> @stack_fold_fmadd312ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {198; CHECK-LABEL: stack_fold_fmadd312ph_mask:199; CHECK: # %bb.0:200; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill201; CHECK-NEXT: #APP202; CHECK-NEXT: nop203; CHECK-NEXT: #NO_APP204; CHECK-NEXT: vmovaps (%rdi), %zmm2205; CHECK-NEXT: kmovd %esi, %k1206; CHECK-NEXT: vfmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload207; CHECK-NEXT: vmovaps %zmm2, %zmm0208; CHECK-NEXT: retq209 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()210 %a0 = load <32 x half>, ptr %p211 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a0, <32 x half> %a1)212 %3 = bitcast i32 %mask to <32 x i1>213 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0214 ret <32 x half> %4215}216 217define <32 x half> @stack_fold_fmadd123ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {218; CHECK-LABEL: stack_fold_fmadd123ph_maskz:219; CHECK: # %bb.0:220; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill221; CHECK-NEXT: #APP222; CHECK-NEXT: nop223; CHECK-NEXT: #NO_APP224; CHECK-NEXT: kmovd (%rdi), %k1225; CHECK-NEXT: vfmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload226; CHECK-NEXT: retq227 %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}"()228 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2)229 %3 = load i32, ptr %mask230 %4 = bitcast i32 %3 to <32 x i1>231 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer232 ret <32 x half> %5233}234 235define <32 x half> @stack_fold_fmadd213ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {236; CHECK-LABEL: stack_fold_fmadd213ph_maskz:237; CHECK: # %bb.0:238; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill239; CHECK-NEXT: #APP240; CHECK-NEXT: nop241; CHECK-NEXT: #NO_APP242; CHECK-NEXT: kmovd (%rdi), %k1243; CHECK-NEXT: vfmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload244; CHECK-NEXT: retq245 %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}"()246 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a0, <32 x half> %a2)247 %3 = load i32, ptr %mask248 %4 = bitcast i32 %3 to <32 x i1>249 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer250 ret <32 x half> %5251}252 253define <32 x half> @stack_fold_fmadd231ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {254; CHECK-LABEL: stack_fold_fmadd231ph_maskz:255; CHECK: # %bb.0:256; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill257; CHECK-NEXT: #APP258; CHECK-NEXT: nop259; CHECK-NEXT: #NO_APP260; CHECK-NEXT: kmovd (%rdi), %k1261; CHECK-NEXT: vfmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload262; CHECK-NEXT: retq263 %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}"()264 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a2, <32 x half> %a0)265 %3 = load i32, ptr %mask266 %4 = bitcast i32 %3 to <32 x i1>267 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer268 ret <32 x half> %5269}270 271define <32 x half> @stack_fold_fmadd321ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {272; CHECK-LABEL: stack_fold_fmadd321ph_maskz:273; CHECK: # %bb.0:274; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill275; CHECK-NEXT: #APP276; CHECK-NEXT: nop277; CHECK-NEXT: #NO_APP278; CHECK-NEXT: kmovd (%rdi), %k1279; CHECK-NEXT: vfmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload280; CHECK-NEXT: retq281 %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}"()282 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a1, <32 x half> %a0)283 %3 = load i32, ptr %mask284 %4 = bitcast i32 %3 to <32 x i1>285 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer286 ret <32 x half> %5287}288 289define <32 x half> @stack_fold_fmadd132ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {290; CHECK-LABEL: stack_fold_fmadd132ph_maskz:291; CHECK: # %bb.0:292; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill293; CHECK-NEXT: #APP294; CHECK-NEXT: nop295; CHECK-NEXT: #NO_APP296; CHECK-NEXT: kmovd (%rdi), %k1297; CHECK-NEXT: vfmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload298; CHECK-NEXT: retq299 %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}"()300 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a2, <32 x half> %a1)301 %3 = load i32, ptr %mask302 %4 = bitcast i32 %3 to <32 x i1>303 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer304 ret <32 x half> %5305}306 307define <32 x half> @stack_fold_fmadd312ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {308; CHECK-LABEL: stack_fold_fmadd312ph_maskz:309; CHECK: # %bb.0:310; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill311; CHECK-NEXT: #APP312; CHECK-NEXT: nop313; CHECK-NEXT: #NO_APP314; CHECK-NEXT: kmovd (%rdi), %k1315; CHECK-NEXT: vfmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload316; CHECK-NEXT: retq317 %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}"()318 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a0, <32 x half> %a1)319 %3 = load i32, ptr %mask320 %4 = bitcast i32 %3 to <32 x i1>321 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer322 ret <32 x half> %5323}324 325define <32 x half> @stack_fold_fmsub123ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {326; CHECK-LABEL: stack_fold_fmsub123ph:327; CHECK: # %bb.0:328; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill329; CHECK-NEXT: #APP330; CHECK-NEXT: nop331; CHECK-NEXT: #NO_APP332; CHECK-NEXT: vfmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload333; CHECK-NEXT: retq334 %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}"()335 %2 = fneg <32 x half> %a2336 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a1, <32 x half> %2)337 ret <32 x half> %3338}339 340define <32 x half> @stack_fold_fmsub213ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {341; CHECK-LABEL: stack_fold_fmsub213ph:342; CHECK: # %bb.0:343; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill344; CHECK-NEXT: #APP345; CHECK-NEXT: nop346; CHECK-NEXT: #NO_APP347; CHECK-NEXT: vfmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload348; CHECK-NEXT: retq349 %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}"()350 %2 = fneg <32 x half> %a2351 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a0, <32 x half> %2)352 ret <32 x half> %3353}354 355define <32 x half> @stack_fold_fmsub231ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {356; CHECK-LABEL: stack_fold_fmsub231ph:357; CHECK: # %bb.0:358; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill359; CHECK-NEXT: #APP360; CHECK-NEXT: nop361; CHECK-NEXT: #NO_APP362; CHECK-NEXT: vfmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload363; CHECK-NEXT: retq364 %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}"()365 %2 = fneg <32 x half> %a0366 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a2, <32 x half> %2)367 ret <32 x half> %3368}369 370define <32 x half> @stack_fold_fmsub321ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {371; CHECK-LABEL: stack_fold_fmsub321ph:372; CHECK: # %bb.0:373; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill374; CHECK-NEXT: #APP375; CHECK-NEXT: nop376; CHECK-NEXT: #NO_APP377; CHECK-NEXT: vfmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload378; CHECK-NEXT: retq379 %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}"()380 %2 = fneg <32 x half> %a0381 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a1, <32 x half> %2)382 ret <32 x half> %3383}384 385define <32 x half> @stack_fold_fmsub132ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {386; CHECK-LABEL: stack_fold_fmsub132ph:387; CHECK: # %bb.0:388; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill389; CHECK-NEXT: #APP390; CHECK-NEXT: nop391; CHECK-NEXT: #NO_APP392; CHECK-NEXT: vfmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload393; CHECK-NEXT: retq394 %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}"()395 %2 = fneg <32 x half> %a1396 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a2, <32 x half> %2)397 ret <32 x half> %3398}399 400define <32 x half> @stack_fold_fmsub312ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {401; CHECK-LABEL: stack_fold_fmsub312ph:402; CHECK: # %bb.0:403; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill404; CHECK-NEXT: #APP405; CHECK-NEXT: nop406; CHECK-NEXT: #NO_APP407; CHECK-NEXT: vfmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload408; CHECK-NEXT: retq409 %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}"()410 %2 = fneg <32 x half> %a1411 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a0, <32 x half> %2)412 ret <32 x half> %3413}414 415define <32 x half> @stack_fold_fmsub123ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {416; CHECK-LABEL: stack_fold_fmsub123ph_mask:417; CHECK: # %bb.0:418; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill419; CHECK-NEXT: #APP420; CHECK-NEXT: nop421; CHECK-NEXT: #NO_APP422; CHECK-NEXT: vmovaps (%rdi), %zmm2423; CHECK-NEXT: kmovd %esi, %k1424; CHECK-NEXT: vfmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload425; CHECK-NEXT: vmovaps %zmm2, %zmm0426; CHECK-NEXT: retq427 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()428 %a0 = load <32 x half>, ptr %p429 %neg = fneg <32 x half> %a2430 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a1, <32 x half> %neg)431 %3 = bitcast i32 %mask to <32 x i1>432 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0433 ret <32 x half> %4434}435 436define <32 x half> @stack_fold_fmsub213ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {437; CHECK-LABEL: stack_fold_fmsub213ph_mask:438; CHECK: # %bb.0:439; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill440; CHECK-NEXT: #APP441; CHECK-NEXT: nop442; CHECK-NEXT: #NO_APP443; CHECK-NEXT: vmovaps (%rdi), %zmm2444; CHECK-NEXT: kmovd %esi, %k1445; CHECK-NEXT: vfmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload446; CHECK-NEXT: vmovaps %zmm2, %zmm0447; CHECK-NEXT: retq448 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()449 %a0 = load <32 x half>, ptr %p450 %neg = fneg <32 x half> %a2451 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a0, <32 x half> %neg)452 %3 = bitcast i32 %mask to <32 x i1>453 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0454 ret <32 x half> %4455}456 457define <32 x half> @stack_fold_fmsub231ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {458; CHECK-LABEL: stack_fold_fmsub231ph_mask:459; CHECK: # %bb.0:460; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill461; CHECK-NEXT: #APP462; CHECK-NEXT: nop463; CHECK-NEXT: #NO_APP464; CHECK-NEXT: vmovaps (%rdi), %zmm2465; CHECK-NEXT: kmovd %esi, %k1466; CHECK-NEXT: vfmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload467; CHECK-NEXT: vmovaps %zmm2, %zmm0468; CHECK-NEXT: retq469 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()470 %a0 = load <32 x half>, ptr %p471 %neg = fneg <32 x half> %a0472 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a2, <32 x half> %neg)473 %3 = bitcast i32 %mask to <32 x i1>474 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0475 ret <32 x half> %4476}477 478define <32 x half> @stack_fold_fmsub321ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {479; CHECK-LABEL: stack_fold_fmsub321ph_mask:480; CHECK: # %bb.0:481; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill482; CHECK-NEXT: #APP483; CHECK-NEXT: nop484; CHECK-NEXT: #NO_APP485; CHECK-NEXT: vmovaps (%rdi), %zmm2486; CHECK-NEXT: kmovd %esi, %k1487; CHECK-NEXT: vfmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload488; CHECK-NEXT: vmovaps %zmm2, %zmm0489; CHECK-NEXT: retq490 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()491 %a0 = load <32 x half>, ptr %p492 %neg = fneg <32 x half> %a0493 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a1, <32 x half> %neg)494 %3 = bitcast i32 %mask to <32 x i1>495 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0496 ret <32 x half> %4497}498 499define <32 x half> @stack_fold_fmsub132ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {500; CHECK-LABEL: stack_fold_fmsub132ph_mask:501; CHECK: # %bb.0:502; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill503; CHECK-NEXT: #APP504; CHECK-NEXT: nop505; CHECK-NEXT: #NO_APP506; CHECK-NEXT: vmovaps (%rdi), %zmm2507; CHECK-NEXT: kmovd %esi, %k1508; CHECK-NEXT: vfmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload509; CHECK-NEXT: vmovaps %zmm2, %zmm0510; CHECK-NEXT: retq511 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()512 %a0 = load <32 x half>, ptr %p513 %neg = fneg <32 x half> %a1514 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a2, <32 x half> %neg)515 %3 = bitcast i32 %mask to <32 x i1>516 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0517 ret <32 x half> %4518}519 520define <32 x half> @stack_fold_fmsub312ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {521; CHECK-LABEL: stack_fold_fmsub312ph_mask: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: vmovaps (%rdi), %zmm2528; CHECK-NEXT: kmovd %esi, %k1529; CHECK-NEXT: vfmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload530; CHECK-NEXT: vmovaps %zmm2, %zmm0531; CHECK-NEXT: retq532 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()533 %a0 = load <32 x half>, ptr %p534 %neg = fneg <32 x half> %a1535 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a0, <32 x half> %neg)536 %3 = bitcast i32 %mask to <32 x i1>537 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0538 ret <32 x half> %4539}540 541define <32 x half> @stack_fold_fmsub123ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {542; CHECK-LABEL: stack_fold_fmsub123ph_maskz:543; CHECK: # %bb.0:544; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill545; CHECK-NEXT: #APP546; CHECK-NEXT: nop547; CHECK-NEXT: #NO_APP548; CHECK-NEXT: kmovd (%rdi), %k1549; CHECK-NEXT: vfmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload550; CHECK-NEXT: retq551 %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}"()552 %neg = fneg <32 x half> %a2553 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a1, <32 x half> %neg)554 %3 = load i32, ptr %mask555 %4 = bitcast i32 %3 to <32 x i1>556 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer557 ret <32 x half> %5558}559 560define <32 x half> @stack_fold_fmsub213ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {561; CHECK-LABEL: stack_fold_fmsub213ph_maskz:562; CHECK: # %bb.0:563; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill564; CHECK-NEXT: #APP565; CHECK-NEXT: nop566; CHECK-NEXT: #NO_APP567; CHECK-NEXT: kmovd (%rdi), %k1568; CHECK-NEXT: vfmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload569; CHECK-NEXT: retq570 %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}"()571 %neg = fneg <32 x half> %a2572 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a0, <32 x half> %neg)573 %3 = load i32, ptr %mask574 %4 = bitcast i32 %3 to <32 x i1>575 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer576 ret <32 x half> %5577}578 579define <32 x half> @stack_fold_fmsub231ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {580; CHECK-LABEL: stack_fold_fmsub231ph_maskz:581; CHECK: # %bb.0:582; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill583; CHECK-NEXT: #APP584; CHECK-NEXT: nop585; CHECK-NEXT: #NO_APP586; CHECK-NEXT: kmovd (%rdi), %k1587; CHECK-NEXT: vfmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload588; CHECK-NEXT: retq589 %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}"()590 %neg = fneg <32 x half> %a0591 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a1, <32 x half> %a2, <32 x half> %neg)592 %3 = load i32, ptr %mask593 %4 = bitcast i32 %3 to <32 x i1>594 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer595 ret <32 x half> %5596}597 598define <32 x half> @stack_fold_fmsub321ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {599; CHECK-LABEL: stack_fold_fmsub321ph_maskz:600; CHECK: # %bb.0:601; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill602; CHECK-NEXT: #APP603; CHECK-NEXT: nop604; CHECK-NEXT: #NO_APP605; CHECK-NEXT: kmovd (%rdi), %k1606; CHECK-NEXT: vfmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload607; CHECK-NEXT: retq608 %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}"()609 %neg = fneg <32 x half> %a0610 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a1, <32 x half> %neg)611 %3 = load i32, ptr %mask612 %4 = bitcast i32 %3 to <32 x i1>613 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer614 ret <32 x half> %5615}616 617define <32 x half> @stack_fold_fmsub132ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {618; CHECK-LABEL: stack_fold_fmsub132ph_maskz:619; CHECK: # %bb.0:620; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill621; CHECK-NEXT: #APP622; CHECK-NEXT: nop623; CHECK-NEXT: #NO_APP624; CHECK-NEXT: kmovd (%rdi), %k1625; CHECK-NEXT: vfmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload626; CHECK-NEXT: retq627 %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}"()628 %neg = fneg <32 x half> %a1629 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a0, <32 x half> %a2, <32 x half> %neg)630 %3 = load i32, ptr %mask631 %4 = bitcast i32 %3 to <32 x i1>632 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer633 ret <32 x half> %5634}635 636define <32 x half> @stack_fold_fmsub312ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {637; CHECK-LABEL: stack_fold_fmsub312ph_maskz:638; CHECK: # %bb.0:639; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill640; CHECK-NEXT: #APP641; CHECK-NEXT: nop642; CHECK-NEXT: #NO_APP643; CHECK-NEXT: kmovd (%rdi), %k1644; CHECK-NEXT: vfmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload645; CHECK-NEXT: retq646 %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}"()647 %neg = fneg <32 x half> %a1648 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %a2, <32 x half> %a0, <32 x half> %neg)649 %3 = load i32, ptr %mask650 %4 = bitcast i32 %3 to <32 x i1>651 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer652 ret <32 x half> %5653}654 655define <32 x half> @stack_fold_fnmadd123ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {656; CHECK-LABEL: stack_fold_fnmadd123ph:657; CHECK: # %bb.0:658; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill659; CHECK-NEXT: #APP660; CHECK-NEXT: nop661; CHECK-NEXT: #NO_APP662; CHECK-NEXT: vfnmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload663; CHECK-NEXT: retq664 %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}"()665 %2 = fneg <32 x half> %a0666 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a1, <32 x half> %a2)667 ret <32 x half> %3668}669 670define <32 x half> @stack_fold_fnmadd213ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {671; CHECK-LABEL: stack_fold_fnmadd213ph:672; CHECK: # %bb.0:673; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill674; CHECK-NEXT: #APP675; CHECK-NEXT: nop676; CHECK-NEXT: #NO_APP677; CHECK-NEXT: vfnmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload678; CHECK-NEXT: retq679 %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}"()680 %2 = fneg <32 x half> %a1681 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a0, <32 x half> %a2)682 ret <32 x half> %3683}684 685define <32 x half> @stack_fold_fnmadd231ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {686; CHECK-LABEL: stack_fold_fnmadd231ph:687; CHECK: # %bb.0:688; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill689; CHECK-NEXT: #APP690; CHECK-NEXT: nop691; CHECK-NEXT: #NO_APP692; CHECK-NEXT: vfnmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload693; CHECK-NEXT: retq694 %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}"()695 %2 = fneg <32 x half> %a1696 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a2, <32 x half> %a0)697 ret <32 x half> %3698}699 700define <32 x half> @stack_fold_fnmadd321ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {701; CHECK-LABEL: stack_fold_fnmadd321ph:702; CHECK: # %bb.0:703; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill704; CHECK-NEXT: #APP705; CHECK-NEXT: nop706; CHECK-NEXT: #NO_APP707; CHECK-NEXT: vfnmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload708; CHECK-NEXT: retq709 %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}"()710 %2 = fneg <32 x half> %a2711 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a1, <32 x half> %a0)712 ret <32 x half> %3713}714 715define <32 x half> @stack_fold_fnmadd132ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {716; CHECK-LABEL: stack_fold_fnmadd132ph:717; CHECK: # %bb.0:718; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill719; CHECK-NEXT: #APP720; CHECK-NEXT: nop721; CHECK-NEXT: #NO_APP722; CHECK-NEXT: vfnmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload723; CHECK-NEXT: retq724 %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}"()725 %2 = fneg <32 x half> %a0726 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a2, <32 x half> %a1)727 ret <32 x half> %3728}729 730define <32 x half> @stack_fold_fnmadd312ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {731; CHECK-LABEL: stack_fold_fnmadd312ph:732; CHECK: # %bb.0:733; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill734; CHECK-NEXT: #APP735; CHECK-NEXT: nop736; CHECK-NEXT: #NO_APP737; CHECK-NEXT: vfnmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload738; CHECK-NEXT: retq739 %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}"()740 %2 = fneg <32 x half> %a2741 %3 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a0, <32 x half> %a1)742 ret <32 x half> %3743}744 745define <32 x half> @stack_fold_fnmadd123ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {746; CHECK-LABEL: stack_fold_fnmadd123ph_mask:747; CHECK: # %bb.0:748; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill749; CHECK-NEXT: #APP750; CHECK-NEXT: nop751; CHECK-NEXT: #NO_APP752; CHECK-NEXT: vmovaps (%rdi), %zmm2753; CHECK-NEXT: kmovd %esi, %k1754; CHECK-NEXT: vfnmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload755; CHECK-NEXT: vmovaps %zmm2, %zmm0756; CHECK-NEXT: retq757 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()758 %a0 = load <32 x half>, ptr %p759 %neg = fneg <32 x half> %a0760 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a1, <32 x half> %a2)761 %3 = bitcast i32 %mask to <32 x i1>762 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0763 ret <32 x half> %4764}765 766define <32 x half> @stack_fold_fnmadd213ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {767; CHECK-LABEL: stack_fold_fnmadd213ph_mask:768; CHECK: # %bb.0:769; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill770; CHECK-NEXT: #APP771; CHECK-NEXT: nop772; CHECK-NEXT: #NO_APP773; CHECK-NEXT: vmovaps (%rdi), %zmm2774; CHECK-NEXT: kmovd %esi, %k1775; CHECK-NEXT: vfnmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload776; CHECK-NEXT: vmovaps %zmm2, %zmm0777; CHECK-NEXT: retq778 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()779 %a0 = load <32 x half>, ptr %p780 %neg = fneg <32 x half> %a1781 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a0, <32 x half> %a2)782 %3 = bitcast i32 %mask to <32 x i1>783 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0784 ret <32 x half> %4785}786 787define <32 x half> @stack_fold_fnmadd231ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {788; CHECK-LABEL: stack_fold_fnmadd231ph_mask:789; CHECK: # %bb.0:790; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill791; CHECK-NEXT: #APP792; CHECK-NEXT: nop793; CHECK-NEXT: #NO_APP794; CHECK-NEXT: vmovaps (%rdi), %zmm2795; CHECK-NEXT: kmovd %esi, %k1796; CHECK-NEXT: vfnmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload797; CHECK-NEXT: vmovaps %zmm2, %zmm0798; CHECK-NEXT: retq799 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()800 %a0 = load <32 x half>, ptr %p801 %neg = fneg <32 x half> %a1802 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a2, <32 x half> %a0)803 %3 = bitcast i32 %mask to <32 x i1>804 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0805 ret <32 x half> %4806}807 808define <32 x half> @stack_fold_fnmadd321ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {809; CHECK-LABEL: stack_fold_fnmadd321ph_mask:810; CHECK: # %bb.0:811; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill812; CHECK-NEXT: #APP813; CHECK-NEXT: nop814; CHECK-NEXT: #NO_APP815; CHECK-NEXT: vmovaps (%rdi), %zmm2816; CHECK-NEXT: kmovd %esi, %k1817; CHECK-NEXT: vfnmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload818; CHECK-NEXT: vmovaps %zmm2, %zmm0819; CHECK-NEXT: retq820 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()821 %a0 = load <32 x half>, ptr %p822 %neg = fneg <32 x half> %a2823 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a1, <32 x half> %a0)824 %3 = bitcast i32 %mask to <32 x i1>825 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0826 ret <32 x half> %4827}828 829define <32 x half> @stack_fold_fnmadd132ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {830; CHECK-LABEL: stack_fold_fnmadd132ph_mask:831; CHECK: # %bb.0:832; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill833; CHECK-NEXT: #APP834; CHECK-NEXT: nop835; CHECK-NEXT: #NO_APP836; CHECK-NEXT: vmovaps (%rdi), %zmm2837; CHECK-NEXT: kmovd %esi, %k1838; CHECK-NEXT: vfnmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload839; CHECK-NEXT: vmovaps %zmm2, %zmm0840; CHECK-NEXT: retq841 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()842 %a0 = load <32 x half>, ptr %p843 %neg = fneg <32 x half> %a0844 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a2, <32 x half> %a1)845 %3 = bitcast i32 %mask to <32 x i1>846 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0847 ret <32 x half> %4848}849 850define <32 x half> @stack_fold_fnmadd312ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {851; CHECK-LABEL: stack_fold_fnmadd312ph_mask:852; CHECK: # %bb.0:853; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill854; CHECK-NEXT: #APP855; CHECK-NEXT: nop856; CHECK-NEXT: #NO_APP857; CHECK-NEXT: vmovaps (%rdi), %zmm2858; CHECK-NEXT: kmovd %esi, %k1859; CHECK-NEXT: vfnmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload860; CHECK-NEXT: vmovaps %zmm2, %zmm0861; CHECK-NEXT: retq862 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()863 %a0 = load <32 x half>, ptr %p864 %neg = fneg <32 x half> %a2865 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a0, <32 x half> %a1)866 %3 = bitcast i32 %mask to <32 x i1>867 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a0868 ret <32 x half> %4869}870 871define <32 x half> @stack_fold_fnmadd123ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {872; CHECK-LABEL: stack_fold_fnmadd123ph_maskz:873; CHECK: # %bb.0:874; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill875; CHECK-NEXT: #APP876; CHECK-NEXT: nop877; CHECK-NEXT: #NO_APP878; CHECK-NEXT: kmovd (%rdi), %k1879; CHECK-NEXT: vfnmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload880; CHECK-NEXT: retq881 %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}"()882 %neg = fneg <32 x half> %a0883 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a1, <32 x half> %a2)884 %3 = load i32, ptr %mask885 %4 = bitcast i32 %3 to <32 x i1>886 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer887 ret <32 x half> %5888}889 890define <32 x half> @stack_fold_fnmadd213ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {891; CHECK-LABEL: stack_fold_fnmadd213ph_maskz:892; CHECK: # %bb.0:893; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill894; CHECK-NEXT: #APP895; CHECK-NEXT: nop896; CHECK-NEXT: #NO_APP897; CHECK-NEXT: kmovd (%rdi), %k1898; CHECK-NEXT: vfnmadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload899; CHECK-NEXT: retq900 %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}"()901 %neg = fneg <32 x half> %a1902 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a0, <32 x half> %a2)903 %3 = load i32, ptr %mask904 %4 = bitcast i32 %3 to <32 x i1>905 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer906 ret <32 x half> %5907}908 909define <32 x half> @stack_fold_fnmadd231ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {910; CHECK-LABEL: stack_fold_fnmadd231ph_maskz:911; CHECK: # %bb.0:912; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill913; CHECK-NEXT: #APP914; CHECK-NEXT: nop915; CHECK-NEXT: #NO_APP916; CHECK-NEXT: kmovd (%rdi), %k1917; CHECK-NEXT: vfnmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload918; CHECK-NEXT: retq919 %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}"()920 %neg = fneg <32 x half> %a1921 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a2, <32 x half> %a0)922 %3 = load i32, ptr %mask923 %4 = bitcast i32 %3 to <32 x i1>924 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer925 ret <32 x half> %5926}927 928define <32 x half> @stack_fold_fnmadd321ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {929; CHECK-LABEL: stack_fold_fnmadd321ph_maskz:930; CHECK: # %bb.0:931; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill932; CHECK-NEXT: #APP933; CHECK-NEXT: nop934; CHECK-NEXT: #NO_APP935; CHECK-NEXT: kmovd (%rdi), %k1936; CHECK-NEXT: vfnmadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload937; CHECK-NEXT: retq938 %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}"()939 %neg = fneg <32 x half> %a2940 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a1, <32 x half> %a0)941 %3 = load i32, ptr %mask942 %4 = bitcast i32 %3 to <32 x i1>943 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer944 ret <32 x half> %5945}946 947define <32 x half> @stack_fold_fnmadd132ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {948; CHECK-LABEL: stack_fold_fnmadd132ph_maskz:949; CHECK: # %bb.0:950; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill951; CHECK-NEXT: #APP952; CHECK-NEXT: nop953; CHECK-NEXT: #NO_APP954; CHECK-NEXT: kmovd (%rdi), %k1955; CHECK-NEXT: vfnmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload956; CHECK-NEXT: retq957 %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}"()958 %neg = fneg <32 x half> %a0959 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a2, <32 x half> %a1)960 %3 = load i32, ptr %mask961 %4 = bitcast i32 %3 to <32 x i1>962 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer963 ret <32 x half> %5964}965 966define <32 x half> @stack_fold_fnmadd312ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {967; CHECK-LABEL: stack_fold_fnmadd312ph_maskz:968; CHECK: # %bb.0:969; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill970; CHECK-NEXT: #APP971; CHECK-NEXT: nop972; CHECK-NEXT: #NO_APP973; CHECK-NEXT: kmovd (%rdi), %k1974; CHECK-NEXT: vfnmadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload975; CHECK-NEXT: retq976 %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}"()977 %neg = fneg <32 x half> %a2978 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg, <32 x half> %a0, <32 x half> %a1)979 %3 = load i32, ptr %mask980 %4 = bitcast i32 %3 to <32 x i1>981 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer982 ret <32 x half> %5983}984 985define <32 x half> @stack_fold_fnmsub123ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {986; CHECK-LABEL: stack_fold_fnmsub123ph:987; CHECK: # %bb.0:988; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill989; CHECK-NEXT: #APP990; CHECK-NEXT: nop991; CHECK-NEXT: #NO_APP992; CHECK-NEXT: vfnmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload993; CHECK-NEXT: retq994 %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}"()995 %2 = fneg <32 x half> %a0996 %3 = fneg <32 x half> %a2997 %4 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a1, <32 x half> %3)998 ret <32 x half> %4999}1000 1001define <32 x half> @stack_fold_fnmsub213ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {1002; CHECK-LABEL: stack_fold_fnmsub213ph:1003; CHECK: # %bb.0:1004; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1005; CHECK-NEXT: #APP1006; CHECK-NEXT: nop1007; CHECK-NEXT: #NO_APP1008; CHECK-NEXT: vfnmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1009; CHECK-NEXT: retq1010 %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}"()1011 %2 = fneg <32 x half> %a11012 %3 = fneg <32 x half> %a21013 %4 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a0, <32 x half> %3)1014 ret <32 x half> %41015}1016 1017define <32 x half> @stack_fold_fnmsub231ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {1018; CHECK-LABEL: stack_fold_fnmsub231ph:1019; CHECK: # %bb.0:1020; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1021; CHECK-NEXT: #APP1022; CHECK-NEXT: nop1023; CHECK-NEXT: #NO_APP1024; CHECK-NEXT: vfnmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1025; CHECK-NEXT: retq1026 %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}"()1027 %2 = fneg <32 x half> %a11028 %3 = fneg <32 x half> %a01029 %4 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a2, <32 x half> %3)1030 ret <32 x half> %41031}1032 1033define <32 x half> @stack_fold_fnmsub321ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {1034; CHECK-LABEL: stack_fold_fnmsub321ph:1035; CHECK: # %bb.0:1036; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1037; CHECK-NEXT: #APP1038; CHECK-NEXT: nop1039; CHECK-NEXT: #NO_APP1040; CHECK-NEXT: vfnmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1041; CHECK-NEXT: retq1042 %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}"()1043 %2 = fneg <32 x half> %a21044 %3 = fneg <32 x half> %a01045 %4 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a1, <32 x half> %3)1046 ret <32 x half> %41047}1048 1049define <32 x half> @stack_fold_fnmsub132ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {1050; CHECK-LABEL: stack_fold_fnmsub132ph:1051; CHECK: # %bb.0:1052; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1053; CHECK-NEXT: #APP1054; CHECK-NEXT: nop1055; CHECK-NEXT: #NO_APP1056; CHECK-NEXT: vfnmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1057; CHECK-NEXT: retq1058 %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}"()1059 %2 = fneg <32 x half> %a01060 %3 = fneg <32 x half> %a11061 %4 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a2, <32 x half> %3)1062 ret <32 x half> %41063}1064 1065define <32 x half> @stack_fold_fnmsub312ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {1066; CHECK-LABEL: stack_fold_fnmsub312ph:1067; CHECK: # %bb.0:1068; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1069; CHECK-NEXT: #APP1070; CHECK-NEXT: nop1071; CHECK-NEXT: #NO_APP1072; CHECK-NEXT: vfnmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload1073; CHECK-NEXT: retq1074 %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}"()1075 %2 = fneg <32 x half> %a21076 %3 = fneg <32 x half> %a11077 %4 = call <32 x half> @llvm.fma.v32f16(<32 x half> %2, <32 x half> %a0, <32 x half> %3)1078 ret <32 x half> %41079}1080 1081define <32 x half> @stack_fold_fnmsub123ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {1082; CHECK-LABEL: stack_fold_fnmsub123ph_mask:1083; CHECK: # %bb.0:1084; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1085; CHECK-NEXT: #APP1086; CHECK-NEXT: nop1087; CHECK-NEXT: #NO_APP1088; CHECK-NEXT: vmovaps (%rdi), %zmm21089; CHECK-NEXT: kmovd %esi, %k11090; CHECK-NEXT: vfnmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1091; CHECK-NEXT: vmovaps %zmm2, %zmm01092; CHECK-NEXT: retq1093 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1094 %a0 = load <32 x half>, ptr %p1095 %neg = fneg <32 x half> %a21096 %neg1 = fneg <32 x half> %a01097 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a1, <32 x half> %neg)1098 %3 = bitcast i32 %mask to <32 x i1>1099 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a01100 ret <32 x half> %41101}1102 1103define <32 x half> @stack_fold_fnmsub213ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {1104; CHECK-LABEL: stack_fold_fnmsub213ph_mask:1105; CHECK: # %bb.0:1106; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1107; CHECK-NEXT: #APP1108; CHECK-NEXT: nop1109; CHECK-NEXT: #NO_APP1110; CHECK-NEXT: vmovaps (%rdi), %zmm21111; CHECK-NEXT: kmovd %esi, %k11112; CHECK-NEXT: vfnmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1113; CHECK-NEXT: vmovaps %zmm2, %zmm01114; CHECK-NEXT: retq1115 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1116 %a0 = load <32 x half>, ptr %p1117 %neg = fneg <32 x half> %a21118 %neg1 = fneg <32 x half> %a11119 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a0, <32 x half> %neg)1120 %3 = bitcast i32 %mask to <32 x i1>1121 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a01122 ret <32 x half> %41123}1124 1125define <32 x half> @stack_fold_fnmsub231ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {1126; CHECK-LABEL: stack_fold_fnmsub231ph_mask:1127; CHECK: # %bb.0:1128; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1129; CHECK-NEXT: #APP1130; CHECK-NEXT: nop1131; CHECK-NEXT: #NO_APP1132; CHECK-NEXT: vmovaps (%rdi), %zmm21133; CHECK-NEXT: kmovd %esi, %k11134; CHECK-NEXT: vfnmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1135; CHECK-NEXT: vmovaps %zmm2, %zmm01136; CHECK-NEXT: retq1137 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1138 %a0 = load <32 x half>, ptr %p1139 %neg = fneg <32 x half> %a01140 %neg1 = fneg <32 x half> %a11141 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a2, <32 x half> %neg)1142 %3 = bitcast i32 %mask to <32 x i1>1143 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a01144 ret <32 x half> %41145}1146 1147define <32 x half> @stack_fold_fnmsub321ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {1148; CHECK-LABEL: stack_fold_fnmsub321ph_mask:1149; CHECK: # %bb.0:1150; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1151; CHECK-NEXT: #APP1152; CHECK-NEXT: nop1153; CHECK-NEXT: #NO_APP1154; CHECK-NEXT: vmovaps (%rdi), %zmm21155; CHECK-NEXT: kmovd %esi, %k11156; CHECK-NEXT: vfnmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1157; CHECK-NEXT: vmovaps %zmm2, %zmm01158; CHECK-NEXT: retq1159 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1160 %a0 = load <32 x half>, ptr %p1161 %neg = fneg <32 x half> %a01162 %neg1 = fneg <32 x half> %a21163 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a1, <32 x half> %neg)1164 %3 = bitcast i32 %mask to <32 x i1>1165 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a01166 ret <32 x half> %41167}1168 1169define <32 x half> @stack_fold_fnmsub132ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {1170; CHECK-LABEL: stack_fold_fnmsub132ph_mask:1171; CHECK: # %bb.0:1172; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1173; CHECK-NEXT: #APP1174; CHECK-NEXT: nop1175; CHECK-NEXT: #NO_APP1176; CHECK-NEXT: vmovaps (%rdi), %zmm21177; CHECK-NEXT: kmovd %esi, %k11178; CHECK-NEXT: vfnmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1179; CHECK-NEXT: vmovaps %zmm2, %zmm01180; CHECK-NEXT: retq1181 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1182 %a0 = load <32 x half>, ptr %p1183 %neg = fneg <32 x half> %a11184 %neg1 = fneg <32 x half> %a01185 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a2, <32 x half> %neg)1186 %3 = bitcast i32 %mask to <32 x i1>1187 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a01188 ret <32 x half> %41189}1190 1191define <32 x half> @stack_fold_fnmsub312ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {1192; CHECK-LABEL: stack_fold_fnmsub312ph_mask:1193; CHECK: # %bb.0:1194; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1195; CHECK-NEXT: #APP1196; CHECK-NEXT: nop1197; CHECK-NEXT: #NO_APP1198; CHECK-NEXT: vmovaps (%rdi), %zmm21199; CHECK-NEXT: kmovd %esi, %k11200; CHECK-NEXT: vfnmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload1201; CHECK-NEXT: vmovaps %zmm2, %zmm01202; CHECK-NEXT: retq1203 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()1204 %a0 = load <32 x half>, ptr %p1205 %neg = fneg <32 x half> %a11206 %neg1 = fneg <32 x half> %a21207 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a0, <32 x half> %neg)1208 %3 = bitcast i32 %mask to <32 x i1>1209 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a01210 ret <32 x half> %41211}1212 1213define <32 x half> @stack_fold_fnmsub123ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {1214; CHECK-LABEL: stack_fold_fnmsub123ph_maskz:1215; CHECK: # %bb.0:1216; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1217; CHECK-NEXT: #APP1218; CHECK-NEXT: nop1219; CHECK-NEXT: #NO_APP1220; CHECK-NEXT: kmovd (%rdi), %k11221; CHECK-NEXT: vfnmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload1222; CHECK-NEXT: retq1223 %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}"()1224 %neg = fneg <32 x half> %a21225 %neg1 = fneg <32 x half> %a01226 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a1, <32 x half> %neg)1227 %3 = load i32, ptr %mask1228 %4 = bitcast i32 %3 to <32 x i1>1229 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer1230 ret <32 x half> %51231}1232 1233define <32 x half> @stack_fold_fnmsub213ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {1234; CHECK-LABEL: stack_fold_fnmsub213ph_maskz:1235; CHECK: # %bb.0:1236; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1237; CHECK-NEXT: #APP1238; CHECK-NEXT: nop1239; CHECK-NEXT: #NO_APP1240; CHECK-NEXT: kmovd (%rdi), %k11241; CHECK-NEXT: vfnmsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload1242; CHECK-NEXT: retq1243 %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}"()1244 %neg = fneg <32 x half> %a21245 %neg1 = fneg <32 x half> %a11246 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a0, <32 x half> %neg)1247 %3 = load i32, ptr %mask1248 %4 = bitcast i32 %3 to <32 x i1>1249 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer1250 ret <32 x half> %51251}1252 1253define <32 x half> @stack_fold_fnmsub231ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {1254; CHECK-LABEL: stack_fold_fnmsub231ph_maskz:1255; CHECK: # %bb.0:1256; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1257; CHECK-NEXT: #APP1258; CHECK-NEXT: nop1259; CHECK-NEXT: #NO_APP1260; CHECK-NEXT: kmovd (%rdi), %k11261; CHECK-NEXT: vfnmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload1262; CHECK-NEXT: retq1263 %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}"()1264 %neg = fneg <32 x half> %a01265 %neg1 = fneg <32 x half> %a11266 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a2, <32 x half> %neg)1267 %3 = load i32, ptr %mask1268 %4 = bitcast i32 %3 to <32 x i1>1269 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer1270 ret <32 x half> %51271}1272 1273define <32 x half> @stack_fold_fnmsub321ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {1274; CHECK-LABEL: stack_fold_fnmsub321ph_maskz:1275; CHECK: # %bb.0:1276; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1277; CHECK-NEXT: #APP1278; CHECK-NEXT: nop1279; CHECK-NEXT: #NO_APP1280; CHECK-NEXT: kmovd (%rdi), %k11281; CHECK-NEXT: vfnmsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload1282; CHECK-NEXT: retq1283 %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}"()1284 %neg = fneg <32 x half> %a01285 %neg1 = fneg <32 x half> %a21286 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a1, <32 x half> %neg)1287 %3 = load i32, ptr %mask1288 %4 = bitcast i32 %3 to <32 x i1>1289 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer1290 ret <32 x half> %51291}1292 1293define <32 x half> @stack_fold_fnmsub132ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {1294; CHECK-LABEL: stack_fold_fnmsub132ph_maskz:1295; CHECK: # %bb.0:1296; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1297; CHECK-NEXT: #APP1298; CHECK-NEXT: nop1299; CHECK-NEXT: #NO_APP1300; CHECK-NEXT: kmovd (%rdi), %k11301; CHECK-NEXT: vfnmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload1302; CHECK-NEXT: retq1303 %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}"()1304 %neg = fneg <32 x half> %a11305 %neg1 = fneg <32 x half> %a01306 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a2, <32 x half> %neg)1307 %3 = load i32, ptr %mask1308 %4 = bitcast i32 %3 to <32 x i1>1309 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer1310 ret <32 x half> %51311}1312 1313define <32 x half> @stack_fold_fnmsub312ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {1314; CHECK-LABEL: stack_fold_fnmsub312ph_maskz:1315; CHECK: # %bb.0:1316; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill1317; CHECK-NEXT: #APP1318; CHECK-NEXT: nop1319; CHECK-NEXT: #NO_APP1320; CHECK-NEXT: kmovd (%rdi), %k11321; CHECK-NEXT: vfnmsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload1322; CHECK-NEXT: retq1323 %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}"()1324 %neg = fneg <32 x half> %a11325 %neg1 = fneg <32 x half> %a21326 %2 = call <32 x half> @llvm.fma.v32f16(<32 x half> %neg1, <32 x half> %a0, <32 x half> %neg)1327 %3 = load i32, ptr %mask1328 %4 = bitcast i32 %3 to <32 x i1>1329 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer1330 ret <32 x half> %51331}1332 1333define half @stack_fold_fmadd123sh(half %a0, half %a1, half %a2) {1334; CHECK-LABEL: stack_fold_fmadd123sh:1335; CHECK: # %bb.0:1336; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1337; CHECK-NEXT: #APP1338; CHECK-NEXT: nop1339; CHECK-NEXT: #NO_APP1340; CHECK-NEXT: vfmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1341; CHECK-NEXT: retq1342 %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}"()1343 %2 = call half @llvm.fma.f16(half %a0, half %a1, half %a2)1344 ret half %21345}1346declare half @llvm.fma.f16(half, half, half)1347 1348define half @stack_fold_fmadd213sh(half %a0, half %a1, half %a2) {1349; CHECK-LABEL: stack_fold_fmadd213sh:1350; CHECK: # %bb.0:1351; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1352; CHECK-NEXT: #APP1353; CHECK-NEXT: nop1354; CHECK-NEXT: #NO_APP1355; CHECK-NEXT: vfmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1356; CHECK-NEXT: retq1357 %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}"()1358 %2 = call half @llvm.fma.f16(half %a1, half %a0, half %a2)1359 ret half %21360}1361 1362define half @stack_fold_fmadd231sh(half %a0, half %a1, half %a2) {1363; CHECK-LABEL: stack_fold_fmadd231sh:1364; CHECK: # %bb.0:1365; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1366; CHECK-NEXT: #APP1367; CHECK-NEXT: nop1368; CHECK-NEXT: #NO_APP1369; CHECK-NEXT: vfmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1370; CHECK-NEXT: retq1371 %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}"()1372 %2 = call half @llvm.fma.f16(half %a1, half %a2, half %a0)1373 ret half %21374}1375 1376define half @stack_fold_fmadd321sh(half %a0, half %a1, half %a2) {1377; CHECK-LABEL: stack_fold_fmadd321sh:1378; CHECK: # %bb.0:1379; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1380; CHECK-NEXT: #APP1381; CHECK-NEXT: nop1382; CHECK-NEXT: #NO_APP1383; CHECK-NEXT: vfmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1384; CHECK-NEXT: retq1385 %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}"()1386 %2 = call half @llvm.fma.f16(half %a2, half %a1, half %a0)1387 ret half %21388}1389 1390define half @stack_fold_fmadd132sh(half %a0, half %a1, half %a2) {1391; CHECK-LABEL: stack_fold_fmadd132sh:1392; CHECK: # %bb.0:1393; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1394; CHECK-NEXT: #APP1395; CHECK-NEXT: nop1396; CHECK-NEXT: #NO_APP1397; CHECK-NEXT: vfmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1398; CHECK-NEXT: retq1399 %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}"()1400 %2 = call half @llvm.fma.f16(half %a0, half %a2, half %a1)1401 ret half %21402}1403 1404define half @stack_fold_fmadd312sh(half %a0, half %a1, half %a2) {1405; CHECK-LABEL: stack_fold_fmadd312sh:1406; CHECK: # %bb.0:1407; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1408; CHECK-NEXT: #APP1409; CHECK-NEXT: nop1410; CHECK-NEXT: #NO_APP1411; CHECK-NEXT: vfmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1412; CHECK-NEXT: retq1413 %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}"()1414 %2 = call half @llvm.fma.f16(half %a2, half %a0, half %a1)1415 ret half %21416}1417 1418define half @stack_fold_fmsub123sh(half %a0, half %a1, half %a2) {1419; CHECK-LABEL: stack_fold_fmsub123sh:1420; CHECK: # %bb.0:1421; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1422; CHECK-NEXT: #APP1423; CHECK-NEXT: nop1424; CHECK-NEXT: #NO_APP1425; CHECK-NEXT: vfmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1426; CHECK-NEXT: retq1427 %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}"()1428 %2 = fneg half %a21429 %3 = call half @llvm.fma.f16(half %a0, half %a1, half %2)1430 ret half %31431}1432 1433define half @stack_fold_fmsub213sh(half %a0, half %a1, half %a2) {1434; CHECK-LABEL: stack_fold_fmsub213sh:1435; CHECK: # %bb.0:1436; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1437; CHECK-NEXT: #APP1438; CHECK-NEXT: nop1439; CHECK-NEXT: #NO_APP1440; CHECK-NEXT: vfmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1441; CHECK-NEXT: retq1442 %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}"()1443 %2 = fneg half %a21444 %3 = call half @llvm.fma.f16(half %a1, half %a0, half %2)1445 ret half %31446}1447 1448define half @stack_fold_fmsub231sh(half %a0, half %a1, half %a2) {1449; CHECK-LABEL: stack_fold_fmsub231sh:1450; CHECK: # %bb.0:1451; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1452; CHECK-NEXT: #APP1453; CHECK-NEXT: nop1454; CHECK-NEXT: #NO_APP1455; CHECK-NEXT: vfmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1456; CHECK-NEXT: retq1457 %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}"()1458 %2 = fneg half %a01459 %3 = call half @llvm.fma.f16(half %a1, half %a2, half %2)1460 ret half %31461}1462 1463define half @stack_fold_fmsub321sh(half %a0, half %a1, half %a2) {1464; CHECK-LABEL: stack_fold_fmsub321sh:1465; CHECK: # %bb.0:1466; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1467; CHECK-NEXT: #APP1468; CHECK-NEXT: nop1469; CHECK-NEXT: #NO_APP1470; CHECK-NEXT: vfmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1471; CHECK-NEXT: retq1472 %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}"()1473 %2 = fneg half %a01474 %3 = call half @llvm.fma.f16(half %a2, half %a1, half %2)1475 ret half %31476}1477 1478define half @stack_fold_fmsub132sh(half %a0, half %a1, half %a2) {1479; CHECK-LABEL: stack_fold_fmsub132sh:1480; CHECK: # %bb.0:1481; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1482; CHECK-NEXT: #APP1483; CHECK-NEXT: nop1484; CHECK-NEXT: #NO_APP1485; CHECK-NEXT: vfmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1486; CHECK-NEXT: retq1487 %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}"()1488 %2 = fneg half %a11489 %3 = call half @llvm.fma.f16(half %a0, half %a2, half %2)1490 ret half %31491}1492 1493define half @stack_fold_fmsub312sh(half %a0, half %a1, half %a2) {1494; CHECK-LABEL: stack_fold_fmsub312sh:1495; CHECK: # %bb.0:1496; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1497; CHECK-NEXT: #APP1498; CHECK-NEXT: nop1499; CHECK-NEXT: #NO_APP1500; CHECK-NEXT: vfmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1501; CHECK-NEXT: retq1502 %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}"()1503 %2 = fneg half %a11504 %3 = call half @llvm.fma.f16(half %a2, half %a0, half %2)1505 ret half %31506}1507 1508define half @stack_fold_fnmadd123sh(half %a0, half %a1, half %a2) {1509; CHECK-LABEL: stack_fold_fnmadd123sh:1510; CHECK: # %bb.0:1511; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1512; CHECK-NEXT: #APP1513; CHECK-NEXT: nop1514; CHECK-NEXT: #NO_APP1515; CHECK-NEXT: vfnmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1516; CHECK-NEXT: retq1517 %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}"()1518 %2 = fneg half %a01519 %3 = call half @llvm.fma.f16(half %2, half %a1, half %a2)1520 ret half %31521}1522 1523define half @stack_fold_fnmadd213sh(half %a0, half %a1, half %a2) {1524; CHECK-LABEL: stack_fold_fnmadd213sh:1525; CHECK: # %bb.0:1526; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1527; CHECK-NEXT: #APP1528; CHECK-NEXT: nop1529; CHECK-NEXT: #NO_APP1530; CHECK-NEXT: vfnmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1531; CHECK-NEXT: retq1532 %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}"()1533 %2 = fneg half %a11534 %3 = call half @llvm.fma.f16(half %2, half %a0, half %a2)1535 ret half %31536}1537 1538define half @stack_fold_fnmadd231sh(half %a0, half %a1, half %a2) {1539; CHECK-LABEL: stack_fold_fnmadd231sh:1540; CHECK: # %bb.0:1541; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1542; CHECK-NEXT: #APP1543; CHECK-NEXT: nop1544; CHECK-NEXT: #NO_APP1545; CHECK-NEXT: vfnmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1546; CHECK-NEXT: retq1547 %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}"()1548 %2 = fneg half %a11549 %3 = call half @llvm.fma.f16(half %2, half %a2, half %a0)1550 ret half %31551}1552 1553define half @stack_fold_fnmadd321sh(half %a0, half %a1, half %a2) {1554; CHECK-LABEL: stack_fold_fnmadd321sh:1555; CHECK: # %bb.0:1556; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1557; CHECK-NEXT: #APP1558; CHECK-NEXT: nop1559; CHECK-NEXT: #NO_APP1560; CHECK-NEXT: vfnmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1561; CHECK-NEXT: retq1562 %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}"()1563 %2 = fneg half %a21564 %3 = call half @llvm.fma.f16(half %2, half %a1, half %a0)1565 ret half %31566}1567 1568define half @stack_fold_fnmadd132sh(half %a0, half %a1, half %a2) {1569; CHECK-LABEL: stack_fold_fnmadd132sh:1570; CHECK: # %bb.0:1571; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1572; CHECK-NEXT: #APP1573; CHECK-NEXT: nop1574; CHECK-NEXT: #NO_APP1575; CHECK-NEXT: vfnmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1576; CHECK-NEXT: retq1577 %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}"()1578 %2 = fneg half %a01579 %3 = call half @llvm.fma.f16(half %2, half %a2, half %a1)1580 ret half %31581}1582 1583define half @stack_fold_fnmadd312sh(half %a0, half %a1, half %a2) {1584; CHECK-LABEL: stack_fold_fnmadd312sh:1585; CHECK: # %bb.0:1586; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1587; CHECK-NEXT: #APP1588; CHECK-NEXT: nop1589; CHECK-NEXT: #NO_APP1590; CHECK-NEXT: vfnmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1591; CHECK-NEXT: retq1592 %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}"()1593 %2 = fneg half %a21594 %3 = call half @llvm.fma.f16(half %2, half %a0, half %a1)1595 ret half %31596}1597 1598define half @stack_fold_fnmsub123sh(half %a0, half %a1, half %a2) {1599; CHECK-LABEL: stack_fold_fnmsub123sh:1600; CHECK: # %bb.0:1601; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1602; CHECK-NEXT: #APP1603; CHECK-NEXT: nop1604; CHECK-NEXT: #NO_APP1605; CHECK-NEXT: vfnmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1606; CHECK-NEXT: retq1607 %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}"()1608 %2 = fneg half %a01609 %3 = fneg half %a21610 %4 = call half @llvm.fma.f16(half %2, half %a1, half %3)1611 ret half %41612}1613 1614define half @stack_fold_fnmsub213sh(half %a0, half %a1, half %a2) {1615; CHECK-LABEL: stack_fold_fnmsub213sh:1616; CHECK: # %bb.0:1617; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1618; CHECK-NEXT: #APP1619; CHECK-NEXT: nop1620; CHECK-NEXT: #NO_APP1621; CHECK-NEXT: vfnmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1622; CHECK-NEXT: retq1623 %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}"()1624 %2 = fneg half %a11625 %3 = fneg half %a21626 %4 = call half @llvm.fma.f16(half %2, half %a0, half %3)1627 ret half %41628}1629 1630define half @stack_fold_fnmsub231sh(half %a0, half %a1, half %a2) {1631; CHECK-LABEL: stack_fold_fnmsub231sh:1632; CHECK: # %bb.0:1633; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1634; CHECK-NEXT: #APP1635; CHECK-NEXT: nop1636; CHECK-NEXT: #NO_APP1637; CHECK-NEXT: vfnmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1638; CHECK-NEXT: retq1639 %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}"()1640 %2 = fneg half %a11641 %3 = fneg half %a01642 %4 = call half @llvm.fma.f16(half %2, half %a2, half %3)1643 ret half %41644}1645 1646define half @stack_fold_fnmsub321sh(half %a0, half %a1, half %a2) {1647; CHECK-LABEL: stack_fold_fnmsub321sh:1648; CHECK: # %bb.0:1649; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1650; CHECK-NEXT: #APP1651; CHECK-NEXT: nop1652; CHECK-NEXT: #NO_APP1653; CHECK-NEXT: vfnmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1654; CHECK-NEXT: retq1655 %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}"()1656 %2 = fneg half %a21657 %3 = fneg half %a01658 %4 = call half @llvm.fma.f16(half %2, half %a1, half %3)1659 ret half %41660}1661 1662define half @stack_fold_fnmsub132sh(half %a0, half %a1, half %a2) {1663; CHECK-LABEL: stack_fold_fnmsub132sh:1664; CHECK: # %bb.0:1665; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1666; CHECK-NEXT: #APP1667; CHECK-NEXT: nop1668; CHECK-NEXT: #NO_APP1669; CHECK-NEXT: vfnmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1670; CHECK-NEXT: retq1671 %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}"()1672 %2 = fneg half %a01673 %3 = fneg half %a11674 %4 = call half @llvm.fma.f16(half %2, half %a2, half %3)1675 ret half %41676}1677 1678define half @stack_fold_fnmsub312sh(half %a0, half %a1, half %a2) {1679; CHECK-LABEL: stack_fold_fnmsub312sh:1680; CHECK: # %bb.0:1681; CHECK-NEXT: vmovsh %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill1682; CHECK-NEXT: #APP1683; CHECK-NEXT: nop1684; CHECK-NEXT: #NO_APP1685; CHECK-NEXT: vfnmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 4-byte Folded Reload1686; CHECK-NEXT: retq1687 %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}"()1688 %2 = fneg half %a21689 %3 = fneg half %a11690 %4 = call half @llvm.fma.f16(half %2, half %a0, half %3)1691 ret half %41692}1693 1694define <8 x half> @stack_fold_fmadd123sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1695; CHECK-LABEL: stack_fold_fmadd123sh_int:1696; CHECK: # %bb.0:1697; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1698; CHECK-NEXT: #APP1699; CHECK-NEXT: nop1700; CHECK-NEXT: #NO_APP1701; CHECK-NEXT: vfmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1702; CHECK-NEXT: retq1703 %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}"()1704 %a0 = extractelement <8 x half> %a0v, i64 01705 %a1 = extractelement <8 x half> %a1v, i64 01706 %a2 = extractelement <8 x half> %a2v, i64 01707 %2 = call half @llvm.fma.f16(half %a0, half %a1, half %a2)1708 %res = insertelement <8 x half> %a0v, half %2, i64 01709 ret <8 x half> %res1710}1711 1712define <8 x half> @stack_fold_fmadd213sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1713; CHECK-LABEL: stack_fold_fmadd213sh_int:1714; CHECK: # %bb.0:1715; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1716; CHECK-NEXT: #APP1717; CHECK-NEXT: nop1718; CHECK-NEXT: #NO_APP1719; CHECK-NEXT: vfmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1720; CHECK-NEXT: retq1721 %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}"()1722 %a0 = extractelement <8 x half> %a0v, i64 01723 %a1 = extractelement <8 x half> %a1v, i64 01724 %a2 = extractelement <8 x half> %a2v, i64 01725 %2 = call half @llvm.fma.f16(half %a1, half %a0, half %a2)1726 %res = insertelement <8 x half> %a0v, half %2, i64 01727 ret <8 x half> %res1728}1729 1730define <8 x half> @stack_fold_fmadd231sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1731; CHECK-LABEL: stack_fold_fmadd231sh_int:1732; CHECK: # %bb.0:1733; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1734; CHECK-NEXT: #APP1735; CHECK-NEXT: nop1736; CHECK-NEXT: #NO_APP1737; CHECK-NEXT: vfmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1738; CHECK-NEXT: retq1739 %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}"()1740 %a0 = extractelement <8 x half> %a0v, i64 01741 %a1 = extractelement <8 x half> %a1v, i64 01742 %a2 = extractelement <8 x half> %a2v, i64 01743 %2 = call half @llvm.fma.f16(half %a1, half %a2, half %a0)1744 %res = insertelement <8 x half> %a0v, half %2, i64 01745 ret <8 x half> %res1746}1747 1748define <8 x half> @stack_fold_fmadd321sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1749; CHECK-LABEL: stack_fold_fmadd321sh_int:1750; CHECK: # %bb.0:1751; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1752; CHECK-NEXT: #APP1753; CHECK-NEXT: nop1754; CHECK-NEXT: #NO_APP1755; CHECK-NEXT: vfmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1756; CHECK-NEXT: retq1757 %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}"()1758 %a0 = extractelement <8 x half> %a0v, i64 01759 %a1 = extractelement <8 x half> %a1v, i64 01760 %a2 = extractelement <8 x half> %a2v, i64 01761 %2 = call half @llvm.fma.f16(half %a2, half %a1, half %a0)1762 %res = insertelement <8 x half> %a0v, half %2, i64 01763 ret <8 x half> %res1764}1765 1766define <8 x half> @stack_fold_fmadd132sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1767; CHECK-LABEL: stack_fold_fmadd132sh_int:1768; CHECK: # %bb.0:1769; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1770; CHECK-NEXT: #APP1771; CHECK-NEXT: nop1772; CHECK-NEXT: #NO_APP1773; CHECK-NEXT: vfmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1774; CHECK-NEXT: retq1775 %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}"()1776 %a0 = extractelement <8 x half> %a0v, i64 01777 %a1 = extractelement <8 x half> %a1v, i64 01778 %a2 = extractelement <8 x half> %a2v, i64 01779 %2 = call half @llvm.fma.f16(half %a0, half %a2, half %a1)1780 %res = insertelement <8 x half> %a0v, half %2, i64 01781 ret <8 x half> %res1782}1783 1784define <8 x half> @stack_fold_fmadd312sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1785; CHECK-LABEL: stack_fold_fmadd312sh_int:1786; CHECK: # %bb.0:1787; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1788; CHECK-NEXT: #APP1789; CHECK-NEXT: nop1790; CHECK-NEXT: #NO_APP1791; CHECK-NEXT: vfmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1792; CHECK-NEXT: retq1793 %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}"()1794 %a0 = extractelement <8 x half> %a0v, i64 01795 %a1 = extractelement <8 x half> %a1v, i64 01796 %a2 = extractelement <8 x half> %a2v, i64 01797 %2 = call half @llvm.fma.f16(half %a2, half %a0, half %a1)1798 %res = insertelement <8 x half> %a0v, half %2, i64 01799 ret <8 x half> %res1800}1801 1802define <8 x half> @stack_fold_fmsub123sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1803; CHECK-LABEL: stack_fold_fmsub123sh_int:1804; CHECK: # %bb.0:1805; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1806; CHECK-NEXT: #APP1807; CHECK-NEXT: nop1808; CHECK-NEXT: #NO_APP1809; CHECK-NEXT: vfmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1810; CHECK-NEXT: retq1811 %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}"()1812 %a0 = extractelement <8 x half> %a0v, i64 01813 %a1 = extractelement <8 x half> %a1v, i64 01814 %a2 = extractelement <8 x half> %a2v, i64 01815 %neg = fneg half %a21816 %2 = call half @llvm.fma.f16(half %a0, half %a1, half %neg)1817 %res = insertelement <8 x half> %a0v, half %2, i64 01818 ret <8 x half> %res1819}1820 1821define <8 x half> @stack_fold_fmsub213sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1822; CHECK-LABEL: stack_fold_fmsub213sh_int:1823; CHECK: # %bb.0:1824; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1825; CHECK-NEXT: #APP1826; CHECK-NEXT: nop1827; CHECK-NEXT: #NO_APP1828; CHECK-NEXT: vfmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1829; CHECK-NEXT: retq1830 %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}"()1831 %a0 = extractelement <8 x half> %a0v, i64 01832 %a1 = extractelement <8 x half> %a1v, i64 01833 %a2 = extractelement <8 x half> %a2v, i64 01834 %neg = fneg half %a21835 %2 = call half @llvm.fma.f16(half %a1, half %a0, half %neg)1836 %res = insertelement <8 x half> %a0v, half %2, i64 01837 ret <8 x half> %res1838}1839 1840define <8 x half> @stack_fold_fmsub231sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1841; CHECK-LABEL: stack_fold_fmsub231sh_int:1842; CHECK: # %bb.0:1843; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1844; CHECK-NEXT: #APP1845; CHECK-NEXT: nop1846; CHECK-NEXT: #NO_APP1847; CHECK-NEXT: vfmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1848; CHECK-NEXT: retq1849 %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}"()1850 %a0 = extractelement <8 x half> %a0v, i64 01851 %a1 = extractelement <8 x half> %a1v, i64 01852 %a2 = extractelement <8 x half> %a2v, i64 01853 %neg = fneg half %a01854 %2 = call half @llvm.fma.f16(half %a1, half %a2, half %neg)1855 %res = insertelement <8 x half> %a0v, half %2, i64 01856 ret <8 x half> %res1857}1858 1859define <8 x half> @stack_fold_fmsub321sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1860; CHECK-LABEL: stack_fold_fmsub321sh_int:1861; CHECK: # %bb.0:1862; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1863; CHECK-NEXT: #APP1864; CHECK-NEXT: nop1865; CHECK-NEXT: #NO_APP1866; CHECK-NEXT: vfmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1867; CHECK-NEXT: retq1868 %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}"()1869 %a0 = extractelement <8 x half> %a0v, i64 01870 %a1 = extractelement <8 x half> %a1v, i64 01871 %a2 = extractelement <8 x half> %a2v, i64 01872 %neg = fneg half %a01873 %2 = call half @llvm.fma.f16(half %a2, half %a1, half %neg)1874 %res = insertelement <8 x half> %a0v, half %2, i64 01875 ret <8 x half> %res1876}1877 1878define <8 x half> @stack_fold_fmsub132sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1879; CHECK-LABEL: stack_fold_fmsub132sh_int:1880; CHECK: # %bb.0:1881; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1882; CHECK-NEXT: #APP1883; CHECK-NEXT: nop1884; CHECK-NEXT: #NO_APP1885; CHECK-NEXT: vfmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1886; CHECK-NEXT: retq1887 %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}"()1888 %a0 = extractelement <8 x half> %a0v, i64 01889 %a1 = extractelement <8 x half> %a1v, i64 01890 %a2 = extractelement <8 x half> %a2v, i64 01891 %neg = fneg half %a11892 %2 = call half @llvm.fma.f16(half %a0, half %a2, half %neg)1893 %res = insertelement <8 x half> %a0v, half %2, i64 01894 ret <8 x half> %res1895}1896 1897define <8 x half> @stack_fold_fmsub312sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1898; CHECK-LABEL: stack_fold_fmsub312sh_int:1899; CHECK: # %bb.0:1900; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1901; CHECK-NEXT: #APP1902; CHECK-NEXT: nop1903; CHECK-NEXT: #NO_APP1904; CHECK-NEXT: vfmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1905; CHECK-NEXT: retq1906 %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}"()1907 %a0 = extractelement <8 x half> %a0v, i64 01908 %a1 = extractelement <8 x half> %a1v, i64 01909 %a2 = extractelement <8 x half> %a2v, i64 01910 %neg = fneg half %a11911 %2 = call half @llvm.fma.f16(half %a2, half %a0, half %neg)1912 %res = insertelement <8 x half> %a0v, half %2, i64 01913 ret <8 x half> %res1914}1915 1916define <8 x half> @stack_fold_fnmadd123sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1917; CHECK-LABEL: stack_fold_fnmadd123sh_int:1918; CHECK: # %bb.0:1919; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1920; CHECK-NEXT: #APP1921; CHECK-NEXT: nop1922; CHECK-NEXT: #NO_APP1923; CHECK-NEXT: vfnmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1924; CHECK-NEXT: retq1925 %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}"()1926 %a0 = extractelement <8 x half> %a0v, i64 01927 %a1 = extractelement <8 x half> %a1v, i64 01928 %a2 = extractelement <8 x half> %a2v, i64 01929 %neg1 = fneg half %a01930 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %a2)1931 %res = insertelement <8 x half> %a0v, half %2, i64 01932 ret <8 x half> %res1933}1934 1935define <8 x half> @stack_fold_fnmadd213sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1936; CHECK-LABEL: stack_fold_fnmadd213sh_int:1937; CHECK: # %bb.0:1938; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1939; CHECK-NEXT: #APP1940; CHECK-NEXT: nop1941; CHECK-NEXT: #NO_APP1942; CHECK-NEXT: vfnmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1943; CHECK-NEXT: retq1944 %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}"()1945 %a0 = extractelement <8 x half> %a0v, i64 01946 %a1 = extractelement <8 x half> %a1v, i64 01947 %a2 = extractelement <8 x half> %a2v, i64 01948 %neg1 = fneg half %a11949 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %a2)1950 %res = insertelement <8 x half> %a0v, half %2, i64 01951 ret <8 x half> %res1952}1953 1954define <8 x half> @stack_fold_fnmadd231sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1955; CHECK-LABEL: stack_fold_fnmadd231sh_int:1956; CHECK: # %bb.0:1957; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1958; CHECK-NEXT: #APP1959; CHECK-NEXT: nop1960; CHECK-NEXT: #NO_APP1961; CHECK-NEXT: vfnmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1962; CHECK-NEXT: retq1963 %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}"()1964 %a0 = extractelement <8 x half> %a0v, i64 01965 %a1 = extractelement <8 x half> %a1v, i64 01966 %a2 = extractelement <8 x half> %a2v, i64 01967 %neg1 = fneg half %a11968 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %a0)1969 %res = insertelement <8 x half> %a0v, half %2, i64 01970 ret <8 x half> %res1971}1972 1973define <8 x half> @stack_fold_fnmadd321sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1974; CHECK-LABEL: stack_fold_fnmadd321sh_int:1975; CHECK: # %bb.0:1976; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1977; CHECK-NEXT: #APP1978; CHECK-NEXT: nop1979; CHECK-NEXT: #NO_APP1980; CHECK-NEXT: vfnmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload1981; CHECK-NEXT: retq1982 %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}"()1983 %a0 = extractelement <8 x half> %a0v, i64 01984 %a1 = extractelement <8 x half> %a1v, i64 01985 %a2 = extractelement <8 x half> %a2v, i64 01986 %neg1 = fneg half %a21987 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %a0)1988 %res = insertelement <8 x half> %a0v, half %2, i64 01989 ret <8 x half> %res1990}1991 1992define <8 x half> @stack_fold_fnmadd132sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {1993; CHECK-LABEL: stack_fold_fnmadd132sh_int:1994; CHECK: # %bb.0:1995; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1996; CHECK-NEXT: #APP1997; CHECK-NEXT: nop1998; CHECK-NEXT: #NO_APP1999; CHECK-NEXT: vfnmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2000; CHECK-NEXT: retq2001 %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}"()2002 %a0 = extractelement <8 x half> %a0v, i64 02003 %a1 = extractelement <8 x half> %a1v, i64 02004 %a2 = extractelement <8 x half> %a2v, i64 02005 %neg1 = fneg half %a02006 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %a1)2007 %res = insertelement <8 x half> %a0v, half %2, i64 02008 ret <8 x half> %res2009}2010 2011define <8 x half> @stack_fold_fnmadd312sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {2012; CHECK-LABEL: stack_fold_fnmadd312sh_int:2013; CHECK: # %bb.0:2014; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2015; CHECK-NEXT: #APP2016; CHECK-NEXT: nop2017; CHECK-NEXT: #NO_APP2018; CHECK-NEXT: vfnmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2019; CHECK-NEXT: retq2020 %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}"()2021 %a0 = extractelement <8 x half> %a0v, i64 02022 %a1 = extractelement <8 x half> %a1v, i64 02023 %a2 = extractelement <8 x half> %a2v, i64 02024 %neg1 = fneg half %a22025 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %a1)2026 %res = insertelement <8 x half> %a0v, half %2, i64 02027 ret <8 x half> %res2028}2029 2030define <8 x half> @stack_fold_fnmsub123sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {2031; CHECK-LABEL: stack_fold_fnmsub123sh_int:2032; CHECK: # %bb.0:2033; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2034; CHECK-NEXT: #APP2035; CHECK-NEXT: nop2036; CHECK-NEXT: #NO_APP2037; CHECK-NEXT: vfnmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2038; CHECK-NEXT: retq2039 %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}"()2040 %a0 = extractelement <8 x half> %a0v, i64 02041 %a1 = extractelement <8 x half> %a1v, i64 02042 %a2 = extractelement <8 x half> %a2v, i64 02043 %neg = fneg half %a22044 %neg1 = fneg half %a02045 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %neg)2046 %res = insertelement <8 x half> %a0v, half %2, i64 02047 ret <8 x half> %res2048}2049 2050define <8 x half> @stack_fold_fnmsub213sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {2051; CHECK-LABEL: stack_fold_fnmsub213sh_int:2052; CHECK: # %bb.0:2053; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2054; CHECK-NEXT: #APP2055; CHECK-NEXT: nop2056; CHECK-NEXT: #NO_APP2057; CHECK-NEXT: vfnmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2058; CHECK-NEXT: retq2059 %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}"()2060 %a0 = extractelement <8 x half> %a0v, i64 02061 %a1 = extractelement <8 x half> %a1v, i64 02062 %a2 = extractelement <8 x half> %a2v, i64 02063 %neg = fneg half %a22064 %neg1 = fneg half %a12065 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %neg)2066 %res = insertelement <8 x half> %a0v, half %2, i64 02067 ret <8 x half> %res2068}2069 2070define <8 x half> @stack_fold_fnmsub231sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {2071; CHECK-LABEL: stack_fold_fnmsub231sh_int:2072; CHECK: # %bb.0:2073; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2074; CHECK-NEXT: #APP2075; CHECK-NEXT: nop2076; CHECK-NEXT: #NO_APP2077; CHECK-NEXT: vfnmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2078; CHECK-NEXT: retq2079 %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}"()2080 %a0 = extractelement <8 x half> %a0v, i64 02081 %a1 = extractelement <8 x half> %a1v, i64 02082 %a2 = extractelement <8 x half> %a2v, i64 02083 %neg = fneg half %a02084 %neg1 = fneg half %a12085 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %neg)2086 %res = insertelement <8 x half> %a0v, half %2, i64 02087 ret <8 x half> %res2088}2089 2090define <8 x half> @stack_fold_fnmsub321sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {2091; CHECK-LABEL: stack_fold_fnmsub321sh_int:2092; CHECK: # %bb.0:2093; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2094; CHECK-NEXT: #APP2095; CHECK-NEXT: nop2096; CHECK-NEXT: #NO_APP2097; CHECK-NEXT: vfnmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2098; CHECK-NEXT: retq2099 %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}"()2100 %a0 = extractelement <8 x half> %a0v, i64 02101 %a1 = extractelement <8 x half> %a1v, i64 02102 %a2 = extractelement <8 x half> %a2v, i64 02103 %neg = fneg half %a02104 %neg1 = fneg half %a22105 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %neg)2106 %res = insertelement <8 x half> %a0v, half %2, i64 02107 ret <8 x half> %res2108}2109 2110define <8 x half> @stack_fold_fnmsub132sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {2111; CHECK-LABEL: stack_fold_fnmsub132sh_int:2112; CHECK: # %bb.0:2113; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2114; CHECK-NEXT: #APP2115; CHECK-NEXT: nop2116; CHECK-NEXT: #NO_APP2117; CHECK-NEXT: vfnmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2118; CHECK-NEXT: retq2119 %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}"()2120 %a0 = extractelement <8 x half> %a0v, i64 02121 %a1 = extractelement <8 x half> %a1v, i64 02122 %a2 = extractelement <8 x half> %a2v, i64 02123 %neg = fneg half %a12124 %neg1 = fneg half %a02125 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %neg)2126 %res = insertelement <8 x half> %a0v, half %2, i64 02127 ret <8 x half> %res2128}2129 2130define <8 x half> @stack_fold_fnmsub312sh_int(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v) {2131; CHECK-LABEL: stack_fold_fnmsub312sh_int:2132; CHECK: # %bb.0:2133; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2134; CHECK-NEXT: #APP2135; CHECK-NEXT: nop2136; CHECK-NEXT: #NO_APP2137; CHECK-NEXT: vfnmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload2138; CHECK-NEXT: retq2139 %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}"()2140 %a0 = extractelement <8 x half> %a0v, i64 02141 %a1 = extractelement <8 x half> %a1v, i64 02142 %a2 = extractelement <8 x half> %a2v, i64 02143 %neg = fneg half %a12144 %neg1 = fneg half %a22145 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %neg)2146 %res = insertelement <8 x half> %a0v, half %2, i64 02147 ret <8 x half> %res2148}2149 2150define <8 x half> @stack_fold_fmadd123sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2151; CHECK-LABEL: stack_fold_fmadd123sh_intk:2152; CHECK: # %bb.0:2153; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2154; CHECK-NEXT: #APP2155; CHECK-NEXT: nop2156; CHECK-NEXT: #NO_APP2157; CHECK-NEXT: movzbl (%rdi), %eax2158; CHECK-NEXT: kmovd %eax, %k12159; CHECK-NEXT: vfmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2160; CHECK-NEXT: retq2161 %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}"()2162 %a0 = extractelement <8 x half> %a0v, i64 02163 %a1 = extractelement <8 x half> %a1v, i64 02164 %a2 = extractelement <8 x half> %a2v, i64 02165 %2 = call half @llvm.fma.f16(half %a0, half %a1, half %a2)2166 %3 = load i8, ptr %mask2167 %4 = bitcast i8 %3 to <8 x i1>2168 %5 = extractelement <8 x i1> %4, i64 02169 %6 = select i1 %5, half %2, half %a02170 %res = insertelement <8 x half> %a0v, half %6, i64 02171 ret <8 x half> %res2172}2173 2174define <8 x half> @stack_fold_fmadd213sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2175; CHECK-LABEL: stack_fold_fmadd213sh_intk:2176; CHECK: # %bb.0:2177; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2178; CHECK-NEXT: #APP2179; CHECK-NEXT: nop2180; CHECK-NEXT: #NO_APP2181; CHECK-NEXT: movzbl (%rdi), %eax2182; CHECK-NEXT: kmovd %eax, %k12183; CHECK-NEXT: vfmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2184; CHECK-NEXT: retq2185 %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}"()2186 %a0 = extractelement <8 x half> %a0v, i64 02187 %a1 = extractelement <8 x half> %a1v, i64 02188 %a2 = extractelement <8 x half> %a2v, i64 02189 %2 = call half @llvm.fma.f16(half %a1, half %a0, half %a2)2190 %3 = load i8, ptr %mask2191 %4 = bitcast i8 %3 to <8 x i1>2192 %5 = extractelement <8 x i1> %4, i64 02193 %6 = select i1 %5, half %2, half %a02194 %res = insertelement <8 x half> %a0v, half %6, i64 02195 ret <8 x half> %res2196}2197 2198define <8 x half> @stack_fold_fmadd231sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2199; CHECK-LABEL: stack_fold_fmadd231sh_intk:2200; CHECK: # %bb.0:2201; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2202; CHECK-NEXT: #APP2203; CHECK-NEXT: nop2204; CHECK-NEXT: #NO_APP2205; CHECK-NEXT: movzbl (%rdi), %eax2206; CHECK-NEXT: kmovd %eax, %k12207; CHECK-NEXT: vfmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 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 %a0 = extractelement <8 x half> %a0v, i64 02211 %a1 = extractelement <8 x half> %a1v, i64 02212 %a2 = extractelement <8 x half> %a2v, i64 02213 %2 = call half @llvm.fma.f16(half %a1, half %a2, half %a0)2214 %3 = load i8, ptr %mask2215 %4 = bitcast i8 %3 to <8 x i1>2216 %5 = extractelement <8 x i1> %4, i64 02217 %6 = select i1 %5, half %2, half %a02218 %res = insertelement <8 x half> %a0v, half %6, i64 02219 ret <8 x half> %res2220}2221 2222define <8 x half> @stack_fold_fmadd321sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2223; CHECK-LABEL: stack_fold_fmadd321sh_intk:2224; CHECK: # %bb.0:2225; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2226; CHECK-NEXT: #APP2227; CHECK-NEXT: nop2228; CHECK-NEXT: #NO_APP2229; CHECK-NEXT: movzbl (%rdi), %eax2230; CHECK-NEXT: kmovd %eax, %k12231; CHECK-NEXT: vfmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2232; CHECK-NEXT: retq2233 %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}"()2234 %a0 = extractelement <8 x half> %a0v, i64 02235 %a1 = extractelement <8 x half> %a1v, i64 02236 %a2 = extractelement <8 x half> %a2v, i64 02237 %2 = call half @llvm.fma.f16(half %a2, half %a1, half %a0)2238 %3 = load i8, ptr %mask2239 %4 = bitcast i8 %3 to <8 x i1>2240 %5 = extractelement <8 x i1> %4, i64 02241 %6 = select i1 %5, half %2, half %a02242 %res = insertelement <8 x half> %a0v, half %6, i64 02243 ret <8 x half> %res2244}2245 2246define <8 x half> @stack_fold_fmadd132sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2247; CHECK-LABEL: stack_fold_fmadd132sh_intk:2248; CHECK: # %bb.0:2249; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2250; CHECK-NEXT: #APP2251; CHECK-NEXT: nop2252; CHECK-NEXT: #NO_APP2253; CHECK-NEXT: movzbl (%rdi), %eax2254; CHECK-NEXT: kmovd %eax, %k12255; CHECK-NEXT: vfmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2256; CHECK-NEXT: retq2257 %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}"()2258 %a0 = extractelement <8 x half> %a0v, i64 02259 %a1 = extractelement <8 x half> %a1v, i64 02260 %a2 = extractelement <8 x half> %a2v, i64 02261 %2 = call half @llvm.fma.f16(half %a0, half %a2, half %a1)2262 %3 = load i8, ptr %mask2263 %4 = bitcast i8 %3 to <8 x i1>2264 %5 = extractelement <8 x i1> %4, i64 02265 %6 = select i1 %5, half %2, half %a02266 %res = insertelement <8 x half> %a0v, half %6, i64 02267 ret <8 x half> %res2268}2269 2270define <8 x half> @stack_fold_fmadd312sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2271; CHECK-LABEL: stack_fold_fmadd312sh_intk:2272; CHECK: # %bb.0:2273; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2274; CHECK-NEXT: #APP2275; CHECK-NEXT: nop2276; CHECK-NEXT: #NO_APP2277; CHECK-NEXT: movzbl (%rdi), %eax2278; CHECK-NEXT: kmovd %eax, %k12279; CHECK-NEXT: vfmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2280; CHECK-NEXT: retq2281 %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}"()2282 %a0 = extractelement <8 x half> %a0v, i64 02283 %a1 = extractelement <8 x half> %a1v, i64 02284 %a2 = extractelement <8 x half> %a2v, i64 02285 %2 = call half @llvm.fma.f16(half %a2, half %a0, half %a1)2286 %3 = load i8, ptr %mask2287 %4 = bitcast i8 %3 to <8 x i1>2288 %5 = extractelement <8 x i1> %4, i64 02289 %6 = select i1 %5, half %2, half %a02290 %res = insertelement <8 x half> %a0v, half %6, i64 02291 ret <8 x half> %res2292}2293 2294define <8 x half> @stack_fold_fmsub123sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2295; CHECK-LABEL: stack_fold_fmsub123sh_intk:2296; CHECK: # %bb.0:2297; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2298; CHECK-NEXT: #APP2299; CHECK-NEXT: nop2300; CHECK-NEXT: #NO_APP2301; CHECK-NEXT: movzbl (%rdi), %eax2302; CHECK-NEXT: kmovd %eax, %k12303; CHECK-NEXT: vfmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2304; CHECK-NEXT: retq2305 %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}"()2306 %a0 = extractelement <8 x half> %a0v, i64 02307 %a1 = extractelement <8 x half> %a1v, i64 02308 %a2 = extractelement <8 x half> %a2v, i64 02309 %neg = fneg half %a22310 %2 = call half @llvm.fma.f16(half %a0, half %a1, half %neg)2311 %3 = load i8, ptr %mask2312 %4 = bitcast i8 %3 to <8 x i1>2313 %5 = extractelement <8 x i1> %4, i64 02314 %6 = select i1 %5, half %2, half %a02315 %res = insertelement <8 x half> %a0v, half %6, i64 02316 ret <8 x half> %res2317}2318 2319define <8 x half> @stack_fold_fmsub213sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2320; CHECK-LABEL: stack_fold_fmsub213sh_intk:2321; CHECK: # %bb.0:2322; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2323; CHECK-NEXT: #APP2324; CHECK-NEXT: nop2325; CHECK-NEXT: #NO_APP2326; CHECK-NEXT: movzbl (%rdi), %eax2327; CHECK-NEXT: kmovd %eax, %k12328; CHECK-NEXT: vfmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2329; CHECK-NEXT: retq2330 %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}"()2331 %a0 = extractelement <8 x half> %a0v, i64 02332 %a1 = extractelement <8 x half> %a1v, i64 02333 %a2 = extractelement <8 x half> %a2v, i64 02334 %neg = fneg half %a22335 %2 = call half @llvm.fma.f16(half %a1, half %a0, half %neg)2336 %3 = load i8, ptr %mask2337 %4 = bitcast i8 %3 to <8 x i1>2338 %5 = extractelement <8 x i1> %4, i64 02339 %6 = select i1 %5, half %2, half %a02340 %res = insertelement <8 x half> %a0v, half %6, i64 02341 ret <8 x half> %res2342}2343 2344define <8 x half> @stack_fold_fmsub231sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2345; CHECK-LABEL: stack_fold_fmsub231sh_intk:2346; CHECK: # %bb.0:2347; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2348; CHECK-NEXT: #APP2349; CHECK-NEXT: nop2350; CHECK-NEXT: #NO_APP2351; CHECK-NEXT: movzbl (%rdi), %eax2352; CHECK-NEXT: kmovd %eax, %k12353; CHECK-NEXT: vfmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2354; CHECK-NEXT: retq2355 %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}"()2356 %a0 = extractelement <8 x half> %a0v, i64 02357 %a1 = extractelement <8 x half> %a1v, i64 02358 %a2 = extractelement <8 x half> %a2v, i64 02359 %neg = fneg half %a02360 %2 = call half @llvm.fma.f16(half %a1, half %a2, half %neg)2361 %3 = load i8, ptr %mask2362 %4 = bitcast i8 %3 to <8 x i1>2363 %5 = extractelement <8 x i1> %4, i64 02364 %6 = select i1 %5, half %2, half %a02365 %res = insertelement <8 x half> %a0v, half %6, i64 02366 ret <8 x half> %res2367}2368 2369define <8 x half> @stack_fold_fmsub321sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2370; CHECK-LABEL: stack_fold_fmsub321sh_intk:2371; CHECK: # %bb.0:2372; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2373; CHECK-NEXT: #APP2374; CHECK-NEXT: nop2375; CHECK-NEXT: #NO_APP2376; CHECK-NEXT: movzbl (%rdi), %eax2377; CHECK-NEXT: kmovd %eax, %k12378; CHECK-NEXT: vfmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2379; CHECK-NEXT: retq2380 %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}"()2381 %a0 = extractelement <8 x half> %a0v, i64 02382 %a1 = extractelement <8 x half> %a1v, i64 02383 %a2 = extractelement <8 x half> %a2v, i64 02384 %neg = fneg half %a02385 %2 = call half @llvm.fma.f16(half %a2, half %a1, half %neg)2386 %3 = load i8, ptr %mask2387 %4 = bitcast i8 %3 to <8 x i1>2388 %5 = extractelement <8 x i1> %4, i64 02389 %6 = select i1 %5, half %2, half %a02390 %res = insertelement <8 x half> %a0v, half %6, i64 02391 ret <8 x half> %res2392}2393 2394define <8 x half> @stack_fold_fmsub132sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2395; CHECK-LABEL: stack_fold_fmsub132sh_intk:2396; CHECK: # %bb.0:2397; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2398; CHECK-NEXT: #APP2399; CHECK-NEXT: nop2400; CHECK-NEXT: #NO_APP2401; CHECK-NEXT: movzbl (%rdi), %eax2402; CHECK-NEXT: kmovd %eax, %k12403; CHECK-NEXT: vfmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2404; CHECK-NEXT: retq2405 %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}"()2406 %a0 = extractelement <8 x half> %a0v, i64 02407 %a1 = extractelement <8 x half> %a1v, i64 02408 %a2 = extractelement <8 x half> %a2v, i64 02409 %neg = fneg half %a12410 %2 = call half @llvm.fma.f16(half %a0, half %a2, half %neg)2411 %3 = load i8, ptr %mask2412 %4 = bitcast i8 %3 to <8 x i1>2413 %5 = extractelement <8 x i1> %4, i64 02414 %6 = select i1 %5, half %2, half %a02415 %res = insertelement <8 x half> %a0v, half %6, i64 02416 ret <8 x half> %res2417}2418 2419define <8 x half> @stack_fold_fmsub312sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2420; CHECK-LABEL: stack_fold_fmsub312sh_intk:2421; CHECK: # %bb.0:2422; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2423; CHECK-NEXT: #APP2424; CHECK-NEXT: nop2425; CHECK-NEXT: #NO_APP2426; CHECK-NEXT: movzbl (%rdi), %eax2427; CHECK-NEXT: kmovd %eax, %k12428; CHECK-NEXT: vfmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2429; CHECK-NEXT: retq2430 %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}"()2431 %a0 = extractelement <8 x half> %a0v, i64 02432 %a1 = extractelement <8 x half> %a1v, i64 02433 %a2 = extractelement <8 x half> %a2v, i64 02434 %neg = fneg half %a12435 %2 = call half @llvm.fma.f16(half %a2, half %a0, half %neg)2436 %3 = load i8, ptr %mask2437 %4 = bitcast i8 %3 to <8 x i1>2438 %5 = extractelement <8 x i1> %4, i64 02439 %6 = select i1 %5, half %2, half %a02440 %res = insertelement <8 x half> %a0v, half %6, i64 02441 ret <8 x half> %res2442}2443 2444define <8 x half> @stack_fold_fnmadd123sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2445; CHECK-LABEL: stack_fold_fnmadd123sh_intk:2446; CHECK: # %bb.0:2447; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2448; CHECK-NEXT: #APP2449; CHECK-NEXT: nop2450; CHECK-NEXT: #NO_APP2451; CHECK-NEXT: movzbl (%rdi), %eax2452; CHECK-NEXT: kmovd %eax, %k12453; CHECK-NEXT: vfnmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2454; CHECK-NEXT: retq2455 %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}"()2456 %a0 = extractelement <8 x half> %a0v, i64 02457 %a1 = extractelement <8 x half> %a1v, i64 02458 %a2 = extractelement <8 x half> %a2v, i64 02459 %neg1 = fneg half %a02460 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %a2)2461 %3 = load i8, ptr %mask2462 %4 = bitcast i8 %3 to <8 x i1>2463 %5 = extractelement <8 x i1> %4, i64 02464 %6 = select i1 %5, half %2, half %a02465 %res = insertelement <8 x half> %a0v, half %6, i64 02466 ret <8 x half> %res2467}2468 2469define <8 x half> @stack_fold_fnmadd213sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2470; CHECK-LABEL: stack_fold_fnmadd213sh_intk:2471; CHECK: # %bb.0:2472; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2473; CHECK-NEXT: #APP2474; CHECK-NEXT: nop2475; CHECK-NEXT: #NO_APP2476; CHECK-NEXT: movzbl (%rdi), %eax2477; CHECK-NEXT: kmovd %eax, %k12478; CHECK-NEXT: vfnmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2479; CHECK-NEXT: retq2480 %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}"()2481 %a0 = extractelement <8 x half> %a0v, i64 02482 %a1 = extractelement <8 x half> %a1v, i64 02483 %a2 = extractelement <8 x half> %a2v, i64 02484 %neg1 = fneg half %a12485 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %a2)2486 %3 = load i8, ptr %mask2487 %4 = bitcast i8 %3 to <8 x i1>2488 %5 = extractelement <8 x i1> %4, i64 02489 %6 = select i1 %5, half %2, half %a02490 %res = insertelement <8 x half> %a0v, half %6, i64 02491 ret <8 x half> %res2492}2493 2494define <8 x half> @stack_fold_fnmadd231sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2495; CHECK-LABEL: stack_fold_fnmadd231sh_intk:2496; CHECK: # %bb.0:2497; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2498; CHECK-NEXT: #APP2499; CHECK-NEXT: nop2500; CHECK-NEXT: #NO_APP2501; CHECK-NEXT: movzbl (%rdi), %eax2502; CHECK-NEXT: kmovd %eax, %k12503; CHECK-NEXT: vfnmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2504; CHECK-NEXT: retq2505 %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}"()2506 %a0 = extractelement <8 x half> %a0v, i64 02507 %a1 = extractelement <8 x half> %a1v, i64 02508 %a2 = extractelement <8 x half> %a2v, i64 02509 %neg1 = fneg half %a12510 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %a0)2511 %3 = load i8, ptr %mask2512 %4 = bitcast i8 %3 to <8 x i1>2513 %5 = extractelement <8 x i1> %4, i64 02514 %6 = select i1 %5, half %2, half %a02515 %res = insertelement <8 x half> %a0v, half %6, i64 02516 ret <8 x half> %res2517}2518 2519define <8 x half> @stack_fold_fnmadd321sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2520; CHECK-LABEL: stack_fold_fnmadd321sh_intk:2521; CHECK: # %bb.0:2522; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2523; CHECK-NEXT: #APP2524; CHECK-NEXT: nop2525; CHECK-NEXT: #NO_APP2526; CHECK-NEXT: movzbl (%rdi), %eax2527; CHECK-NEXT: kmovd %eax, %k12528; CHECK-NEXT: vfnmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2529; CHECK-NEXT: retq2530 %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}"()2531 %a0 = extractelement <8 x half> %a0v, i64 02532 %a1 = extractelement <8 x half> %a1v, i64 02533 %a2 = extractelement <8 x half> %a2v, i64 02534 %neg1 = fneg half %a22535 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %a0)2536 %3 = load i8, ptr %mask2537 %4 = bitcast i8 %3 to <8 x i1>2538 %5 = extractelement <8 x i1> %4, i64 02539 %6 = select i1 %5, half %2, half %a02540 %res = insertelement <8 x half> %a0v, half %6, i64 02541 ret <8 x half> %res2542}2543 2544define <8 x half> @stack_fold_fnmadd132sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2545; CHECK-LABEL: stack_fold_fnmadd132sh_intk:2546; CHECK: # %bb.0:2547; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2548; CHECK-NEXT: #APP2549; CHECK-NEXT: nop2550; CHECK-NEXT: #NO_APP2551; CHECK-NEXT: movzbl (%rdi), %eax2552; CHECK-NEXT: kmovd %eax, %k12553; CHECK-NEXT: vfnmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2554; CHECK-NEXT: retq2555 %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}"()2556 %a0 = extractelement <8 x half> %a0v, i64 02557 %a1 = extractelement <8 x half> %a1v, i64 02558 %a2 = extractelement <8 x half> %a2v, i64 02559 %neg1 = fneg half %a02560 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %a1)2561 %3 = load i8, ptr %mask2562 %4 = bitcast i8 %3 to <8 x i1>2563 %5 = extractelement <8 x i1> %4, i64 02564 %6 = select i1 %5, half %2, half %a02565 %res = insertelement <8 x half> %a0v, half %6, i64 02566 ret <8 x half> %res2567}2568 2569define <8 x half> @stack_fold_fnmadd312sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2570; CHECK-LABEL: stack_fold_fnmadd312sh_intk:2571; CHECK: # %bb.0:2572; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2573; CHECK-NEXT: #APP2574; CHECK-NEXT: nop2575; CHECK-NEXT: #NO_APP2576; CHECK-NEXT: movzbl (%rdi), %eax2577; CHECK-NEXT: kmovd %eax, %k12578; CHECK-NEXT: vfnmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2579; CHECK-NEXT: retq2580 %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}"()2581 %a0 = extractelement <8 x half> %a0v, i64 02582 %a1 = extractelement <8 x half> %a1v, i64 02583 %a2 = extractelement <8 x half> %a2v, i64 02584 %neg1 = fneg half %a22585 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %a1)2586 %3 = load i8, ptr %mask2587 %4 = bitcast i8 %3 to <8 x i1>2588 %5 = extractelement <8 x i1> %4, i64 02589 %6 = select i1 %5, half %2, half %a02590 %res = insertelement <8 x half> %a0v, half %6, i64 02591 ret <8 x half> %res2592}2593 2594define <8 x half> @stack_fold_fnmsub123sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2595; CHECK-LABEL: stack_fold_fnmsub123sh_intk:2596; CHECK: # %bb.0:2597; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2598; CHECK-NEXT: #APP2599; CHECK-NEXT: nop2600; CHECK-NEXT: #NO_APP2601; CHECK-NEXT: movzbl (%rdi), %eax2602; CHECK-NEXT: kmovd %eax, %k12603; CHECK-NEXT: vfnmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2604; CHECK-NEXT: retq2605 %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}"()2606 %a0 = extractelement <8 x half> %a0v, i64 02607 %a1 = extractelement <8 x half> %a1v, i64 02608 %a2 = extractelement <8 x half> %a2v, i64 02609 %neg = fneg half %a22610 %neg1 = fneg half %a02611 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %neg)2612 %3 = load i8, ptr %mask2613 %4 = bitcast i8 %3 to <8 x i1>2614 %5 = extractelement <8 x i1> %4, i64 02615 %6 = select i1 %5, half %2, half %a02616 %res = insertelement <8 x half> %a0v, half %6, i64 02617 ret <8 x half> %res2618}2619 2620define <8 x half> @stack_fold_fnmsub213sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2621; CHECK-LABEL: stack_fold_fnmsub213sh_intk:2622; CHECK: # %bb.0:2623; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2624; CHECK-NEXT: #APP2625; CHECK-NEXT: nop2626; CHECK-NEXT: #NO_APP2627; CHECK-NEXT: movzbl (%rdi), %eax2628; CHECK-NEXT: kmovd %eax, %k12629; CHECK-NEXT: vfnmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2630; CHECK-NEXT: retq2631 %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}"()2632 %a0 = extractelement <8 x half> %a0v, i64 02633 %a1 = extractelement <8 x half> %a1v, i64 02634 %a2 = extractelement <8 x half> %a2v, i64 02635 %neg = fneg half %a22636 %neg1 = fneg half %a12637 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %neg)2638 %3 = load i8, ptr %mask2639 %4 = bitcast i8 %3 to <8 x i1>2640 %5 = extractelement <8 x i1> %4, i64 02641 %6 = select i1 %5, half %2, half %a02642 %res = insertelement <8 x half> %a0v, half %6, i64 02643 ret <8 x half> %res2644}2645 2646define <8 x half> @stack_fold_fnmsub231sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2647; CHECK-LABEL: stack_fold_fnmsub231sh_intk:2648; CHECK: # %bb.0:2649; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2650; CHECK-NEXT: #APP2651; CHECK-NEXT: nop2652; CHECK-NEXT: #NO_APP2653; CHECK-NEXT: movzbl (%rdi), %eax2654; CHECK-NEXT: kmovd %eax, %k12655; CHECK-NEXT: vfnmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2656; CHECK-NEXT: retq2657 %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}"()2658 %a0 = extractelement <8 x half> %a0v, i64 02659 %a1 = extractelement <8 x half> %a1v, i64 02660 %a2 = extractelement <8 x half> %a2v, i64 02661 %neg = fneg half %a02662 %neg1 = fneg half %a12663 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %neg)2664 %3 = load i8, ptr %mask2665 %4 = bitcast i8 %3 to <8 x i1>2666 %5 = extractelement <8 x i1> %4, i64 02667 %6 = select i1 %5, half %2, half %a02668 %res = insertelement <8 x half> %a0v, half %6, i64 02669 ret <8 x half> %res2670}2671 2672define <8 x half> @stack_fold_fnmsub321sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2673; CHECK-LABEL: stack_fold_fnmsub321sh_intk:2674; CHECK: # %bb.0:2675; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2676; CHECK-NEXT: #APP2677; CHECK-NEXT: nop2678; CHECK-NEXT: #NO_APP2679; CHECK-NEXT: movzbl (%rdi), %eax2680; CHECK-NEXT: kmovd %eax, %k12681; CHECK-NEXT: vfnmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2682; CHECK-NEXT: retq2683 %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}"()2684 %a0 = extractelement <8 x half> %a0v, i64 02685 %a1 = extractelement <8 x half> %a1v, i64 02686 %a2 = extractelement <8 x half> %a2v, i64 02687 %neg = fneg half %a02688 %neg1 = fneg half %a22689 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %neg)2690 %3 = load i8, ptr %mask2691 %4 = bitcast i8 %3 to <8 x i1>2692 %5 = extractelement <8 x i1> %4, i64 02693 %6 = select i1 %5, half %2, half %a02694 %res = insertelement <8 x half> %a0v, half %6, i64 02695 ret <8 x half> %res2696}2697 2698define <8 x half> @stack_fold_fnmsub132sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2699; CHECK-LABEL: stack_fold_fnmsub132sh_intk:2700; CHECK: # %bb.0:2701; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2702; CHECK-NEXT: #APP2703; CHECK-NEXT: nop2704; CHECK-NEXT: #NO_APP2705; CHECK-NEXT: movzbl (%rdi), %eax2706; CHECK-NEXT: kmovd %eax, %k12707; CHECK-NEXT: vfnmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2708; CHECK-NEXT: retq2709 %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}"()2710 %a0 = extractelement <8 x half> %a0v, i64 02711 %a1 = extractelement <8 x half> %a1v, i64 02712 %a2 = extractelement <8 x half> %a2v, i64 02713 %neg = fneg half %a12714 %neg1 = fneg half %a02715 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %neg)2716 %3 = load i8, ptr %mask2717 %4 = bitcast i8 %3 to <8 x i1>2718 %5 = extractelement <8 x i1> %4, i64 02719 %6 = select i1 %5, half %2, half %a02720 %res = insertelement <8 x half> %a0v, half %6, i64 02721 ret <8 x half> %res2722}2723 2724define <8 x half> @stack_fold_fnmsub312sh_intk(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2725; CHECK-LABEL: stack_fold_fnmsub312sh_intk:2726; CHECK: # %bb.0:2727; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2728; CHECK-NEXT: #APP2729; CHECK-NEXT: nop2730; CHECK-NEXT: #NO_APP2731; CHECK-NEXT: movzbl (%rdi), %eax2732; CHECK-NEXT: kmovd %eax, %k12733; CHECK-NEXT: vfnmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} # 16-byte Folded Reload2734; CHECK-NEXT: retq2735 %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}"()2736 %a0 = extractelement <8 x half> %a0v, i64 02737 %a1 = extractelement <8 x half> %a1v, i64 02738 %a2 = extractelement <8 x half> %a2v, i64 02739 %neg = fneg half %a12740 %neg1 = fneg half %a22741 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %neg)2742 %3 = load i8, ptr %mask2743 %4 = bitcast i8 %3 to <8 x i1>2744 %5 = extractelement <8 x i1> %4, i64 02745 %6 = select i1 %5, half %2, half %a02746 %res = insertelement <8 x half> %a0v, half %6, i64 02747 ret <8 x half> %res2748}2749 2750define <8 x half> @stack_fold_fmadd123sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2751; CHECK-LABEL: stack_fold_fmadd123sh_intkz:2752; CHECK: # %bb.0:2753; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2754; CHECK-NEXT: #APP2755; CHECK-NEXT: nop2756; CHECK-NEXT: #NO_APP2757; CHECK-NEXT: movzbl (%rdi), %eax2758; CHECK-NEXT: kmovd %eax, %k12759; CHECK-NEXT: vfmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2760; CHECK-NEXT: retq2761 %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}"()2762 %a0 = extractelement <8 x half> %a0v, i64 02763 %a1 = extractelement <8 x half> %a1v, i64 02764 %a2 = extractelement <8 x half> %a2v, i64 02765 %2 = call half @llvm.fma.f16(half %a0, half %a1, half %a2)2766 %3 = load i8, ptr %mask2767 %4 = bitcast i8 %3 to <8 x i1>2768 %5 = extractelement <8 x i1> %4, i64 02769 %6 = select i1 %5, half %2, half zeroinitializer2770 %res = insertelement <8 x half> %a0v, half %6, i64 02771 ret <8 x half> %res2772}2773 2774define <8 x half> @stack_fold_fmadd213sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2775; CHECK-LABEL: stack_fold_fmadd213sh_intkz:2776; CHECK: # %bb.0:2777; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2778; CHECK-NEXT: #APP2779; CHECK-NEXT: nop2780; CHECK-NEXT: #NO_APP2781; CHECK-NEXT: movzbl (%rdi), %eax2782; CHECK-NEXT: kmovd %eax, %k12783; CHECK-NEXT: vfmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2784; CHECK-NEXT: retq2785 %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}"()2786 %a0 = extractelement <8 x half> %a0v, i64 02787 %a1 = extractelement <8 x half> %a1v, i64 02788 %a2 = extractelement <8 x half> %a2v, i64 02789 %2 = call half @llvm.fma.f16(half %a1, half %a0, half %a2)2790 %3 = load i8, ptr %mask2791 %4 = bitcast i8 %3 to <8 x i1>2792 %5 = extractelement <8 x i1> %4, i64 02793 %6 = select i1 %5, half %2, half zeroinitializer2794 %res = insertelement <8 x half> %a0v, half %6, i64 02795 ret <8 x half> %res2796}2797 2798define <8 x half> @stack_fold_fmadd231sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2799; CHECK-LABEL: stack_fold_fmadd231sh_intkz:2800; CHECK: # %bb.0:2801; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2802; CHECK-NEXT: #APP2803; CHECK-NEXT: nop2804; CHECK-NEXT: #NO_APP2805; CHECK-NEXT: movzbl (%rdi), %eax2806; CHECK-NEXT: kmovd %eax, %k12807; CHECK-NEXT: vfmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2808; CHECK-NEXT: retq2809 %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}"()2810 %a0 = extractelement <8 x half> %a0v, i64 02811 %a1 = extractelement <8 x half> %a1v, i64 02812 %a2 = extractelement <8 x half> %a2v, i64 02813 %2 = call half @llvm.fma.f16(half %a1, half %a2, half %a0)2814 %3 = load i8, ptr %mask2815 %4 = bitcast i8 %3 to <8 x i1>2816 %5 = extractelement <8 x i1> %4, i64 02817 %6 = select i1 %5, half %2, half zeroinitializer2818 %res = insertelement <8 x half> %a0v, half %6, i64 02819 ret <8 x half> %res2820}2821 2822define <8 x half> @stack_fold_fmadd321sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2823; CHECK-LABEL: stack_fold_fmadd321sh_intkz:2824; CHECK: # %bb.0:2825; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2826; CHECK-NEXT: #APP2827; CHECK-NEXT: nop2828; CHECK-NEXT: #NO_APP2829; CHECK-NEXT: movzbl (%rdi), %eax2830; CHECK-NEXT: kmovd %eax, %k12831; CHECK-NEXT: vfmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2832; CHECK-NEXT: retq2833 %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}"()2834 %a0 = extractelement <8 x half> %a0v, i64 02835 %a1 = extractelement <8 x half> %a1v, i64 02836 %a2 = extractelement <8 x half> %a2v, i64 02837 %2 = call half @llvm.fma.f16(half %a2, half %a1, half %a0)2838 %3 = load i8, ptr %mask2839 %4 = bitcast i8 %3 to <8 x i1>2840 %5 = extractelement <8 x i1> %4, i64 02841 %6 = select i1 %5, half %2, half zeroinitializer2842 %res = insertelement <8 x half> %a0v, half %6, i64 02843 ret <8 x half> %res2844}2845 2846define <8 x half> @stack_fold_fmadd132sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2847; CHECK-LABEL: stack_fold_fmadd132sh_intkz:2848; CHECK: # %bb.0:2849; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2850; CHECK-NEXT: #APP2851; CHECK-NEXT: nop2852; CHECK-NEXT: #NO_APP2853; CHECK-NEXT: movzbl (%rdi), %eax2854; CHECK-NEXT: kmovd %eax, %k12855; CHECK-NEXT: vfmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2856; CHECK-NEXT: retq2857 %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}"()2858 %a0 = extractelement <8 x half> %a0v, i64 02859 %a1 = extractelement <8 x half> %a1v, i64 02860 %a2 = extractelement <8 x half> %a2v, i64 02861 %2 = call half @llvm.fma.f16(half %a0, half %a2, half %a1)2862 %3 = load i8, ptr %mask2863 %4 = bitcast i8 %3 to <8 x i1>2864 %5 = extractelement <8 x i1> %4, i64 02865 %6 = select i1 %5, half %2, half zeroinitializer2866 %res = insertelement <8 x half> %a0v, half %6, i64 02867 ret <8 x half> %res2868}2869 2870define <8 x half> @stack_fold_fmadd312sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2871; CHECK-LABEL: stack_fold_fmadd312sh_intkz:2872; CHECK: # %bb.0:2873; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2874; CHECK-NEXT: #APP2875; CHECK-NEXT: nop2876; CHECK-NEXT: #NO_APP2877; CHECK-NEXT: movzbl (%rdi), %eax2878; CHECK-NEXT: kmovd %eax, %k12879; CHECK-NEXT: vfmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2880; CHECK-NEXT: retq2881 %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}"()2882 %a0 = extractelement <8 x half> %a0v, i64 02883 %a1 = extractelement <8 x half> %a1v, i64 02884 %a2 = extractelement <8 x half> %a2v, i64 02885 %2 = call half @llvm.fma.f16(half %a2, half %a0, half %a1)2886 %3 = load i8, ptr %mask2887 %4 = bitcast i8 %3 to <8 x i1>2888 %5 = extractelement <8 x i1> %4, i64 02889 %6 = select i1 %5, half %2, half zeroinitializer2890 %res = insertelement <8 x half> %a0v, half %6, i64 02891 ret <8 x half> %res2892}2893 2894define <8 x half> @stack_fold_fmsub123sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2895; CHECK-LABEL: stack_fold_fmsub123sh_intkz:2896; CHECK: # %bb.0:2897; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2898; CHECK-NEXT: #APP2899; CHECK-NEXT: nop2900; CHECK-NEXT: #NO_APP2901; CHECK-NEXT: movzbl (%rdi), %eax2902; CHECK-NEXT: kmovd %eax, %k12903; CHECK-NEXT: vfmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2904; CHECK-NEXT: retq2905 %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}"()2906 %a0 = extractelement <8 x half> %a0v, i64 02907 %a1 = extractelement <8 x half> %a1v, i64 02908 %a2 = extractelement <8 x half> %a2v, i64 02909 %neg = fneg half %a22910 %2 = call half @llvm.fma.f16(half %a0, half %a1, half %neg)2911 %3 = load i8, ptr %mask2912 %4 = bitcast i8 %3 to <8 x i1>2913 %5 = extractelement <8 x i1> %4, i64 02914 %6 = select i1 %5, half %2, half zeroinitializer2915 %res = insertelement <8 x half> %a0v, half %6, i64 02916 ret <8 x half> %res2917}2918 2919define <8 x half> @stack_fold_fmsub213sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2920; CHECK-LABEL: stack_fold_fmsub213sh_intkz:2921; CHECK: # %bb.0:2922; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2923; CHECK-NEXT: #APP2924; CHECK-NEXT: nop2925; CHECK-NEXT: #NO_APP2926; CHECK-NEXT: movzbl (%rdi), %eax2927; CHECK-NEXT: kmovd %eax, %k12928; CHECK-NEXT: vfmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2929; CHECK-NEXT: retq2930 %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}"()2931 %a0 = extractelement <8 x half> %a0v, i64 02932 %a1 = extractelement <8 x half> %a1v, i64 02933 %a2 = extractelement <8 x half> %a2v, i64 02934 %neg = fneg half %a22935 %2 = call half @llvm.fma.f16(half %a1, half %a0, half %neg)2936 %3 = load i8, ptr %mask2937 %4 = bitcast i8 %3 to <8 x i1>2938 %5 = extractelement <8 x i1> %4, i64 02939 %6 = select i1 %5, half %2, half zeroinitializer2940 %res = insertelement <8 x half> %a0v, half %6, i64 02941 ret <8 x half> %res2942}2943 2944define <8 x half> @stack_fold_fmsub231sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2945; CHECK-LABEL: stack_fold_fmsub231sh_intkz:2946; CHECK: # %bb.0:2947; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2948; CHECK-NEXT: #APP2949; CHECK-NEXT: nop2950; CHECK-NEXT: #NO_APP2951; CHECK-NEXT: movzbl (%rdi), %eax2952; CHECK-NEXT: kmovd %eax, %k12953; CHECK-NEXT: vfmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2954; CHECK-NEXT: retq2955 %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}"()2956 %a0 = extractelement <8 x half> %a0v, i64 02957 %a1 = extractelement <8 x half> %a1v, i64 02958 %a2 = extractelement <8 x half> %a2v, i64 02959 %neg = fneg half %a02960 %2 = call half @llvm.fma.f16(half %a1, half %a2, half %neg)2961 %3 = load i8, ptr %mask2962 %4 = bitcast i8 %3 to <8 x i1>2963 %5 = extractelement <8 x i1> %4, i64 02964 %6 = select i1 %5, half %2, half zeroinitializer2965 %res = insertelement <8 x half> %a0v, half %6, i64 02966 ret <8 x half> %res2967}2968 2969define <8 x half> @stack_fold_fmsub321sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2970; CHECK-LABEL: stack_fold_fmsub321sh_intkz:2971; CHECK: # %bb.0:2972; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2973; CHECK-NEXT: #APP2974; CHECK-NEXT: nop2975; CHECK-NEXT: #NO_APP2976; CHECK-NEXT: movzbl (%rdi), %eax2977; CHECK-NEXT: kmovd %eax, %k12978; CHECK-NEXT: vfmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload2979; CHECK-NEXT: retq2980 %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}"()2981 %a0 = extractelement <8 x half> %a0v, i64 02982 %a1 = extractelement <8 x half> %a1v, i64 02983 %a2 = extractelement <8 x half> %a2v, i64 02984 %neg = fneg half %a02985 %2 = call half @llvm.fma.f16(half %a2, half %a1, half %neg)2986 %3 = load i8, ptr %mask2987 %4 = bitcast i8 %3 to <8 x i1>2988 %5 = extractelement <8 x i1> %4, i64 02989 %6 = select i1 %5, half %2, half zeroinitializer2990 %res = insertelement <8 x half> %a0v, half %6, i64 02991 ret <8 x half> %res2992}2993 2994define <8 x half> @stack_fold_fmsub132sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {2995; CHECK-LABEL: stack_fold_fmsub132sh_intkz:2996; CHECK: # %bb.0:2997; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2998; CHECK-NEXT: #APP2999; CHECK-NEXT: nop3000; CHECK-NEXT: #NO_APP3001; CHECK-NEXT: movzbl (%rdi), %eax3002; CHECK-NEXT: kmovd %eax, %k13003; CHECK-NEXT: vfmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3004; CHECK-NEXT: retq3005 %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}"()3006 %a0 = extractelement <8 x half> %a0v, i64 03007 %a1 = extractelement <8 x half> %a1v, i64 03008 %a2 = extractelement <8 x half> %a2v, i64 03009 %neg = fneg half %a13010 %2 = call half @llvm.fma.f16(half %a0, half %a2, half %neg)3011 %3 = load i8, ptr %mask3012 %4 = bitcast i8 %3 to <8 x i1>3013 %5 = extractelement <8 x i1> %4, i64 03014 %6 = select i1 %5, half %2, half zeroinitializer3015 %res = insertelement <8 x half> %a0v, half %6, i64 03016 ret <8 x half> %res3017}3018 3019define <8 x half> @stack_fold_fmsub312sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3020; CHECK-LABEL: stack_fold_fmsub312sh_intkz:3021; CHECK: # %bb.0:3022; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3023; CHECK-NEXT: #APP3024; CHECK-NEXT: nop3025; CHECK-NEXT: #NO_APP3026; CHECK-NEXT: movzbl (%rdi), %eax3027; CHECK-NEXT: kmovd %eax, %k13028; CHECK-NEXT: vfmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3029; CHECK-NEXT: retq3030 %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}"()3031 %a0 = extractelement <8 x half> %a0v, i64 03032 %a1 = extractelement <8 x half> %a1v, i64 03033 %a2 = extractelement <8 x half> %a2v, i64 03034 %neg = fneg half %a13035 %2 = call half @llvm.fma.f16(half %a2, half %a0, half %neg)3036 %3 = load i8, ptr %mask3037 %4 = bitcast i8 %3 to <8 x i1>3038 %5 = extractelement <8 x i1> %4, i64 03039 %6 = select i1 %5, half %2, half zeroinitializer3040 %res = insertelement <8 x half> %a0v, half %6, i64 03041 ret <8 x half> %res3042}3043 3044define <8 x half> @stack_fold_fnmadd123sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3045; CHECK-LABEL: stack_fold_fnmadd123sh_intkz:3046; CHECK: # %bb.0:3047; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3048; CHECK-NEXT: #APP3049; CHECK-NEXT: nop3050; CHECK-NEXT: #NO_APP3051; CHECK-NEXT: movzbl (%rdi), %eax3052; CHECK-NEXT: kmovd %eax, %k13053; CHECK-NEXT: vfnmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3054; CHECK-NEXT: retq3055 %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}"()3056 %a0 = extractelement <8 x half> %a0v, i64 03057 %a1 = extractelement <8 x half> %a1v, i64 03058 %a2 = extractelement <8 x half> %a2v, i64 03059 %neg1 = fneg half %a03060 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %a2)3061 %3 = load i8, ptr %mask3062 %4 = bitcast i8 %3 to <8 x i1>3063 %5 = extractelement <8 x i1> %4, i64 03064 %6 = select i1 %5, half %2, half zeroinitializer3065 %res = insertelement <8 x half> %a0v, half %6, i64 03066 ret <8 x half> %res3067}3068 3069define <8 x half> @stack_fold_fnmadd213sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3070; CHECK-LABEL: stack_fold_fnmadd213sh_intkz:3071; CHECK: # %bb.0:3072; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3073; CHECK-NEXT: #APP3074; CHECK-NEXT: nop3075; CHECK-NEXT: #NO_APP3076; CHECK-NEXT: movzbl (%rdi), %eax3077; CHECK-NEXT: kmovd %eax, %k13078; CHECK-NEXT: vfnmadd213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3079; CHECK-NEXT: retq3080 %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}"()3081 %a0 = extractelement <8 x half> %a0v, i64 03082 %a1 = extractelement <8 x half> %a1v, i64 03083 %a2 = extractelement <8 x half> %a2v, i64 03084 %neg1 = fneg half %a13085 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %a2)3086 %3 = load i8, ptr %mask3087 %4 = bitcast i8 %3 to <8 x i1>3088 %5 = extractelement <8 x i1> %4, i64 03089 %6 = select i1 %5, half %2, half zeroinitializer3090 %res = insertelement <8 x half> %a0v, half %6, i64 03091 ret <8 x half> %res3092}3093 3094define <8 x half> @stack_fold_fnmadd231sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3095; CHECK-LABEL: stack_fold_fnmadd231sh_intkz:3096; CHECK: # %bb.0:3097; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3098; CHECK-NEXT: #APP3099; CHECK-NEXT: nop3100; CHECK-NEXT: #NO_APP3101; CHECK-NEXT: movzbl (%rdi), %eax3102; CHECK-NEXT: kmovd %eax, %k13103; CHECK-NEXT: vfnmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3104; CHECK-NEXT: retq3105 %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}"()3106 %a0 = extractelement <8 x half> %a0v, i64 03107 %a1 = extractelement <8 x half> %a1v, i64 03108 %a2 = extractelement <8 x half> %a2v, i64 03109 %neg1 = fneg half %a13110 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %a0)3111 %3 = load i8, ptr %mask3112 %4 = bitcast i8 %3 to <8 x i1>3113 %5 = extractelement <8 x i1> %4, i64 03114 %6 = select i1 %5, half %2, half zeroinitializer3115 %res = insertelement <8 x half> %a0v, half %6, i64 03116 ret <8 x half> %res3117}3118 3119define <8 x half> @stack_fold_fnmadd321sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3120; CHECK-LABEL: stack_fold_fnmadd321sh_intkz:3121; CHECK: # %bb.0:3122; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3123; CHECK-NEXT: #APP3124; CHECK-NEXT: nop3125; CHECK-NEXT: #NO_APP3126; CHECK-NEXT: movzbl (%rdi), %eax3127; CHECK-NEXT: kmovd %eax, %k13128; CHECK-NEXT: vfnmadd231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3129; CHECK-NEXT: retq3130 %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}"()3131 %a0 = extractelement <8 x half> %a0v, i64 03132 %a1 = extractelement <8 x half> %a1v, i64 03133 %a2 = extractelement <8 x half> %a2v, i64 03134 %neg1 = fneg half %a23135 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %a0)3136 %3 = load i8, ptr %mask3137 %4 = bitcast i8 %3 to <8 x i1>3138 %5 = extractelement <8 x i1> %4, i64 03139 %6 = select i1 %5, half %2, half zeroinitializer3140 %res = insertelement <8 x half> %a0v, half %6, i64 03141 ret <8 x half> %res3142}3143 3144define <8 x half> @stack_fold_fnmadd132sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3145; CHECK-LABEL: stack_fold_fnmadd132sh_intkz:3146; CHECK: # %bb.0:3147; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3148; CHECK-NEXT: #APP3149; CHECK-NEXT: nop3150; CHECK-NEXT: #NO_APP3151; CHECK-NEXT: movzbl (%rdi), %eax3152; CHECK-NEXT: kmovd %eax, %k13153; CHECK-NEXT: vfnmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3154; CHECK-NEXT: retq3155 %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}"()3156 %a0 = extractelement <8 x half> %a0v, i64 03157 %a1 = extractelement <8 x half> %a1v, i64 03158 %a2 = extractelement <8 x half> %a2v, i64 03159 %neg1 = fneg half %a03160 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %a1)3161 %3 = load i8, ptr %mask3162 %4 = bitcast i8 %3 to <8 x i1>3163 %5 = extractelement <8 x i1> %4, i64 03164 %6 = select i1 %5, half %2, half zeroinitializer3165 %res = insertelement <8 x half> %a0v, half %6, i64 03166 ret <8 x half> %res3167}3168 3169define <8 x half> @stack_fold_fnmadd312sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3170; CHECK-LABEL: stack_fold_fnmadd312sh_intkz:3171; CHECK: # %bb.0:3172; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3173; CHECK-NEXT: #APP3174; CHECK-NEXT: nop3175; CHECK-NEXT: #NO_APP3176; CHECK-NEXT: movzbl (%rdi), %eax3177; CHECK-NEXT: kmovd %eax, %k13178; CHECK-NEXT: vfnmadd132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3179; CHECK-NEXT: retq3180 %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}"()3181 %a0 = extractelement <8 x half> %a0v, i64 03182 %a1 = extractelement <8 x half> %a1v, i64 03183 %a2 = extractelement <8 x half> %a2v, i64 03184 %neg1 = fneg half %a23185 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %a1)3186 %3 = load i8, ptr %mask3187 %4 = bitcast i8 %3 to <8 x i1>3188 %5 = extractelement <8 x i1> %4, i64 03189 %6 = select i1 %5, half %2, half zeroinitializer3190 %res = insertelement <8 x half> %a0v, half %6, i64 03191 ret <8 x half> %res3192}3193 3194define <8 x half> @stack_fold_fnmsub123sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3195; CHECK-LABEL: stack_fold_fnmsub123sh_intkz:3196; CHECK: # %bb.0:3197; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3198; CHECK-NEXT: #APP3199; CHECK-NEXT: nop3200; CHECK-NEXT: #NO_APP3201; CHECK-NEXT: movzbl (%rdi), %eax3202; CHECK-NEXT: kmovd %eax, %k13203; CHECK-NEXT: vfnmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3204; CHECK-NEXT: retq3205 %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}"()3206 %a0 = extractelement <8 x half> %a0v, i64 03207 %a1 = extractelement <8 x half> %a1v, i64 03208 %a2 = extractelement <8 x half> %a2v, i64 03209 %neg = fneg half %a23210 %neg1 = fneg half %a03211 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %neg)3212 %3 = load i8, ptr %mask3213 %4 = bitcast i8 %3 to <8 x i1>3214 %5 = extractelement <8 x i1> %4, i64 03215 %6 = select i1 %5, half %2, half zeroinitializer3216 %res = insertelement <8 x half> %a0v, half %6, i64 03217 ret <8 x half> %res3218}3219 3220define <8 x half> @stack_fold_fnmsub213sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3221; CHECK-LABEL: stack_fold_fnmsub213sh_intkz:3222; CHECK: # %bb.0:3223; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3224; CHECK-NEXT: #APP3225; CHECK-NEXT: nop3226; CHECK-NEXT: #NO_APP3227; CHECK-NEXT: movzbl (%rdi), %eax3228; CHECK-NEXT: kmovd %eax, %k13229; CHECK-NEXT: vfnmsub213sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3230; CHECK-NEXT: retq3231 %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}"()3232 %a0 = extractelement <8 x half> %a0v, i64 03233 %a1 = extractelement <8 x half> %a1v, i64 03234 %a2 = extractelement <8 x half> %a2v, i64 03235 %neg = fneg half %a23236 %neg1 = fneg half %a13237 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %neg)3238 %3 = load i8, ptr %mask3239 %4 = bitcast i8 %3 to <8 x i1>3240 %5 = extractelement <8 x i1> %4, i64 03241 %6 = select i1 %5, half %2, half zeroinitializer3242 %res = insertelement <8 x half> %a0v, half %6, i64 03243 ret <8 x half> %res3244}3245 3246define <8 x half> @stack_fold_fnmsub231sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3247; CHECK-LABEL: stack_fold_fnmsub231sh_intkz:3248; CHECK: # %bb.0:3249; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3250; CHECK-NEXT: #APP3251; CHECK-NEXT: nop3252; CHECK-NEXT: #NO_APP3253; CHECK-NEXT: movzbl (%rdi), %eax3254; CHECK-NEXT: kmovd %eax, %k13255; CHECK-NEXT: vfnmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3256; CHECK-NEXT: retq3257 %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}"()3258 %a0 = extractelement <8 x half> %a0v, i64 03259 %a1 = extractelement <8 x half> %a1v, i64 03260 %a2 = extractelement <8 x half> %a2v, i64 03261 %neg = fneg half %a03262 %neg1 = fneg half %a13263 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %neg)3264 %3 = load i8, ptr %mask3265 %4 = bitcast i8 %3 to <8 x i1>3266 %5 = extractelement <8 x i1> %4, i64 03267 %6 = select i1 %5, half %2, half zeroinitializer3268 %res = insertelement <8 x half> %a0v, half %6, i64 03269 ret <8 x half> %res3270}3271 3272define <8 x half> @stack_fold_fnmsub321sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3273; CHECK-LABEL: stack_fold_fnmsub321sh_intkz:3274; CHECK: # %bb.0:3275; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3276; CHECK-NEXT: #APP3277; CHECK-NEXT: nop3278; CHECK-NEXT: #NO_APP3279; CHECK-NEXT: movzbl (%rdi), %eax3280; CHECK-NEXT: kmovd %eax, %k13281; CHECK-NEXT: vfnmsub231sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3282; CHECK-NEXT: retq3283 %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}"()3284 %a0 = extractelement <8 x half> %a0v, i64 03285 %a1 = extractelement <8 x half> %a1v, i64 03286 %a2 = extractelement <8 x half> %a2v, i64 03287 %neg = fneg half %a03288 %neg1 = fneg half %a23289 %2 = call half @llvm.fma.f16(half %neg1, half %a1, half %neg)3290 %3 = load i8, ptr %mask3291 %4 = bitcast i8 %3 to <8 x i1>3292 %5 = extractelement <8 x i1> %4, i64 03293 %6 = select i1 %5, half %2, half zeroinitializer3294 %res = insertelement <8 x half> %a0v, half %6, i64 03295 ret <8 x half> %res3296}3297 3298define <8 x half> @stack_fold_fnmsub132sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3299; CHECK-LABEL: stack_fold_fnmsub132sh_intkz:3300; CHECK: # %bb.0:3301; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3302; CHECK-NEXT: #APP3303; CHECK-NEXT: nop3304; CHECK-NEXT: #NO_APP3305; CHECK-NEXT: movzbl (%rdi), %eax3306; CHECK-NEXT: kmovd %eax, %k13307; CHECK-NEXT: vfnmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3308; CHECK-NEXT: retq3309 %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}"()3310 %a0 = extractelement <8 x half> %a0v, i64 03311 %a1 = extractelement <8 x half> %a1v, i64 03312 %a2 = extractelement <8 x half> %a2v, i64 03313 %neg = fneg half %a13314 %neg1 = fneg half %a03315 %2 = call half @llvm.fma.f16(half %neg1, half %a2, half %neg)3316 %3 = load i8, ptr %mask3317 %4 = bitcast i8 %3 to <8 x i1>3318 %5 = extractelement <8 x i1> %4, i64 03319 %6 = select i1 %5, half %2, half zeroinitializer3320 %res = insertelement <8 x half> %a0v, half %6, i64 03321 ret <8 x half> %res3322}3323 3324define <8 x half> @stack_fold_fnmsub312sh_intkz(<8 x half> %a0v, <8 x half> %a1v, <8 x half> %a2v, ptr %mask) {3325; CHECK-LABEL: stack_fold_fnmsub312sh_intkz:3326; CHECK: # %bb.0:3327; CHECK-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3328; CHECK-NEXT: #APP3329; CHECK-NEXT: nop3330; CHECK-NEXT: #NO_APP3331; CHECK-NEXT: movzbl (%rdi), %eax3332; CHECK-NEXT: kmovd %eax, %k13333; CHECK-NEXT: vfnmsub132sh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload3334; CHECK-NEXT: retq3335 %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}"()3336 %a0 = extractelement <8 x half> %a0v, i64 03337 %a1 = extractelement <8 x half> %a1v, i64 03338 %a2 = extractelement <8 x half> %a2v, i64 03339 %neg = fneg half %a13340 %neg1 = fneg half %a23341 %2 = call half @llvm.fma.f16(half %neg1, half %a0, half %neg)3342 %3 = load i8, ptr %mask3343 %4 = bitcast i8 %3 to <8 x i1>3344 %5 = extractelement <8 x i1> %4, i64 03345 %6 = select i1 %5, half %2, half zeroinitializer3346 %res = insertelement <8 x half> %a0v, half %6, i64 03347 ret <8 x half> %res3348}3349 3350define <32 x half> @stack_fold_fmaddsub123ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3351; CHECK-LABEL: stack_fold_fmaddsub123ph:3352; CHECK: # %bb.0:3353; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3354; CHECK-NEXT: #APP3355; CHECK-NEXT: nop3356; CHECK-NEXT: #NO_APP3357; CHECK-NEXT: vfmaddsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3358; CHECK-NEXT: retq3359 %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}"()3360 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, i32 4)3361 ret <32 x half> %23362}3363declare <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half>, <32 x half>, <32 x half>, i32)3364 3365define <32 x half> @stack_fold_fmaddsub213ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3366; CHECK-LABEL: stack_fold_fmaddsub213ph:3367; CHECK: # %bb.0:3368; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3369; CHECK-NEXT: #APP3370; CHECK-NEXT: nop3371; CHECK-NEXT: #NO_APP3372; CHECK-NEXT: vfmaddsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3373; CHECK-NEXT: retq3374 %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}"()3375 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a0, <32 x half> %a2, i32 4)3376 ret <32 x half> %23377}3378 3379define <32 x half> @stack_fold_fmaddsub231ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3380; CHECK-LABEL: stack_fold_fmaddsub231ph:3381; CHECK: # %bb.0:3382; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3383; CHECK-NEXT: #APP3384; CHECK-NEXT: nop3385; CHECK-NEXT: #NO_APP3386; CHECK-NEXT: vfmaddsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3387; CHECK-NEXT: retq3388 %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}"()3389 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a2, <32 x half> %a0, i32 4)3390 ret <32 x half> %23391}3392 3393define <32 x half> @stack_fold_fmaddsub321ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3394; CHECK-LABEL: stack_fold_fmaddsub321ph:3395; CHECK: # %bb.0:3396; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3397; CHECK-NEXT: #APP3398; CHECK-NEXT: nop3399; CHECK-NEXT: #NO_APP3400; CHECK-NEXT: vfmaddsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3401; CHECK-NEXT: retq3402 %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}"()3403 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a1, <32 x half> %a0, i32 4)3404 ret <32 x half> %23405}3406 3407define <32 x half> @stack_fold_fmaddsub132ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3408; CHECK-LABEL: stack_fold_fmaddsub132ph:3409; CHECK: # %bb.0:3410; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3411; CHECK-NEXT: #APP3412; CHECK-NEXT: nop3413; CHECK-NEXT: #NO_APP3414; CHECK-NEXT: vfmaddsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3415; CHECK-NEXT: retq3416 %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}"()3417 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a2, <32 x half> %a1, i32 4)3418 ret <32 x half> %23419}3420 3421define <32 x half> @stack_fold_fmaddsub312ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3422; CHECK-LABEL: stack_fold_fmaddsub312ph:3423; CHECK: # %bb.0:3424; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3425; CHECK-NEXT: #APP3426; CHECK-NEXT: nop3427; CHECK-NEXT: #NO_APP3428; CHECK-NEXT: vfmaddsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3429; CHECK-NEXT: retq3430 %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}"()3431 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a0, <32 x half> %a1, i32 4)3432 ret <32 x half> %23433}3434 3435define <32 x half> @stack_fold_fmaddsub123ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3436; CHECK-LABEL: stack_fold_fmaddsub123ph_mask:3437; CHECK: # %bb.0:3438; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3439; CHECK-NEXT: #APP3440; CHECK-NEXT: nop3441; CHECK-NEXT: #NO_APP3442; CHECK-NEXT: vmovaps (%rdi), %zmm23443; CHECK-NEXT: kmovd %esi, %k13444; CHECK-NEXT: vfmaddsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3445; CHECK-NEXT: vmovaps %zmm2, %zmm03446; CHECK-NEXT: retq3447 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3448 %a0 = load <32 x half>, ptr %p3449 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, i32 4)3450 %3 = bitcast i32 %mask to <32 x i1>3451 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03452 ret <32 x half> %43453}3454 3455define <32 x half> @stack_fold_fmaddsub213ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3456; CHECK-LABEL: stack_fold_fmaddsub213ph_mask:3457; CHECK: # %bb.0:3458; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3459; CHECK-NEXT: #APP3460; CHECK-NEXT: nop3461; CHECK-NEXT: #NO_APP3462; CHECK-NEXT: vmovaps (%rdi), %zmm23463; CHECK-NEXT: kmovd %esi, %k13464; CHECK-NEXT: vfmaddsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3465; CHECK-NEXT: vmovaps %zmm2, %zmm03466; CHECK-NEXT: retq3467 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3468 %a0 = load <32 x half>, ptr %p3469 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a0, <32 x half> %a2, i32 4)3470 %3 = bitcast i32 %mask to <32 x i1>3471 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03472 ret <32 x half> %43473}3474 3475define <32 x half> @stack_fold_fmaddsub231ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3476; CHECK-LABEL: stack_fold_fmaddsub231ph_mask:3477; CHECK: # %bb.0:3478; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3479; CHECK-NEXT: #APP3480; CHECK-NEXT: nop3481; CHECK-NEXT: #NO_APP3482; CHECK-NEXT: vmovaps (%rdi), %zmm23483; CHECK-NEXT: kmovd %esi, %k13484; CHECK-NEXT: vfmaddsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3485; CHECK-NEXT: vmovaps %zmm2, %zmm03486; CHECK-NEXT: retq3487 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3488 %a0 = load <32 x half>, ptr %p3489 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a2, <32 x half> %a0, i32 4)3490 %3 = bitcast i32 %mask to <32 x i1>3491 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03492 ret <32 x half> %43493}3494 3495define <32 x half> @stack_fold_fmaddsub321ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3496; CHECK-LABEL: stack_fold_fmaddsub321ph_mask:3497; CHECK: # %bb.0:3498; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3499; CHECK-NEXT: #APP3500; CHECK-NEXT: nop3501; CHECK-NEXT: #NO_APP3502; CHECK-NEXT: vmovaps (%rdi), %zmm23503; CHECK-NEXT: kmovd %esi, %k13504; CHECK-NEXT: vfmaddsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3505; CHECK-NEXT: vmovaps %zmm2, %zmm03506; CHECK-NEXT: retq3507 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3508 %a0 = load <32 x half>, ptr %p3509 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a1, <32 x half> %a0, i32 4)3510 %3 = bitcast i32 %mask to <32 x i1>3511 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03512 ret <32 x half> %43513}3514 3515define <32 x half> @stack_fold_fmaddsub132ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3516; CHECK-LABEL: stack_fold_fmaddsub132ph_mask:3517; CHECK: # %bb.0:3518; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3519; CHECK-NEXT: #APP3520; CHECK-NEXT: nop3521; CHECK-NEXT: #NO_APP3522; CHECK-NEXT: vmovaps (%rdi), %zmm23523; CHECK-NEXT: kmovd %esi, %k13524; CHECK-NEXT: vfmaddsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3525; CHECK-NEXT: vmovaps %zmm2, %zmm03526; CHECK-NEXT: retq3527 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3528 %a0 = load <32 x half>, ptr %p3529 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a2, <32 x half> %a1, i32 4)3530 %3 = bitcast i32 %mask to <32 x i1>3531 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03532 ret <32 x half> %43533}3534 3535define <32 x half> @stack_fold_fmaddsub312ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3536; CHECK-LABEL: stack_fold_fmaddsub312ph_mask:3537; CHECK: # %bb.0:3538; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3539; CHECK-NEXT: #APP3540; CHECK-NEXT: nop3541; CHECK-NEXT: #NO_APP3542; CHECK-NEXT: vmovaps (%rdi), %zmm23543; CHECK-NEXT: kmovd %esi, %k13544; CHECK-NEXT: vfmaddsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3545; CHECK-NEXT: vmovaps %zmm2, %zmm03546; CHECK-NEXT: retq3547 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3548 %a0 = load <32 x half>, ptr %p3549 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a0, <32 x half> %a1, i32 4)3550 %3 = bitcast i32 %mask to <32 x i1>3551 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03552 ret <32 x half> %43553}3554 3555define <32 x half> @stack_fold_fmaddsub123ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3556; CHECK-LABEL: stack_fold_fmaddsub123ph_maskz:3557; CHECK: # %bb.0:3558; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3559; CHECK-NEXT: #APP3560; CHECK-NEXT: nop3561; CHECK-NEXT: #NO_APP3562; CHECK-NEXT: kmovd (%rdi), %k13563; CHECK-NEXT: vfmaddsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3564; CHECK-NEXT: retq3565 %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}"()3566 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, i32 4)3567 %3 = load i32, ptr %mask3568 %4 = bitcast i32 %3 to <32 x i1>3569 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3570 ret <32 x half> %53571}3572 3573define <32 x half> @stack_fold_fmaddsub213ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3574; CHECK-LABEL: stack_fold_fmaddsub213ph_maskz:3575; CHECK: # %bb.0:3576; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3577; CHECK-NEXT: #APP3578; CHECK-NEXT: nop3579; CHECK-NEXT: #NO_APP3580; CHECK-NEXT: kmovd (%rdi), %k13581; CHECK-NEXT: vfmaddsub213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3582; CHECK-NEXT: retq3583 %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}"()3584 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a0, <32 x half> %a2, i32 4)3585 %3 = load i32, ptr %mask3586 %4 = bitcast i32 %3 to <32 x i1>3587 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3588 ret <32 x half> %53589}3590 3591define <32 x half> @stack_fold_fmaddsub231ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3592; CHECK-LABEL: stack_fold_fmaddsub231ph_maskz:3593; CHECK: # %bb.0:3594; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3595; CHECK-NEXT: #APP3596; CHECK-NEXT: nop3597; CHECK-NEXT: #NO_APP3598; CHECK-NEXT: kmovd (%rdi), %k13599; CHECK-NEXT: vfmaddsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3600; CHECK-NEXT: retq3601 %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}"()3602 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a2, <32 x half> %a0, i32 4)3603 %3 = load i32, ptr %mask3604 %4 = bitcast i32 %3 to <32 x i1>3605 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3606 ret <32 x half> %53607}3608 3609define <32 x half> @stack_fold_fmaddsub321ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3610; CHECK-LABEL: stack_fold_fmaddsub321ph_maskz:3611; CHECK: # %bb.0:3612; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3613; CHECK-NEXT: #APP3614; CHECK-NEXT: nop3615; CHECK-NEXT: #NO_APP3616; CHECK-NEXT: kmovd (%rdi), %k13617; CHECK-NEXT: vfmaddsub231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3618; CHECK-NEXT: retq3619 %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}"()3620 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a1, <32 x half> %a0, i32 4)3621 %3 = load i32, ptr %mask3622 %4 = bitcast i32 %3 to <32 x i1>3623 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3624 ret <32 x half> %53625}3626 3627define <32 x half> @stack_fold_fmaddsub132ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3628; CHECK-LABEL: stack_fold_fmaddsub132ph_maskz:3629; CHECK: # %bb.0:3630; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3631; CHECK-NEXT: #APP3632; CHECK-NEXT: nop3633; CHECK-NEXT: #NO_APP3634; CHECK-NEXT: kmovd (%rdi), %k13635; CHECK-NEXT: vfmaddsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3636; CHECK-NEXT: retq3637 %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}"()3638 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a2, <32 x half> %a1, i32 4)3639 %3 = load i32, ptr %mask3640 %4 = bitcast i32 %3 to <32 x i1>3641 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3642 ret <32 x half> %53643}3644 3645define <32 x half> @stack_fold_fmaddsub312ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3646; CHECK-LABEL: stack_fold_fmaddsub312ph_maskz:3647; CHECK: # %bb.0:3648; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3649; CHECK-NEXT: #APP3650; CHECK-NEXT: nop3651; CHECK-NEXT: #NO_APP3652; CHECK-NEXT: kmovd (%rdi), %k13653; CHECK-NEXT: vfmaddsub132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3654; CHECK-NEXT: retq3655 %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}"()3656 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a0, <32 x half> %a1, i32 4)3657 %3 = load i32, ptr %mask3658 %4 = bitcast i32 %3 to <32 x i1>3659 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3660 ret <32 x half> %53661}3662 3663define <32 x half> @stack_fold_fmsubadd123ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3664; CHECK-LABEL: stack_fold_fmsubadd123ph:3665; CHECK: # %bb.0:3666; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3667; CHECK-NEXT: #APP3668; CHECK-NEXT: nop3669; CHECK-NEXT: #NO_APP3670; CHECK-NEXT: vfmsubadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3671; CHECK-NEXT: retq3672 %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}"()3673 %2 = fneg <32 x half> %a23674 %3 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a1, <32 x half> %2, i32 4)3675 ret <32 x half> %33676}3677 3678define <32 x half> @stack_fold_fmsubadd213ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3679; CHECK-LABEL: stack_fold_fmsubadd213ph:3680; CHECK: # %bb.0:3681; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3682; CHECK-NEXT: #APP3683; CHECK-NEXT: nop3684; CHECK-NEXT: #NO_APP3685; CHECK-NEXT: vfmsubadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3686; CHECK-NEXT: retq3687 %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}"()3688 %2 = fneg <32 x half> %a23689 %3 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a0, <32 x half> %2, i32 4)3690 ret <32 x half> %33691}3692 3693define <32 x half> @stack_fold_fmsubadd231ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3694; CHECK-LABEL: stack_fold_fmsubadd231ph:3695; CHECK: # %bb.0:3696; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3697; CHECK-NEXT: #APP3698; CHECK-NEXT: nop3699; CHECK-NEXT: #NO_APP3700; CHECK-NEXT: vfmsubadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3701; CHECK-NEXT: retq3702 %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}"()3703 %2 = fneg <32 x half> %a03704 %3 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a2, <32 x half> %2, i32 4)3705 ret <32 x half> %33706}3707 3708define <32 x half> @stack_fold_fmsubadd321ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3709; CHECK-LABEL: stack_fold_fmsubadd321ph:3710; CHECK: # %bb.0:3711; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3712; CHECK-NEXT: #APP3713; CHECK-NEXT: nop3714; CHECK-NEXT: #NO_APP3715; CHECK-NEXT: vfmsubadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3716; CHECK-NEXT: retq3717 %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}"()3718 %2 = fneg <32 x half> %a03719 %3 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a1, <32 x half> %2, i32 4)3720 ret <32 x half> %33721}3722 3723define <32 x half> @stack_fold_fmsubadd132ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3724; CHECK-LABEL: stack_fold_fmsubadd132ph:3725; CHECK: # %bb.0:3726; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3727; CHECK-NEXT: #APP3728; CHECK-NEXT: nop3729; CHECK-NEXT: #NO_APP3730; CHECK-NEXT: vfmsubadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3731; CHECK-NEXT: retq3732 %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}"()3733 %2 = fneg <32 x half> %a13734 %3 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a2, <32 x half> %2, i32 4)3735 ret <32 x half> %33736}3737 3738define <32 x half> @stack_fold_fmsubadd312ph(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2) {3739; CHECK-LABEL: stack_fold_fmsubadd312ph:3740; CHECK: # %bb.0:3741; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3742; CHECK-NEXT: #APP3743; CHECK-NEXT: nop3744; CHECK-NEXT: #NO_APP3745; CHECK-NEXT: vfmsubadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload3746; CHECK-NEXT: retq3747 %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}"()3748 %2 = fneg <32 x half> %a13749 %3 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a0, <32 x half> %2, i32 4)3750 ret <32 x half> %33751}3752 3753define <32 x half> @stack_fold_fmsubadd123ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3754; CHECK-LABEL: stack_fold_fmsubadd123ph_mask:3755; CHECK: # %bb.0:3756; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3757; CHECK-NEXT: #APP3758; CHECK-NEXT: nop3759; CHECK-NEXT: #NO_APP3760; CHECK-NEXT: vmovaps (%rdi), %zmm23761; CHECK-NEXT: kmovd %esi, %k13762; CHECK-NEXT: vfmsubadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3763; CHECK-NEXT: vmovaps %zmm2, %zmm03764; CHECK-NEXT: retq3765 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3766 %a0 = load <32 x half>, ptr %p3767 %neg = fneg <32 x half> %a23768 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a1, <32 x half> %neg, i32 4)3769 %3 = bitcast i32 %mask to <32 x i1>3770 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03771 ret <32 x half> %43772}3773 3774define <32 x half> @stack_fold_fmsubadd213ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3775; CHECK-LABEL: stack_fold_fmsubadd213ph_mask:3776; CHECK: # %bb.0:3777; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3778; CHECK-NEXT: #APP3779; CHECK-NEXT: nop3780; CHECK-NEXT: #NO_APP3781; CHECK-NEXT: vmovaps (%rdi), %zmm23782; CHECK-NEXT: kmovd %esi, %k13783; CHECK-NEXT: vfmsubadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3784; CHECK-NEXT: vmovaps %zmm2, %zmm03785; CHECK-NEXT: retq3786 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3787 %a0 = load <32 x half>, ptr %p3788 %neg = fneg <32 x half> %a23789 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a0, <32 x half> %neg, i32 4)3790 %3 = bitcast i32 %mask to <32 x i1>3791 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03792 ret <32 x half> %43793}3794 3795define <32 x half> @stack_fold_fmsubadd231ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3796; CHECK-LABEL: stack_fold_fmsubadd231ph_mask:3797; CHECK: # %bb.0:3798; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3799; CHECK-NEXT: #APP3800; CHECK-NEXT: nop3801; CHECK-NEXT: #NO_APP3802; CHECK-NEXT: vmovaps (%rdi), %zmm23803; CHECK-NEXT: kmovd %esi, %k13804; CHECK-NEXT: vfmsubadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3805; CHECK-NEXT: vmovaps %zmm2, %zmm03806; CHECK-NEXT: retq3807 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3808 %a0 = load <32 x half>, ptr %p3809 %neg = fneg <32 x half> %a03810 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a2, <32 x half> %neg, i32 4)3811 %3 = bitcast i32 %mask to <32 x i1>3812 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03813 ret <32 x half> %43814}3815 3816define <32 x half> @stack_fold_fmsubadd321ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3817; CHECK-LABEL: stack_fold_fmsubadd321ph_mask:3818; CHECK: # %bb.0:3819; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3820; CHECK-NEXT: #APP3821; CHECK-NEXT: nop3822; CHECK-NEXT: #NO_APP3823; CHECK-NEXT: vmovaps (%rdi), %zmm23824; CHECK-NEXT: kmovd %esi, %k13825; CHECK-NEXT: vfmsubadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3826; CHECK-NEXT: vmovaps %zmm2, %zmm03827; CHECK-NEXT: retq3828 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3829 %a0 = load <32 x half>, ptr %p3830 %neg = fneg <32 x half> %a03831 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a1, <32 x half> %neg, i32 4)3832 %3 = bitcast i32 %mask to <32 x i1>3833 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03834 ret <32 x half> %43835}3836 3837define <32 x half> @stack_fold_fmsubadd132ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3838; CHECK-LABEL: stack_fold_fmsubadd132ph_mask:3839; CHECK: # %bb.0:3840; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3841; CHECK-NEXT: #APP3842; CHECK-NEXT: nop3843; CHECK-NEXT: #NO_APP3844; CHECK-NEXT: vmovaps (%rdi), %zmm23845; CHECK-NEXT: kmovd %esi, %k13846; CHECK-NEXT: vfmsubadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3847; CHECK-NEXT: vmovaps %zmm2, %zmm03848; CHECK-NEXT: retq3849 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3850 %a0 = load <32 x half>, ptr %p3851 %neg = fneg <32 x half> %a13852 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a2, <32 x half> %neg, i32 4)3853 %3 = bitcast i32 %mask to <32 x i1>3854 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03855 ret <32 x half> %43856}3857 3858define <32 x half> @stack_fold_fmsubadd312ph_mask(ptr %p, <32 x half> %a1, <32 x half> %a2, i32 %mask) {3859; CHECK-LABEL: stack_fold_fmsubadd312ph_mask:3860; CHECK: # %bb.0:3861; CHECK-NEXT: vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3862; CHECK-NEXT: #APP3863; CHECK-NEXT: nop3864; CHECK-NEXT: #NO_APP3865; CHECK-NEXT: vmovaps (%rdi), %zmm23866; CHECK-NEXT: kmovd %esi, %k13867; CHECK-NEXT: vfmsubadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload3868; CHECK-NEXT: vmovaps %zmm2, %zmm03869; CHECK-NEXT: retq3870 %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()3871 %a0 = load <32 x half>, ptr %p3872 %neg = fneg <32 x half> %a13873 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a0, <32 x half> %neg, i32 4)3874 %3 = bitcast i32 %mask to <32 x i1>3875 %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> %a03876 ret <32 x half> %43877}3878 3879define <32 x half> @stack_fold_fmsubadd123ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3880; CHECK-LABEL: stack_fold_fmsubadd123ph_maskz:3881; CHECK: # %bb.0:3882; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3883; CHECK-NEXT: #APP3884; CHECK-NEXT: nop3885; CHECK-NEXT: #NO_APP3886; CHECK-NEXT: kmovd (%rdi), %k13887; CHECK-NEXT: vfmsubadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3888; CHECK-NEXT: retq3889 %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}"()3890 %neg = fneg <32 x half> %a23891 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a1, <32 x half> %neg, i32 4)3892 %3 = load i32, ptr %mask3893 %4 = bitcast i32 %3 to <32 x i1>3894 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3895 ret <32 x half> %53896}3897 3898define <32 x half> @stack_fold_fmsubadd213ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3899; CHECK-LABEL: stack_fold_fmsubadd213ph_maskz:3900; CHECK: # %bb.0:3901; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3902; CHECK-NEXT: #APP3903; CHECK-NEXT: nop3904; CHECK-NEXT: #NO_APP3905; CHECK-NEXT: kmovd (%rdi), %k13906; CHECK-NEXT: vfmsubadd213ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3907; CHECK-NEXT: retq3908 %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}"()3909 %neg = fneg <32 x half> %a23910 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a0, <32 x half> %neg, i32 4)3911 %3 = load i32, ptr %mask3912 %4 = bitcast i32 %3 to <32 x i1>3913 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3914 ret <32 x half> %53915}3916 3917define <32 x half> @stack_fold_fmsubadd231ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3918; CHECK-LABEL: stack_fold_fmsubadd231ph_maskz:3919; CHECK: # %bb.0:3920; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3921; CHECK-NEXT: #APP3922; CHECK-NEXT: nop3923; CHECK-NEXT: #NO_APP3924; CHECK-NEXT: kmovd (%rdi), %k13925; CHECK-NEXT: vfmsubadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3926; CHECK-NEXT: retq3927 %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}"()3928 %neg = fneg <32 x half> %a03929 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a1, <32 x half> %a2, <32 x half> %neg, i32 4)3930 %3 = load i32, ptr %mask3931 %4 = bitcast i32 %3 to <32 x i1>3932 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3933 ret <32 x half> %53934}3935 3936define <32 x half> @stack_fold_fmsubadd321ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3937; CHECK-LABEL: stack_fold_fmsubadd321ph_maskz:3938; CHECK: # %bb.0:3939; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3940; CHECK-NEXT: #APP3941; CHECK-NEXT: nop3942; CHECK-NEXT: #NO_APP3943; CHECK-NEXT: kmovd (%rdi), %k13944; CHECK-NEXT: vfmsubadd231ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3945; CHECK-NEXT: retq3946 %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}"()3947 %neg = fneg <32 x half> %a03948 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a1, <32 x half> %neg, i32 4)3949 %3 = load i32, ptr %mask3950 %4 = bitcast i32 %3 to <32 x i1>3951 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3952 ret <32 x half> %53953}3954 3955define <32 x half> @stack_fold_fmsubadd132ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3956; CHECK-LABEL: stack_fold_fmsubadd132ph_maskz:3957; CHECK: # %bb.0:3958; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3959; CHECK-NEXT: #APP3960; CHECK-NEXT: nop3961; CHECK-NEXT: #NO_APP3962; CHECK-NEXT: kmovd (%rdi), %k13963; CHECK-NEXT: vfmsubadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3964; CHECK-NEXT: retq3965 %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}"()3966 %neg = fneg <32 x half> %a13967 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a0, <32 x half> %a2, <32 x half> %neg, i32 4)3968 %3 = load i32, ptr %mask3969 %4 = bitcast i32 %3 to <32 x i1>3970 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3971 ret <32 x half> %53972}3973 3974define <32 x half> @stack_fold_fmsubadd312ph_maskz(<32 x half> %a0, <32 x half> %a1, <32 x half> %a2, ptr %mask) {3975; CHECK-LABEL: stack_fold_fmsubadd312ph_maskz:3976; CHECK: # %bb.0:3977; CHECK-NEXT: vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3978; CHECK-NEXT: #APP3979; CHECK-NEXT: nop3980; CHECK-NEXT: #NO_APP3981; CHECK-NEXT: kmovd (%rdi), %k13982; CHECK-NEXT: vfmsubadd132ph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload3983; CHECK-NEXT: retq3984 %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}"()3985 %neg = fneg <32 x half> %a13986 %2 = call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %a2, <32 x half> %a0, <32 x half> %neg, i32 4)3987 %3 = load i32, ptr %mask3988 %4 = bitcast i32 %3 to <32 x i1>3989 %5 = select <32 x i1> %4, <32 x half> %2, <32 x half> zeroinitializer3990 ret <32 x half> %53991}3992