diff --git a/lib/Target/PowerPC/PPC.h b/lib/Target/PowerPC/PPC.h
index 88fc87e..fb64a93 100644
--- a/lib/Target/PowerPC/PPC.h
+++ b/lib/Target/PowerPC/PPC.h
@@ -21,17 +21,10 @@
 
 class FunctionPass;
 class PPCTargetMachine;
-
-enum PPCTargetEnum {
-  TargetDefault, TargetAIX, TargetDarwin
-};
-
 FunctionPass *createPPCBranchSelectionPass();
 FunctionPass *createPPCISelDag(PPCTargetMachine &TM);
 FunctionPass *createDarwinAsmPrinter(std::ostream &OS, PPCTargetMachine &TM);
 FunctionPass *createAIXAsmPrinter(std::ostream &OS, PPCTargetMachine &TM);
-
-extern PPCTargetEnum PPCTarget;
 } // end namespace llvm;
 
 // GCC #defines PPC on Linux but we use it as our namespace name
diff --git a/lib/Target/PowerPC/PPCRegisterInfo.td b/lib/Target/PowerPC/PPCRegisterInfo.td
index 9cd2145..5c6ac24 100644
--- a/lib/Target/PowerPC/PPCRegisterInfo.td
+++ b/lib/Target/PowerPC/PPCRegisterInfo.td
@@ -215,7 +215,7 @@
   let MethodBodies = [{
     GPRCClass::iterator
     GPRCClass::allocation_order_begin(MachineFunction &MF) const {
-      return begin() + ((TargetAIX == PPCTarget) ? 1 : 0);
+      return begin();
     }
     GPRCClass::iterator
     GPRCClass::allocation_order_end(MachineFunction &MF) const {
@@ -238,7 +238,7 @@
   let MethodBodies = [{
     G8RCClass::iterator
     G8RCClass::allocation_order_begin(MachineFunction &MF) const {
-      return begin() + ((TargetAIX == PPCTarget) ? 1 : 0);
+      return begin();
     }
     G8RCClass::iterator
     G8RCClass::allocation_order_end(MachineFunction &MF) const {
diff --git a/lib/Target/PowerPC/PPCSubtarget.cpp b/lib/Target/PowerPC/PPCSubtarget.cpp
index f7a9560..b909b5b 100644
--- a/lib/Target/PowerPC/PPCSubtarget.cpp
+++ b/lib/Target/PowerPC/PPCSubtarget.cpp
@@ -14,24 +14,10 @@
 #include "PPCSubtarget.h"
 #include "PPC.h"
 #include "llvm/Module.h"
-#include "llvm/Support/CommandLine.h"
 #include "PPCGenSubtarget.inc"
 #include <iostream>
-
 using namespace llvm;
-PPCTargetEnum llvm::PPCTarget = TargetDefault;
 
-namespace llvm {
-  cl::opt<PPCTargetEnum, true>
-  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));  
-} 
- 
 #if defined(__APPLE__)
 #include <mach/mach.h>
 #include <mach/mach_host.h>
@@ -115,7 +101,9 @@
   // if one cannot be determined, to true.
   const std::string& TT = M.getTargetTriple();
   if (TT.length() > 5) {
-    IsDarwin = TT.find("darwin") != std::string::npos;
+    IsDarwin = TT.find("-darwin") != std::string::npos;
+    if (!IsDarwin)
+      IsAIX = TT.find("-aix") != std::string::npos;
   } else if (TT.empty()) {
 #if defined(_POWER)
     IsAIX = true;
diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
index 78ea481..e5ee33b 100644
--- a/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ b/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -91,10 +91,6 @@
     FrameInfo(*this, false), JITInfo(*this), TLInfo(*this),
     InstrItins(Subtarget.getInstrItineraryData()) {
 
-  if (TargetDefault == PPCTarget) {
-    if (Subtarget.isAIX()) PPCTarget = TargetAIX;
-    if (Subtarget.isDarwin()) PPCTarget = TargetDarwin;
-  }
   if (getRelocationModel() == Reloc::Default)
     if (Subtarget.isDarwin())
       setRelocationModel(Reloc::DynamicNoPIC);
@@ -153,15 +149,10 @@
 
   // 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 TargetAIX:
+  if (Subtarget.isAIX())
     PM.add(createAIXAsmPrinter(Out, *this));
-    break;
-  case TargetDefault:
-  case TargetDarwin:
+  else
     PM.add(createDarwinAsmPrinter(Out, *this));
-    break;
-  }
 
   PM.add(createMachineCodeDeleter());
   return false;
