diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp
index 794d7cb..8d80a49 100644
--- a/lib/CodeGen/CGStmt.cpp
+++ b/lib/CodeGen/CGStmt.cpp
@@ -860,6 +860,29 @@
   return Result;
 }
 
+llvm::Value* CodeGenFunction::EmitAsmInput(const AsmStmt &S,
+                                           TargetInfo::ConstraintInfo Info, 
+                                           const Expr *InputExpr,
+                                           std::string &ConstraintStr)
+{
+  llvm::Value *Arg;
+  if ((Info & TargetInfo::CI_AllowsRegister) ||
+      !(Info & TargetInfo::CI_AllowsMemory)) {      
+    if (ConvertType(InputExpr->getType())->isSingleValueType()) {
+      Arg = EmitScalarExpr(InputExpr);
+    } else {
+      ErrorUnsupported(&S,
+                       "asm statement passing multiple-value types as inputs");
+    }
+  } else {
+    LValue Dest = EmitLValue(InputExpr);
+    Arg = Dest.getAddress();
+    ConstraintStr += '*';
+  }
+  
+  return Arg;
+}
+
 void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
   bool Failed;
   std::string AsmString = 
@@ -916,24 +939,10 @@
     }
     
     if (Info & TargetInfo::CI_ReadWrite) {
-      // FIXME: This code should be shared with the code that handles inputs.
       InOutConstraints += ',';
-      
+
       const Expr *InputExpr = S.getOutputExpr(i);
-      llvm::Value *Arg;
-      if ((Info & TargetInfo::CI_AllowsRegister) ||
-          !(Info & TargetInfo::CI_AllowsMemory)) {      
-        if (ConvertType(InputExpr->getType())->isSingleValueType()) {
-          Arg = EmitScalarExpr(InputExpr);
-        } else {
-          ErrorUnsupported(&S,
-                      "asm statement passing multiple-value types as inputs");
-        }
-      } else {
-        LValue Dest = EmitLValue(InputExpr);
-        Arg = Dest.getAddress();
-        InOutConstraints += '*';
-      }
+      llvm::Value *Arg = EmitAsmInput(S, Info, InputExpr, InOutConstraints);
       
       InOutArgTypes.push_back(Arg->getType());
       InOutArgs.push_back(Arg);
@@ -960,21 +969,7 @@
     // Simplify the input constraint.
     InputConstraint = SimplifyConstraint(InputConstraint.c_str(), Target);
 
-    llvm::Value *Arg;
-    
-    if ((Info & TargetInfo::CI_AllowsRegister) ||
-        !(Info & TargetInfo::CI_AllowsMemory)) {      
-      if (ConvertType(InputExpr->getType())->isSingleValueType()) {
-        Arg = EmitScalarExpr(InputExpr);
-      } else {
-        ErrorUnsupported(&S,
-                        "asm statement passing multiple-value types as inputs");
-      }
-    } else {
-      LValue Dest = EmitLValue(InputExpr);
-      Arg = Dest.getAddress();
-      Constraints += '*';
-    }
+    llvm::Value *Arg = EmitAsmInput(S, Info, InputExpr, Constraints);
     
     ArgTypes.push_back(Arg->getType());
     Args.push_back(Arg);
