diff --git a/lib/ExecutionEngine/JIT/TargetSelect.cpp b/lib/ExecutionEngine/JIT/TargetSelect.cpp
index 851b4b4..5b1ee74 100644
--- a/lib/ExecutionEngine/JIT/TargetSelect.cpp
+++ b/lib/ExecutionEngine/JIT/TargetSelect.cpp
@@ -15,6 +15,7 @@
 #include "JIT.h"
 #include "llvm/Module.h"
 #include "llvm/ModuleProvider.h"
+#include "llvm/Target/SubtargetFeature.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/TargetMachineRegistry.h"
 #include <iostream>
@@ -23,6 +24,18 @@
 static cl::opt<const TargetMachineRegistry::Entry*, false, TargetNameParser>
 MArch("march", cl::desc("Architecture to generate assembly for:"));
 
+static cl::opt<std::string>
+MCPU("mcpu", 
+  cl::desc("Target a specific cpu type"),
+  cl::value_desc("cpu-name"),
+  cl::init(""));
+
+static cl::list<std::string>
+MAttrs("mattr", 
+  cl::CommaSeparated,
+  cl::desc("Target specific attributes:"),
+  cl::value_desc("attributes"));
+
 /// create - Create an return a new JIT compiler if there is one available
 /// for the current target.  Otherwise, return null.
 ///
@@ -37,8 +50,18 @@
               << "-march switch.\n";
   }
 
+  // Package up features to be passed to target/subtarget
+  std::string FeaturesStr;
+  if (MCPU.size() || MAttrs.size()) {
+    SubtargetFeatures Features;
+    Features.setCPU(MCPU);
+    for (unsigned i = 0; i != MAttrs.size(); ++i)
+      Features.AddFeature(MAttrs[i]);
+    FeaturesStr = Features.getString();
+  }
+
   // Allocate a target...
-  TargetMachine *Target = MArch->CtorFn(*MP->getModule(), IL);
+  TargetMachine *Target = MArch->CtorFn(*MP->getModule(), IL, FeaturesStr);
   assert(Target && "Could not allocate target machine!");
 
   // If the target supports JIT code generation, return a new JIT now.
diff --git a/lib/Target/Alpha/AlphaTargetMachine.cpp b/lib/Target/Alpha/AlphaTargetMachine.cpp
index 0854f2a..b20cfd3 100644
--- a/lib/Target/Alpha/AlphaTargetMachine.cpp
+++ b/lib/Target/Alpha/AlphaTargetMachine.cpp
@@ -58,7 +58,8 @@
 #endif
 }
 
-AlphaTargetMachine::AlphaTargetMachine( const Module &M, IntrinsicLowering *IL)
+AlphaTargetMachine::AlphaTargetMachine(const Module &M, IntrinsicLowering *IL,
+                                       const std::string &FS)
   : TargetMachine("alpha", IL, true),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0),
     JITInfo(*this)
diff --git a/lib/Target/Alpha/AlphaTargetMachine.h b/lib/Target/Alpha/AlphaTargetMachine.h
index b7f824e..4de729a 100644
--- a/lib/Target/Alpha/AlphaTargetMachine.h
+++ b/lib/Target/Alpha/AlphaTargetMachine.h
@@ -31,7 +31,8 @@
   AlphaJITInfo JITInfo;
 
 public:
-  AlphaTargetMachine(const Module &M, IntrinsicLowering *IL);
+  AlphaTargetMachine(const Module &M, IntrinsicLowering *IL,
+                     const std::string &FS);
 
   virtual const AlphaInstrInfo *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/CBackend/CTargetMachine.h b/lib/Target/CBackend/CTargetMachine.h
