aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/CBackend/CBackend.cpp
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-04-23 21:49:29 +0000
committerDan Gohman <gohman@apple.com>2008-04-23 21:49:29 +0000
commit7661279ae0eec5be418fcd71fd5acb5e7f798d9c (patch)
tree377b92ba696fa388507a3da05ad6610b1742bcad /lib/Target/CBackend/CBackend.cpp
parent80b8f5dd6b3cc079bfe6e906fdf6da39bf7466ab (diff)
downloadexternal_llvm-7661279ae0eec5be418fcd71fd5acb5e7f798d9c.zip
external_llvm-7661279ae0eec5be418fcd71fd5acb5e7f798d9c.tar.gz
external_llvm-7661279ae0eec5be418fcd71fd5acb5e7f798d9c.tar.bz2
Initial CBE support for multiple return values.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50187 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/CBackend/CBackend.cpp')
-rw-r--r--lib/Target/CBackend/CBackend.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index e8ac954..d6ccefc 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -283,6 +283,7 @@ namespace {
void visitInsertElementInst(InsertElementInst &I);
void visitExtractElementInst(ExtractElementInst &I);
void visitShuffleVectorInst(ShuffleVectorInst &SVI);
+ void visitGetResultInst(GetResultInst &GRI);
void visitInstruction(Instruction &I) {
cerr << "C Writer does not know about " << I;
@@ -2174,6 +2175,24 @@ void CWriter::visitReturnInst(ReturnInst &I) {
return;
}
+ if (I.getNumOperands() > 1) {
+ Out << " {\n";
+ Out << " ";
+ printType(Out, I.getParent()->getParent()->getReturnType());
+ Out << " llvm_cbe_mrv_temp = {\n";
+ for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {
+ Out << " ";
+ writeOperand(I.getOperand(i));
+ if (i != e - 1)
+ Out << ",";
+ Out << "\n";
+ }
+ Out << " };\n";
+ Out << " return llvm_cbe_mrv_temp;\n";
+ Out << " }\n";
+ return;
+ }
+
Out << " return";
if (I.getNumOperands()) {
Out << ' ';
@@ -3184,6 +3203,17 @@ void CWriter::visitShuffleVectorInst(ShuffleVectorInst &SVI) {
Out << "}";
}
+void CWriter::visitGetResultInst(GetResultInst &GRI) {
+ Out << "(";
+ if (isa<UndefValue>(GRI.getOperand(0))) {
+ Out << "(";
+ printType(Out, GRI.getType());
+ Out << ") 0/*UNDEF*/";
+ } else {
+ Out << GetValueName(GRI.getOperand(0)) << ".field" << GRI.getIndex();
+ }
+ Out << ")";
+}
//===----------------------------------------------------------------------===//
// External Interface declaration