aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AsmParser
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2008-02-23 00:35:18 +0000
committerDevang Patel <dpatel@apple.com>2008-02-23 00:35:18 +0000
commit57ef4f46c182cdbe014d469892090ff50c739cf9 (patch)
treef23b0db1085ced0c14bbdf11adaec0bea64a20d2 /lib/AsmParser
parent313d4b809326f3e04814f94e5b8ae05649d8e0f6 (diff)
downloadexternal_llvm-57ef4f46c182cdbe014d469892090ff50c739cf9.zip
external_llvm-57ef4f46c182cdbe014d469892090ff50c739cf9.tar.gz
external_llvm-57ef4f46c182cdbe014d469892090ff50c739cf9.tar.bz2
To support multiple return values, now ret instruction supports multiple operands instead of one aggregate operand.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47508 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser')
-rw-r--r--lib/AsmParser/llvmAsmParser.y26
1 files changed, 3 insertions, 23 deletions
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index 9f2e5ac..b36e85c 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -2531,7 +2531,7 @@ ReturnedVal : ResolvedVal {
$$->push_back($1);
CHECK_FOR_ERROR
}
- | ReturnedVal ',' ConstVal {
+ | ReturnedVal ',' ResolvedVal {
($$=$1)->push_back($3);
CHECK_FOR_ERROR
};
@@ -2580,28 +2580,7 @@ InstructionList : InstructionList Inst {
BBTerminatorInst :
RET ReturnedVal { // Return with a result...
- if($2->size() == 1)
- $$ = new ReturnInst($2->back());
- else {
-
- std::vector<const Type*> Elements;
- std::vector<Constant*> Vals;
- for (std::vector<Value *>::iterator I = $2->begin(),
- E = $2->end(); I != E; ++I) {
- Value *V = *I;
- Constant *C = cast<Constant>(V);
- Elements.push_back(V->getType());
- Vals.push_back(C);
- }
-
- const StructType *STy = StructType::get(Elements);
- PATypeHolder *PTy =
- new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
-
- Constant *CS = ConstantStruct::get(STy, Vals); // *$2);
- $$ = new ReturnInst(CS);
- delete PTy;
- }
+ $$ = new ReturnInst(*$2);
delete $2;
CHECK_FOR_ERROR
}
@@ -3174,6 +3153,7 @@ MemoryInst : MALLOC Types OptCAlign {
if (!GetResultInst::isValidOperands(TmpVal, $5))
GEN_ERROR("Invalid getresult operands");
$$ = new GetResultInst(TmpVal, $5);
+ delete $2;
CHECK_FOR_ERROR
}
| GETELEMENTPTR Types ValueRef IndexList {