Allow asms to return multiple results by value.
authorChris Lattner <sabre@nondot.org>
Sun, 27 Apr 2008 23:33:55 +0000 (23:33 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 27 Apr 2008 23:33:55 +0000 (23:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50328 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/InlineAsm.cpp

index e49bb6dc8fba2fca31ec2c84aa91be7a69388bd3..d563e9557a6a234b3600293219dedc8d58afb358 100644 (file)
@@ -202,11 +202,20 @@ bool InlineAsm::Verify(const FunctionType *Ty, const std::string &ConstStr) {
       break;
     }
   }
-    
-  if (NumOutputs > 1) return false;  // Only one result allowed so far.
   
-  if ((Ty->getReturnType() != Type::VoidTy) != NumOutputs)
-    return false;   // NumOutputs = 1 iff has a result type.
+  switch (NumOutputs) {
+  case 0:
+    if (Ty->getReturnType() != Type::VoidTy) return false;
+    break;
+  case 1:
+    if (isa<StructType>(Ty->getReturnType())) return false;
+    break;
+  default:
+    const StructType *STy = dyn_cast<StructType>(Ty->getReturnType());
+    if (STy == 0 || STy->getNumElements() != NumOutputs)
+      return false;
+    break;
+  }      
   
   if (Ty->getNumParams() != NumInputs) return false;
   return true;