diff options
author | Preston Gurd <preston.gurd@intel.com> | 2013-03-27 19:14:02 +0000 |
---|---|---|
committer | Preston Gurd <preston.gurd@intel.com> | 2013-03-27 19:14:02 +0000 |
commit | 663e6f95589470a9fa54f6834b3f5d50e284ecd7 (patch) | |
tree | c1ecb0edd26fa47248d4104ea8f127fc8a2dfcac /llvm/lib/Target/X86/X86Subtarget.h | |
parent | 1996f3d87fac2a0ff55e36fe6597f8fe711f3c1a (diff) | |
download | bcm5719-llvm-663e6f95589470a9fa54f6834b3f5d50e284ecd7.tar.gz bcm5719-llvm-663e6f95589470a9fa54f6834b3f5d50e284ecd7.zip |
For the current Atom processor, the fastest way to handle a call
indirect through a memory address is to load the memory address into
a register and then call indirect through the register.
This patch implements this improvement by modifying SelectionDAG to
force a function address which is a memory reference to be loaded
into a virtual register.
Patch by Sriram Murali.
llvm-svn: 178171
Diffstat (limited to 'llvm/lib/Target/X86/X86Subtarget.h')
-rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86Subtarget.h b/llvm/lib/Target/X86/X86Subtarget.h index 108ef0eb1c2..cac3f579b00 100644 --- a/llvm/lib/Target/X86/X86Subtarget.h +++ b/llvm/lib/Target/X86/X86Subtarget.h @@ -159,6 +159,10 @@ protected: /// a stall when returning too early. bool PadShortFunctions; + /// CallRegIndirect - True if the Calls with memory reference should be converted + /// to a register-based indirect call. + bool CallRegIndirect; + /// stackAlignment - The minimum alignment known to hold of the stack frame on /// entry to the function and which must be maintained by every function. unsigned stackAlignment; @@ -269,6 +273,7 @@ public: bool useLeaForSP() const { return UseLeaForSP; } bool hasSlowDivide() const { return HasSlowDivide; } bool padShortFunctions() const { return PadShortFunctions; } + bool callRegIndirect() const { return CallRegIndirect; } bool isAtom() const { return X86ProcFamily == IntelAtom; } |