darwin9 and above support aligned common symbols.

llvm-svn: 45494
This commit is contained in:
Chris Lattner 2008-01-02 19:44:55 +00:00
parent dcbc0f3029
commit cce79c67ca
3 changed files with 37 additions and 13 deletions

View File

@ -193,8 +193,13 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
O << TAI->getLCOMMDirective() << name << "," << Size;
if (Subtarget->isTargetDarwin())
O << "," << Align;
} else
} else {
O << TAI->getCOMMDirective() << name << "," << Size;
// Leopard and above support aligned common symbols.
if (Subtarget->getDarwinVers() >= 9)
O << "," << Align;
}
} else {
if (!Subtarget->isTargetCygMing()) {
if (I->hasInternalLinkage())

View File

@ -221,6 +221,7 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS, bool is64Bit)
, PICStyle(PICStyle::None)
, X86SSELevel(NoMMXSSE)
, HasX86_64(false)
, DarwinVers(0)
, stackAlignment(8)
// FIXME: this is a known good value for Yonah. How about others?
, MaxInlineSizeThreshold(128)
@ -256,14 +257,22 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS, bool is64Bit)
// if one cannot be determined, to true.
const std::string& TT = M.getTargetTriple();
if (TT.length() > 5) {
if (TT.find("cygwin") != std::string::npos)
TargetType = isCygwin;
else if (TT.find("mingw") != std::string::npos)
TargetType = isMingw;
else if (TT.find("darwin") != std::string::npos)
unsigned Pos;
if ((Pos = TT.find("-darwin")) != std::string::npos) {
TargetType = isDarwin;
else if (TT.find("win32") != std::string::npos)
// Compute the darwin version number.
if (isdigit(TT[Pos+7]))
DarwinVers = atoi(&TT[Pos+7]);
else
DarwinVers = 8; // Minimum supported darwin is Tiger.
} else if (TT.find("cygwin") != std::string::npos) {
TargetType = isCygwin;
} else if (TT.find("mingw") != std::string::npos) {
TargetType = isMingw;
} else if (TT.find("win32") != std::string::npos) {
TargetType = isWindows;
}
} else if (TT.empty()) {
#if defined(__CYGWIN__)
TargetType = isCygwin;
@ -271,6 +280,12 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS, bool is64Bit)
TargetType = isMingw;
#elif defined(__APPLE__)
TargetType = isDarwin;
#if __APPLE_CC__ > 5400
DarwinVers = 9; // GCC 5400+ is Leopard.
#else
DarwinVers = 8; // Minimum supported darwin is Tiger.
#endif
#elif defined(_WIN32)
TargetType = isWindows;
#endif
@ -279,11 +294,8 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS, bool is64Bit)
// If the asm syntax hasn't been overridden on the command line, use whatever
// the target wants.
if (AsmFlavor == X86Subtarget::Unset) {
if (TargetType == isWindows) {
AsmFlavor = X86Subtarget::Intel;
} else {
AsmFlavor = X86Subtarget::ATT;
}
AsmFlavor = (TargetType == isWindows)
? X86Subtarget::Intel : X86Subtarget::ATT;
}
if (TargetType == isDarwin && Is64Bit)

View File

@ -64,6 +64,10 @@ protected:
/// HasX86_64 - True if the processor supports X86-64 instructions.
///
bool HasX86_64;
/// DarwinVers - Nonzero if this is a darwin platform: the numeric
/// version of the platform, e.g. 8 = 10.4 (Tiger), 9 = 10.5 (Leopard), etc.
unsigned char DarwinVers; // Is any darwin-ppc platform.
/// stackAlignment - The minimum alignment known to hold of the stack frame on
/// entry to the function and which must be maintained by every function.
@ -159,7 +163,10 @@ public:
bool isPICStyleStub() const { return PICStyle == PICStyle::Stub; }
bool isPICStyleRIPRel() const { return PICStyle == PICStyle::RIPRel; }
bool isPICStyleWinPIC() const { return PICStyle == PICStyle:: WinPIC; }
/// getDarwinVers - Return the darwin version number, 8 = tiger, 9 = leopard.
unsigned getDarwinVers() const { return DarwinVers; }
/// 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