mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Auto-upgrade code for multiple-value return statements. This code
isn't actually called yet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52435 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
80b9626ee3
commit
44f6a2c951
@ -35,6 +35,12 @@ namespace llvm {
|
||||
/// so that it can update all calls to the old function.
|
||||
void UpgradeCallsToIntrinsic(Function* F);
|
||||
|
||||
/// This is an auto-upgrade hook for mutiple-value return statements.
|
||||
/// This function auto-upgrades all such return statements in the given
|
||||
/// function to use aggregate return values built with insertvalue
|
||||
/// instructions.
|
||||
void UpgradeMultipleReturnValues(Function *F);
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -391,3 +391,27 @@ void llvm::UpgradeCallsToIntrinsic(Function* F) {
|
||||
}
|
||||
}
|
||||
|
||||
/// This is an auto-upgrade hook for mutiple-value return statements.
|
||||
/// This function auto-upgrades all such return statements in the given
|
||||
/// function to use aggregate return values built with insertvalue
|
||||
/// instructions.
|
||||
void llvm::UpgradeMultipleReturnValues(Function *CurrentFunction) {
|
||||
for (Function::iterator I = CurrentFunction->begin(),
|
||||
E = CurrentFunction->end(); I != E; ++I) {
|
||||
BasicBlock *BB = I;
|
||||
if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
|
||||
unsigned NumVals = RI->getNumOperands();
|
||||
if (NumVals > 1) {
|
||||
std::vector<const Type *> Types(NumVals);
|
||||
for (unsigned i = 0; i != NumVals; ++i)
|
||||
Types[i] = RI->getOperand(i)->getType();
|
||||
const Type *ReturnType = StructType::get(Types);
|
||||
Value *RV = UndefValue::get(ReturnType);
|
||||
for (unsigned i = 0; i != NumVals; ++i)
|
||||
RV = InsertValueInst::Create(RV, RI->getOperand(i), i, "mrv", RI);
|
||||
ReturnInst::Create(RV, RI);
|
||||
RI->eraseFromParent();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user