diff options
author | Kai Nacke <kai@redstar.de> | 2022-07-17 21:51:25 -0400 |
---|---|---|
committer | Kai Nacke <kai@redstar.de> | 2022-11-13 11:07:37 -0500 |
commit | 5c6f4f62c024346df4acee56909e94772f801720 (patch) | |
tree | d2ca7e593e7033e30536ebeb0de755426afa898a | |
parent | 8bd2415dfa4a024cfa7b9301ed8ddb1a03d23c4d (diff) | |
download | llvm-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.cpp | 28 | ||||
-rw-r--r-- | llvm/lib/Target/M88k/M88kISelLowering.h | 5 |
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; }; |