diff options
| author | 2020-08-03 15:06:44 +0000 | |
|---|---|---|
| committer | 2020-08-03 15:06:44 +0000 | |
| commit | b64793999546ed8adebaeebd9d8345d18db8927d (patch) | |
| tree | 4357c27b561d73b0e089727c6ed659f2ceff5f47 /gnu/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp | |
| parent | Add support for UTF-8 DISPLAY-HINTs with octet length. For now only (diff) | |
| download | wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.tar.xz wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.zip | |
Remove LLVM 8.0.1 files.
Diffstat (limited to 'gnu/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp')
| -rw-r--r-- | gnu/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp | 300 |
1 files changed, 0 insertions, 300 deletions
diff --git a/gnu/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp b/gnu/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp deleted file mode 100644 index 916bca6392d..00000000000 --- a/gnu/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp +++ /dev/null @@ -1,300 +0,0 @@ -//===-- XCoreAsmPrinter.cpp - XCore LLVM assembly writer ------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file contains a printer that converts from our internal representation -// of machine-dependent LLVM code to the XAS-format XCore assembly language. -// -//===----------------------------------------------------------------------===// - -#include "InstPrinter/XCoreInstPrinter.h" -#include "XCore.h" -#include "XCoreInstrInfo.h" -#include "XCoreMCInstLower.h" -#include "XCoreSubtarget.h" -#include "XCoreTargetMachine.h" -#include "XCoreTargetStreamer.h" -#include "llvm/ADT/SmallString.h" -#include "llvm/ADT/StringExtras.h" -#include "llvm/CodeGen/AsmPrinter.h" -#include "llvm/CodeGen/MachineConstantPool.h" -#include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/CodeGen/MachineInstr.h" -#include "llvm/CodeGen/MachineJumpTableInfo.h" -#include "llvm/CodeGen/MachineModuleInfo.h" -#include "llvm/IR/Constants.h" -#include "llvm/IR/DataLayout.h" -#include "llvm/IR/DebugInfo.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Mangler.h" -#include "llvm/IR/Module.h" -#include "llvm/MC/MCAsmInfo.h" -#include "llvm/MC/MCExpr.h" -#include "llvm/MC/MCInst.h" -#include "llvm/MC/MCStreamer.h" -#include "llvm/MC/MCSymbolELF.h" -#include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/TargetRegistry.h" -#include "llvm/Support/raw_ostream.h" -#include "llvm/Target/TargetLoweringObjectFile.h" -#include <algorithm> -#include <cctype> -using namespace llvm; - -#define DEBUG_TYPE "asm-printer" - -namespace { - class XCoreAsmPrinter : public AsmPrinter { - XCoreMCInstLower MCInstLowering; - XCoreTargetStreamer &getTargetStreamer(); - - public: - explicit XCoreAsmPrinter(TargetMachine &TM, - std::unique_ptr<MCStreamer> Streamer) - : AsmPrinter(TM, std::move(Streamer)), MCInstLowering(*this) {} - - StringRef getPassName() const override { return "XCore Assembly Printer"; } - - void printInlineJT(const MachineInstr *MI, int opNum, raw_ostream &O, - const std::string &directive = ".jmptable"); - void printInlineJT32(const MachineInstr *MI, int opNum, raw_ostream &O) { - printInlineJT(MI, opNum, O, ".jmptable32"); - } - void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O); - bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, - unsigned AsmVariant, const char *ExtraCode, - raw_ostream &O) override; - bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum, - unsigned AsmVariant, const char *ExtraCode, - raw_ostream &O) override; - - void emitArrayBound(MCSymbol *Sym, const GlobalVariable *GV); - void EmitGlobalVariable(const GlobalVariable *GV) override; - - void EmitFunctionEntryLabel() override; - void EmitInstruction(const MachineInstr *MI) override; - void EmitFunctionBodyStart() override; - void EmitFunctionBodyEnd() override; - }; -} // end of anonymous namespace - -XCoreTargetStreamer &XCoreAsmPrinter::getTargetStreamer() { - return static_cast<XCoreTargetStreamer&>(*OutStreamer->getTargetStreamer()); -} - -void XCoreAsmPrinter::emitArrayBound(MCSymbol *Sym, const GlobalVariable *GV) { - assert( ( GV->hasExternalLinkage() || GV->hasWeakLinkage() || - GV->hasLinkOnceLinkage() || GV->hasCommonLinkage() ) && - "Unexpected linkage"); - if (ArrayType *ATy = dyn_cast<ArrayType>(GV->getValueType())) { - - MCSymbol *SymGlob = OutContext.getOrCreateSymbol( - Twine(Sym->getName() + StringRef(".globound"))); - OutStreamer->EmitSymbolAttribute(SymGlob, MCSA_Global); - OutStreamer->EmitAssignment(SymGlob, - MCConstantExpr::create(ATy->getNumElements(), - OutContext)); - if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() || - GV->hasCommonLinkage()) { - OutStreamer->EmitSymbolAttribute(SymGlob, MCSA_Weak); - } - } -} - -void XCoreAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { - // Check to see if this is a special global used by LLVM, if so, emit it. - if (!GV->hasInitializer() || - EmitSpecialLLVMGlobal(GV)) - return; - - const DataLayout &DL = getDataLayout(); - OutStreamer->SwitchSection(getObjFileLowering().SectionForGlobal(GV, TM)); - - MCSymbol *GVSym = getSymbol(GV); - const Constant *C = GV->getInitializer(); - unsigned Align = (unsigned)DL.getPreferredTypeAlignmentShift(C->getType()); - - // Mark the start of the global - getTargetStreamer().emitCCTopData(GVSym->getName()); - - switch (GV->getLinkage()) { - case GlobalValue::AppendingLinkage: - report_fatal_error("AppendingLinkage is not supported by this target!"); - case GlobalValue::LinkOnceAnyLinkage: - case GlobalValue::LinkOnceODRLinkage: - case GlobalValue::WeakAnyLinkage: - case GlobalValue::WeakODRLinkage: - case GlobalValue::ExternalLinkage: - case GlobalValue::CommonLinkage: - emitArrayBound(GVSym, GV); - OutStreamer->EmitSymbolAttribute(GVSym, MCSA_Global); - - if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() || - GV->hasCommonLinkage()) - OutStreamer->EmitSymbolAttribute(GVSym, MCSA_Weak); - LLVM_FALLTHROUGH; - case GlobalValue::InternalLinkage: - case GlobalValue::PrivateLinkage: - break; - default: - llvm_unreachable("Unknown linkage type!"); - } - - EmitAlignment(Align > 2 ? Align : 2, GV); - - if (GV->isThreadLocal()) { - report_fatal_error("TLS is not supported by this target!"); - } - unsigned Size = DL.getTypeAllocSize(C->getType()); - if (MAI->hasDotTypeDotSizeDirective()) { - OutStreamer->EmitSymbolAttribute(GVSym, MCSA_ELF_TypeObject); - OutStreamer->emitELFSize(GVSym, MCConstantExpr::create(Size, OutContext)); - } - OutStreamer->EmitLabel(GVSym); - - EmitGlobalConstant(DL, C); - // The ABI requires that unsigned scalar types smaller than 32 bits - // are padded to 32 bits. - if (Size < 4) - OutStreamer->EmitZeros(4 - Size); - - // Mark the end of the global - getTargetStreamer().emitCCBottomData(GVSym->getName()); -} - -void XCoreAsmPrinter::EmitFunctionBodyStart() { - MCInstLowering.Initialize(&MF->getContext()); -} - -/// EmitFunctionBodyEnd - Targets can override this to emit stuff after -/// the last basic block in the function. -void XCoreAsmPrinter::EmitFunctionBodyEnd() { - // Emit function end directives - getTargetStreamer().emitCCBottomFunction(CurrentFnSym->getName()); -} - -void XCoreAsmPrinter::EmitFunctionEntryLabel() { - // Mark the start of the function - getTargetStreamer().emitCCTopFunction(CurrentFnSym->getName()); - OutStreamer->EmitLabel(CurrentFnSym); -} - -void XCoreAsmPrinter:: -printInlineJT(const MachineInstr *MI, int opNum, raw_ostream &O, - const std::string &directive) { - unsigned JTI = MI->getOperand(opNum).getIndex(); - const MachineFunction *MF = MI->getParent()->getParent(); - const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo(); - const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables(); - const std::vector<MachineBasicBlock*> &JTBBs = JT[JTI].MBBs; - O << "\t" << directive << " "; - for (unsigned i = 0, e = JTBBs.size(); i != e; ++i) { - MachineBasicBlock *MBB = JTBBs[i]; - if (i > 0) - O << ","; - MBB->getSymbol()->print(O, MAI); - } -} - -void XCoreAsmPrinter::printOperand(const MachineInstr *MI, int opNum, - raw_ostream &O) { - const DataLayout &DL = getDataLayout(); - const MachineOperand &MO = MI->getOperand(opNum); - switch (MO.getType()) { - case MachineOperand::MO_Register: - O << XCoreInstPrinter::getRegisterName(MO.getReg()); - break; - case MachineOperand::MO_Immediate: - O << MO.getImm(); - break; - case MachineOperand::MO_MachineBasicBlock: - MO.getMBB()->getSymbol()->print(O, MAI); - break; - case MachineOperand::MO_GlobalAddress: - getSymbol(MO.getGlobal())->print(O, MAI); - break; - case MachineOperand::MO_ConstantPoolIndex: - O << DL.getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_' - << MO.getIndex(); - break; - case MachineOperand::MO_BlockAddress: - GetBlockAddressSymbol(MO.getBlockAddress())->print(O, MAI); - break; - default: - llvm_unreachable("not implemented"); - } -} - -/// PrintAsmOperand - Print out an operand for an inline asm expression. -/// -bool XCoreAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, - unsigned AsmVariant,const char *ExtraCode, - raw_ostream &O) { - // Print the operand if there is no operand modifier. - if (!ExtraCode || !ExtraCode[0]) { - printOperand(MI, OpNo, O); - return false; - } - - // Otherwise fallback on the default implementation. - return AsmPrinter::PrintAsmOperand(MI, OpNo, AsmVariant, ExtraCode, O); -} - -bool XCoreAsmPrinter:: -PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum, - unsigned AsmVariant, const char *ExtraCode, - raw_ostream &O) { - if (ExtraCode && ExtraCode[0]) { - return true; // Unknown modifier. - } - printOperand(MI, OpNum, O); - O << '['; - printOperand(MI, OpNum + 1, O); - O << ']'; - return false; -} - -void XCoreAsmPrinter::EmitInstruction(const MachineInstr *MI) { - SmallString<128> Str; - raw_svector_ostream O(Str); - - switch (MI->getOpcode()) { - case XCore::DBG_VALUE: - llvm_unreachable("Should be handled target independently"); - case XCore::ADD_2rus: - if (MI->getOperand(2).getImm() == 0) { - O << "\tmov " - << XCoreInstPrinter::getRegisterName(MI->getOperand(0).getReg()) << ", " - << XCoreInstPrinter::getRegisterName(MI->getOperand(1).getReg()); - OutStreamer->EmitRawText(O.str()); - return; - } - break; - case XCore::BR_JT: - case XCore::BR_JT32: - O << "\tbru " - << XCoreInstPrinter::getRegisterName(MI->getOperand(1).getReg()) << '\n'; - if (MI->getOpcode() == XCore::BR_JT) - printInlineJT(MI, 0, O); - else - printInlineJT32(MI, 0, O); - O << '\n'; - OutStreamer->EmitRawText(O.str()); - return; - } - - MCInst TmpInst; - MCInstLowering.Lower(MI, TmpInst); - - EmitToStreamer(*OutStreamer, TmpInst); -} - -// Force static initialization. -extern "C" void LLVMInitializeXCoreAsmPrinter() { - RegisterAsmPrinter<XCoreAsmPrinter> X(getTheXCoreTarget()); -} |
