[llvm-commits] [llvm] r43794 - in /llvm/trunk: lib/Target/X86/X86RegisterInfo.cpp lib/Target/X86/X86RegisterInfo.h utils/TableGen/RegisterInfoEmitter.cpp
Dale Johannesen
dalej at apple.com
Tue Nov 6 16:25:05 PST 2007
Author: johannes
Date: Tue Nov 6 18:25:05 2007
New Revision: 43794
URL: http://llvm.org/viewvc/llvm-project?rev=43794&view=rev
Log:
Interchange Dwarf numbers of ESP and EBP on x86 Darwin.
Much improvement in exception handling.
Modified:
llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
llvm/trunk/lib/Target/X86/X86RegisterInfo.h
llvm/trunk/utils/TableGen/RegisterInfoEmitter.cpp
Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=43794&r1=43793&r2=43794&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Tue Nov 6 18:25:05 2007
@@ -654,6 +654,22 @@
assert(AmbEntries.empty() && "Duplicated entries in unfolding maps?");
}
+// getDwarfRegNum - This function maps LLVM register identifiers to the
+// Dwarf specific numbering, used in debug info and exception tables.
+// The registers are given "basic" dwarf numbers in the .td files,
+// which are collected by TableGen into X86GenRegisterInfo::getDwarfRegNum.
+// This wrapper allows for target-specific overrides.
+int X86RegisterInfo::getDwarfRegNum(unsigned RegNo) const {
+ int n = X86GenRegisterInfo::getDwarfRegNum(RegNo);
+ const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
+ if (Subtarget->isDarwin) {
+ // ESP and EBP are switched.
+ if (n==4) return 5;
+ if (n==5) return 4;
+ }
+ return n;
+}
+
// getX86RegNum - This function maps LLVM register identifiers to their X86
// specific numbering, which is used in various places encoding instructions.
//
Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.h?rev=43794&r1=43793&r2=43794&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86RegisterInfo.h (original)
+++ llvm/trunk/lib/Target/X86/X86RegisterInfo.h Tue Nov 6 18:25:05 2007
@@ -77,6 +77,10 @@
/// register identifier.
unsigned getX86RegNum(unsigned RegNo);
+ /// getDwarfRegNum - allows modification of X86GenRegisterInfo::getDwarfRegNum
+ /// (created by TableGen) for target dependencies.
+ int getDwarfRegNum(unsigned RegNum) const;
+
/// Code Generation virtual methods...
///
bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
Modified: llvm/trunk/utils/TableGen/RegisterInfoEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/RegisterInfoEmitter.cpp?rev=43794&r1=43793&r2=43794&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/RegisterInfoEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/RegisterInfoEmitter.cpp Tue Nov 6 18:25:05 2007
@@ -60,7 +60,7 @@
OS << "struct " << ClassName << " : public MRegisterInfo {\n"
<< " " << ClassName
<< "(int CallFrameSetupOpcode = -1, int CallFrameDestroyOpcode = -1);\n"
- << " int getDwarfRegNum(unsigned RegNum) const;\n"
+ << " virtual int getDwarfRegNum(unsigned RegNum) const;\n"
<< " unsigned getSubReg(unsigned RegNo, unsigned Index) const;\n"
<< "};\n\n";
More information about the llvm-commits
mailing list