index 56c5367..580e02e 100644
--- a/lib/Target/CBackend/CTargetMachine.h
+++ b/lib/Target/CBackend/CTargetMachine.h
@@ -20,7 +20,8 @@
 class IntrinsicLowering;
 
 struct CTargetMachine : public TargetMachine {
-  CTargetMachine(const Module &M, IntrinsicLowering *IL) :
+  CTargetMachine(const Module &M, IntrinsicLowering *IL,
+                 const std::string &FS) :
     TargetMachine("CBackend", IL, M) {}
 
   // This is the only thing that actually does anything here.
diff --git a/lib/Target/IA64/IA64TargetMachine.cpp b/lib/Target/IA64/IA64TargetMachine.cpp
index 6a7ae6e..7d80e57 100644
--- a/lib/Target/IA64/IA64TargetMachine.cpp
+++ b/lib/Target/IA64/IA64TargetMachine.cpp
@@ -72,7 +72,8 @@
 
 /// IA64TargetMachine ctor - Create an LP64 architecture model
 ///
-IA64TargetMachine::IA64TargetMachine(const Module &M, IntrinsicLowering *IL)
+IA64TargetMachine::IA64TargetMachine(const Module &M, IntrinsicLowering *IL,
+                                     const std::string &FS)
   : TargetMachine("IA64", IL, true),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0) { // FIXME? check this stuff
 }
diff --git a/lib/Target/IA64/IA64TargetMachine.h b/lib/Target/IA64/IA64TargetMachine.h
index ed80828..df6e4df 100644
--- a/lib/Target/IA64/IA64TargetMachine.h
+++ b/lib/Target/IA64/IA64TargetMachine.h
@@ -27,7 +27,8 @@
   TargetFrameInfo FrameInfo;
   //IA64JITInfo      JITInfo;
 public:
-  IA64TargetMachine(const Module &M, IntrinsicLowering *IL);
+  IA64TargetMachine(const Module &M, IntrinsicLowering *IL,
+                    const std::string &FS);
 
   virtual const IA64InstrInfo     *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/PowerPC/PPCSubtarget.cpp b/lib/Target/PowerPC/PPCSubtarget.cpp
index 686c11c..2c1b783 100644
--- a/lib/Target/PowerPC/PPCSubtarget.cpp
+++ b/lib/Target/PowerPC/PPCSubtarget.cpp
@@ -15,6 +15,8 @@
 #include "PowerPC.h"
 #include "llvm/Module.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Target/SubtargetFeature.h"
+
 using namespace llvm;
 PPCTargetEnum llvm::PPCTarget = TargetDefault;
 
@@ -30,42 +32,112 @@
                              cl::desc("Enable optimizations for GP cpus"));
 }
 
+enum PowerPCFeature {
+  PowerPCFeature64Bit   = 1 << 0,
+  PowerPCFeatureAltivec = 1 << 1,
+  PowerPCFeatureFSqrt   = 1 << 2,
+  PowerPCFeatureGPUL    = 1 << 3,
+};
+
+/// Sorted (by key) array of values for CPU subtype.
+static const SubtargetFeatureKV PowerPCSubTypeKV[] = {
+  { "601"    , 0 },
+  { "602"    , 0 },
+  { "603"    , 0 },
+  { "603e"   , 0 },
+  { "603ev"  , 0 },
+  { "604"    , 0 },
+  { "604e"   , 0 },
+  { "620"    , 0 },
+  { "7400"   , PowerPCFeatureAltivec },
+  { "7450"   , PowerPCFeatureAltivec },
+  { "750"    , 0 },
+  { "970"    , PowerPCFeature64Bit | PowerPCFeatureAltivec |
+               PowerPCFeatureFSqrt | PowerPCFeatureGPUL },
+  { "g3"     , 0 },
+  { "g4"     , PowerPCFeatureAltivec },
+  { "g4+"    , PowerPCFeatureAltivec },
+  { "g5"     , PowerPCFeature64Bit | PowerPCFeatureAltivec |
+               PowerPCFeatureFSqrt | PowerPCFeatureGPUL },
+  { "generic", 0 }
+};
+/// Length of PowerPCSubTypeKV.
+static const unsigned PowerPCSubTypeKVSize = sizeof(PowerPCSubTypeKV)
+                                             / sizeof(SubtargetFeatureKV);
+
+/// Sorted (by key) array of values for CPU features.
+static SubtargetFeatureKV PowerPCFeatureKV[] = {
+  { "64bit"  , PowerPCFeature64Bit   },
+  { "altivec", PowerPCFeatureAltivec },
+  { "fsqrt"  , PowerPCFeatureFSqrt },
+  { "gpul"   , PowerPCFeatureGPUL    }
+ };
+/// Length of PowerPCFeatureKV.
+static const unsigned PowerPCFeatureKVSize = sizeof(PowerPCFeatureKV)
+                                          / sizeof(SubtargetFeatureKV);
+
+
 #if defined(__APPLE__)
 #include <mach/mach.h>
 #include <mach/mach_host.h>
 #include <mach/host_info.h>
 #include <mach/machine.h>
 
