Skip to content

Commit b8dcc44

Browse files
committed
Make X86 backend not rely on global contract flag
1 parent 96a5289 commit b8dcc44

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
5416154160
static 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

Comments
 (0)