Skip to content

Commit 398dcf3

Browse files
committed
Utilized isConstantOrConstantSplatFP API in matchCombine function.
1 parent a238955 commit 398dcf3

File tree

1 file changed

+22
-26
lines changed

1 file changed

+22
-26
lines changed

llvm/lib/Target/AMDGPU/AMDGPUCombinerHelper.cpp

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -467,48 +467,44 @@ bool AMDGPUCombinerHelper::matchCombineFmulWithSelectToFldexp(
467467
if ((ScalarDestTy == LLT::float64() || ScalarDestTy == LLT::float32() ||
468468
ScalarDestTy == LLT::float16()) &&
469469
(MRI.hasOneNonDBGUse(Sel.getOperand(0).getReg()))) {
470-
Register SelectCond = Sel.getOperand(1).getReg();
471-
Register SelectTrue = Sel.getOperand(2).getReg();
472-
Register SelectFalse = Sel.getOperand(3).getReg();
473-
474-
const auto SelectTrueCst =
475-
DestTy.isVector()
476-
? getFConstantSplat(SelectTrue, MRI, /*allowUndef=*/false)
477-
: getFConstantVRegValWithLookThrough(SelectTrue, MRI);
478-
if (!SelectTrueCst)
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)
479477
return false;
480-
const auto SelectFalseCst =
481-
DestTy.isVector()
482-
? getFConstantSplat(SelectFalse, MRI, /*allowUndef=*/false)
483-
: getFConstantVRegValWithLookThrough(SelectFalse, MRI);
484-
if (!SelectFalseCst)
478+
const auto SelectFalseVal =
479+
isConstantOrConstantSplatVectorFP(*SelectFalse, MRI);
480+
if (!SelectFalseVal)
485481
return false;
486482

487-
if (SelectTrueCst->Value.isNegative() != SelectFalseCst->Value.isNegative())
483+
if (SelectTrueVal->isNegative() != SelectFalseVal->isNegative())
488484
return false;
489485

490486
// For f32, only non-inline constants should be transformed.
491487
if (ScalarDestTy == LLT::float32() &&
492-
TII.isInlineConstant(SelectTrueCst->Value) &&
493-
TII.isInlineConstant(SelectFalseCst->Value))
488+
TII.isInlineConstant(*SelectTrueVal) &&
489+
TII.isInlineConstant(*SelectFalseVal))
494490
return false;
495491

496-
int SelectTrueVal = SelectTrueCst->Value.getExactLog2Abs();
497-
if (SelectTrueVal == INT_MIN)
492+
int SelectTrueLog2Val = SelectTrueVal->getExactLog2Abs();
493+
if (SelectTrueLog2Val == INT_MIN)
498494
return false;
499-
int SelectFalseVal = SelectFalseCst->Value.getExactLog2Abs();
500-
if (SelectFalseVal == INT_MIN)
495+
int SelectFalseLog2Val = SelectFalseVal->getExactLog2Abs();
496+
if (SelectFalseLog2Val == INT_MIN)
501497
return false;
502498

503499
MatchInfo = [=, &MI](MachineIRBuilder &Builder) {
504500
LLT IntDestTy = DestTy.changeElementType(LLT::scalar(32));
505-
auto NewSel =
506-
Builder.buildSelect(IntDestTy, SelectCond,
507-
Builder.buildConstant(IntDestTy, SelectTrueVal),
508-
Builder.buildConstant(IntDestTy, SelectFalseVal));
501+
auto NewSel = Builder.buildSelect(
502+
IntDestTy, SelectCondReg,
503+
Builder.buildConstant(IntDestTy, SelectTrueLog2Val),
504+
Builder.buildConstant(IntDestTy, SelectFalseLog2Val));
509505

510506
Register XReg = MI.getOperand(1).getReg();
511-
if (SelectTrueCst->Value.isNegative()) {
507+
if (SelectTrueVal->isNegative()) {
512508
auto NegX =
513509
Builder.buildFNeg(DestTy, XReg, MRI.getVRegDef(XReg)->getFlags());
514510
Builder.buildFLdexp(Dst, NegX, NewSel, MI.getFlags());

0 commit comments

Comments
 (0)