-static boolean_t IsGP() {
+/// GetCurrentPowerPCFeatures - Returns the current CPUs features.
+static const char *GetCurrentPowerPCCPU() {
   host_basic_info_data_t hostInfo;
   mach_msg_type_number_t infoCount;
 
   infoCount = HOST_BASIC_INFO_COUNT;
   host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, 
             &infoCount);
+            
+  if (hostInfo.cpu_type != CPU_TYPE_POWERPC) return "generic";
+
+  switch(hostInfo.cpu_subtype) {
+  case CPU_SUBTYPE_POWERPC_601:   return "601";
+  case CPU_SUBTYPE_POWERPC_602:   return "602";
+  case CPU_SUBTYPE_POWERPC_603:   return "603";
+  case CPU_SUBTYPE_POWERPC_603e:  return "603e";
+  case CPU_SUBTYPE_POWERPC_603ev: return "603ev";
+  case CPU_SUBTYPE_POWERPC_604:   return "604";
+  case CPU_SUBTYPE_POWERPC_604e:  return "604e";
+  case CPU_SUBTYPE_POWERPC_620:   return "620";
+  case CPU_SUBTYPE_POWERPC_750:   return "750";
+  case CPU_SUBTYPE_POWERPC_7400:  return "7400";
+  case CPU_SUBTYPE_POWERPC_7450:  return "7450";
+  case CPU_SUBTYPE_POWERPC_970:   return "970";
+  default: ;
+  }
   
-  return ((hostInfo.cpu_type == CPU_TYPE_POWERPC) &&
-          (hostInfo.cpu_subtype == CPU_SUBTYPE_POWERPC_970));
-} 
+  return "generic";
+}
 #endif
 
