X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FMC%2FMCDwarf.h;h=92e76121c0094093520a520c9adcaf8f665ff947;hb=391271f3bbcec02e0da26d7c246bfabff5cb4ddf;hp=34cc8e77f9d6942aff4d0c52512bcdda3c98d952;hpb=7f74d2c2c197eec76ae2b41fed9c227c0dcc04cb;p=oota-llvm.git diff --git a/include/llvm/MC/MCDwarf.h b/include/llvm/MC/MCDwarf.h index 34cc8e77f9d..92e76121c00 100644 --- a/include/llvm/MC/MCDwarf.h +++ b/include/llvm/MC/MCDwarf.h @@ -16,7 +16,6 @@ #define LLVM_MC_MCDWARF_H #include "llvm/ADT/StringRef.h" -#include "llvm/MC/MachineLocation.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Dwarf.h" #include "llvm/Support/Compiler.h" @@ -268,112 +267,113 @@ namespace llvm { public: enum OpType { OpSameValue, OpRememberState, OpRestoreState, OpOffset, OpDefCfaRegister, OpDefCfaOffset, OpDefCfa, OpRelOffset, - OpAdjustCfaOffset, OpEscape, OpRestore, OpUndefined }; + OpAdjustCfaOffset, OpEscape, OpRestore, OpUndefined, + OpRegister }; private: OpType Operation; MCSymbol *Label; - // Move to & from location. - MachineLocation Destination; - MachineLocation Source; + unsigned Register; + union { + int Offset; + unsigned Register2; + }; std::vector Values; - MCCFIInstruction(OpType Op, MCSymbol *L, const MachineLocation &D, - const MachineLocation &S, StringRef V) : - Operation(Op), Label(L), Destination(D), Source(S), + + MCCFIInstruction(OpType Op, MCSymbol *L, unsigned R, int O, StringRef V) : + Operation(Op), Label(L), Register(R), Offset(O), Values(V.begin(), V.end()) { + assert(Op != OpRegister); + } + + MCCFIInstruction(OpType Op, MCSymbol *L, unsigned R1, unsigned R2) : + Operation(Op), Label(L), Register(R1), Register2(R2) { + assert(Op == OpRegister); } public: static MCCFIInstruction createOffset(MCSymbol *L, unsigned Register, int Offset) { - MachineLocation Dest(Register, Offset); - MachineLocation Source(Register, Offset); - MCCFIInstruction Ret(OpOffset, L, Dest, Source, ""); - return Ret; + return MCCFIInstruction(OpOffset, L, Register, Offset, ""); } static MCCFIInstruction createDefCfaRegister(MCSymbol *L, unsigned Register) { - MachineLocation Dest(Register); - MachineLocation Source(MachineLocation::VirtualFP); - MCCFIInstruction Ret(OpDefCfaRegister, L, Dest, Source, ""); - return Ret; + return MCCFIInstruction(OpDefCfaRegister, L, Register, 0, ""); } static MCCFIInstruction createDefCfaOffset(MCSymbol *L, int Offset) { - MachineLocation Dest(MachineLocation::VirtualFP); - MachineLocation Source(MachineLocation::VirtualFP, -Offset); - MCCFIInstruction Ret(OpDefCfaOffset, L, Dest, Source, ""); - return Ret; + return MCCFIInstruction(OpDefCfaOffset, L, 0, -Offset, ""); } static MCCFIInstruction createDefCfa(MCSymbol *L, unsigned Register, int Offset) { - MachineLocation Dest(MachineLocation::VirtualFP); - MachineLocation Source(Register, -Offset); - MCCFIInstruction Ret(OpDefCfa, L, Dest, Source, ""); - return Ret; + return MCCFIInstruction(OpDefCfa, L, Register, -Offset, ""); } static MCCFIInstruction createUndefined(MCSymbol *L, unsigned Register) { - MachineLocation Dummy; - MachineLocation Dest(Register); - MCCFIInstruction Ret(OpUndefined, L, Dest, Dummy, ""); - return Ret; + return MCCFIInstruction(OpUndefined, L, Register, 0, ""); } static MCCFIInstruction createRestore(MCSymbol *L, unsigned Register) { - MachineLocation Dummy; - MachineLocation Dest(Register); - MCCFIInstruction Ret(OpRestore, L, Dest, Dummy, ""); - return Ret; + return MCCFIInstruction(OpRestore, L, Register, 0, ""); } static MCCFIInstruction createSameValue(MCSymbol *L, unsigned Register) { - MachineLocation Dummy; - MachineLocation Dest(Register); - MCCFIInstruction Ret(OpSameValue, L, Dest, Dummy, ""); - return Ret; + return MCCFIInstruction(OpSameValue, L, Register, 0, ""); } static MCCFIInstruction createRestoreState(MCSymbol *L) { - MachineLocation Dummy; - MCCFIInstruction Ret(OpRestoreState, L, Dummy, Dummy, ""); - return Ret; + return MCCFIInstruction(OpRestoreState, L, 0, 0, ""); } static MCCFIInstruction createRememberState(MCSymbol *L) { - MachineLocation Dummy; - MCCFIInstruction Ret(OpRememberState, L, Dummy, Dummy, ""); - return Ret; + return MCCFIInstruction(OpRememberState, L, 0, 0, ""); } static MCCFIInstruction createRelOffset(MCSymbol *L, unsigned Register, int Offset) { - MachineLocation Dest(Register, Offset); - MachineLocation Source(Register, Offset); - MCCFIInstruction Ret(OpRelOffset, L, Dest, Source, ""); - return Ret; + return MCCFIInstruction(OpRelOffset, L, Register, Offset, ""); } static MCCFIInstruction createAdjustCfaOffset(MCSymbol *L, int Adjustment) { - MachineLocation Dest(MachineLocation::VirtualFP); - MachineLocation Source(MachineLocation::VirtualFP, Adjustment); - MCCFIInstruction Ret(OpAdjustCfaOffset, L, Dest, Source, ""); - return Ret; + return MCCFIInstruction(OpAdjustCfaOffset, L, 0, Adjustment, ""); } static MCCFIInstruction createEscape(MCSymbol *L, StringRef Vals) { - MachineLocation Dummy; - MCCFIInstruction Ret(OpEscape, L, Dummy, Dummy, Vals); - return Ret; + return MCCFIInstruction(OpEscape, L, 0, 0, Vals); + } + + static MCCFIInstruction + createRegister(MCSymbol *L, unsigned Register1, unsigned Register2) { + return MCCFIInstruction(OpRegister, L, Register1, Register2); } OpType getOperation() const { return Operation; } MCSymbol *getLabel() const { return Label; } - const MachineLocation &getDestination() const { return Destination; } - const MachineLocation &getSource() const { return Source; } + + unsigned getRegister() const { + assert(Operation == OpDefCfa || Operation == OpOffset || + Operation == OpRestore || Operation == OpUndefined || + Operation == OpSameValue || Operation == OpDefCfaRegister || + Operation == OpRelOffset || Operation == OpRegister); + return Register; + } + + unsigned getRegister2() const { + assert(Operation == OpRegister); + return Register2; + } + + int getOffset() const { + assert(Operation == OpDefCfa || Operation == OpOffset || + Operation == OpRelOffset || Operation == OpDefCfaOffset || + Operation == OpAdjustCfaOffset); + return Offset; + } + const StringRef getValues() const { + assert(Operation == OpEscape); return StringRef(&Values[0], Values.size()); } };