Enable first-class aggregates support.

Remove the GetResultInst instruction. It is still accepted in LLVM assembly
and bitcode, where it is now auto-upgraded to ExtractValueInst. Also, remove
support for return instructions with multiple values. These are auto-upgraded
to use InsertValueInst instructions.

The IRBuilder still accepts multiple-value returns, and auto-upgrades them
to InsertValueInst instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53941 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman
2008-07-23 00:34:11 +00:00
parent 5e6ebaf4d1
commit fc74abfba5
29 changed files with 167 additions and 558 deletions

View File

@@ -102,7 +102,15 @@ public:
}
ReturnInst *CreateRet(Value * const* retVals, unsigned N) {
return Insert(ReturnInst::Create(retVals, N));
const Type *RetType = BB->getParent()->getReturnType();
if (N == 0 && RetType == Type::VoidTy)
return CreateRetVoid();
if (N == 1 && retVals[0]->getType() == RetType)
return Insert(ReturnInst::Create(retVals[0]));
Value *V = UndefValue::get(RetType);
for (unsigned i = 0; i != N; ++i)
V = CreateInsertValue(V, retVals[i], i, "mrv");
return Insert(ReturnInst::Create(V));
}
/// CreateBr - Create an unconditional 'br label X' instruction.
@@ -568,11 +576,6 @@ public:
return Insert(new ShuffleVectorInst(V1, V2, Mask), Name);
}
GetResultInst *CreateGetResult(Value *V, unsigned Index,
const char *Name = "") {
return Insert(new GetResultInst(V, Index), Name);
}
Value *CreateExtractValue(Value *Agg, unsigned Idx,
const char *Name = "") {
if (Constant *AggC = dyn_cast<Constant>(Agg))