diff --git a/llvm/lib/Target/PowerPC/PPC32RegisterInfo.cpp b/llvm/lib/Target/PowerPC/PPC32RegisterInfo.cpp index 0b6041ffaf2d..ce6c46c888ec 100644 --- a/llvm/lib/Target/PowerPC/PPC32RegisterInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPC32RegisterInfo.cpp @@ -31,11 +31,6 @@ #include using namespace llvm; -namespace llvm { - // Switch toggling compilation for AIX - extern cl::opt AIX; -} - PPC32RegisterInfo::PPC32RegisterInfo() : PPC32GenRegisterInfo(PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP) { ImmToIdxMap[PPC::LD] = PPC::LDX; ImmToIdxMap[PPC::STD] = PPC::STDX; diff --git a/llvm/lib/Target/PowerPC/PPC32RegisterInfo.td b/llvm/lib/Target/PowerPC/PPC32RegisterInfo.td index 9536de1aadce..c725551d7f6f 100644 --- a/llvm/lib/Target/PowerPC/PPC32RegisterInfo.td +++ b/llvm/lib/Target/PowerPC/PPC32RegisterInfo.td @@ -22,7 +22,7 @@ def GPRC : RegisterClass using namespace llvm; -namespace llvm { - // Switch toggling compilation for AIX - extern cl::opt AIX; -} - PPC64RegisterInfo::PPC64RegisterInfo() : PPC64GenRegisterInfo(PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP) { ImmToIdxMap[PPC::LD] = PPC::LDX; ImmToIdxMap[PPC::STD] = PPC::STDX; diff --git a/llvm/lib/Target/PowerPC/PPC64RegisterInfo.td b/llvm/lib/Target/PowerPC/PPC64RegisterInfo.td index 9fa57a9c4060..974ebecb1d02 100644 --- a/llvm/lib/Target/PowerPC/PPC64RegisterInfo.td +++ b/llvm/lib/Target/PowerPC/PPC64RegisterInfo.td @@ -22,7 +22,7 @@ def GPRC : RegisterClass AIX("aix", - cl::desc("Generate AIX/xcoff instead of Darwin/MachO"), - cl::Hidden); + cl::opt + PPCTargetArg( + cl::desc("Force generation of code for a specific PPC target:"), + cl::values( + clEnumValN(TargetAIX, "aix", " Enable AIX codegen"), + clEnumValN(TargetDarwin,"darwin"," Enable Darwin codegen"), + clEnumValEnd), + cl::location(PPCTarget), cl::init(TargetDefault)); cl::opt EnablePPCLSR("enable-lsr-for-ppc", cl::desc("Enable LSR for PPC (beta)"), cl::Hidden); @@ -62,7 +69,12 @@ PowerPCTargetMachine::PowerPCTargetMachine(const std::string &name, const Module &M, const TargetData &TD, const PowerPCFrameInfo &TFI) -: TargetMachine(name, IL, TD), FrameInfo(TFI), Subtarget(M) {} +: TargetMachine(name, IL, TD), FrameInfo(TFI), Subtarget(M) { + if (TargetDefault == PPCTarget) { + if (Subtarget.IsAIX()) PPCTarget = TargetAIX; + if (Subtarget.IsDarwin()) PPCTarget = TargetDarwin; + } +} unsigned PPC32TargetMachine::getJITMatchQuality() { #if defined(__POWERPC__) || defined (__ppc__) || defined(_POWER) @@ -84,6 +96,7 @@ bool PowerPCTargetMachine::addPassesToEmitFile(PassManager &PM, if (EnablePPCLSR) { PM.add(createLoopStrengthReducePass()); + PM.add(createVerifierPass()); PM.add(createCFGSimplificationPass()); } @@ -122,10 +135,19 @@ bool PowerPCTargetMachine::addPassesToEmitFile(PassManager &PM, // Must run branch selection immediately preceding the asm printer PM.add(createPPCBranchSelectionPass()); - if (AIX) + // Decide which asm printer to use. If the user has not specified one on + // the command line, choose whichever one matches the default (current host). + switch (PPCTarget) { + case TargetDefault: + assert(0 && "Default host has no asm printer!"); + break; + case TargetAIX: PM.add(createAIXAsmPrinter(Out, *this)); - else + break; + case TargetDarwin: PM.add(createDarwinAsmPrinter(Out, *this)); + break; + } PM.add(createMachineCodeDeleter()); return false;