Factor out GVRequiresExtraLoad() from .h to .cpp

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32048 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Anton Korobeynikov 2006-11-30 22:42:55 +00:00
parent a5cb564655
commit 7784ebc239
2 changed files with 19 additions and 13 deletions

View File

@ -27,6 +27,23 @@ AsmWriterFlavor("x86-asm-syntax", cl::init(X86Subtarget::unset),
clEnumValEnd));
/// True if accessing the GV requires an extra load. For Windows, dllimported
/// symbols are indirect, loading the value at address GV rather then the
/// value of GV itself. This means that the GlobalAddress must be in the base
/// or index register of the address, not the GV offset field.
bool X86Subtarget::GVRequiresExtraLoad(const GlobalValue* GV, bool isDirectCall) const
{
if (isTargetDarwin()) {
return (!isDirectCall &&
(GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
(GV->isExternal() && !GV->hasNotBeenReadFromBytecode())));
} else if (isTargetCygwin() || isTargetWindows()) {
return (GV->hasDLLImportLinkage());
}
return false;
}
/// GetCpuIDAndInfo - Execute the specified cpuid and return the 4 values in the
/// specified arguments. If we can't run cpuid on the host, return true.
bool X86::GetCpuIDAndInfo(unsigned value, unsigned *rEAX, unsigned *rEBX,

View File

@ -14,13 +14,13 @@
#ifndef X86SUBTARGET_H
#define X86SUBTARGET_H
#include "llvm/GlobalValue.h"
#include "llvm/Target/TargetSubtarget.h"
#include <string>
namespace llvm {
class Module;
class GlobalValue;
class X86Subtarget : public TargetSubtarget {
public:
@ -111,18 +111,7 @@ public:
/// symbols are indirect, loading the value at address GV rather then the
/// value of GV itself. This means that the GlobalAddress must be in the base
/// or index register of the address, not the GV offset field.
bool GVRequiresExtraLoad(const GlobalValue* GV, bool isDirectCall) const
{
if (isTargetDarwin()) {
return (!isDirectCall &&
(GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
(GV->isExternal() && !GV->hasNotBeenReadFromBytecode())));
} else if (isTargetCygwin() || isTargetWindows()) {
return (GV->hasDLLImportLinkage());
}
return false;
}
bool GVRequiresExtraLoad(const GlobalValue* GV, bool isDirectCall) const;
};
namespace X86 {