diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp
index 154832b..ef1c86d 100644
--- a/lib/Target/ARM/ARMISelLowering.cpp
+++ b/lib/Target/ARM/ARMISelLowering.cpp
@@ -1315,7 +1315,8 @@
   // this once Thumb ldmia / stmia support is added.
   unsigned Size = I->getValue();
   if (AlwaysInline ||
-      (!ST->isThumb() && Size < 64 && (Align & 3) == 0))
+      (!ST->isThumb() && Size <= Subtarget->getMaxInlineSizeThreshold() &&
+       (Align & 3) == 0))
     return LowerMEMCPYInline(ChainOp, DestOp, SourceOp, Size, Align, DAG);
   return LowerMEMCPYCall(ChainOp, DestOp, SourceOp, CountOp, DAG);
 }
diff --git a/lib/Target/ARM/ARMSubtarget.h b/lib/Target/ARM/ARMSubtarget.h
index 62367ca..5b5ee39 100644
--- a/lib/Target/ARM/ARMSubtarget.h
+++ b/lib/Target/ARM/ARMSubtarget.h
@@ -62,6 +62,7 @@
   ///
   ARMSubtarget(const Module &M, const std::string &FS, bool thumb);
 
+  unsigned getMaxInlineSizeThreshold() const { return 64; }
   /// ParseSubtargetFeatures - Parses features string setting specified 
   /// subtarget options.  Definition of function is auto generated by tblgen.
   void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp
index 17c7534..f1bf150 100644
--- a/lib/Target/X86/X86ISelLowering.cpp
+++ b/lib/Target/X86/X86ISelLowering.cpp
@@ -4332,7 +4332,7 @@
   // The libc version is likely to be faster for these cases. It can use the
   // address value and run time information about the CPU.
   if ((Align & 3) != 0 ||
-      (I && I->getValue() > Subtarget->getMinRepStrSizeThreshold())) {
+      (I && I->getValue() > Subtarget->getMaxInlineSizeThreshold())) {
     MVT::ValueType IntPtr = getPointerTy();
     const Type *IntPtrTy = getTargetData()->getIntPtrType();
     TargetLowering::ArgListTy Args; 
@@ -4510,7 +4510,7 @@
     return LowerMEMCPYCall(ChainOp, DestOp, SourceOp, CountOp, DAG);
 
   // If size is more than the threshold, call memcpy.
-  if (Size > Subtarget->getMinRepStrSizeThreshold())
+  if (Size > Subtarget->getMaxInlineSizeThreshold())
     return LowerMEMCPYCall(ChainOp, DestOp, SourceOp, CountOp, DAG);
 
   return LowerMEMCPYInline(ChainOp, DestOp, SourceOp, Size, Align, DAG);
diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp
index 51406c3..2ddf9e2 100644
--- a/lib/Target/X86/X86Subtarget.cpp
+++ b/lib/Target/X86/X86Subtarget.cpp
@@ -223,7 +223,7 @@
   , HasX86_64(false)
   , stackAlignment(8)
   // FIXME: this is a known good value for Yonah. How about others?
-  , MinRepStrSizeThreshold(128)
+  , MaxInlineSizeThreshold(128)
   , Is64Bit(is64Bit)
   , HasLow4GUserAddress(true)
   , TargetType(isELF) { // Default to ELF unless otherwise specified.
diff --git a/lib/Target/X86/X86Subtarget.h b/lib/Target/X86/X86Subtarget.h
index d939bc0..c0a4f24 100644
--- a/lib/Target/X86/X86Subtarget.h
+++ b/lib/Target/X86/X86Subtarget.h
@@ -69,9 +69,9 @@
   /// entry to the function and which must be maintained by every function.
   unsigned stackAlignment;
 
-  /// Min. memset / memcpy size that is turned into rep/movs, rep/stos ops.
+  /// Max. memset / memcpy size that is turned into rep/movs, rep/stos ops.
   ///
-  unsigned MinRepStrSizeThreshold;
+  unsigned MaxInlineSizeThreshold;
 
 private:
   /// Is64Bit - True if the processor supports 64-bit instructions and module
@@ -97,11 +97,9 @@
   /// function for this subtarget.
   unsigned getStackAlignment() const { return stackAlignment; }
 
-  /// getMinRepStrSizeThreshold - Returns the minimum memset / memcpy size
-  /// required to turn the operation into a X86 rep/movs or rep/stos
-  /// instruction. This is only used if the src / dst alignment is not DWORD
-  /// aligned.
-  unsigned getMinRepStrSizeThreshold() const { return MinRepStrSizeThreshold; }
+  /// getMaxInlineSizeThreshold - Returns the maximum memset / memcpy size
+  /// that still makes it profitable to inline the call.
+  unsigned getMaxInlineSizeThreshold() const { return MaxInlineSizeThreshold; }
 
   /// ParseSubtargetFeatures - Parses features string setting specified
   /// subtarget options.  Definition of function is auto generated by tblgen.
