[llvm] 3892baa - [Hexagon] Replace isImmValidForOpcode() with isExtendable flag
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 5 13:24:41 PST 2022
Author: Ikhlas Ajbar
Date: 2022-01-05T13:19:02-08:00
New Revision: 3892baaa711ab00e0abcbf9f813bfe0b61110f31
URL: https://github.com/llvm/llvm-project/commit/3892baaa711ab00e0abcbf9f813bfe0b61110f31
DIFF: https://github.com/llvm/llvm-project/commit/3892baaa711ab00e0abcbf9f813bfe0b61110f31.diff
LOG: [Hexagon] Replace isImmValidForOpcode() with isExtendable flag
Added:
Modified:
llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp
llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp b/llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp
index 338fda57c53a..43afae441457 100644
--- a/llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp
@@ -1587,16 +1587,6 @@ void HexagonHardwareLoops::setImmediate(MachineOperand &MO, int64_t Val) {
MO.setReg(NewR);
}
-static bool isImmValidForOpcode(unsigned CmpOpc, int64_t Imm) {
- // These two instructions are not extendable.
- if (CmpOpc == Hexagon::A4_cmpbeqi)
- return isUInt<8>(Imm);
- if (CmpOpc == Hexagon::A4_cmpbgti)
- return isInt<8>(Imm);
- // The rest of the comparison-with-immediate instructions are extendable.
- return true;
-}
-
bool HexagonHardwareLoops::fixupInductionVariable(MachineLoop *L) {
MachineBasicBlock *Header = L->getHeader();
MachineBasicBlock *Latch = L->getLoopLatch();
@@ -1812,9 +1802,9 @@ bool HexagonHardwareLoops::fixupInductionVariable(MachineLoop *L) {
// Most comparisons of register against an immediate value allow
// the immediate to be constant-extended. There are some exceptions
// though. Make sure the new combination will work.
- if (CmpImmOp->isImm())
- if (!isImmValidForOpcode(PredDef->getOpcode(), CmpImm))
- return false;
+ if (CmpImmOp->isImm() && !TII->isExtendable(*PredDef) &&
+ !TII->isValidOffset(PredDef->getOpcode(), CmpImm, TRI, false))
+ return false;
// Make sure that the compare happens after the bump. Otherwise,
// after the fixup, the compare would use a yet-undefined register.
diff --git a/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp b/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
index 57dc2f5585b4..dadedff4038e 100644
--- a/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
@@ -2799,6 +2799,11 @@ bool HexagonInstrInfo::isValidOffset(unsigned Opcode, int Offset,
case Hexagon::S4_storeirit_io:
case Hexagon::S4_storeirif_io:
return isShiftedUInt<6,2>(Offset);
+ // Handle these two compare instructions that are not extendable.
+ case Hexagon::A4_cmpbeqi:
+ return isUInt<8>(Offset);
+ case Hexagon::A4_cmpbgti:
+ return isInt<8>(Offset);
}
if (Extend)
More information about the llvm-commits
mailing list