diff options
43 files changed, 174 insertions, 139 deletions
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 9c528f10fc..c619655e7a 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -65,6 +65,8 @@ namespace llvm { // Necessary for external weak linkage support std::set<const GlobalValue*> ExtWeakSymbols; + /// Fast - Generating code via fast instruction selection. + bool Fast; public: /// Output stream on which we're printing assembly code. /// @@ -82,6 +84,9 @@ namespace llvm { /// const TargetRegisterInfo *TRI; + /// The current machine function. + const MachineFunction *MF; + /// Name-mangler for global names. /// Mangler *Mang; @@ -101,7 +106,8 @@ namespace llvm { bool IsInTextSection; protected: - AsmPrinter(raw_ostream &o, TargetMachine &TM, const TargetAsmInfo *T); + AsmPrinter(raw_ostream &o, TargetMachine &TM, + const TargetAsmInfo *T, bool F); public: virtual ~AsmPrinter(); diff --git a/include/llvm/CodeGen/DwarfWriter.h b/include/llvm/CodeGen/DwarfWriter.h index 14fc89bf18..c7682c2921 100644 --- a/include/llvm/CodeGen/DwarfWriter.h +++ b/include/llvm/CodeGen/DwarfWriter.h @@ -49,9 +49,6 @@ private: /// DwarfException *DE; - /// FastCodeGen - True if generating code via the "fast" isel. - /// - bool FastCodeGen; public: static char ID; // Pass identification, replacement for typeid @@ -107,9 +104,6 @@ public: /// ShouldEmitDwarfDebug - Returns true if Dwarf debugging declarations should /// be emitted. bool ShouldEmitDwarfDebug() const; - - bool getFastCodeGen() const { return FastCodeGen; } - void setFastCodeGen(bool Fast) { FastCodeGen = Fast; } }; diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index d4dd79572e..fd71ba971e 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -37,8 +37,8 @@ using namespace llvm; char AsmPrinter::ID = 0; AsmPrinter::AsmPrinter(raw_ostream &o, TargetMachine &tm, - const TargetAsmInfo *T) - : MachineFunctionPass(&ID), FunctionNumber(0), O(o), + const TargetAsmInfo *T, bool F) + : MachineFunctionPass(&ID), FunctionNumber(0), Fast(F), O(o), TM(tm), TAI(T), TRI(tm.getRegisterInfo()), IsInTextSection(false) {} diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp index c1b93bf422..fb3d101f12 100644 --- a/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -370,7 +370,6 @@ bool FastISel::SelectCall(User *I) { unsigned Line = Subprogram.getLineNumber(); unsigned LabelID = DW->RecordSourceLine(Line, 0, SrcFile); setCurDebugLoc(DebugLoc::get(MF.getOrCreateDebugLocID(SrcFile, Line, 0))); - DW->setFastCodeGen(true); if (DW->getRecordSourceLineCount() != 1) { const TargetInstrDesc &II = TII.get(TargetInstrInfo::DBG_LABEL); diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index bc417138bf..4791465b09 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -3915,7 +3915,6 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { if (Fast) DAG.setRoot(DAG.getLabel(ISD::DBG_LABEL, getCurDebugLoc(), getRoot(), LabelID)); - DW->setFastCodeGen(Fast); } return 0; diff --git a/lib/Target/ARM/ARM.h b/lib/Target/ARM/ARM.h index 0358230c66..87d2cffe2a 100644 --- a/lib/Target/ARM/ARM.h +++ b/lib/Target/ARM/ARM.h @@ -89,7 +89,9 @@ inline static const char *ARMCondCodeToString(ARMCC::CondCodes CC) { } FunctionPass *createARMISelDag(ARMTargetMachine &TM); -FunctionPass *createARMCodePrinterPass(raw_ostream &O, ARMTargetMachine &TM); +FunctionPass *createARMCodePrinterPass(raw_ostream &O, + ARMTargetMachine &TM, + bool Fast); FunctionPass *createARMCodeEmitterPass(ARMTargetMachine &TM, MachineCodeEmitter &MCE); FunctionPass *createARMLoadStoreOptimizationPass(); diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp index a5d3659d3c..919c2ffaf8 100644 --- a/lib/Target/ARM/ARMTargetMachine.cpp +++ b/lib/Target/ARM/ARMTargetMachine.cpp @@ -157,7 +157,7 @@ bool ARMTargetMachine::addAssemblyEmitter(PassManagerBase &PM, bool Fast, // Output assembly language. assert(AsmPrinterCtor && "AsmPrinter was not linked in"); if (AsmPrinterCtor) - PM.add(AsmPrinterCtor(Out, *this)); + PM.add(AsmPrinterCtor(Out, *this, Fast)); return false; } @@ -174,7 +174,7 @@ bool ARMTargetMachine::addCodeEmitter(PassManagerBase &PM, bool Fast, if (DumpAsm) { assert(AsmPrinterCtor && "AsmPrinter was not linked in"); if (AsmPrinterCtor) - PM.add(AsmPrinterCtor(errs(), *this)); + PM.add(AsmPrinterCtor(errs(), *this, Fast)); } return false; @@ -187,7 +187,7 @@ bool ARMTargetMachine::addSimpleCodeEmitter(PassManagerBase &PM, bool Fast, if (DumpAsm) { assert(AsmPrinterCtor && "AsmPrinter was not linked in"); if (AsmPrinterCtor) - PM.add(AsmPrinterCtor(errs(), *this)); + PM.add(AsmPrinterCtor(errs(), *this, Fast)); } return false; diff --git a/lib/Target/ARM/ARMTargetMachine.h b/lib/Target/ARM/ARMTargetMachine.h index 6fe9a222b4..5403740742 100644 --- a/lib/Target/ARM/ARMTargetMachine.h +++ b/lib/Target/ARM/ARMTargetMachine.h @@ -40,7 +40,8 @@ protected: // To avoid having target depend on the asmprinter stuff libraries, asmprinter // set this functions to ctor pointer at startup time if they are linked in. typedef FunctionPass *(*AsmPrinterCtorFn)(raw_ostream &o, - ARMTargetMachine &tm); + ARMTargetMachine &tm, + bool fast); static AsmPrinterCtorFn AsmPrinterCtor; public: diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index 822cc2eb75..2f1da52f2d 100644 --- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -42,13 +42,7 @@ using namespace llvm; STATISTIC(EmittedInsts, "Number of machine instrs printed"); namespace { - struct VISIBILITY_HIDDEN ARMAsmPrinter : public AsmPrinter { - ARMAsmPrinter(raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T) - : AsmPrinter(O, TM, T), DW(0), MMI(NULL), AFI(NULL), MCP(NULL), - InCPMode(false) { - Subtarget = &TM.getSubtarget<ARMSubtarget>(); - } - + class VISIBILITY_HIDDEN ARMAsmPrinter : public AsmPrinter { DwarfWriter *DW; MachineModuleInfo *MMI; @@ -85,7 +79,14 @@ namespace { /// True if asm printer is printing a series of CONSTPOOL_ENTRY. bool InCPMode; - + public: + ARMAsmPrinter(raw_ostream &O, TargetMachine &TM, + const TargetAsmInfo *T, bool F) + : AsmPrinter(O, TM, T, F), DW(0), MMI(NULL), AFI(NULL), MCP(NULL), + InCPMode(false) { + Subtarget = &TM.getSubtarget<ARMSubtarget>(); + } + virtual const char *getPassName() const { return "ARM Assembly Printer"; } @@ -183,6 +184,8 @@ namespace { /// method to print assembly for each instruction. /// bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) { + this->MF = &MF; + AFI = MF.getInfo<ARMFunctionInfo>(); MCP = MF.getConstantPool(); @@ -1039,8 +1042,9 @@ bool ARMAsmPrinter::doFinalization(Module &M) { /// regardless of whether the function is in SSA form. /// FunctionPass *llvm::createARMCodePrinterPass(raw_ostream &o, - ARMTargetMachine &tm) { - return new ARMAsmPrinter(o, tm, tm.getTargetAsmInfo()); + ARMTargetMachine &tm, + bool fast) { + return new ARMAsmPrinter(o, tm, tm.getTargetAsmInfo(), fast); } namespace { diff --git a/lib/Target/Alpha/Alpha.h b/lib/Target/Alpha/Alpha.h index 9af46d0c70..e885c80b27 100644 --- a/lib/Target/Alpha/Alpha.h +++ b/lib/Target/Alpha/Alpha.h @@ -25,7 +25,8 @@ namespace llvm { FunctionPass *createAlphaISelDag(AlphaTargetMachine &TM); FunctionPass *createAlphaCodePrinterPass(raw_ostream &OS, - TargetMachine &TM); + TargetMachine &TM, + bool Fast); FunctionPass *createAlphaPatternInstructionSelector(TargetMachine &TM); FunctionPass *createAlphaCodeEmitterPass(AlphaTargetMachine &TM, MachineCodeEmitter &MCE); diff --git a/lib/Target/Alpha/AlphaTargetMachine.cpp b/lib/Target/Alpha/AlphaTargetMachine.cpp index c65485b061..db3567fa61 100644 --- a/lib/Target/Alpha/AlphaTargetMachine.cpp +++ b/lib/Target/Alpha/AlphaTargetMachine.cpp @@ -88,14 +88,14 @@ bool AlphaTargetMachine::addPreEmitPass(PassManagerBase &PM, bool Fast) { bool AlphaTargetMachine::addAssemblyEmitter(PassManagerBase &PM, bool Fast, raw_ostream &Out) { PM.add(createAlphaLLRPPass(*this)); - PM.add(createAlphaCodePrinterPass(Out, *this)); + PM.add(createAlphaCodePrinterPass(Out, *this, Fast)); return false; } bool AlphaTargetMachine::addCodeEmitter(PassManagerBase &PM, bool Fast, bool DumpAsm, MachineCodeEmitter &MCE) { PM.add(createAlphaCodeEmitterPass(*this, MCE)); if (DumpAsm) - PM.add(createAlphaCodePrinterPass(errs(), *this)); + PM.add(createAlphaCodePrinterPass(errs(), *this, Fast)); return false; } bool AlphaTargetMachine::addSimpleCodeEmitter(PassManagerBase &PM, diff --git a/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp b/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp index fdfee1bc15..536e5920f3 100644 --- a/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp +++ b/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp @@ -33,13 +33,12 @@ STATISTIC(EmittedInsts, "Number of machine instrs printed"); namespace { struct VISIBILITY_HIDDEN AlphaAsmPrinter : public AsmPrinter { - /// Unique incrementer for label values for referencing Global values. /// - AlphaAsmPrinter(raw_ostream &o, TargetMachine &tm, const TargetAsmInfo *T) - : AsmPrinter(o, tm, T) { - } + AlphaAsmPrinter(raw_ostream &o, TargetMachine &tm, + const TargetAsmInfo *T, bool F) + : AsmPrinter(o, tm, T, F) {} virtual const char *getPassName() const { return "Alpha Assembly Printer"; @@ -68,8 +67,9 @@ namespace { /// regardless of whether the function is in SSA form. /// FunctionPass *llvm::createAlphaCodePrinterPass(raw_ostream &o, - TargetMachine &tm) { - return new AlphaAsmPrinter(o, tm, tm.getTargetAsmInfo()); + TargetMachine &tm, + bool fast) { + return new AlphaAsmPrinter(o, tm, tm.getTargetAsmInfo(), fast); } #include "AlphaGenAsmWriter.inc" @@ -139,6 +139,8 @@ void AlphaAsmPrinter::printOp(const MachineOperand &MO, bool IsCallOp) { /// method to print assembly for each instruction. /// bool AlphaAsmPrinter::runOnMachineFunction(MachineFunction &MF) { + this->MF = &MF; + SetupMachineFunction(MF); O << "\n\n"; diff --git a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp index e9b3fc2d26..474a8ad3a4 100644 --- a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp +++ b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp @@ -45,13 +45,12 @@ namespace { const std::string bss_section(".bss"); - struct VISIBILITY_HIDDEN SPUAsmPrinter : public AsmPrinter { + class VISIBILITY_HIDDEN SPUAsmPrinter : public AsmPrinter { std::set<std::string> FnStubs, GVStubs; - - SPUAsmPrinter(raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T) : - AsmPrinter(O, TM, T) - { - } + public: + SPUAsmPrinter(raw_ostream &O, TargetMachine &TM, + const TargetAsmInfo *T, bool F) : + AsmPrinter(O, TM, T, F) {} virtual const char *getPassName() const { return "STI CBEA SPU Assembly Printer"; @@ -285,17 +284,13 @@ namespace { }; /// LinuxAsmPrinter - SPU assembly printer, customized for Linux - struct VISIBILITY_HIDDEN LinuxAsmPrinter : public SPUAsmPrinter { - + class VISIBILITY_HIDDEN LinuxAsmPrinter : public SPUAsmPrinter { DwarfWriter *DW; MachineModuleInfo *MMI; - + public: LinuxAsmPrinter(raw_ostream &O, SPUTargetMachine &TM, - const TargetAsmInfo *T) : - SPUAsmPrinter(O, TM, T), - DW(0), - MMI(0) - { } + const TargetAsmInfo *T, bool F) + : SPUAsmPrinter(O, TM, T, F), DW(0), MMI(0) {} virtual const char *getPassName() const { return "STI CBEA SPU Assembly Printer"; @@ -427,6 +422,8 @@ void SPUAsmPrinter::printMachineInstruction(const MachineInstr *MI) { bool LinuxAsmPrinter::runOnMachineFunction(MachineFunction &MF) { + this->MF = &MF; + SetupMachineFunction(MF); O << "\n\n"; @@ -613,6 +610,7 @@ bool LinuxAsmPrinter::doFinalization(Module &M) { /// that the Linux SPU assembler can deal with. /// FunctionPass *llvm::createSPUAsmPrinterPass(raw_ostream &o, - SPUTargetMachine &tm) { - return new LinuxAsmPrinter(o, tm, tm.getTargetAsmInfo()); + SPUTargetMachine &tm, + bool fast) { + return new LinuxAsmPrinter(o, tm, tm.getTargetAsmInfo(), fast); } diff --git a/lib/Target/CellSPU/SPU.h b/lib/Target/CellSPU/SPU.h index a6a911067f..a7a9a77182 100644 --- a/lib/Target/CellSPU/SPU.h +++ b/lib/Target/CellSPU/SPU.h @@ -23,7 +23,9 @@ namespace llvm { class raw_ostream; FunctionPass *createSPUISelDag(SPUTargetMachine &TM); - FunctionPass *createSPUAsmPrinterPass(raw_ostream &o, SPUTargetMachine &tm); + FunctionPass *createSPUAsmPrinterPass(raw_ostream &o, + SPUTargetMachine &tm, + bool fast); /*--== Utility functions/predicates/etc used all over the place: --==*/ //! Predicate test for a signed 10-bit value diff --git a/lib/Target/CellSPU/SPUTargetMachine.cpp b/lib/Target/CellSPU/SPUTargetMachine.cpp index 217da2c9ff..ba5d2f2507 100644 --- a/lib/Target/CellSPU/SPUTargetMachine.cpp +++ b/lib/Target/CellSPU/SPUTargetMachine.cpp @@ -90,6 +90,6 @@ SPUTargetMachine::addInstSelector(PassManagerBase &PM, bool Fast) bool SPUTargetMachine::addAssemblyEmitter(PassManagerBase &PM, bool Fast, raw_ostream &Out) { - PM.add(createSPUAsmPrinterPass(Out, *this)); + PM.add(createSPUAsmPrinterPass(Out, *this, Fast)); return false; } diff --git a/lib/Target/IA64/IA64.h b/lib/Target/IA64/IA64.h index 030a23382f..ab9e67764e 100644 --- a/lib/Target/IA64/IA64.h +++ b/lib/Target/IA64/IA64.h @@ -35,7 +35,9 @@ FunctionPass *createIA64BundlingPass(IA64TargetMachine &TM); /// using the given target machine description. This should work /// regardless of whether the function is in SSA form. /// -FunctionPass *createIA64CodePrinterPass(raw_ostream &o, IA64TargetMachine &tm); +FunctionPass *createIA64CodePrinterPass(raw_ostream &o, + IA64TargetMachine &tm, + bool fast); } // End llvm namespace diff --git a/lib/Target/IA64/IA64AsmPrinter.cpp b/lib/Target/IA64/IA64AsmPrinter.cpp index 567e04c4b1..00474309d5 100644 --- a/lib/Target/IA64/IA64AsmPrinter.cpp +++ b/lib/Target/IA64/IA64AsmPrinter.cpp @@ -34,12 +34,12 @@ using namespace llvm; STATISTIC(EmittedInsts, "Number of machine instrs printed"); namespace { - struct IA64AsmPrinter : public AsmPrinter { + class IA64AsmPrinter : public AsmPrinter { std::set<std::string> ExternalFunctionNames, ExternalObjectNames; - - IA64AsmPrinter(raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T) - : AsmPrinter(O, TM, T) { - } + public: + IA64AsmPrinter(raw_ostream &O, TargetMachine &TM, + const TargetAsmInfo *T, bool F) + : AsmPrinter(O, TM, T, F) {} virtual const char *getPassName() const { return "IA64 Assembly Printer"; @@ -124,6 +124,8 @@ namespace { /// method to print assembly for each instruction. /// bool IA64AsmPrinter::runOnMachineFunction(MachineFunction &MF) { + this->MF = &MF; + SetupMachineFunction(MF); O << "\n\n"; @@ -365,6 +367,7 @@ bool IA64AsmPrinter::doFinalization(Module &M) { /// the given target machine description. /// FunctionPass *llvm::createIA64CodePrinterPass(raw_ostream &o, - IA64TargetMachine &tm) { - return new IA64AsmPrinter(o, tm, tm.getTargetAsmInfo()); + IA64TargetMachine &tm, + bool fast) { + return new IA64AsmPrinter(o, tm, tm.getTargetAsmInfo(), fast); } diff --git a/lib/Target/IA64/IA64TargetMachine.cpp b/lib/Target/IA64/IA64TargetMachine.cpp index 459e8ed7a2..1cac9e4ea6 100644 --- a/lib/Target/IA64/IA64TargetMachine.cpp +++ b/lib/Target/IA64/IA64TargetMachine.cpp @@ -84,7 +84,7 @@ bool IA64TargetMachine::addPreEmitPass(PassManagerBase &PM, bool Fast) { } bool IA64TargetMachine::addAssemblyEmitter(PassManagerBase &PM, bool Fast, raw_ostream &Out) { - PM.add(createIA64CodePrinterPass(Out, *this)); + PM.add(createIA64CodePrinterPass(Out, *this, Fast)); return false; } diff --git a/lib/Target/Mips/Mips.h b/lib/Target/Mips/Mips.h index 03f5a525ba..28c11b0eb9 100644 --- a/lib/Target/Mips/Mips.h +++ b/lib/Target/Mips/Mips.h @@ -24,7 +24,8 @@ namespace llvm { FunctionPass *createMipsISelDag(MipsTargetMachine &TM); FunctionPass *createMipsDelaySlotFillerPass(MipsTargetMachine &TM); FunctionPass *createMipsCodePrinterPass(raw_ostream &OS, - MipsTargetMachine &TM); + MipsTargetMachine &TM, + bool Fast); } // end namespace llvm; // Defines symbolic names for Mips registers. This defines a mapping from diff --git a/lib/Target/Mips/MipsAsmPrinter.cpp b/lib/Target/Mips/MipsAsmPrinter.cpp index 94cd71a760..732c5d796c 100644 --- a/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/lib/Target/Mips/MipsAsmPrinter.cpp @@ -46,13 +46,12 @@ using namespace llvm; STATISTIC(EmittedInsts, "Number of machine instrs printed"); namespace { - struct VISIBILITY_HIDDEN MipsAsmPrinter : public AsmPrinter { - + class VISIBILITY_HIDDEN MipsAsmPrinter : public AsmPrinter { const MipsSubtarget *Subtarget; - + public: MipsAsmPrinter(raw_ostream &O, MipsTargetMachine &TM, - const TargetAsmInfo *T): - AsmPrinter(O, TM, T) { + const TargetAsmInfo *T, bool F) + : AsmPrinter(O, TM, T, F) { Subtarget = &TM.getSubtarget<MipsSubtarget>(); } @@ -91,9 +90,9 @@ namespace { /// using the given target machine description. This should work /// regardless of whether the function is in SSA form. FunctionPass *llvm::createMipsCodePrinterPass(raw_ostream &o, - MipsTargetMachine &tm) -{ - return new MipsAsmPrinter(o, tm, tm.getTargetAsmInfo()); + MipsTargetMachine &tm, + bool fast) { + return new MipsAsmPrinter(o, tm, tm.getTargetAsmInfo(), fast); } //===----------------------------------------------------------------------===// @@ -266,6 +265,8 @@ emitFunctionEnd(MachineFunction &MF) bool MipsAsmPrinter:: runOnMachineFunction(MachineFunction &MF) { + this->MF = &MF; + SetupMachineFunction(MF); // Print out constants referenced by the function diff --git a/lib/Target/Mips/MipsTargetMachine.cpp b/lib/Target/Mips/MipsTargetMachine.cpp index ff2e5b8158..4b13b78d02 100644 --- a/lib/Target/Mips/MipsTargetMachine.cpp +++ b/lib/Target/Mips/MipsTargetMachine.cpp @@ -128,6 +128,6 @@ addAssemblyEmitter(PassManagerBase &PM, bool Fast, raw_ostream &Out) { // Output assembly language. - PM.add(createMipsCodePrinterPass(Out, *this)); + PM.add(createMipsCodePrinterPass(Out, *this, Fast)); return false; } diff --git a/lib/Target/PIC16/PIC16.h b/lib/Target/PIC16/PIC16.h index e37ef4f209..eb7fdf914a 100644 --- a/lib/Target/PIC16/PIC16.h +++ b/lib/Target/PIC16/PIC16.h @@ -74,7 +74,8 @@ namespace PIC16CC { FunctionPass *createPIC16ISelDag(PIC16TargetMachine &TM); FunctionPass *createPIC16CodePrinterPass(raw_ostream &OS, - PIC16TargetMachine &TM); + PIC16TargetMachine &TM, + bool Fast); } // end namespace llvm; // Defines symbolic names for PIC16 registers. This defines a mapping from |