[llvm] a247360 - [Hexagon] Simplify AX instruction detection
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 7 10:33:23 PST 2022
Author: colinl
Date: 2022-01-07T10:33:12-08:00
New Revision: a2473601736d9ab47652f3b3563ec1df5eac9bef
URL: https://github.com/llvm/llvm-project/commit/a2473601736d9ab47652f3b3563ec1df5eac9bef
DIFF: https://github.com/llvm/llvm-project/commit/a2473601736d9ab47652f3b3563ec1df5eac9bef.diff
LOG: [Hexagon] Simplify AX instruction detection
Added:
Modified:
llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp
llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp
index 67dbc2e92ac06..2ce791a450a85 100644
--- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp
+++ b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCChecker.cpp
@@ -275,20 +275,27 @@ static bool isDuplexAGroup(unsigned Opcode) {
}
static bool isNeitherAnorX(MCInstrInfo const &MCII, MCInst const &ID) {
- unsigned Result = 0;
+ if (HexagonMCInstrInfo::isFloat(MCII, ID))
+ return true;
unsigned Type = HexagonMCInstrInfo::getType(MCII, ID);
- if (Type == HexagonII::TypeDUPLEX) {
- unsigned subInst0Opcode = ID.getOperand(0).getInst()->getOpcode();
- unsigned subInst1Opcode = ID.getOperand(1).getInst()->getOpcode();
- Result += !isDuplexAGroup(subInst0Opcode);
- Result += !isDuplexAGroup(subInst1Opcode);
- } else
- Result +=
- Type != HexagonII::TypeALU32_2op && Type != HexagonII::TypeALU32_3op &&
- Type != HexagonII::TypeALU32_ADDI && Type != HexagonII::TypeS_2op &&
- Type != HexagonII::TypeS_3op &&
- (Type != HexagonII::TypeALU64 || HexagonMCInstrInfo::isFloat(MCII, ID));
- return Result != 0;
+ switch (Type) {
+ case HexagonII::TypeALU32_2op:
+ case HexagonII::TypeALU32_3op:
+ case HexagonII::TypeALU32_ADDI:
+ case HexagonII::TypeS_2op:
+ case HexagonII::TypeS_3op:
+ case HexagonII::TypeEXTENDER:
+ case HexagonII::TypeM:
+ case HexagonII::TypeALU64:
+ return false;
+ case HexagonII::TypeSUBINSN: {
+ return !isDuplexAGroup(ID.getOpcode());
+ }
+ case HexagonII::TypeDUPLEX:
+ llvm_unreachable("unexpected duplex instruction");
+ default:
+ return true;
+ }
}
bool HexagonMCChecker::checkAXOK() {
diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp
index e1c95f1cc9205..ae1abc4678516 100644
--- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp
+++ b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp
@@ -699,6 +699,7 @@ inline static void addOps(MCInst &subInstPtr, MCInst const &Inst,
MCInst HexagonMCInstrInfo::deriveSubInst(MCInst const &Inst) {
MCInst Result;
+ Result.setLoc(Inst.getLoc());
bool Absolute;
int64_t Value;
switch (Inst.getOpcode()) {
More information about the llvm-commits
mailing list