aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Nacke <kai@redstar.de>2022-07-17 21:51:25 -0400
committerKai Nacke <kai@redstar.de>2022-11-13 11:07:37 -0500
commit5c6f4f62c024346df4acee56909e94772f801720 (patch)
treed2ca7e593e7033e30536ebeb0de755426afa898a
parent8bd2415dfa4a024cfa7b9301ed8ddb1a03d23c4d (diff)
downloadllvm-5c6f4f62c024346df4acee56909e94772f801720.zip
llvm-5c6f4f62c024346df4acee56909e94772f801720.tar.gz
llvm-5c6f4f62c024346df4acee56909e94772f801720.tar.bz2
[m88k] Add some functions to M88kISelLowering
These functions are used by CodeGenPrepare and/or IRTranslator and CombineHelper, so given a good answer may help.
-rw-r--r--llvm/lib/Target/M88k/M88kISelLowering.cpp28
-rw-r--r--llvm/lib/Target/M88k/M88kISelLowering.h5
2 files changed, 33 insertions, 0 deletions
diff --git a/llvm/lib/Target/M88k/M88kISelLowering.cpp b/llvm/lib/Target/M88k/M88kISelLowering.cpp
index 5025c19..9df0cc7 100644
--- a/llvm/lib/Target/M88k/M88kISelLowering.cpp
+++ b/llvm/lib/Target/M88k/M88kISelLowering.cpp
@@ -33,10 +33,38 @@ M88kTargetLowering::M88kTargetLowering(const TargetMachine &TM,
// How we extend i1 boolean values.
setBooleanContents(ZeroOrOneBooleanContent);
+ // Architecture has bit extract instruction.
+ setHasExtractBitsInsn();
+
setMinFunctionAlignment(Align(4));
setPrefFunctionAlignment(Align(4));
}
+bool M88kTargetLowering::isSelectSupported(SelectSupportKind /*kind*/) const {
+ // No kind of select is supported.
+ return false;
+}
+
+bool M88kTargetLowering::isIndexingLegal(MachineInstr &MI, Register Base,
+ Register Offset, bool IsPre,
+ MachineRegisterInfo &MRI) const {
+ // Combination 32bit Base+Offset is supported, but preincrement not.
+ return !IsPre && MRI.getType(Base).getScalarSizeInBits() == 32 &&
+ MRI.getType(Offset).getScalarSizeInBits() == 32;
+}
+
+#define GET_REGISTER_MATCHER
+#include "M88kGenAsmMatcher.inc"
+
+Register
+M88kTargetLowering::getRegisterByName(const char *RegName, LLT Ty,
+ const MachineFunction &MF) const {
+ if (Register Reg = MatchRegisterName(RegName))
+ return Reg;
+ report_fatal_error(
+ Twine("Invalid register name \"" + StringRef(RegName) + "\"."));
+}
+
bool M88kTargetLowering::isConstantUnsignedBitfieldExtractLegal(unsigned Opc,
LLT Ty1,
LLT Ty2) const {
diff --git a/llvm/lib/Target/M88k/M88kISelLowering.h b/llvm/lib/Target/M88k/M88kISelLowering.h
index 213e690..f8235ef 100644
--- a/llvm/lib/Target/M88k/M88kISelLowering.h
+++ b/llvm/lib/Target/M88k/M88kISelLowering.h
@@ -59,6 +59,11 @@ public:
explicit M88kTargetLowering(const TargetMachine &TM,
const M88kSubtarget &STI);
+ bool isSelectSupported(SelectSupportKind /*kind*/) const override;
+ bool isIndexingLegal(MachineInstr &MI, Register Base, Register Offset,
+ bool IsPre, MachineRegisterInfo &MRI) const override;
+ Register getRegisterByName(const char *RegName, LLT Ty,
+ const MachineFunction &MF) const override;
bool isConstantUnsignedBitfieldExtractLegal(unsigned Opc, LLT Ty1,
LLT Ty2) const override;
};