#include "llvm/Module.h"
#include "llvm/Target/TargetMachine.h"
#include "PPCGenSubtarget.inc"
+#include <cstdlib>
using namespace llvm;
#if defined(__APPLE__)
// If we are generating code for ppc64, verify that options make sense.
if (is64Bit) {
- if (!has64BitSupport()) {
- cerr << "PPC: Generation of 64-bit code for a 32-bit processor "
- << "requested. Ignoring 32-bit processor feature.\n";
- Has64BitSupport = true;
- }
+ Has64BitSupport = true;
// Silently force 64-bit register use on ppc64.
Use64BitRegs = true;
}
// If the user requested use of 64-bit regs, but the cpu selected doesn't
- // support it, warn and ignore.
- if (use64BitRegs() && !has64BitSupport()) {
- cerr << "PPC: 64-bit registers requested on CPU without support. "
- << "Disabling 64-bit register use.\n";
+ // support it, ignore.
+ if (use64BitRegs() && !has64BitSupport())
Use64BitRegs = false;
- }
// Set the boolean corresponding to the current target triple, or the default
// if one cannot be determined, to true.
// We never hae stubs if HasLazyResolverStubs=false or if in static mode.
if (!HasLazyResolverStubs || TM.getRelocationModel() == Reloc::Static)
return false;
-
+ // If symbol visibility is hidden, the extra load is not needed if
+ // the symbol is definitely defined in the current translation unit.
+ bool isDecl = GV->isDeclaration() && !GV->hasNotBeenReadFromBitcode();
+ if (GV->hasHiddenVisibility() && !isDecl && !GV->hasCommonLinkage())
+ return false;
return GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
- (GV->isDeclaration() && !GV->hasNotBeenReadFromBitcode());
+ GV->hasCommonLinkage() || isDecl;
}