-PPCSubtarget::PPCSubtarget(const Module &M)
+PPCSubtarget::PPCSubtarget(const Module &M, const std::string &FS)
   : StackAlignment(16), IsGigaProcessor(false), IsAIX(false), IsDarwin(false) {
 
-    // Set the boolean corresponding to the current target triple, or the default
+  // Determine default and user specified characteristics
+  std::string CPU;
+#if defined(__APPLE__)
+  CPU = GetCurrentPowerPCCPU();
+#endif
+  uint32_t Bits =
+  SubtargetFeatures::Parse(FS, CPU,
+                           PowerPCSubTypeKV, PowerPCSubTypeKVSize,
+                           PowerPCFeatureKV, PowerPCFeatureKVSize);
+  IsGigaProcessor = (Bits & PowerPCFeatureGPUL) != 0;
+
+  // Set the boolean corresponding to the current target triple, or the default
   // if one cannot be determined, to true.
   const std::string& TT = M.getTargetTriple();
   if (TT.length() > 5) {
     IsDarwin = TT.find("darwin") != std::string::npos;
-#if defined(__APPLE__)
-    IsGigaProcessor = IsGP();
-#endif
   } else if (TT.empty()) {
 #if defined(_POWER)
     IsAIX = true;
 #elif defined(__APPLE__)
     IsDarwin = true;
-    IsGigaProcessor = IsGP();
 #endif
   }
   
diff --git a/lib/Target/PowerPC/PPCSubtarget.h b/lib/Target/PowerPC/PPCSubtarget.h
index 60308f0..aaf07f9 100644
--- a/lib/Target/PowerPC/PPCSubtarget.h
+++ b/lib/Target/PowerPC/PPCSubtarget.h
@@ -16,6 +16,8 @@
 
 #include "llvm/Target/TargetSubtarget.h"
 
+#include <string>
+
 namespace llvm {
 class Module;
 
@@ -33,7 +35,7 @@
   /// This constructor initializes the data members to match that
   /// of the specified module.
   ///
-  PPCSubtarget(const Module &M);
+  PPCSubtarget(const Module &M, const std::string &FS);
 
   /// getStackAlignment - Returns the minimum alignment known to hold of the
   /// stack frame on entry to the function and which must be maintained by every
diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
index 936629a..8ff9d8b 100644
--- a/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ b/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -43,9 +43,10 @@
 PowerPCTargetMachine::PowerPCTargetMachine(const std::string &name,
                                            IntrinsicLowering *IL,
                                            const Module &M,
+                                           const std::string &FS,
                                            const TargetData &TD,
                                            const PowerPCFrameInfo &TFI)
-: TargetMachine(name, IL, TD), FrameInfo(TFI), Subtarget(M) {
+: TargetMachine(name, IL, TD), FrameInfo(TFI), Subtarget(M, FS) {
   if (TargetDefault == PPCTarget) {
     if (Subtarget.isAIX()) PPCTarget = TargetAIX;
     if (Subtarget.isDarwin()) PPCTarget = TargetDarwin;
@@ -154,8 +155,9 @@
 
 /// PowerPCTargetMachine ctor - Create an ILP32 architecture model
 ///
-PPC32TargetMachine::PPC32TargetMachine(const Module &M, IntrinsicLowering *IL)
-  : PowerPCTargetMachine(PPC32ID, IL, M,
+PPC32TargetMachine::PPC32TargetMachine(const Module &M, IntrinsicLowering *IL,
+                                       const std::string &FS)
+  : PowerPCTargetMachine(PPC32ID, IL, M, FS,
                          TargetData(PPC32ID,false,4,4,4,4,4,4,2,1,1),
                          PowerPCFrameInfo(*this, false)), JITInfo(*this) {}
 
diff --git a/lib/Target/PowerPC/PPCTargetMachine.h b/lib/Target/PowerPC/PPCTargetMachine.h
index 9b16713..902abb0 100644
--- a/lib/Target/PowerPC/PPCTargetMachine.h
+++ b/lib/Target/PowerPC/PPCTargetMachine.h
@@ -28,7 +28,8 @@
   PPC32JITInfo JITInfo;
 
 public:
-  PPC32TargetMachine(const Module &M, IntrinsicLowering *IL);
+  PPC32TargetMachine(const Module &M, IntrinsicLowering *IL,
+                     const std::string &FS);
   virtual const PPC32InstrInfo   *getInstrInfo() const { return &InstrInfo; }
   virtual const MRegisterInfo *getRegisterInfo() const {
     return &InstrInfo.getRegisterInfo();
diff --git a/lib/Target/PowerPC/PowerPCTargetMachine.h b/lib/Target/PowerPC/PowerPCTargetMachine.h
index 4a92acf..0c12f30 100644
--- a/lib/Target/PowerPC/PowerPCTargetMachine.h
+++ b/lib/Target/PowerPC/PowerPCTargetMachine.h
@@ -30,7 +30,8 @@
   PPCSubtarget      Subtarget;
 protected:
   PowerPCTargetMachine(const std::string &name, IntrinsicLowering *IL,
-                       const Module &M, const TargetData &TD, 
+                       const Module &M, const std::string &FS,
+                       const TargetData &TD, 
                        const PowerPCFrameInfo &TFI);
 public:
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/Skeleton/SkeletonTargetMachine.cpp b/lib/Target/Skeleton/SkeletonTargetMachine.cpp
index 8b7a8db..df27b77 100644
--- a/lib/Target/Skeleton/SkeletonTargetMachine.cpp
+++ b/lib/Target/Skeleton/SkeletonTargetMachine.cpp
@@ -29,7 +29,8 @@
 /// SkeletonTargetMachine ctor - Create an ILP32 architecture model
 ///
 SkeletonTargetMachine::SkeletonTargetMachine(const Module &M,
-                                           IntrinsicLowering *IL)
+                                           IntrinsicLowering *IL,
+                                           const std::string &FS)
   : TargetMachine("Skeleton", IL, true, 4, 4, 4, 4, 4),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 8, -4), JITInfo(*this) {
 }
diff --git a/lib/Target/Skeleton/SkeletonTargetMachine.h b/lib/Target/Skeleton/SkeletonTargetMachine.h
index 0480a6e..0607b6f 100644
--- a/lib/Target/Skeleton/SkeletonTargetMachine.h
+++ b/lib/Target/Skeleton/SkeletonTargetMachine.h
@@ -28,7 +28,8 @@
     TargetFrameInfo FrameInfo;
     SkeletonJITInfo JITInfo;
   public:
-    SkeletonTargetMachine(const Module &M, IntrinsicLowering *IL);
+    SkeletonTargetMachine(const Module &M, IntrinsicLowering *IL,
+                          const std::string &FS);
 
     virtual const SkeletonInstrInfo *getInstrInfo() const { return &InstrInfo; }
     virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/Sparc/SparcTargetMachine.cpp b/lib/Target/Sparc/SparcTargetMachine.cpp
index 75c095c..54895fe 100644
--- a/lib/Target/Sparc/SparcTargetMachine.cpp
+++ b/lib/Target/Sparc/SparcTargetMachine.cpp
@@ -31,7 +31,8 @@
 /// SparcV8TargetMachine ctor - Create an ILP32 architecture model
 ///
 SparcV8TargetMachine::SparcV8TargetMachine(const Module &M,
-                                           IntrinsicLowering *IL)
+                                           IntrinsicLowering *IL,
+                                           const std::string &FS)
   : TargetMachine("SparcV8", IL, false, 4, 4),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0), JITInfo(*this) {
 }
diff --git a/lib/Target/Sparc/SparcTargetMachine.h b/lib/Target/Sparc/SparcTargetMachine.h
index 47218e7..3ec07a3 100644
--- a/lib/Target/Sparc/SparcTargetMachine.h
+++ b/lib/Target/Sparc/SparcTargetMachine.h
@@ -30,7 +30,8 @@
   TargetFrameInfo FrameInfo;
   SparcV8JITInfo JITInfo;
 public:
-  SparcV8TargetMachine(const Module &M, IntrinsicLowering *IL);
+  SparcV8TargetMachine(const Module &M, IntrinsicLowering *IL,
+                       const std::string &FS);
 
   virtual const SparcV8InstrInfo *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/SparcV8/SparcV8TargetMachine.cpp b/lib/Target/SparcV8/SparcV8TargetMachine.cpp
index 75c095c..54895fe 100644
--- a/lib/Target/SparcV8/SparcV8TargetMachine.cpp
+++ b/lib/Target/SparcV8/SparcV8TargetMachine.cpp
@@ -31,7 +31,8 @@
 /// SparcV8TargetMachine ctor - Create an ILP32 architecture model
 ///
 SparcV8TargetMachine::SparcV8TargetMachine(const Module &M,
-                                           IntrinsicLowering *IL)
+                                           IntrinsicLowering *IL,
+                                           const std::string &FS)
   : TargetMachine("SparcV8", IL, false, 4, 4),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0), JITInfo(*this) {
 }
diff --git a/lib/Target/SparcV8/SparcV8TargetMachine.h b/lib/Target/SparcV8/SparcV8TargetMachine.h
index 47218e7..3ec07a3 100644
--- a/lib/Target/SparcV8/SparcV8TargetMachine.h
+++ b/lib/Target/SparcV8/SparcV8TargetMachine.h
@@ -30,7 +30,8 @@
   TargetFrameInfo FrameInfo;
   SparcV8JITInfo JITInfo;
 public:
-  SparcV8TargetMachine(const Module &M, IntrinsicLowering *IL);
+  SparcV8TargetMachine(const Module &M, IntrinsicLowering *IL,
+                       const std::string &FS);
 
   virtual const SparcV8InstrInfo *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
diff --git a/lib/Target/SparcV9/SparcV9TargetMachine.cpp b/lib/Target/SparcV9/SparcV9TargetMachine.cpp
index fb12f18..9e86a75 100644
--- a/lib/Target/SparcV9/SparcV9TargetMachine.cpp
+++ b/lib/Target/SparcV9/SparcV9TargetMachine.cpp
@@ -148,7 +148,8 @@
 
 
 SparcV9TargetMachine::SparcV9TargetMachine(const Module &M,
-                                           IntrinsicLowering *il)
+                                           IntrinsicLowering *il,
+                                           const std::string &FS)
   : TargetMachine("UltraSparcV9-Native", il, false),
     schedInfo(*this),
     regInfo(*this),
