Revert "Transforms: reapply SVN r219899"
This reverts commit r220811 and r220839. It made an incorrect change to
musttail handling.
llvm-svn: 221226
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index 112bdcb..a1e42bb 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -743,8 +743,7 @@
static Value *HandleByValArgument(Value *Arg, Instruction *TheCall,
const Function *CalledFunc,
InlineFunctionInfo &IFI,
- unsigned ByValAlignment,
- bool &AddedNewAllocas) {
+ unsigned ByValAlignment) {
PointerType *ArgTy = cast<PointerType>(Arg->getType());
Type *AggTy = ArgTy->getElementType();
@@ -786,7 +785,6 @@
// Uses of the argument in the function should use our new alloca
// instead.
- AddedNewAllocas = true;
return NewAlloca;
}
@@ -960,7 +958,6 @@
SmallVector<ReturnInst*, 8> Returns;
ClonedCodeInfo InlinedFunctionInfo;
Function::iterator FirstNewBlock;
- bool AddedNewAllocas = false;
{ // Scope to destroy VMap after cloning.
ValueToValueMapTy VMap;
@@ -984,8 +981,7 @@
// modify the struct.
if (CS.isByValArgument(ArgNo)) {
ActualArg = HandleByValArgument(ActualArg, TheCall, CalledFunc, IFI,
- CalledFunc->getParamAlignment(ArgNo+1),
- AddedNewAllocas);
+ CalledFunc->getParamAlignment(ArgNo+1));
if (ActualArg != *AI)
ByValInit.push_back(std::make_pair(ActualArg, (Value*) *AI));
}
@@ -1100,18 +1096,9 @@
// f -> musttail g -> tail f ==> f -> tail f
// f -> g -> musttail f ==> f -> f
// f -> g -> tail f ==> f -> f
- //
- // If an alloca was introduced in the frame due to a byval parameter
- // being passed to a subsequent call, tail calls must have the tail
- // stripped as they may not access variables in the caller's stack.
- // A single alloca ripples through out as the alloca may be aliased by
- // bitcasts or may escape and be mutated outside of the function.
CallInst::TailCallKind ChildTCK = CI->getTailCallKind();
ChildTCK = std::min(CallSiteTailKind, ChildTCK);
- if (AddedNewAllocas)
- CI->setTailCallKind(CallInst::TCK_None);
- else
- CI->setTailCallKind(ChildTCK);
+ CI->setTailCallKind(ChildTCK);
InlinedMustTailCalls |= CI->isMustTailCall();
// Calls inlined through a 'nounwind' call site should be marked