[llvm-commits] [llvm] r47472 - /llvm/trunk/lib/VMCore/AsmWriter.cpp

Devang Patel dpatel at apple.com
Thu Feb 21 18:50:50 PST 2008


Author: dpatel
Date: Thu Feb 21 20:50:49 2008
New Revision: 47472

URL: http://llvm.org/viewvc/llvm-project?rev=47472&view=rev
Log:
Print ret instruction that returns aggregates.

Modified:
    llvm/trunk/lib/VMCore/AsmWriter.cpp

Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=47472&r1=47471&r2=47472&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/AsmWriter.cpp (original)
+++ llvm/trunk/lib/VMCore/AsmWriter.cpp Thu Feb 21 20:50:49 2008
@@ -1291,8 +1291,23 @@
       writeOperand(I.getOperand(op  ), false); Out << ',';
       writeOperand(I.getOperand(op+1), false); Out << " ]";
     }
-  } else if (isa<ReturnInst>(I) && !Operand) {
-    Out << " void";
+  } else if (isa<ReturnInst>(I)) {
+    if (!Operand)
+      Out << " void";
+    else {
+      if (I.getOperand(0)->getType()->isFirstClassType())
+        writeOperand(I.getOperand(0), true);
+      else {
+        Constant *ROp = cast<Constant>(I.getOperand(0));
+        const StructType *STy = cast<StructType>(ROp->getType());
+        unsigned NumElems = STy->getNumElements();
+        for (unsigned i = 0; i < NumElems; ++i) {
+          if (i)
+            Out << ",";
+          writeOperand(ROp->getOperand(i), true);
+        }
+      }
+    }
   } else if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
     // Print the calling convention being used.
     switch (CI->getCallingConv()) {





More information about the llvm-commits mailing list