diff --git a/lib/Target/SparcV9/SparcV9TargetMachine.h b/lib/Target/SparcV9/SparcV9TargetMachine.h
index cde7199..9f40339 100644
--- a/lib/Target/SparcV9/SparcV9TargetMachine.h
+++ b/lib/Target/SparcV9/SparcV9TargetMachine.h
@@ -32,7 +32,8 @@
   SparcV9FrameInfo frameInfo;
   SparcV9JITInfo   jitInfo;
 public:
-  SparcV9TargetMachine(const Module &M, IntrinsicLowering *IL);
+  SparcV9TargetMachine(const Module &M, IntrinsicLowering *IL,
+                       const std::string &FS);
 
   virtual const TargetInstrInfo  *getInstrInfo() const { return &instrInfo; }
   virtual const TargetSchedInfo  *getSchedInfo() const { return &schedInfo; }
diff --git a/lib/Target/TargetMachineRegistry.cpp b/lib/Target/TargetMachineRegistry.cpp
index f753a8c..f5bd035 100644
--- a/lib/Target/TargetMachineRegistry.cpp
+++ b/lib/Target/TargetMachineRegistry.cpp
@@ -26,7 +26,8 @@
 static TargetRegistrationListener *Listeners = 0;
 
 TargetMachineRegistry::Entry::Entry(const char *N, const char *SD,
-                       TargetMachine *(*CF)(const Module &, IntrinsicLowering*),
+                       TargetMachine *(*CF)(const Module &, IntrinsicLowering*,
+                                            const std::string &),
                            unsigned (*MMF)(const Module &M), unsigned (*JMF)())
   : Name(N), ShortDesc(SD), CtorFn(CF), ModuleMatchQualityFn(MMF),
     JITMatchQualityFn(JMF), Next(List) {
diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp
index ed8b871..7a4a178 100644
--- a/lib/Target/X86/X86Subtarget.cpp
+++ b/lib/Target/X86/X86Subtarget.cpp
@@ -15,7 +15,7 @@
 #include "llvm/Module.h"
 using namespace llvm;
 
-X86Subtarget::X86Subtarget(const Module &M)
+X86Subtarget::X86Subtarget(const Module &M, const std::string &FS)
   : TargetSubtarget(), stackAlignment(8),
     indirectExternAndWeakGlobals(false), asmDarwinLinkerStubs(false),
     asmLeadingUnderscore(false), asmAlignmentIsInBytes(false),
diff --git a/lib/Target/X86/X86Subtarget.h b/lib/Target/X86/X86Subtarget.h
index bf764d3..adbc7cb 100644
--- a/lib/Target/X86/X86Subtarget.h
+++ b/lib/Target/X86/X86Subtarget.h
@@ -16,6 +16,8 @@
 
 #include "llvm/Target/TargetSubtarget.h"
 
+#include <string>
+
 namespace llvm {
 class Module;
 
@@ -39,7 +41,7 @@
   /// This constructor initializes the data members to match that
   /// of the specified module.
   ///
-  X86Subtarget(const Module &M);
+  X86Subtarget(const Module &M, const std::string &FS);
 
   /// getStackAlignment - Returns the minimum alignment known to hold of the
   /// stack frame on entry to the function and which must be maintained by every
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp
index e5a4fc8..29ff15f 100644
--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -90,9 +90,11 @@
 
 /// X86TargetMachine ctor - Create an ILP32 architecture model
 ///
-X86TargetMachine::X86TargetMachine(const Module &M, IntrinsicLowering *IL)
+X86TargetMachine::X86TargetMachine(const Module &M,
+                                  IntrinsicLowering *IL,
+                                  const std::string &FS)
   : TargetMachine("X86", IL, true, 4, 4, 4, 4, 4),
-    Subtarget(M),
+    Subtarget(M, FS),
     FrameInfo(TargetFrameInfo::StackGrowsDown,
               Subtarget.getStackAlignment(), -4),
     JITInfo(*this) {
diff --git a/lib/Target/X86/X86TargetMachine.h b/lib/Target/X86/X86TargetMachine.h
index 955f855..333d655 100644
--- a/lib/Target/X86/X86TargetMachine.h
+++ b/lib/Target/X86/X86TargetMachine.h
@@ -30,7 +30,8 @@
   TargetFrameInfo FrameInfo;
   X86JITInfo      JITInfo;
 public:
-  X86TargetMachine(const Module &M, IntrinsicLowering *IL);
+  X86TargetMachine(const Module &M, IntrinsicLowering *IL,
+                   const std::string &FS);
 
   virtual const X86InstrInfo     *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
