@@ -8434,7 +8434,6 @@ static bool isFMAddSubOrFMSubAdd(const X86Subtarget &Subtarget,
84348434 // or MUL + ADDSUB to FMADDSUB.
84358435 const TargetOptions &Options = DAG.getTarget().Options;
84368436 bool AllowFusion =
8437- Options.AllowFPOpFusion == FPOpFusion::Fast ||
84388437 (AllowSubAddOrAddSubContract && Opnd0->getFlags().hasAllowContract());
84398438 if (!AllowFusion)
84408439 return false;
@@ -54160,11 +54159,7 @@ static SDValue combineFMulcFCMulc(SDNode *N, SelectionDAG &DAG,
5416054159// FADD(A, FMA(B, C, 0)) and FADD(A, FMUL(B, C)) to FMA(B, C, A)
5416154160static SDValue combineFaddCFmul(SDNode *N, SelectionDAG &DAG,
5416254161 const X86Subtarget &Subtarget) {
54163- auto AllowContract = [&DAG](const SDNodeFlags &Flags) {
54164- return DAG.getTarget().Options.AllowFPOpFusion == FPOpFusion::Fast ||
54165- Flags.hasAllowContract();
54166- };
54167-
54162+ bool AllowContract = N->getFlags().hasAllowContract();
5416854163 auto HasNoSignedZero = [&DAG](const SDNodeFlags &Flags) {
5416954164 return DAG.getTarget().Options.NoSignedZerosFPMath ||
5417054165 Flags.hasNoSignedZeros();
@@ -54177,7 +54172,7 @@ static SDValue combineFaddCFmul(SDNode *N, SelectionDAG &DAG,
5417754172 };
5417854173
5417954174 if (N->getOpcode() != ISD::FADD || !Subtarget.hasFP16() ||
54180- !AllowContract(N->getFlags()) )
54175+ !AllowContract)
5418154176 return SDValue();
5418254177
5418354178 EVT VT = N->getValueType(0);
@@ -54188,14 +54183,14 @@ static SDValue combineFaddCFmul(SDNode *N, SelectionDAG &DAG,
5418854183 SDValue RHS = N->getOperand(1);
5418954184 bool IsConj;
5419054185 SDValue FAddOp1, MulOp0, MulOp1;
54191- auto GetCFmulFrom = [&MulOp0, &MulOp1, &IsConj, & AllowContract,
54186+ auto GetCFmulFrom = [&MulOp0, &MulOp1, &IsConj, AllowContract,
5419254187 &IsVectorAllNegativeZero,
5419354188 &HasNoSignedZero](SDValue N) -> bool {
5419454189 if (!N.hasOneUse() || N.getOpcode() != ISD::BITCAST)
5419554190 return false;
5419654191 SDValue Op0 = N.getOperand(0);
5419754192 unsigned Opcode = Op0.getOpcode();
54198- if (Op0.hasOneUse() && AllowContract(Op0->getFlags()) ) {
54193+ if (Op0.hasOneUse() && AllowContract) {
5419954194 if ((Opcode == X86ISD::VFMULC || Opcode == X86ISD::VFCMULC)) {
5420054195 MulOp0 = Op0.getOperand(0);
5420154196 MulOp1 = Op0.getOperand(1);
0 commit comments