1 //===-- DeadArgumentElimination.cpp - Eliminate dead arguments ------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This pass deletes dead arguments from internal functions. Dead argument
11 // elimination removes arguments which are directly dead, as well as arguments
12 // only passed into function calls as dead arguments of other functions. This
13 // pass also deletes dead return values in a similar way.
15 // This pass is often useful as a cleanup pass to run after aggressive
16 // interprocedural passes, which add possibly-dead arguments or return values.
18 //===----------------------------------------------------------------------===//
20 #define DEBUG_TYPE "deadargelim"
21 #include "llvm/Transforms/IPO.h"
22 #include "llvm/CallingConv.h"
23 #include "llvm/Constant.h"
24 #include "llvm/DerivedTypes.h"
25 #include "llvm/Instructions.h"
26 #include "llvm/IntrinsicInst.h"
27 #include "llvm/LLVMContext.h"
28 #include "llvm/Module.h"
29 #include "llvm/Pass.h"
30 #include "llvm/Support/CallSite.h"
31 #include "llvm/Support/Debug.h"
32 #include "llvm/Support/raw_ostream.h"
33 #include "llvm/ADT/SmallVector.h"
34 #include "llvm/ADT/Statistic.h"
35 #include "llvm/ADT/StringExtras.h"
36 #include "llvm/Support/Compiler.h"
41 STATISTIC(NumArgumentsEliminated
, "Number of unread args removed");
42 STATISTIC(NumRetValsEliminated
, "Number of unused return values removed");
45 /// DAE - The dead argument elimination pass.
47 class VISIBILITY_HIDDEN DAE
: public ModulePass
{
50 /// Struct that represents (part of) either a return value or a function
51 /// argument. Used so that arguments and return values can be used
54 RetOrArg(const Function
* F
, unsigned Idx
, bool IsArg
) : F(F
), Idx(Idx
),
60 /// Make RetOrArg comparable, so we can put it into a map.
61 bool operator<(const RetOrArg
&O
) const {
64 else if (Idx
!= O
.Idx
)
67 return IsArg
< O
.IsArg
;
70 /// Make RetOrArg comparable, so we can easily iterate the multimap.
71 bool operator==(const RetOrArg
&O
) const {
72 return F
== O
.F
&& Idx
== O
.Idx
&& IsArg
== O
.IsArg
;
75 std::string
getDescription() const {
76 return std::string((IsArg
? "Argument #" : "Return value #"))
77 + utostr(Idx
) + " of function " + F
->getNameStr();
81 /// Liveness enum - During our initial pass over the program, we determine
82 /// that things are either alive or maybe alive. We don't mark anything
83 /// explicitly dead (even if we know they are), since anything not alive
84 /// with no registered uses (in Uses) will never be marked alive and will
85 /// thus become dead in the end.
86 enum Liveness
{ Live
, MaybeLive
};
88 /// Convenience wrapper
89 RetOrArg
CreateRet(const Function
*F
, unsigned Idx
) {
90 return RetOrArg(F
, Idx
, false);
92 /// Convenience wrapper
93 RetOrArg
CreateArg(const Function
*F
, unsigned Idx
) {
94 return RetOrArg(F
, Idx
, true);
97 typedef std::multimap
<RetOrArg
, RetOrArg
> UseMap
;
98 /// This maps a return value or argument to any MaybeLive return values or
99 /// arguments it uses. This allows the MaybeLive values to be marked live
100 /// when any of its users is marked live.
101 /// For example (indices are left out for clarity):
102 /// - Uses[ret F] = ret G
103 /// This means that F calls G, and F returns the value returned by G.
104 /// - Uses[arg F] = ret G
105 /// This means that some function calls G and passes its result as an
107 /// - Uses[ret F] = arg F
108 /// This means that F returns one of its own arguments.
109 /// - Uses[arg F] = arg G
110 /// This means that G calls F and passes one of its own (G's) arguments
114 typedef std::set
<RetOrArg
> LiveSet
;
115 typedef std::set
<const Function
*> LiveFuncSet
;
117 /// This set contains all values that have been determined to be live.
119 /// This set contains all values that are cannot be changed in any way.
120 LiveFuncSet LiveFunctions
;
122 typedef SmallVector
<RetOrArg
, 5> UseVector
;
125 static char ID
; // Pass identification, replacement for typeid
126 DAE() : ModulePass(&ID
) {}
127 bool runOnModule(Module
&M
);
129 virtual bool ShouldHackArguments() const { return false; }
132 Liveness
MarkIfNotLive(RetOrArg Use
, UseVector
&MaybeLiveUses
);
133 Liveness
SurveyUse(Value::use_iterator U
, UseVector
&MaybeLiveUses
,
134 unsigned RetValNum
= 0);
135 Liveness
SurveyUses(Value
*V
, UseVector
&MaybeLiveUses
);
137 void SurveyFunction(Function
&F
);
138 void MarkValue(const RetOrArg
&RA
, Liveness L
,
139 const UseVector
&MaybeLiveUses
);
140 void MarkLive(const RetOrArg
&RA
);
141 void MarkLive(const Function
&F
);
142 void PropagateLiveness(const RetOrArg
&RA
);
143 bool RemoveDeadStuffFromFunction(Function
*F
);
144 bool DeleteDeadVarargs(Function
&Fn
);
150 static RegisterPass
<DAE
>
151 X("deadargelim", "Dead Argument Elimination");
154 /// DAH - DeadArgumentHacking pass - Same as dead argument elimination, but
155 /// deletes arguments to functions which are external. This is only for use
157 struct DAH
: public DAE
{
159 virtual bool ShouldHackArguments() const { return true; }
164 static RegisterPass
<DAH
>
165 Y("deadarghaX0r", "Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE)");
167 /// createDeadArgEliminationPass - This pass removes arguments from functions
168 /// which are not used by the body of the function.
170 ModulePass
*llvm::createDeadArgEliminationPass() { return new DAE(); }
171 ModulePass
*llvm::createDeadArgHackingPass() { return new DAH(); }
173 /// DeleteDeadVarargs - If this is an function that takes a ... list, and if
174 /// llvm.vastart is never called, the varargs list is dead for the function.
175 bool DAE::DeleteDeadVarargs(Function
&Fn
) {
176 assert(Fn
.getFunctionType()->isVarArg() && "Function isn't varargs!");
177 if (Fn
.isDeclaration() || !Fn
.hasLocalLinkage()) return false;
179 // Ensure that the function is only directly called.
180 if (Fn
.hasAddressTaken())
183 // Okay, we know we can transform this function if safe. Scan its body
184 // looking for calls to llvm.vastart.
185 for (Function::iterator BB
= Fn
.begin(), E
= Fn
.end(); BB
!= E
; ++BB
) {
186 for (BasicBlock::iterator I
= BB
->begin(), E
= BB
->end(); I
!= E
; ++I
) {
187 if (IntrinsicInst
*II
= dyn_cast
<IntrinsicInst
>(I
)) {
188 if (II
->getIntrinsicID() == Intrinsic::vastart
)
194 // If we get here, there are no calls to llvm.vastart in the function body,
195 // remove the "..." and adjust all the calls.
197 // Start by computing a new prototype for the function, which is the same as
198 // the old function, but doesn't have isVarArg set.
199 const FunctionType
*FTy
= Fn
.getFunctionType();
201 std::vector
<const Type
*> Params(FTy
->param_begin(), FTy
->param_end());
202 FunctionType
*NFTy
= FunctionType::get(FTy
->getReturnType(),
204 unsigned NumArgs
= Params
.size();
206 // Create the new function body and insert it into the module...
207 Function
*NF
= Function::Create(NFTy
, Fn
.getLinkage());
208 NF
->copyAttributesFrom(&Fn
);
209 Fn
.getParent()->getFunctionList().insert(&Fn
, NF
);
212 // Loop over all of the callers of the function, transforming the call sites
213 // to pass in a smaller number of arguments into the new function.
215 std::vector
<Value
*> Args
;
216 while (!Fn
.use_empty()) {
217 CallSite CS
= CallSite::get(Fn
.use_back());
218 Instruction
*Call
= CS
.getInstruction();
220 // Pass all the same arguments.
221 Args
.assign(CS
.arg_begin(), CS
.arg_begin()+NumArgs
);
223 // Drop any attributes that were on the vararg arguments.
224 AttrListPtr PAL
= CS
.getAttributes();
225 if (!PAL
.isEmpty() && PAL
.getSlot(PAL
.getNumSlots() - 1).Index
> NumArgs
) {
226 SmallVector
<AttributeWithIndex
, 8> AttributesVec
;
227 for (unsigned i
= 0; PAL
.getSlot(i
).Index
<= NumArgs
; ++i
)
228 AttributesVec
.push_back(PAL
.getSlot(i
));
229 if (Attributes FnAttrs
= PAL
.getFnAttributes())
230 AttributesVec
.push_back(AttributeWithIndex::get(~0, FnAttrs
));
231 PAL
= AttrListPtr::get(AttributesVec
.begin(), AttributesVec
.end());
235 if (InvokeInst
*II
= dyn_cast
<InvokeInst
>(Call
)) {
236 New
= InvokeInst::Create(NF
, II
->getNormalDest(), II
->getUnwindDest(),
237 Args
.begin(), Args
.end(), "", Call
);
238 cast
<InvokeInst
>(New
)->setCallingConv(CS
.getCallingConv());
239 cast
<InvokeInst
>(New
)->setAttributes(PAL
);
241 New
= CallInst::Create(NF
, Args
.begin(), Args
.end(), "", Call
);
242 cast
<CallInst
>(New
)->setCallingConv(CS
.getCallingConv());
243 cast
<CallInst
>(New
)->setAttributes(PAL
);
244 if (cast
<CallInst
>(Call
)->isTailCall())
245 cast
<CallInst
>(New
)->setTailCall();
249 if (!Call
->use_empty())
250 Call
->replaceAllUsesWith(New
);
254 // Finally, remove the old call from the program, reducing the use-count of
256 Call
->eraseFromParent();
259 // Since we have now created the new function, splice the body of the old
260 // function right into the new function, leaving the old rotting hulk of the
262 NF
->getBasicBlockList().splice(NF
->begin(), Fn
.getBasicBlockList());
264 // Loop over the argument list, transfering uses of the old arguments over to
265 // the new arguments, also transfering over the names as well. While we're at
266 // it, remove the dead arguments from the DeadArguments list.
268 for (Function::arg_iterator I
= Fn
.arg_begin(), E
= Fn
.arg_end(),
269 I2
= NF
->arg_begin(); I
!= E
; ++I
, ++I2
) {
270 // Move the name and users over to the new version.
271 I
->replaceAllUsesWith(I2
);
275 // Finally, nuke the old function.
276 Fn
.eraseFromParent();
280 /// Convenience function that returns the number of return values. It returns 0
281 /// for void functions and 1 for functions not returning a struct. It returns
282 /// the number of struct elements for functions returning a struct.
283 static unsigned NumRetVals(const Function
*F
) {
284 if (F
->getReturnType() == Type::getVoidTy(F
->getContext()))
286 else if (const StructType
*STy
= dyn_cast
<StructType
>(F
->getReturnType()))
287 return STy
->getNumElements();
292 /// MarkIfNotLive - This checks Use for liveness in LiveValues. If Use is not
293 /// live, it adds Use to the MaybeLiveUses argument. Returns the determined
295 DAE::Liveness
DAE::MarkIfNotLive(RetOrArg Use
, UseVector
&MaybeLiveUses
) {
296 // We're live if our use or its Function is already marked as live.
297 if (LiveFunctions
.count(Use
.F
) || LiveValues
.count(Use
))
300 // We're maybe live otherwise, but remember that we must become live if
302 MaybeLiveUses
.push_back(Use
);
307 /// SurveyUse - This looks at a single use of an argument or return value
308 /// and determines if it should be alive or not. Adds this use to MaybeLiveUses
309 /// if it causes the used value to become MaybeAlive.
311 /// RetValNum is the return value number to use when this use is used in a
312 /// return instruction. This is used in the recursion, you should always leave
314 DAE::Liveness
DAE::SurveyUse(Value::use_iterator U
, UseVector
&MaybeLiveUses
,
315 unsigned RetValNum
) {
317 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(V
)) {
318 // The value is returned from a function. It's only live when the
319 // function's return value is live. We use RetValNum here, for the case
320 // that U is really a use of an insertvalue instruction that uses the
322 RetOrArg Use
= CreateRet(RI
->getParent()->getParent(), RetValNum
);
323 // We might be live, depending on the liveness of Use.
324 return MarkIfNotLive(Use
, MaybeLiveUses
);
326 if (InsertValueInst
*IV
= dyn_cast
<InsertValueInst
>(V
)) {
327 if (U
.getOperandNo() != InsertValueInst::getAggregateOperandIndex()
329 // The use we are examining is inserted into an aggregate. Our liveness
330 // depends on all uses of that aggregate, but if it is used as a return
331 // value, only index at which we were inserted counts.
332 RetValNum
= *IV
->idx_begin();
334 // Note that if we are used as the aggregate operand to the insertvalue,
335 // we don't change RetValNum, but do survey all our uses.
337 Liveness Result
= MaybeLive
;
338 for (Value::use_iterator I
= IV
->use_begin(),
339 E
= V
->use_end(); I
!= E
; ++I
) {
340 Result
= SurveyUse(I
, MaybeLiveUses
, RetValNum
);
346 CallSite CS
= CallSite::get(V
);
347 if (CS
.getInstruction()) {
348 Function
*F
= CS
.getCalledFunction();
350 // Used in a direct call.
352 // Find the argument number. We know for sure that this use is an
353 // argument, since if it was the function argument this would be an
354 // indirect call and the we know can't be looking at a value of the
355 // label type (for the invoke instruction).
356 unsigned ArgNo
= CS
.getArgumentNo(U
.getOperandNo());
358 if (ArgNo
>= F
->getFunctionType()->getNumParams())
359 // The value is passed in through a vararg! Must be live.
362 assert(CS
.getArgument(ArgNo
)
363 == CS
.getInstruction()->getOperand(U
.getOperandNo())
364 && "Argument is not where we expected it");
366 // Value passed to a normal call. It's only live when the corresponding
367 // argument to the called function turns out live.
368 RetOrArg Use
= CreateArg(F
, ArgNo
);
369 return MarkIfNotLive(Use
, MaybeLiveUses
);
372 // Used in any other way? Value must be live.
376 /// SurveyUses - This looks at all the uses of the given value
377 /// Returns the Liveness deduced from the uses of this value.
379 /// Adds all uses that cause the result to be MaybeLive to MaybeLiveRetUses. If
380 /// the result is Live, MaybeLiveUses might be modified but its content should
381 /// be ignored (since it might not be complete).
382 DAE::Liveness
DAE::SurveyUses(Value
*V
, UseVector
&MaybeLiveUses
) {
383 // Assume it's dead (which will only hold if there are no uses at all..).
384 Liveness Result
= MaybeLive
;
386 for (Value::use_iterator I
= V
->use_begin(),
387 E
= V
->use_end(); I
!= E
; ++I
) {
388 Result
= SurveyUse(I
, MaybeLiveUses
);
395 // SurveyFunction - This performs the initial survey of the specified function,
396 // checking out whether or not it uses any of its incoming arguments or whether
397 // any callers use the return value. This fills in the LiveValues set and Uses
400 // We consider arguments of non-internal functions to be intrinsically alive as
401 // well as arguments to functions which have their "address taken".
403 void DAE::SurveyFunction(Function
&F
) {
404 unsigned RetCount
= NumRetVals(&F
);
405 // Assume all return values are dead
406 typedef SmallVector
<Liveness
, 5> RetVals
;
407 RetVals
RetValLiveness(RetCount
, MaybeLive
);
409 typedef SmallVector
<UseVector
, 5> RetUses
;
410 // These vectors map each return value to the uses that make it MaybeLive, so
411 // we can add those to the Uses map if the return value really turns out to be
412 // MaybeLive. Initialized to a list of RetCount empty lists.
413 RetUses
MaybeLiveRetUses(RetCount
);
415 for (Function::iterator BB
= F
.begin(), E
= F
.end(); BB
!= E
; ++BB
)
416 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(BB
->getTerminator()))
417 if (RI
->getNumOperands() != 0 && RI
->getOperand(0)->getType()
418 != F
.getFunctionType()->getReturnType()) {
419 // We don't support old style multiple return values.
424 if (!F
.hasLocalLinkage() && (!ShouldHackArguments() || F
.isIntrinsic())) {
429 DEBUG(errs() << "DAE - Inspecting callers for fn: " << F
.getName() << "\n");
430 // Keep track of the number of live retvals, so we can skip checks once all
431 // of them turn out to be live.
432 unsigned NumLiveRetVals
= 0;
433 const Type
*STy
= dyn_cast
<StructType
>(F
.getReturnType());
434 // Loop all uses of the function.
435 for (Value::use_iterator I
= F
.use_begin(), E
= F
.use_end(); I
!= E
; ++I
) {
436 // If the function is PASSED IN as an argument, its address has been
438 CallSite CS
= CallSite::get(*I
);
439 if (!CS
.getInstruction() || !CS
.isCallee(I
)) {
444 // If this use is anything other than a call site, the function is alive.
445 Instruction
*TheCall
= CS
.getInstruction();
446 if (!TheCall
) { // Not a direct call site?
451 // If we end up here, we are looking at a direct call to our function.
453 // Now, check how our return value(s) is/are used in this caller. Don't
454 // bother checking return values if all of them are live already.
455 if (NumLiveRetVals
!= RetCount
) {
457 // Check all uses of the return value.
458 for (Value::use_iterator I
= TheCall
->use_begin(),
459 E
= TheCall
->use_end(); I
!= E
; ++I
) {
460 ExtractValueInst
*Ext
= dyn_cast
<ExtractValueInst
>(*I
);
461 if (Ext
&& Ext
->hasIndices()) {
462 // This use uses a part of our return value, survey the uses of
463 // that part and store the results for this index only.
464 unsigned Idx
= *Ext
->idx_begin();
465 if (RetValLiveness
[Idx
] != Live
) {
466 RetValLiveness
[Idx
] = SurveyUses(Ext
, MaybeLiveRetUses
[Idx
]);
467 if (RetValLiveness
[Idx
] == Live
)
471 // Used by something else than extractvalue. Mark all return
473 for (unsigned i
= 0; i
!= RetCount
; ++i
)
474 RetValLiveness
[i
] = Live
;
475 NumLiveRetVals
= RetCount
;
480 // Single return value
481 RetValLiveness
[0] = SurveyUses(TheCall
, MaybeLiveRetUses
[0]);
482 if (RetValLiveness
[0] == Live
)
483 NumLiveRetVals
= RetCount
;
488 // Now we've inspected all callers, record the liveness of our return values.
489 for (unsigned i
= 0; i
!= RetCount
; ++i
)
490 MarkValue(CreateRet(&F
, i
), RetValLiveness
[i
], MaybeLiveRetUses
[i
]);
492 DEBUG(errs() << "DAE - Inspecting args for fn: " << F
.getName() << "\n");
494 // Now, check all of our arguments.
496 UseVector MaybeLiveArgUses
;
497 for (Function::arg_iterator AI
= F
.arg_begin(),
498 E
= F
.arg_end(); AI
!= E
; ++AI
, ++i
) {
499 // See what the effect of this use is (recording any uses that cause
500 // MaybeLive in MaybeLiveArgUses).
501 Liveness Result
= SurveyUses(AI
, MaybeLiveArgUses
);
503 MarkValue(CreateArg(&F
, i
), Result
, MaybeLiveArgUses
);
504 // Clear the vector again for the next iteration.
505 MaybeLiveArgUses
.clear();
509 /// MarkValue - This function marks the liveness of RA depending on L. If L is
510 /// MaybeLive, it also takes all uses in MaybeLiveUses and records them in Uses,
511 /// such that RA will be marked live if any use in MaybeLiveUses gets marked
513 void DAE::MarkValue(const RetOrArg
&RA
, Liveness L
,
514 const UseVector
&MaybeLiveUses
) {
516 case Live
: MarkLive(RA
); break;
519 // Note any uses of this value, so this return value can be
520 // marked live whenever one of the uses becomes live.
521 for (UseVector::const_iterator UI
= MaybeLiveUses
.begin(),
522 UE
= MaybeLiveUses
.end(); UI
!= UE
; ++UI
)
523 Uses
.insert(std::make_pair(*UI
, RA
));
529 /// MarkLive - Mark the given Function as alive, meaning that it cannot be
530 /// changed in any way. Additionally,
531 /// mark any values that are used as this function's parameters or by its return
532 /// values (according to Uses) live as well.
533 void DAE::MarkLive(const Function
&F
) {
534 DEBUG(errs() << "DAE - Intrinsically live fn: " << F
.getName() << "\n");
535 // Mark the function as live.
536 LiveFunctions
.insert(&F
);
537 // Mark all arguments as live.
538 for (unsigned i
= 0, e
= F
.arg_size(); i
!= e
; ++i
)
539 PropagateLiveness(CreateArg(&F
, i
));
540 // Mark all return values as live.
541 for (unsigned i
= 0, e
= NumRetVals(&F
); i
!= e
; ++i
)
542 PropagateLiveness(CreateRet(&F
, i
));
545 /// MarkLive - Mark the given return value or argument as live. Additionally,
546 /// mark any values that are used by this value (according to Uses) live as
548 void DAE::MarkLive(const RetOrArg
&RA
) {
549 if (LiveFunctions
.count(RA
.F
))
550 return; // Function was already marked Live.
552 if (!LiveValues
.insert(RA
).second
)
553 return; // We were already marked Live.
555 DEBUG(errs() << "DAE - Marking " << RA
.getDescription() << " live\n");
556 PropagateLiveness(RA
);
559 /// PropagateLiveness - Given that RA is a live value, propagate it's liveness
560 /// to any other values it uses (according to Uses).
561 void DAE::PropagateLiveness(const RetOrArg
&RA
) {
562 // We don't use upper_bound (or equal_range) here, because our recursive call
563 // to ourselves is likely to cause the upper_bound (which is the first value
564 // not belonging to RA) to become erased and the iterator invalidated.
565 UseMap::iterator Begin
= Uses
.lower_bound(RA
);
566 UseMap::iterator E
= Uses
.end();
568 for (I
= Begin
; I
!= E
&& I
->first
== RA
; ++I
)
571 // Erase RA from the Uses map (from the lower bound to wherever we ended up
573 Uses
.erase(Begin
, I
);
576 // RemoveDeadStuffFromFunction - Remove any arguments and return values from F
577 // that are not in LiveValues. Transform the function and all of the callees of
578 // the function to not have these arguments and return values.
580 bool DAE::RemoveDeadStuffFromFunction(Function
*F
) {
581 // Don't modify fully live functions
582 if (LiveFunctions
.count(F
))
585 // Start by computing a new prototype for the function, which is the same as
586 // the old function, but has fewer arguments and a different return type.
587 const FunctionType
*FTy
= F
->getFunctionType();
588 std::vector
<const Type
*> Params
;
590 // Set up to build a new list of parameter attributes.
591 SmallVector
<AttributeWithIndex
, 8> AttributesVec
;
592 const AttrListPtr
&PAL
= F
->getAttributes();
594 // The existing function return attributes.
595 Attributes RAttrs
= PAL
.getRetAttributes();
596 Attributes FnAttrs
= PAL
.getFnAttributes();
598 // Find out the new return value.
600 const Type
*RetTy
= FTy
->getReturnType();
601 const Type
*NRetTy
= NULL
;
602 unsigned RetCount
= NumRetVals(F
);
604 // -1 means unused, other numbers are the new index
605 SmallVector
<int, 5> NewRetIdxs(RetCount
, -1);
606 std::vector
<const Type
*> RetTypes
;
607 if (RetTy
== Type::getVoidTy(F
->getContext())) {
608 NRetTy
= Type::getVoidTy(F
->getContext());
610 const StructType
*STy
= dyn_cast
<StructType
>(RetTy
);
612 // Look at each of the original return values individually.
613 for (unsigned i
= 0; i
!= RetCount
; ++i
) {
614 RetOrArg Ret
= CreateRet(F
, i
);
615 if (LiveValues
.erase(Ret
)) {
616 RetTypes
.push_back(STy
->getElementType(i
));
617 NewRetIdxs
[i
] = RetTypes
.size() - 1;
619 ++NumRetValsEliminated
;
620 DEBUG(errs() << "DAE - Removing return value " << i
<< " from "
621 << F
->getName() << "\n");
625 // We used to return a single value.
626 if (LiveValues
.erase(CreateRet(F
, 0))) {
627 RetTypes
.push_back(RetTy
);
630 DEBUG(errs() << "DAE - Removing return value from " << F
->getName()
632 ++NumRetValsEliminated
;
634 if (RetTypes
.size() > 1)
635 // More than one return type? Return a struct with them. Also, if we used
636 // to return a struct and didn't change the number of return values,
637 // return a struct again. This prevents changing {something} into
638 // something and {} into void.
639 // Make the new struct packed if we used to return a packed struct
641 NRetTy
= StructType::get(STy
->getContext(), RetTypes
, STy
->isPacked());
642 else if (RetTypes
.size() == 1)
643 // One return type? Just a simple value then, but only if we didn't use to
644 // return a struct with that simple value before.
645 NRetTy
= RetTypes
.front();
646 else if (RetTypes
.size() == 0)
647 // No return types? Make it void, but only if we didn't use to return {}.
648 NRetTy
= Type::getVoidTy(F
->getContext());
651 assert(NRetTy
&& "No new return type found?");
653 // Remove any incompatible attributes, but only if we removed all return
654 // values. Otherwise, ensure that we don't have any conflicting attributes
655 // here. Currently, this should not be possible, but special handling might be
656 // required when new return value attributes are added.
657 if (NRetTy
== Type::getVoidTy(F
->getContext()))
658 RAttrs
&= ~Attribute::typeIncompatible(NRetTy
);
660 assert((RAttrs
& Attribute::typeIncompatible(NRetTy
)) == 0
661 && "Return attributes no longer compatible?");
664 AttributesVec
.push_back(AttributeWithIndex::get(0, RAttrs
));
666 // Remember which arguments are still alive.
667 SmallVector
<bool, 10> ArgAlive(FTy
->getNumParams(), false);
668 // Construct the new parameter list from non-dead arguments. Also construct
669 // a new set of parameter attributes to correspond. Skip the first parameter
670 // attribute, since that belongs to the return value.
672 for (Function::arg_iterator I
= F
->arg_begin(), E
= F
->arg_end();
674 RetOrArg Arg
= CreateArg(F
, i
);
675 if (LiveValues
.erase(Arg
)) {
676 Params
.push_back(I
->getType());
679 // Get the original parameter attributes (skipping the first one, that is
680 // for the return value.
681 if (Attributes Attrs
= PAL
.getParamAttributes(i
+ 1))
682 AttributesVec
.push_back(AttributeWithIndex::get(Params
.size(), Attrs
));
684 ++NumArgumentsEliminated
;
685 DEBUG(errs() << "DAE - Removing argument " << i
<< " (" << I
->getName()
686 << ") from " << F
->getName() << "\n");
690 if (FnAttrs
!= Attribute::None
)
691 AttributesVec
.push_back(AttributeWithIndex::get(~0, FnAttrs
));
693 // Reconstruct the AttributesList based on the vector we constructed.
694 AttrListPtr NewPAL
= AttrListPtr::get(AttributesVec
.begin(), AttributesVec
.end());
696 // Work around LLVM bug PR56: the CWriter cannot emit varargs functions which
697 // have zero fixed arguments.
699 // Note that we apply this hack for a vararg fuction that does not have any
700 // arguments anymore, but did have them before (so don't bother fixing
701 // functions that were already broken wrt CWriter).
702 bool ExtraArgHack
= false;
703 if (Params
.empty() && FTy
->isVarArg() && FTy
->getNumParams() != 0) {
705 Params
.push_back(Type::getInt32Ty(F
->getContext()));
708 // Create the new function type based on the recomputed parameters.
709 FunctionType
*NFTy
= FunctionType::get(NRetTy
, Params
,
716 // Create the new function body and insert it into the module...
717 Function
*NF
= Function::Create(NFTy
, F
->getLinkage());
718 NF
->copyAttributesFrom(F
);
719 NF
->setAttributes(NewPAL
);
720 // Insert the new function before the old function, so we won't be processing
722 F
->getParent()->getFunctionList().insert(F
, NF
);
725 // Loop over all of the callers of the function, transforming the call sites
726 // to pass in a smaller number of arguments into the new function.
728 std::vector
<Value
*> Args
;
729 while (!F
->use_empty()) {
730 CallSite CS
= CallSite::get(F
->use_back());
731 Instruction
*Call
= CS
.getInstruction();
733 AttributesVec
.clear();
734 const AttrListPtr
&CallPAL
= CS
.getAttributes();
736 // The call return attributes.
737 Attributes RAttrs
= CallPAL
.getRetAttributes();
738 Attributes FnAttrs
= CallPAL
.getFnAttributes();
739 // Adjust in case the function was changed to return void.
740 RAttrs
&= ~Attribute::typeIncompatible(NF
->getReturnType());
742 AttributesVec
.push_back(AttributeWithIndex::get(0, RAttrs
));
744 // Declare these outside of the loops, so we can reuse them for the second
745 // loop, which loops the varargs.
746 CallSite::arg_iterator I
= CS
.arg_begin();
748 // Loop over those operands, corresponding to the normal arguments to the
749 // original function, and add those that are still alive.
750 for (unsigned e
= FTy
->getNumParams(); i
!= e
; ++I
, ++i
)
753 // Get original parameter attributes, but skip return attributes.
754 if (Attributes Attrs
= CallPAL
.getParamAttributes(i
+ 1))
755 AttributesVec
.push_back(AttributeWithIndex::get(Args
.size(), Attrs
));
759 Args
.push_back(UndefValue::get(Type::getInt32Ty(F
->getContext())));
761 // Push any varargs arguments on the list. Don't forget their attributes.
762 for (CallSite::arg_iterator E
= CS
.arg_end(); I
!= E
; ++I
, ++i
) {
764 if (Attributes Attrs
= CallPAL
.getParamAttributes(i
+ 1))
765 AttributesVec
.push_back(AttributeWithIndex::get(Args
.size(), Attrs
));
768 if (FnAttrs
!= Attribute::None
)
769 AttributesVec
.push_back(AttributeWithIndex::get(~0, FnAttrs
));
771 // Reconstruct the AttributesList based on the vector we constructed.
772 AttrListPtr NewCallPAL
= AttrListPtr::get(AttributesVec
.begin(),
773 AttributesVec
.end());
776 if (InvokeInst
*II
= dyn_cast
<InvokeInst
>(Call
)) {
777 New
= InvokeInst::Create(NF
, II
->getNormalDest(), II
->getUnwindDest(),
778 Args
.begin(), Args
.end(), "", Call
);
779 cast
<InvokeInst
>(New
)->setCallingConv(CS
.getCallingConv());
780 cast
<InvokeInst
>(New
)->setAttributes(NewCallPAL
);
782 New
= CallInst::Create(NF
, Args
.begin(), Args
.end(), "", Call
);
783 cast
<CallInst
>(New
)->setCallingConv(CS
.getCallingConv());
784 cast
<CallInst
>(New
)->setAttributes(NewCallPAL
);
785 if (cast
<CallInst
>(Call
)->isTailCall())
786 cast
<CallInst
>(New
)->setTailCall();
790 if (!Call
->use_empty()) {
791 if (New
->getType() == Call
->getType()) {
792 // Return type not changed? Just replace users then.
793 Call
->replaceAllUsesWith(New
);
795 } else if (New
->getType() == Type::getVoidTy(F
->getContext())) {
796 // Our return value has uses, but they will get removed later on.
797 // Replace by null for now.
798 Call
->replaceAllUsesWith(Constant::getNullValue(Call
->getType()));
800 assert(isa
<StructType
>(RetTy
) &&
801 "Return type changed, but not into a void. The old return type"
802 " must have been a struct!");
803 Instruction
*InsertPt
= Call
;
804 if (InvokeInst
*II
= dyn_cast
<InvokeInst
>(Call
)) {
805 BasicBlock::iterator IP
= II
->getNormalDest()->begin();
806 while (isa
<PHINode
>(IP
)) ++IP
;
810 // We used to return a struct. Instead of doing smart stuff with all the
811 // uses of this struct, we will just rebuild it using
812 // extract/insertvalue chaining and let instcombine clean that up.
814 // Start out building up our return value from undef
815 Value
*RetVal
= UndefValue::get(RetTy
);
816 for (unsigned i
= 0; i
!= RetCount
; ++i
)
817 if (NewRetIdxs
[i
] != -1) {
819 if (RetTypes
.size() > 1)
820 // We are still returning a struct, so extract the value from our
822 V
= ExtractValueInst::Create(New
, NewRetIdxs
[i
], "newret",
825 // We are now returning a single element, so just insert that
827 // Insert the value at the old position
828 RetVal
= InsertValueInst::Create(RetVal
, V
, i
, "oldret", InsertPt
);
830 // Now, replace all uses of the old call instruction with the return
832 Call
->replaceAllUsesWith(RetVal
);
837 // Finally, remove the old call from the program, reducing the use-count of
839 Call
->eraseFromParent();
842 // Since we have now created the new function, splice the body of the old
843 // function right into the new function, leaving the old rotting hulk of the
845 NF
->getBasicBlockList().splice(NF
->begin(), F
->getBasicBlockList());
847 // Loop over the argument list, transfering uses of the old arguments over to
848 // the new arguments, also transfering over the names as well.
850 for (Function::arg_iterator I
= F
->arg_begin(), E
= F
->arg_end(),
851 I2
= NF
->arg_begin(); I
!= E
; ++I
, ++i
)
853 // If this is a live argument, move the name and users over to the new
855 I
->replaceAllUsesWith(I2
);
859 // If this argument is dead, replace any uses of it with null constants
860 // (these are guaranteed to become unused later on).
861 I
->replaceAllUsesWith(Constant::getNullValue(I
->getType()));
864 // If we change the return value of the function we must rewrite any return
865 // instructions. Check this now.
866 if (F
->getReturnType() != NF
->getReturnType())
867 for (Function::iterator BB
= NF
->begin(), E
= NF
->end(); BB
!= E
; ++BB
)
868 if (ReturnInst
*RI
= dyn_cast
<ReturnInst
>(BB
->getTerminator())) {
871 if (NFTy
->getReturnType() == Type::getVoidTy(F
->getContext())) {
874 assert (isa
<StructType
>(RetTy
));
875 // The original return value was a struct, insert
876 // extractvalue/insertvalue chains to extract only the values we need
877 // to return and insert them into our new result.
878 // This does generate messy code, but we'll let it to instcombine to
880 Value
*OldRet
= RI
->getOperand(0);
881 // Start out building up our return value from undef
882 RetVal
= UndefValue::get(NRetTy
);
883 for (unsigned i
= 0; i
!= RetCount
; ++i
)
884 if (NewRetIdxs
[i
] != -1) {
885 ExtractValueInst
*EV
= ExtractValueInst::Create(OldRet
, i
,
887 if (RetTypes
.size() > 1) {
888 // We're still returning a struct, so reinsert the value into
889 // our new return value at the new index
891 RetVal
= InsertValueInst::Create(RetVal
, EV
, NewRetIdxs
[i
],
894 // We are now only returning a simple value, so just return the
900 // Replace the return instruction with one returning the new return
901 // value (possibly 0 if we became void).
902 ReturnInst::Create(F
->getContext(), RetVal
, RI
);
903 BB
->getInstList().erase(RI
);
906 // Now that the old function is dead, delete it.
907 F
->eraseFromParent();
912 bool DAE::runOnModule(Module
&M
) {
913 bool Changed
= false;
915 // First pass: Do a simple check to see if any functions can have their "..."
916 // removed. We can do this if they never call va_start. This loop cannot be
917 // fused with the next loop, because deleting a function invalidates
918 // information computed while surveying other functions.
919 DEBUG(errs() << "DAE - Deleting dead varargs\n");
920 for (Module::iterator I
= M
.begin(), E
= M
.end(); I
!= E
; ) {
922 if (F
.getFunctionType()->isVarArg())
923 Changed
|= DeleteDeadVarargs(F
);
926 // Second phase:loop through the module, determining which arguments are live.
927 // We assume all arguments are dead unless proven otherwise (allowing us to
928 // determine that dead arguments passed into recursive functions are dead).
930 DEBUG(errs() << "DAE - Determining liveness\n");
931 for (Module::iterator I
= M
.begin(), E
= M
.end(); I
!= E
; ++I
)
934 // Now, remove all dead arguments and return values from each function in
936 for (Module::iterator I
= M
.begin(), E
= M
.end(); I
!= E
; ) {
937 // Increment now, because the function will probably get removed (ie
938 // replaced by a new one).
940 Changed
|= RemoveDeadStuffFromFunction(F
);