Skip to content

Commit d024dca

Browse files
committed
Addressed a suggested change regarding early false return.
1 parent 398dcf3 commit d024dca

File tree

1 file changed

+45
-47
lines changed

1 file changed

+45
-47
lines changed

llvm/lib/Target/AMDGPU/AMDGPUCombinerHelper.cpp

Lines changed: 45 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -464,57 +464,55 @@ bool AMDGPUCombinerHelper::matchCombineFmulWithSelectToFldexp(
464464
LLT DestTy = MRI.getType(Dst);
465465
LLT ScalarDestTy = DestTy.getScalarType();
466466

467-
if ((ScalarDestTy == LLT::float64() || ScalarDestTy == LLT::float32() ||
468-
ScalarDestTy == LLT::float16()) &&
469-
(MRI.hasOneNonDBGUse(Sel.getOperand(0).getReg()))) {
470-
Register SelectCondReg = Sel.getOperand(1).getReg();
471-
MachineInstr *SelectTrue = MRI.getVRegDef(Sel.getOperand(2).getReg());
472-
MachineInstr *SelectFalse = MRI.getVRegDef(Sel.getOperand(3).getReg());
473-
474-
const auto SelectTrueVal =
475-
isConstantOrConstantSplatVectorFP(*SelectTrue, MRI);
476-
if (!SelectTrueVal)
477-
return false;
478-
const auto SelectFalseVal =
479-
isConstantOrConstantSplatVectorFP(*SelectFalse, MRI);
480-
if (!SelectFalseVal)
481-
return false;
467+
if ((ScalarDestTy != LLT::float64() && ScalarDestTy != LLT::float32() &&
468+
ScalarDestTy != LLT::float16()) ||
469+
!MRI.hasOneNonDBGUse(Sel.getOperand(0).getReg()))
470+
return false;
482471

483-
if (SelectTrueVal->isNegative() != SelectFalseVal->isNegative())
484-
return false;
472+
Register SelectCondReg = Sel.getOperand(1).getReg();
473+
MachineInstr *SelectTrue = MRI.getVRegDef(Sel.getOperand(2).getReg());
474+
MachineInstr *SelectFalse = MRI.getVRegDef(Sel.getOperand(3).getReg());
485475

486-
// For f32, only non-inline constants should be transformed.
487-
if (ScalarDestTy == LLT::float32() &&
488-
TII.isInlineConstant(*SelectTrueVal) &&
489-
TII.isInlineConstant(*SelectFalseVal))
490-
return false;
476+
const auto SelectTrueVal =
477+
isConstantOrConstantSplatVectorFP(*SelectTrue, MRI);
478+
if (!SelectTrueVal)
479+
return false;
480+
const auto SelectFalseVal =
481+
isConstantOrConstantSplatVectorFP(*SelectFalse, MRI);
482+
if (!SelectFalseVal)
483+
return false;
491484

492-
int SelectTrueLog2Val = SelectTrueVal->getExactLog2Abs();
493-
if (SelectTrueLog2Val == INT_MIN)
494-
return false;
495-
int SelectFalseLog2Val = SelectFalseVal->getExactLog2Abs();
496-
if (SelectFalseLog2Val == INT_MIN)
497-
return false;
485+
if (SelectTrueVal->isNegative() != SelectFalseVal->isNegative())
486+
return false;
498487

499-
MatchInfo = [=, &MI](MachineIRBuilder &Builder) {
500-
LLT IntDestTy = DestTy.changeElementType(LLT::scalar(32));
501-
auto NewSel = Builder.buildSelect(
502-
IntDestTy, SelectCondReg,
503-
Builder.buildConstant(IntDestTy, SelectTrueLog2Val),
504-
Builder.buildConstant(IntDestTy, SelectFalseLog2Val));
505-
506-
Register XReg = MI.getOperand(1).getReg();
507-
if (SelectTrueVal->isNegative()) {
508-
auto NegX =
509-
Builder.buildFNeg(DestTy, XReg, MRI.getVRegDef(XReg)->getFlags());
510-
Builder.buildFLdexp(Dst, NegX, NewSel, MI.getFlags());
511-
} else {
512-
Builder.buildFLdexp(Dst, XReg, NewSel, MI.getFlags());
513-
}
514-
};
488+
// For f32, only non-inline constants should be transformed.
489+
if (ScalarDestTy == LLT::float32() && TII.isInlineConstant(*SelectTrueVal) &&
490+
TII.isInlineConstant(*SelectFalseVal))
491+
return false;
515492

516-
return true;
517-
}
493+
int SelectTrueLog2Val = SelectTrueVal->getExactLog2Abs();
494+
if (SelectTrueLog2Val == INT_MIN)
495+
return false;
496+
int SelectFalseLog2Val = SelectFalseVal->getExactLog2Abs();
497+
if (SelectFalseLog2Val == INT_MIN)
498+
return false;
518499

519-
return false;
500+
MatchInfo = [=, &MI](MachineIRBuilder &Builder) {
501+
LLT IntDestTy = DestTy.changeElementType(LLT::scalar(32));
502+
auto NewSel = Builder.buildSelect(
503+
IntDestTy, SelectCondReg,
504+
Builder.buildConstant(IntDestTy, SelectTrueLog2Val),
505+
Builder.buildConstant(IntDestTy, SelectFalseLog2Val));
506+
507+
Register XReg = MI.getOperand(1).getReg();
508+
if (SelectTrueVal->isNegative()) {
509+
auto NegX =
510+
Builder.buildFNeg(DestTy, XReg, MRI.getVRegDef(XReg)->getFlags());
511+
Builder.buildFLdexp(Dst, NegX, NewSel, MI.getFlags());
512+
} else {
513+
Builder.buildFLdexp(Dst, XReg, NewSel, MI.getFlags());
514+
}
515+
};
516+
517+
return true;
520518
}

0 commit comments

Comments
 (0)