Skip to content

Commit eaa567d

Browse files
committed
Generalize lowerFAbs in LegalizerHelper
1 parent c4a8d38 commit eaa567d

File tree

4 files changed

+24
-24
lines changed

4 files changed

+24
-24
lines changed

llvm/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ class LegalizerHelper {
437437
LegalizeResult lowerAbsToAddXor(MachineInstr &MI);
438438
LegalizeResult lowerAbsToMaxNeg(MachineInstr &MI);
439439
LegalizeResult lowerAbsToCNeg(MachineInstr &MI);
440+
LegalizeResult lowerFAbs(MachineInstr &MI);
440441
LegalizeResult lowerVectorReduction(MachineInstr &MI);
441442
LegalizeResult lowerMemcpyInline(MachineInstr &MI);
442443
LegalizeResult lowerMemCpyFamily(MachineInstr &MI, unsigned MaxLen = 0);

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4255,6 +4255,8 @@ LegalizerHelper::lower(MachineInstr &MI, unsigned TypeIdx, LLT LowerHintTy) {
42554255
return lowerShlSat(MI);
42564256
case G_ABS:
42574257
return lowerAbsToAddXor(MI);
4258+
case G_FABS:
4259+
return lowerFAbs(MI);
42584260
case G_SELECT:
42594261
return lowerSelect(MI);
42604262
case G_IS_FPCLASS:
@@ -8761,6 +8763,26 @@ LegalizerHelper::lowerAbsToCNeg(MachineInstr &MI) {
87618763
return Legalized;
87628764
}
87638765

8766+
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFAbs(MachineInstr &MI) {
8767+
Register SrcReg = MI.getOperand(1).getReg();
8768+
Register DstReg = MI.getOperand(0).getReg();
8769+
8770+
LLT Ty = MRI.getType(DstReg);
8771+
if (MRI.getType(SrcReg) != Ty)
8772+
return UnableToLegalize;
8773+
8774+
if (!Ty.isScalar())
8775+
return UnableToLegalize;
8776+
8777+
// Reset sign bit
8778+
MIRBuilder.buildAnd(DstReg, SrcReg,
8779+
MIRBuilder.buildConstant(
8780+
Ty, APInt::getSignedMaxValue(Ty.getSizeInBits())));
8781+
8782+
MI.eraseFromParent();
8783+
return Legalized;
8784+
}
8785+
87648786
LegalizerHelper::LegalizeResult
87658787
LegalizerHelper::lowerVectorReduction(MachineInstr &MI) {
87668788
Register SrcReg = MI.getOperand(1).getReg();

llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
264264
const auto &Ty = Query.Types[0];
265265
return (Ty == v8s16 || Ty == v4s16) && HasFP16;
266266
})
267-
.customFor({s128})
267+
.lowerFor({s128})
268268
.scalarizeIf(scalarOrEltWiderThan(0, 64), 0)
269269
.minScalarOrElt(0, MinFPScalar)
270270
.clampNumElements(0, v4s16, v8s16)
@@ -1360,8 +1360,6 @@ bool AArch64LegalizerInfo::legalizeCustom(
13601360
return legalizePrefetch(MI, Helper);
13611361
case TargetOpcode::G_ABS:
13621362
return Helper.lowerAbsToCNeg(MI);
1363-
case TargetOpcode::G_FABS:
1364-
return legalizeFABS(MI, MRI, MIRBuilder);
13651363
case TargetOpcode::G_ICMP:
13661364
return legalizeICMP(MI, MRI, MIRBuilder);
13671365
}
@@ -1422,25 +1420,6 @@ bool AArch64LegalizerInfo::legalizeFunnelShift(MachineInstr &MI,
14221420
return true;
14231421
}
14241422

1425-
bool AArch64LegalizerInfo::legalizeFABS(MachineInstr &MI,
1426-
MachineRegisterInfo &MRI,
1427-
MachineIRBuilder &MIRBuilder) const {
1428-
Register SrcReg = MI.getOperand(1).getReg();
1429-
Register DstReg = MI.getOperand(0).getReg();
1430-
1431-
constexpr LLT S128 = LLT::scalar(128);
1432-
if (MRI.getType(SrcReg) != S128 || MRI.getType(DstReg) != S128)
1433-
return false;
1434-
1435-
MIRBuilder.buildAnd(
1436-
DstReg, SrcReg,
1437-
MIRBuilder.buildConstant(
1438-
S128, APInt::getSignedMaxValue(128)));
1439-
1440-
MI.eraseFromParent();
1441-
return true;
1442-
}
1443-
14441423
bool AArch64LegalizerInfo::legalizeICMP(MachineInstr &MI,
14451424
MachineRegisterInfo &MRI,
14461425
MachineIRBuilder &MIRBuilder) const {

llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ class AArch64LegalizerInfo : public LegalizerInfo {
5050
LegalizerHelper &Helper) const;
5151
bool legalizeRotate(MachineInstr &MI, MachineRegisterInfo &MRI,
5252
LegalizerHelper &Helper) const;
53-
bool legalizeFABS(MachineInstr &MI, MachineRegisterInfo &MRI,
54-
MachineIRBuilder &MIRBuilder) const;
5553
bool legalizeICMP(MachineInstr &MI, MachineRegisterInfo &MRI,
5654
MachineIRBuilder &MIRBuilder) const;
5755
bool legalizeFunnelShift(MachineInstr &MI, MachineRegisterInfo &MRI,

0 commit comments

Comments
 (0)