diff options
Diffstat (limited to 'llvm/lib/Target/Lanai')
8 files changed, 104 insertions, 65 deletions
diff --git a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp index 903f92a0443..57ead973b56 100644 --- a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp +++ b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp @@ -8,23 +8,41 @@ //===----------------------------------------------------------------------===// #include "Lanai.h" +#include "LanaiAluCode.h" +#include "LanaiCondCode.h" #include "MCTargetDesc/LanaiMCExpr.h" -#include "MCTargetDesc/LanaiMCTargetDesc.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/StringSwitch.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCInst.h" #include "llvm/MC/MCParser/MCAsmLexer.h" +#include "llvm/MC/MCParser/MCAsmParser.h" #include "llvm/MC/MCParser/MCParsedAsmOperand.h" #include "llvm/MC/MCParser/MCTargetAsmParser.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" #include "llvm/MC/MCSymbol.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MathExtras.h" +#include "llvm/Support/SMLoc.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/Support/TargetRegistry.h" +#include <algorithm> +#include <cassert> +#include <cstddef> +#include <cstdint> +#include <memory> namespace llvm { + +// Auto-generated by TableGen +static unsigned MatchRegisterName(StringRef Name); + namespace { + struct LanaiOperand; class LanaiAsmParser : public MCTargetAsmParser { @@ -80,9 +98,6 @@ private: const MCSubtargetInfo &SubtargetInfo; }; -// Auto-generated by TableGen -static unsigned MatchRegisterName(llvm::StringRef Name); - // LanaiOperand - Instances of this class represented a parsed machine // instruction struct LanaiOperand : public MCParsedAsmOperand { @@ -627,6 +642,8 @@ public: } }; +} // end anonymous namespace + bool LanaiAsmParser::ParseDirective(AsmToken /*DirectiveId*/) { return true; } bool LanaiAsmParser::MatchAndEmitInstruction(SMLoc IdLoc, unsigned &Opcode, @@ -680,11 +697,11 @@ std::unique_ptr<LanaiOperand> LanaiAsmParser::parseRegister() { if (Lexer.getKind() == AsmToken::Identifier) { RegNum = MatchRegisterName(Lexer.getTok().getIdentifier()); if (RegNum == 0) - return 0; + return nullptr; Parser.Lex(); // Eat identifier token return LanaiOperand::createReg(RegNum, Start, End); } - return 0; + return nullptr; } bool LanaiAsmParser::ParseRegister(unsigned &RegNum, SMLoc &StartLoc, @@ -701,15 +718,15 @@ bool LanaiAsmParser::ParseRegister(unsigned &RegNum, SMLoc &StartLoc, std::unique_ptr<LanaiOperand> LanaiAsmParser::parseIdentifier() { SMLoc Start = Parser.getTok().getLoc(); SMLoc End = SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1); - const MCExpr *Res, *RHS = 0; + const MCExpr *Res, *RHS = nullptr; LanaiMCExpr::VariantKind Kind = LanaiMCExpr::VK_Lanai_None; if (Lexer.getKind() != AsmToken::Identifier) - return 0; + return nullptr; StringRef Identifier; if (Parser.parseIdentifier(Identifier)) - return 0; + return nullptr; // Check if identifier has a modifier if (Identifier.equals_lower("hi")) @@ -722,24 +739,24 @@ std::unique_ptr<LanaiOperand> LanaiAsmParser::parseIdentifier() { if (Kind != LanaiMCExpr::VK_Lanai_None) { if (Lexer.getKind() != AsmToken::LParen) { Error(Lexer.getLoc(), "Expected '('"); - return 0; + return nullptr; } Lexer.Lex(); // lex '(' // Parse identifier if (Parser.parseIdentifier(Identifier)) - return 0; + return nullptr; } // If addition parse the RHS. if (Lexer.getKind() == AsmToken::Plus && Parser.parseExpression(RHS)) - return 0; + return nullptr; // For variants parse the final ')' if (Kind != LanaiMCExpr::VK_Lanai_None) { if (Lexer.getKind() != AsmToken::RParen) { Error(Lexer.getLoc(), "Expected ')'"); - return 0; + return nullptr; } Lexer.Lex(); // lex ')' } @@ -771,7 +788,7 @@ std::unique_ptr<LanaiOperand> LanaiAsmParser::parseImmediate() { if (!Parser.parseExpression(ExprVal)) return LanaiOperand::createImm(ExprVal, Start, End); default: - return 0; + return nullptr; } } @@ -1204,10 +1221,9 @@ bool LanaiAsmParser::ParseInstruction(ParseInstructionInfo & /*Info*/, #define GET_REGISTER_MATCHER #define GET_MATCHER_IMPLEMENTATION #include "LanaiGenAsmMatcher.inc" -} // namespace extern "C" void LLVMInitializeLanaiAsmParser() { RegisterMCAsmParser<LanaiAsmParser> x(getTheLanaiTarget()); } -} // namespace llvm +} // end namespace llvm diff --git a/llvm/lib/Target/Lanai/Disassembler/LanaiDisassembler.h b/llvm/lib/Target/Lanai/Disassembler/LanaiDisassembler.h index a317cd88ad6..e0c19e8ea64 100644 --- a/llvm/lib/Target/Lanai/Disassembler/LanaiDisassembler.h +++ b/llvm/lib/Target/Lanai/Disassembler/LanaiDisassembler.h @@ -20,14 +20,11 @@ namespace llvm { -class MCInst; -class raw_ostream; - class LanaiDisassembler : public MCDisassembler { public: LanaiDisassembler(const MCSubtargetInfo &STI, MCContext &Ctx); - ~LanaiDisassembler() override {} + ~LanaiDisassembler() override = default; // getInstruction - See MCDisassembler. MCDisassembler::DecodeStatus @@ -36,6 +33,6 @@ public: raw_ostream &CStream) const override; }; -} // namespace llvm +} // end namespace llvm #endif // LLVM_LIB_TARGET_LANAI_DISASSEMBLER_LANAIDISASSEMBLER_H diff --git a/llvm/lib/Target/Lanai/InstPrinter/LanaiInstPrinter.h b/llvm/lib/Target/Lanai/InstPrinter/LanaiInstPrinter.h index 1c9d186ad81..59904fbaa31 100644 --- a/llvm/lib/Target/Lanai/InstPrinter/LanaiInstPrinter.h +++ b/llvm/lib/Target/Lanai/InstPrinter/LanaiInstPrinter.h @@ -14,10 +14,10 @@ #ifndef LLVM_LIB_TARGET_LANAI_INSTPRINTER_LANAIINSTPRINTER_H #define LLVM_LIB_TARGET_LANAI_INSTPRINTER_LANAIINSTPRINTER_H +#include "llvm/ADT/StringRef.h" #include "llvm/MC/MCInstPrinter.h" namespace llvm { -class MCOperand; class LanaiInstPrinter : public MCInstPrinter { public: @@ -28,14 +28,14 @@ public: void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot, const MCSubtargetInfo &STI) override; void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O, - const char *Modifier = 0); + const char *Modifier = nullptr); void printPredicateOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); void printMemRiOperand(const MCInst *MI, int OpNo, raw_ostream &O, - const char *Modifier = 0); + const char *Modifier = nullptr); void printMemRrOperand(const MCInst *MI, int OpNo, raw_ostream &O, - const char *Modifier = 0); + const char *Modifier = nullptr); void printMemSplsOperand(const MCInst *MI, int OpNo, raw_ostream &O, - const char *Modifier = 0); + const char *Modifier = nullptr); void printCCOperand(const MCInst *MI, int OpNo, raw_ostream &O); void printAluOperand(const MCInst *MI, int OpNo, raw_ostream &O); void printHi16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); @@ -60,6 +60,7 @@ private: bool printMemoryStoreIncrement(const MCInst *MI, raw_ostream &Ostream, StringRef Opcode, int AddOffset); }; -} // namespace llvm + +} // end namespace llvm #endif // LLVM_LIB_TARGET_LANAI_INSTPRINTER_LANAIINSTPRINTER_H diff --git a/llvm/lib/Target/Lanai/LanaiISelLowering.cpp b/llvm/lib/Target/Lanai/LanaiISelLowering.cpp index ae7870e07d4..d156294a0b0 100644 --- a/llvm/lib/Target/Lanai/LanaiISelLowering.cpp +++ b/llvm/lib/Target/Lanai/LanaiISelLowering.cpp @@ -11,31 +11,46 @@ // //===----------------------------------------------------------------------===// -#include "LanaiISelLowering.h" - #include "Lanai.h" +#include "LanaiCondCode.h" +#include "LanaiISelLowering.h" #include "LanaiMachineFunctionInfo.h" #include "LanaiSubtarget.h" -#include "LanaiTargetMachine.h" #include "LanaiTargetObjectFile.h" +#include "MCTargetDesc/LanaiBaseInfo.h" +#include "llvm/ADT/APInt.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/StringSwitch.h" #include "llvm/CodeGen/CallingConvLower.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" -#include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/CodeGen/MachineMemOperand.h" #include "llvm/CodeGen/MachineRegisterInfo.h" -#include "llvm/CodeGen/SelectionDAGISel.h" -#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" +#include "llvm/CodeGen/MachineValueType.h" +#include "llvm/CodeGen/RuntimeLibcalls.h" +#include "llvm/CodeGen/SelectionDAG.h" +#include "llvm/CodeGen/SelectionDAGNodes.h" #include "llvm/CodeGen/ValueTypes.h" #include "llvm/IR/CallingConv.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Function.h" -#include "llvm/IR/GlobalAlias.h" -#include "llvm/IR/GlobalVariable.h" -#include "llvm/IR/Intrinsics.h" +#include "llvm/IR/GlobalValue.h" +#include "llvm/Support/Casting.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/CodeGen.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Target/TargetCallingConv.h" +#include "llvm/Target/TargetMachine.h" +#include <cassert> +#include <cmath> +#include <cstdint> +#include <cstdlib> +#include <utility> #define DEBUG_TYPE "lanai-lower" @@ -195,6 +210,7 @@ SDValue LanaiTargetLowering::LowerOperation(SDValue Op, llvm_unreachable("unimplemented operand"); } } + //===----------------------------------------------------------------------===// // Lanai Inline Assembly Support //===----------------------------------------------------------------------===// @@ -244,7 +260,7 @@ LanaiTargetLowering::getSingleConstraintMatchWeight( Value *CallOperandVal = Info.CallOperandVal; // If we don't have a value, we can't do a match, // but allow it at the lowest weight. - if (CallOperandVal == NULL) + if (CallOperandVal == nullptr) return CW_Default; // Look at the constraint type. switch (*Constraint) { @@ -270,7 +286,7 @@ LanaiTargetLowering::getSingleConstraintMatchWeight( void LanaiTargetLowering::LowerAsmOperandForConstraint( SDValue Op, std::string &Constraint, std::vector<SDValue> &Ops, SelectionDAG &DAG) const { - SDValue Result(0, 0); + SDValue Result(nullptr, 0); // Only support length 1 constraints for now. if (Constraint.length() > 1) @@ -676,7 +692,7 @@ SDValue LanaiTargetLowering::LowerCCCCallTo( } else { assert(VA.isMemLoc()); - if (StackPtr.getNode() == 0) + if (StackPtr.getNode() == nullptr) StackPtr = DAG.getCopyFromReg(Chain, DL, Lanai::SP, getPointerTy(DAG.getDataLayout())); @@ -1120,7 +1136,7 @@ const char *LanaiTargetLowering::getTargetNodeName(unsigned Opcode) const { case LanaiISD::SMALL: return "LanaiISD::SMALL"; default: - return NULL; + return nullptr; } } diff --git a/llvm/lib/Target/Lanai/LanaiRegisterInfo.h b/llvm/lib/Target/Lanai/LanaiRegisterInfo.h index 8b84bbc460e..c6e459076eb 100644 --- a/llvm/lib/Target/Lanai/LanaiRegisterInfo.h +++ b/llvm/lib/Target/Lanai/LanaiRegisterInfo.h @@ -21,9 +21,6 @@ namespace llvm { -class TargetInstrInfo; -class Type; - struct LanaiRegisterInfo : public LanaiGenRegisterInfo { LanaiRegisterInfo(); @@ -32,7 +29,7 @@ struct LanaiRegisterInfo : public LanaiGenRegisterInfo { // Code Generation virtual methods. const uint16_t * - getCalleeSavedRegs(const MachineFunction *MF = 0) const override; + getCalleeSavedRegs(const MachineFunction *MF = nullptr) const override; BitVector getReservedRegs(const MachineFunction &MF) const override; @@ -42,7 +39,7 @@ struct LanaiRegisterInfo : public LanaiGenRegisterInfo { void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj, unsigned FIOperandNum, - RegScavenger *RS = NULL) const override; + RegScavenger *RS = nullptr) const override; bool canRealignStack(const MachineFunction &MF) const override; @@ -58,6 +55,6 @@ struct LanaiRegisterInfo : public LanaiGenRegisterInfo { int getDwarfRegNum(unsigned RegNum, bool IsEH) const; }; -} // namespace llvm +} // end namespace llvm #endif // LLVM_LIB_TARGET_LANAI_LANAIREGISTERINFO_H diff --git a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiELFObjectWriter.cpp b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiELFObjectWriter.cpp index e30d5e9a18e..e02bba529bd 100644 --- a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiELFObjectWriter.cpp +++ b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiELFObjectWriter.cpp @@ -9,20 +9,19 @@ #include "MCTargetDesc/LanaiBaseInfo.h" #include "MCTargetDesc/LanaiFixupKinds.h" -#include "MCTargetDesc/LanaiMCTargetDesc.h" #include "llvm/MC/MCELFObjectWriter.h" -#include "llvm/MC/MCSymbol.h" +#include "llvm/Support/ELF.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/raw_ostream.h" using namespace llvm; namespace { + class LanaiELFObjectWriter : public MCELFObjectTargetWriter { public: explicit LanaiELFObjectWriter(uint8_t OSABI); - ~LanaiELFObjectWriter() override; + ~LanaiELFObjectWriter() override = default; protected: unsigned getRelocType(MCContext &Ctx, const MCValue &Target, @@ -30,14 +29,13 @@ protected: bool needsRelocateWithSymbol(const MCSymbol &SD, unsigned Type) const override; }; -} // namespace + +} // end anonymous namespace LanaiELFObjectWriter::LanaiELFObjectWriter(uint8_t OSABI) : MCELFObjectTargetWriter(/*Is64Bit_=*/false, OSABI, ELF::EM_LANAI, /*HasRelocationAddend=*/true) {} -LanaiELFObjectWriter::~LanaiELFObjectWriter() {} - unsigned LanaiELFObjectWriter::getRelocType(MCContext & /*Ctx*/, const MCValue & /*Target*/, const MCFixup &Fixup, diff --git a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp index ce68b7e24db..00cce92c2e2 100644 --- a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp +++ b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCCodeEmitter.cpp @@ -12,37 +12,42 @@ //===----------------------------------------------------------------------===// #include "Lanai.h" +#include "LanaiAluCode.h" #include "MCTargetDesc/LanaiBaseInfo.h" #include "MCTargetDesc/LanaiFixupKinds.h" #include "MCTargetDesc/LanaiMCExpr.h" -#include "MCTargetDesc/LanaiMCTargetDesc.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/MC/MCCodeEmitter.h" #include "llvm/MC/MCFixup.h" +#include "llvm/MC/MCExpr.h" #include "llvm/MC/MCInst.h" #include "llvm/MC/MCInstrInfo.h" #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" -#include "llvm/MC/MCSymbol.h" +#include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" +#include <cassert> +#include <cstdint> #define DEBUG_TYPE "mccodeemitter" STATISTIC(MCNumEmitted, "Number of MC instructions emitted"); namespace llvm { + namespace { + class LanaiMCCodeEmitter : public MCCodeEmitter { - LanaiMCCodeEmitter(const LanaiMCCodeEmitter &); // DO NOT IMPLEMENT - void operator=(const LanaiMCCodeEmitter &); // DO NOT IMPLEMENT const MCInstrInfo &InstrInfo; MCContext &Context; public: LanaiMCCodeEmitter(const MCInstrInfo &MCII, MCContext &C) : InstrInfo(MCII), Context(C) {} - - ~LanaiMCCodeEmitter() override {} + LanaiMCCodeEmitter(const LanaiMCCodeEmitter &) = delete; + void operator=(const LanaiMCCodeEmitter &) = delete; + ~LanaiMCCodeEmitter() override = default; // The functions below are called by TableGen generated functions for getting // the binary encoding of instructions/opereands. @@ -86,6 +91,8 @@ public: const MCSubtargetInfo &STI) const; }; +} // end anonymous namespace + Lanai::Fixups FixupKind(const MCExpr *Expr) { if (isa<MCSymbolRefExpr>(Expr)) return Lanai::FIXUP_LANAI_21; @@ -298,8 +305,8 @@ unsigned LanaiMCCodeEmitter::getBranchTargetOpValue( } #include "LanaiGenMCCodeEmitter.inc" -} // namespace -} // namespace llvm + +} // end namespace llvm llvm::MCCodeEmitter * llvm::createLanaiMCCodeEmitter(const MCInstrInfo &InstrInfo, diff --git a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.cpp b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.cpp index c2f8c0f7ad5..a47ff9ff3d6 100644 --- a/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.cpp +++ b/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.cpp @@ -11,16 +11,21 @@ // //===----------------------------------------------------------------------===// +#include "LanaiMCAsmInfo.h" #include "LanaiMCTargetDesc.h" - #include "InstPrinter/LanaiInstPrinter.h" -#include "LanaiMCAsmInfo.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/Triple.h" +#include "llvm/MC/MCInst.h" #include "llvm/MC/MCInstrAnalysis.h" #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/TargetRegistry.h" +#include <cstdint> +#include <string> #define GET_INSTRINFO_MC_DESC #include "LanaiGenInstrInfo.inc" @@ -70,7 +75,7 @@ static MCInstPrinter *createLanaiMCInstPrinter(const Triple & /*T*/, const MCRegisterInfo &MRI) { if (SyntaxVariant == 0) return new LanaiInstPrinter(MAI, MII, MRI); - return 0; + return nullptr; } static MCRelocationInfo *createLanaiElfRelocation(const Triple &TheTriple, @@ -79,6 +84,7 @@ static MCRelocationInfo *createLanaiElfRelocation(const Triple &TheTriple, } namespace { + class LanaiMCInstrAnalysis : public MCInstrAnalysis { public: explicit LanaiMCInstrAnalysis(const MCInstrInfo *Info) @@ -107,6 +113,7 @@ public: } } }; + } // end anonymous namespace static MCInstrAnalysis *createLanaiInstrAnalysis(const MCInstrInfo *Info) { @@ -131,7 +138,7 @@ extern "C" void LLVMInitializeLanaiTargetMC() { // Register the MC code emitter TargetRegistry::RegisterMCCodeEmitter(getTheLanaiTarget(), - llvm::createLanaiMCCodeEmitter); + createLanaiMCCodeEmitter); // Register the ASM Backend TargetRegistry::RegisterMCAsmBackend(getTheLanaiTarget(), |