DeadArgumentElimination.cpp revision 9cb6ec26b3041ff4879579fd9ecee48b616154d8
1//===-- DeadArgumentElimination.cpp - Eliminate dead arguments ------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
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.
14//
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.
17//
18//===----------------------------------------------------------------------===//
19
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/Module.h"
28#include "llvm/Pass.h"
29#include "llvm/Support/CallSite.h"
30#include "llvm/Support/Debug.h"
31#include "llvm/ADT/SmallVector.h"
32#include "llvm/ADT/Statistic.h"
33#include "llvm/Support/Compiler.h"
34#include <map>
35#include <set>
36using namespace llvm;
37
38STATISTIC(NumArgumentsEliminated, "Number of unread args removed");
39STATISTIC(NumRetValsEliminated  , "Number of unused return values removed");
40
41namespace {
42  /// DAE - The dead argument elimination pass.
43  ///
44  class VISIBILITY_HIDDEN DAE : public ModulePass {
45  public:
46
47    /// Struct that represent either a (part of a) return value or a function
48    /// argument.  Used so that arguments and return values can be used
49    /// interchangably.
50    struct RetOrArg {
51      RetOrArg(const Function* F, unsigned Idx, bool IsArg) : F(F), Idx(Idx), IsArg(IsArg) {}
52      const Function *F;
53      unsigned Idx;
54      bool IsArg;
55
56      /// Make RetOrArg comparable, so we can put it into a map
57      bool operator<(const RetOrArg &O) const {
58        if (F != O.F)
59          return F < O.F;
60        else if (Idx != O.Idx)
61          return Idx < O.Idx;
62        else
63          return IsArg < O.IsArg;
64      }
65
66      /// Make RetOrArg comparable, so we can easily iterate the multimap
67      bool operator==(const RetOrArg &O) const {
68        return F == O.F && Idx == O.Idx && IsArg == O.IsArg;
69      }
70    };
71
72    /// Liveness enum - During our initial pass over the program, we determine
73    /// that things are either definately alive, definately dead, or in need of
74    /// interprocedural analysis (MaybeLive).
75    ///
76    enum Liveness { Live, MaybeLive, Dead };
77
78    /// Convenience wrapper
79    RetOrArg CreateRet(const Function *F, unsigned Idx) { return RetOrArg(F, Idx, false); }
80    /// Convenience wrapper
81    RetOrArg CreateArg(const Function *F, unsigned Idx) { return RetOrArg(F, Idx, true); }
82
83    typedef std::multimap<RetOrArg, RetOrArg> UseMap;
84    /// This map maps a return value or argument to all return values or
85    /// arguments it uses.
86    /// For example (indices are left out for clarity):
87    ///  - Uses[ret F] = ret G
88    ///    This means that F calls G, and F returns the value returned by G.
89    ///  - Uses[arg F] = ret G
90    ///    This means that some function calls G and passes its result as an
91    ///    argument to F.
92    ///  - Uses[ret F] = arg F
93    ///    This means that F returns one of its own arguments.
94    ///  - Uses[arg F] = arg G
95    ///    This means that G calls F and passes one of its own (G's) arguments
96    ///    directly to F.
97    UseMap Uses;
98
99    typedef std::set<RetOrArg> LiveSet;
100
101    /// This set contains all values that have been determined to be live
102    LiveSet LiveValues;
103
104    typedef SmallVector<RetOrArg, 5> UseVector;
105
106  public:
107    static char ID; // Pass identification, replacement for typeid
108    DAE() : ModulePass((intptr_t)&ID) {}
109    bool runOnModule(Module &M);
110
111    virtual bool ShouldHackArguments() const { return false; }
112
113  private:
114    Liveness IsMaybeLive(RetOrArg Use, UseVector &MaybeLiveUses);
115    Liveness SurveyUse(Value::use_iterator U, UseVector &MaybeLiveUses, unsigned RetValNum = 0);
116    Liveness SurveyUses(Value *V, UseVector &MaybeLiveUses);
117
118    void SurveyFunction(Function &F);
119    void MarkValue(const RetOrArg &RA, Liveness L, const UseVector &MaybeLiveUses);
120    void MarkLive(RetOrArg RA);
121    bool RemoveDeadStuffFromFunction(Function *F);
122    bool DeleteDeadVarargs(Function &Fn);
123  };
124}
125
126
127char DAE::ID = 0;
128static RegisterPass<DAE>
129X("deadargelim", "Dead Argument Elimination");
130
131namespace {
132  /// DAH - DeadArgumentHacking pass - Same as dead argument elimination, but
133  /// deletes arguments to functions which are external.  This is only for use
134  /// by bugpoint.
135  struct DAH : public DAE {
136    static char ID;
137    virtual bool ShouldHackArguments() const { return true; }
138  };
139}
140
141char DAH::ID = 0;
142static RegisterPass<DAH>
143Y("deadarghaX0r", "Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE)");
144
145/// createDeadArgEliminationPass - This pass removes arguments from functions
146/// which are not used by the body of the function.
147///
148ModulePass *llvm::createDeadArgEliminationPass() { return new DAE(); }
149ModulePass *llvm::createDeadArgHackingPass() { return new DAH(); }
150
151/// DeleteDeadVarargs - If this is an function that takes a ... list, and if
152/// llvm.vastart is never called, the varargs list is dead for the function.
153bool DAE::DeleteDeadVarargs(Function &Fn) {
154  assert(Fn.getFunctionType()->isVarArg() && "Function isn't varargs!");
155  if (Fn.isDeclaration() || !Fn.hasInternalLinkage()) return false;
156
157  // Ensure that the function is only directly called.
158  for (Value::use_iterator I = Fn.use_begin(), E = Fn.use_end(); I != E; ++I) {
159    // If this use is anything other than a call site, give up.
160    CallSite CS = CallSite::get(*I);
161    Instruction *TheCall = CS.getInstruction();
162    if (!TheCall) return false;   // Not a direct call site?
163
164    // The addr of this function is passed to the call.
165    if (I.getOperandNo() != 0) return false;
166  }
167
168  // Okay, we know we can transform this function if safe.  Scan its body
169  // looking for calls to llvm.vastart.
170  for (Function::iterator BB = Fn.begin(), E = Fn.end(); BB != E; ++BB) {
171    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
172      if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) {
173        if (II->getIntrinsicID() == Intrinsic::vastart)
174          return false;
175      }
176    }
177  }
178
179  // If we get here, there are no calls to llvm.vastart in the function body,
180  // remove the "..." and adjust all the calls.
181
182  // Start by computing a new prototype for the function, which is the same as
183  // the old function, but doesn't have isVarArg set.
184  const FunctionType *FTy = Fn.getFunctionType();
185  std::vector<const Type*> Params(FTy->param_begin(), FTy->param_end());
186  FunctionType *NFTy = FunctionType::get(FTy->getReturnType(), Params, false);
187  unsigned NumArgs = Params.size();
188
189  // Create the new function body and insert it into the module...
190  Function *NF = Function::Create(NFTy, Fn.getLinkage());
191  NF->copyAttributesFrom(&Fn);
192  Fn.getParent()->getFunctionList().insert(&Fn, NF);
193  NF->takeName(&Fn);
194
195  // Loop over all of the callers of the function, transforming the call sites
196  // to pass in a smaller number of arguments into the new function.
197  //
198  std::vector<Value*> Args;
199  while (!Fn.use_empty()) {
200    CallSite CS = CallSite::get(Fn.use_back());
201    Instruction *Call = CS.getInstruction();
202
203    // Pass all the same arguments.
204    Args.assign(CS.arg_begin(), CS.arg_begin()+NumArgs);
205
206    // Drop any attributes that were on the vararg arguments.
207    PAListPtr PAL = CS.getParamAttrs();
208    if (!PAL.isEmpty() && PAL.getSlot(PAL.getNumSlots() - 1).Index > NumArgs) {
209      SmallVector<ParamAttrsWithIndex, 8> ParamAttrsVec;
210      for (unsigned i = 0; PAL.getSlot(i).Index <= NumArgs; ++i)
211        ParamAttrsVec.push_back(PAL.getSlot(i));
212      PAL = PAListPtr::get(ParamAttrsVec.begin(), ParamAttrsVec.end());
213    }
214
215    Instruction *New;
216    if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
217      New = InvokeInst::Create(NF, II->getNormalDest(), II->getUnwindDest(),
218                               Args.begin(), Args.end(), "", Call);
219      cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
220      cast<InvokeInst>(New)->setParamAttrs(PAL);
221    } else {
222      New = CallInst::Create(NF, Args.begin(), Args.end(), "", Call);
223      cast<CallInst>(New)->setCallingConv(CS.getCallingConv());
224      cast<CallInst>(New)->setParamAttrs(PAL);
225      if (cast<CallInst>(Call)->isTailCall())
226        cast<CallInst>(New)->setTailCall();
227    }
228    Args.clear();
229
230    if (!Call->use_empty())
231      Call->replaceAllUsesWith(New);
232
233    New->takeName(Call);
234
235    // Finally, remove the old call from the program, reducing the use-count of
236    // F.
237    Call->eraseFromParent();
238  }
239
240  // Since we have now created the new function, splice the body of the old
241  // function right into the new function, leaving the old rotting hulk of the
242  // function empty.
243  NF->getBasicBlockList().splice(NF->begin(), Fn.getBasicBlockList());
244
245  // Loop over the argument list, transfering uses of the old arguments over to
246  // the new arguments, also transfering over the names as well.  While we're at
247  // it, remove the dead arguments from the DeadArguments list.
248  //
249  for (Function::arg_iterator I = Fn.arg_begin(), E = Fn.arg_end(),
250       I2 = NF->arg_begin(); I != E; ++I, ++I2) {
251    // Move the name and users over to the new version.
252    I->replaceAllUsesWith(I2);
253    I2->takeName(I);
254  }
255
256  // Finally, nuke the old function.
257  Fn.eraseFromParent();
258  return true;
259}
260
261/// Convenience function that returns the number of return values. It returns 0
262/// for void functions and 1 for functions not returning a struct. It returns
263/// the number of struct elements for functions returning a struct.
264static unsigned NumRetVals(const Function *F) {
265  if (F->getReturnType() == Type::VoidTy)
266    return 0;
267  else if (const StructType *STy = dyn_cast<StructType>(F->getReturnType()))
268    return STy->getNumElements();
269  else
270    return 1;
271}
272
273/// IsMaybeAlive - This checks Use for liveness. If Use is live, returns Live,
274/// else returns MaybeLive. Also, adds Use to MaybeLiveUses in the latter case.
275DAE::Liveness DAE::IsMaybeLive(RetOrArg Use, UseVector &MaybeLiveUses) {
276  // We're live if our use is already marked as live
277  if (LiveValues.count(Use))
278    return Live;
279
280  // We're maybe live otherwise, but remember that we must become live if
281  // Use becomes live.
282  MaybeLiveUses.push_back(Use);
283  return MaybeLive;
284}
285
286
287/// SurveyUse - This looks at a single use of an argument or return value
288/// and determines if it should be alive or not. Adds this use to MaybeLiveUses
289/// if it causes the used value to become MaybeAlive.
290///
291/// RetValNum is the return value number to use when this use is used in a
292/// return instruction. This is used in the recursion, you should always leave
293/// it at 0.
294DAE::Liveness DAE::SurveyUse(Value::use_iterator U, UseVector &MaybeLiveUses, unsigned RetValNum) {
295    Value *V = *U;
296    if (ReturnInst *RI = dyn_cast<ReturnInst>(V)) {
297      // The value is returned from another function. It's only live when the
298      // caller's return value is live
299      RetOrArg Use = CreateRet(RI->getParent()->getParent(), RetValNum);
300      // We might be live, depending on the liveness of Use
301      return IsMaybeLive(Use, MaybeLiveUses);
302    }
303    if (InsertValueInst *IV = dyn_cast<InsertValueInst>(V)) {
304      if (U.getOperandNo() != InsertValueInst::getAggregateOperandIndex() && IV->hasIndices())
305        // The use we are examining is inserted into an aggregate. Our liveness
306        // depends on all uses of that aggregate, but if it is used as a return
307        // value, only index at which we were inserted counts.
308        RetValNum = *IV->idx_begin();
309
310      // Note that if we are used as the aggregate operand to the insertvalue,
311      // we don't change RetValNum, but do survey all our uses.
312
313      Liveness Result = Dead;
314      for (Value::use_iterator I = IV->use_begin(),
315           E = V->use_end(); I != E; ++I) {
316        Result = SurveyUse(I, MaybeLiveUses, RetValNum);
317        if (Result == Live)
318          break;
319      }
320      return Result;
321    }
322    CallSite CS = CallSite::get(V);
323    if (CS.getInstruction()) {
324      Function *F = CS.getCalledFunction();
325      if (F) {
326        // Used in a direct call
327
328        // Check for vararg. Do - 1 to skip the first operand to call (the
329        // function itself).
330        if (U.getOperandNo() - 1 >= F->getFunctionType()->getNumParams())
331          // The value is passed in through a vararg! Must be live.
332          return Live;
333
334        // Value passed to a normal call. It's only live when the corresponding
335        // argument (operand number - 1 to skip the function pointer operand) to
336        // the called function turns out live
337        RetOrArg Use = CreateArg(F, U.getOperandNo() - 1);
338        return IsMaybeLive(Use, MaybeLiveUses);
339      } else {
340        // Used in any other way? Value must be live.
341        return Live;
342      }
343    }
344    // Used in any other way? Value must be live.
345    return Live;
346}
347
348/// SurveyUses - This looks at all the uses of the given return value
349/// (possibly a partial return value from a function returning a struct).
350/// Returns the Liveness deduced from the uses of this value.
351///
352/// Adds all uses that cause the result to be MaybeLive to MaybeLiveRetUses.
353DAE::Liveness DAE::SurveyUses(Value *V, UseVector &MaybeLiveUses) {
354  // Assume it's dead (which will only hold if there are no uses at all..)
355  Liveness Result = Dead;
356  // Check each use
357  for (Value::use_iterator I = V->use_begin(),
358       E = V->use_end(); I != E; ++I) {
359    Result = SurveyUse(I, MaybeLiveUses);
360    if (Result == Live)
361      break;
362  }
363  return Result;
364}
365
366// SurveyFunction - This performs the initial survey of the specified function,
367// checking out whether or not it uses any of its incoming arguments or whether
368// any callers use the return value.  This fills in the
369// (Dead|MaybeLive|Live)(Arguments|RetVal) sets.
370//
371// We consider arguments of non-internal functions to be intrinsically alive as
372// well as arguments to functions which have their "address taken".
373//
374void DAE::SurveyFunction(Function &F) {
375  bool FunctionIntrinsicallyLive = false;
376  unsigned RetCount = NumRetVals(&F);
377  // Assume all return values are dead
378  typedef SmallVector<Liveness, 5> RetVals;
379  RetVals RetValLiveness(RetCount, Dead);
380
381  // These vectors maps each return value to the uses that make it MaybeLive, so
382  // we can add those to the MaybeLiveRetVals list if the return value
383  // really turns out to be MaybeLive. Initializes to RetCount empty vectors
384  typedef SmallVector<UseVector, 5> RetUses;
385  // Intialized to a list of RetCount empty lists
386  RetUses MaybeLiveRetUses(RetCount);
387
388  for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
389    if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator()))
390      if (RI->getNumOperands() != 0 && RI->getOperand(0)->getType() != F.getFunctionType()->getReturnType()) {
391        // We don't support old style multiple return values
392        FunctionIntrinsicallyLive = true;
393        break;
394      }
395
396  if (!F.hasInternalLinkage() && (!ShouldHackArguments() || F.isIntrinsic()))
397    FunctionIntrinsicallyLive = true;
398
399  if (!FunctionIntrinsicallyLive) {
400    DOUT << "DAE - Inspecting callers for fn: " << F.getName() << "\n";
401    // Keep track of the number of live retvals, so we can skip checks once all
402    // of them turn out to be live.
403    unsigned NumLiveRetVals = 0;
404    const Type *STy = dyn_cast<StructType>(F.getReturnType());
405    // Loop all uses of the function
406    for (Value::use_iterator I = F.use_begin(), E = F.use_end(); I != E; ++I) {
407      // If the function is PASSED IN as an argument, its address has been taken
408      if (I.getOperandNo() != 0) {
409        FunctionIntrinsicallyLive = true;
410        break;
411      }
412
413      // If this use is anything other than a call site, the function is alive.
414      CallSite CS = CallSite::get(*I);
415      Instruction *TheCall = CS.getInstruction();
416      if (!TheCall) {   // Not a direct call site?
417        FunctionIntrinsicallyLive = true;
418        break;
419      }
420
421      // If we end up here, we are looking at a direct call to our function.
422
423      // Now, check how our return value(s) is/are used in this caller. Don't
424      // bother checking return values if all of them are live already
425      if (NumLiveRetVals != RetCount) {
426        if (STy) {
427          // Check all uses of the return value
428          for (Value::use_iterator I = TheCall->use_begin(),
429               E = TheCall->use_end(); I != E; ++I) {
430            ExtractValueInst *Ext = dyn_cast<ExtractValueInst>(*I);
431            if (Ext && Ext->hasIndices()) {
432              // This use uses a part of our return value, survey the uses of that
433              // part and store the results for this index only.
434              unsigned Idx = *Ext->idx_begin();
435              if (RetValLiveness[Idx] != Live) {
436                RetValLiveness[Idx] = SurveyUses(Ext, MaybeLiveRetUses[Idx]);
437                if (RetValLiveness[Idx] == Live)
438                  NumLiveRetVals++;
439              }
440            } else {
441              // Used by something else than extractvalue. Mark all
442              // return values as live.
443              for (unsigned i = 0; i != RetCount; ++i )
444                RetValLiveness[i] = Live;
445              NumLiveRetVals = RetCount;
446              break;
447            }
448          }
449        } else {
450          // Single return value
451          RetValLiveness[0] = SurveyUses(TheCall, MaybeLiveRetUses[0]);
452          if (RetValLiveness[0] == Live)
453            NumLiveRetVals = RetCount;
454        }
455      }
456    }
457  }
458  if (FunctionIntrinsicallyLive) {
459    DOUT << "DAE - Intrinsically live fn: " << F.getName() << "\n";
460    // Mark all arguments as live
461    unsigned i = 0;
462    for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end();
463         AI != E; ++AI, ++i)
464      MarkLive(CreateArg(&F, i));
465    // Mark all return values as live
466    i = 0;
467    for (unsigned i = 0, e = RetValLiveness.size(); i != e; ++i)
468      MarkLive(CreateRet(&F, i));
469    return;
470  }
471
472  // Now we've inspected all callers, record the liveness of our return values.
473  for (unsigned i = 0, e = RetValLiveness.size(); i != e; ++i) {
474    RetOrArg Ret = CreateRet(&F, i);
475    // Mark the result down
476    MarkValue(Ret, RetValLiveness[i], MaybeLiveRetUses[i]);
477  }
478  DOUT << "DAE - Inspecting args for fn: " << F.getName() << "\n";
479
480  // Now, check all of our arguments
481  unsigned i = 0;
482  UseVector MaybeLiveArgUses;
483  for (Function::arg_iterator AI = F.arg_begin(),
484       E = F.arg_end(); AI != E; ++AI, ++i) {
485    // See what the effect of this use is (recording any uses that cause
486    // MaybeLive in MaybeLiveArgUses)
487    Liveness Result = SurveyUses(AI, MaybeLiveArgUses);
488    RetOrArg Arg = CreateArg(&F, i);
489    // Mark the result down
490    MarkValue(Arg, Result, MaybeLiveArgUses);
491    // Clear the vector again for the next iteration
492    MaybeLiveArgUses.clear();
493  }
494}
495
496/// MarkValue - This function marks the liveness of RA depending on L. If L is
497/// MaybeLive, it also records any uses in MaybeLiveUses such that RA will be
498/// marked live if any use in MaybeLiveUses gets marked live later on.
499void DAE::MarkValue(const RetOrArg &RA, Liveness L, const UseVector &MaybeLiveUses) {
500  switch (L) {
501    case Live: MarkLive(RA); break;
502    case MaybeLive:
503    {
504      // Note any uses of this value, so this return value can be
505      // marked live whenever one of the uses becomes live.
506      UseMap::iterator Where = Uses.begin();
507      for (UseVector::const_iterator UI = MaybeLiveUses.begin(),
508           UE = MaybeLiveUses.end(); UI != UE; ++UI)
509        Where = Uses.insert(Where, UseMap::value_type(*UI, RA));
510      break;
511    }
512    case Dead: break;
513  }
514}
515
516/// MarkLive - Mark the given return value or argument as live. Additionally,
517/// mark any values that are used by this value (according to Uses) live as
518/// well.
519void DAE::MarkLive(RetOrArg RA) {
520  if (!LiveValues.insert(RA).second)
521    return; // We were already marked Live
522
523  if (RA.IsArg)
524    DOUT << "DAE - Marking argument " << RA.Idx << " to function " << RA.F->getNameStart() << " live\n";
525  else
526    DOUT << "DAE - Marking return value " << RA.Idx << " of function " << RA.F->getNameStart() << " live\n";
527
528  // We don't use upper_bound (or equal_range) here, because our recursive call
529  // to ourselves is likely to mark the upper_bound (which is the first value
530  // not belonging to RA) to become erased and the iterator invalidated.
531  UseMap::iterator Begin = Uses.lower_bound(RA);
532  UseMap::iterator E = Uses.end();
533  UseMap::iterator I;
534  for (I = Begin; I != E && I->first == RA; ++I)
535    MarkLive(I->second);
536
537  // Erase RA from the Uses map (from the lower bound to wherever we ended up
538  // after the loop).
539  Uses.erase(Begin, I);
540}
541
542// RemoveDeadStuffFromFunction - Remove any arguments and return values from F
543// that are not in LiveValues. This function is a noop for any Function created
544// by this function before, or any function that was not inspected for liveness.
545// specified by the DeadArguments list.  Transform the function and all of the
546// callees of the function to not have these arguments.
547//
548bool DAE::RemoveDeadStuffFromFunction(Function *F) {
549  // Quick exit path for external functions
550  if (!F->hasInternalLinkage() && (!ShouldHackArguments() || F->isIntrinsic()))
551    return false;
552
553  // Start by computing a new prototype for the function, which is the same as
554  // the old function, but has fewer arguments and a different return type.
555  const FunctionType *FTy = F->getFunctionType();
556  std::vector<const Type*> Params;
557
558  // Set up to build a new list of parameter attributes
559  SmallVector<ParamAttrsWithIndex, 8> ParamAttrsVec;
560  const PAListPtr &PAL = F->getParamAttrs();
561
562  // The existing function return attributes.
563  ParameterAttributes RAttrs = PAL.getParamAttrs(0);
564
565
566  // Find out the new return value
567
568  const Type *RetTy = FTy->getReturnType();
569  const Type *NRetTy;
570  unsigned RetCount = NumRetVals(F);
571  // Explicitely track if anything changed, for debugging
572  bool Changed = false;
573  // -1 means unused, other numbers are the new index
574  SmallVector<int, 5> NewRetIdxs(RetCount, -1);
575  std::vector<const Type*> RetTypes;
576  if (RetTy != Type::VoidTy) {
577    const StructType *STy = dyn_cast<StructType>(RetTy);
578    if (STy)
579      // Look at each of the original return values individually
580      for (unsigned i = 0; i != RetCount; ++i) {
581        RetOrArg Ret = CreateRet(F, i);
582        if (LiveValues.erase(Ret)) {
583          RetTypes.push_back(STy->getElementType(i));
584          NewRetIdxs[i] = RetTypes.size() - 1;
585        } else {
586          ++NumRetValsEliminated;
587          DOUT << "DAE - Removing return value " << i << " from " << F->getNameStart() << "\n";
588          Changed = true;
589        }
590      }
591    else
592      // We used to return a single value
593      if (LiveValues.erase(CreateRet(F, 0))) {
594        RetTypes.push_back(RetTy);
595        NewRetIdxs[0] = 0;
596      } else {
597        DOUT << "DAE - Removing return value from " << F->getNameStart() << "\n";
598        ++NumRetValsEliminated;
599        Changed = true;
600      }
601    if (RetTypes.size() == 0)
602      // No return types? Make it void
603      NRetTy = Type::VoidTy;
604    else if (RetTypes.size() == 1)
605      // One return type? Just a simple value then
606      NRetTy = RetTypes.front();
607    else
608      // More return types? Return a struct with them
609      NRetTy = StructType::get(RetTypes);
610  } else {
611    NRetTy = Type::VoidTy;
612  }
613
614  // Remove any incompatible attributes
615  RAttrs &= ~ParamAttr::typeIncompatible(NRetTy);
616  if (RAttrs)
617    ParamAttrsVec.push_back(ParamAttrsWithIndex::get(0, RAttrs));
618
619  // Remember which arguments are still alive
620  SmallVector<bool, 10> ArgAlive(FTy->getNumParams(), false);
621  // Construct the new parameter list from non-dead arguments. Also construct
622  // a new set of parameter attributes to correspond. Skip the first parameter
623  // attribute, since that belongs to the return value.
624  unsigned i = 0;
625  for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
626       I != E; ++I, ++i) {
627    RetOrArg Arg = CreateArg(F, i);
628    if (LiveValues.erase(Arg)) {
629      Params.push_back(I->getType());
630      ArgAlive[i] = true;
631
632      // Get the original parameter attributes (skipping the first one, that is
633      // for the return value
634      if (ParameterAttributes Attrs = PAL.getParamAttrs(i + 1))
635        ParamAttrsVec.push_back(ParamAttrsWithIndex::get(Params.size(), Attrs));
636    } else {
637      ++NumArgumentsEliminated;
638      DOUT << "DAE - Removing argument " << i << " (" << I->getNameStart() << ") from " << F->getNameStart() << "\n";
639      Changed = true;
640    }
641  }
642
643  // Reconstruct the ParamAttrsList based on the vector we constructed.
644  PAListPtr NewPAL = PAListPtr::get(ParamAttrsVec.begin(), ParamAttrsVec.end());
645
646  // Work around LLVM bug PR56: the CWriter cannot emit varargs functions which
647  // have zero fixed arguments.
648  //
649  // Not that we apply this hack for a vararg fuction that does not have any
650  // arguments anymore, but did have them before (so don't bother fixing
651  // functions that were already broken wrt CWriter).
652  bool ExtraArgHack = false;
653  if (Params.empty() && FTy->isVarArg() && FTy->getNumParams() != 0) {
654    ExtraArgHack = true;
655    Params.push_back(Type::Int32Ty);
656  }
657
658  // Create the new function type based on the recomputed parameters.
659  FunctionType *NFTy = FunctionType::get(NRetTy, Params, FTy->isVarArg());
660
661  // No change?
662  if (NFTy == FTy)
663    return false;
664
665  // The function type is only allowed to be different if we actually left out
666  // an argument or return value
667  assert(Changed && "Function type changed while no arguments or retrurn values were removed!");
668
669  // Create the new function body and insert it into the module...
670  Function *NF = Function::Create(NFTy, F->getLinkage());
671  NF->copyAttributesFrom(F);
672  NF->setParamAttrs(NewPAL);
673  // Insert the new function before the old function, so we won't be processing
674  // it again
675  F->getParent()->getFunctionList().insert(F, NF);
676  NF->takeName(F);
677
678  // Loop over all of the callers of the function, transforming the call sites
679  // to pass in a smaller number of arguments into the new function.
680  //
681  std::vector<Value*> Args;
682  while (!F->use_empty()) {
683    CallSite CS = CallSite::get(F->use_back());
684    Instruction *Call = CS.getInstruction();
685
686    ParamAttrsVec.clear();
687    const PAListPtr &CallPAL = CS.getParamAttrs();
688
689    // The call return attributes.
690    ParameterAttributes RAttrs = CallPAL.getParamAttrs(0);
691    // Adjust in case the function was changed to return void.
692    RAttrs &= ~ParamAttr::typeIncompatible(NF->getReturnType());
693    if (RAttrs)
694      ParamAttrsVec.push_back(ParamAttrsWithIndex::get(0, RAttrs));
695
696    // Declare these outside of the loops, so we can reuse them for the second
697    // loop, which loops the varargs
698    CallSite::arg_iterator I = CS.arg_begin();
699    unsigned i = 0;
700    // Loop over those operands, corresponding to the normal arguments to the
701    // original function, and add those that are still alive.
702    for (unsigned e = FTy->getNumParams(); i != e; ++I, ++i)
703      if (ArgAlive[i]) {
704        Args.push_back(*I);
705        // Get original parameter attributes, but skip return attributes
706        if (ParameterAttributes Attrs = CallPAL.getParamAttrs(i + 1))
707          ParamAttrsVec.push_back(ParamAttrsWithIndex::get(Args.size(), Attrs));
708      }
709
710    if (ExtraArgHack)
711      Args.push_back(UndefValue::get(Type::Int32Ty));
712
713    // Push any varargs arguments on the list. Don't forget their attributes.
714    for (CallSite::arg_iterator E = CS.arg_end(); I != E; ++I, ++i) {
715      Args.push_back(*I);
716      if (ParameterAttributes Attrs = CallPAL.getParamAttrs(i + 1))
717        ParamAttrsVec.push_back(ParamAttrsWithIndex::get(Args.size(), Attrs));
718    }
719
720    // Reconstruct the ParamAttrsList based on the vector we constructed.
721    PAListPtr NewCallPAL = PAListPtr::get(ParamAttrsVec.begin(),
722                                          ParamAttrsVec.end());
723
724    Instruction *New;
725    if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
726      New = InvokeInst::Create(NF, II->getNormalDest(), II->getUnwindDest(),
727                               Args.begin(), Args.end(), "", Call);
728      cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
729      cast<InvokeInst>(New)->setParamAttrs(NewCallPAL);
730    } else {
731      New = CallInst::Create(NF, Args.begin(), Args.end(), "", Call);
732      cast<CallInst>(New)->setCallingConv(CS.getCallingConv());
733      cast<CallInst>(New)->setParamAttrs(NewCallPAL);
734      if (cast<CallInst>(Call)->isTailCall())
735        cast<CallInst>(New)->setTailCall();
736    }
737    Args.clear();
738
739    if (!Call->use_empty()) {
740      if (New->getType() == Type::VoidTy)
741        // Our return value was unused, replace by null for now, uses will get
742        // removed later on
743        Call->replaceAllUsesWith(Constant::getNullValue(Call->getType()));
744      else if (isa<StructType>(RetTy)) {
745        // The original return value was a struct, update all uses (which are
746        // all extractvalue instructions).
747        for (Value::use_iterator I = Call->use_begin(), E = Call->use_end();
748             I != E;) {
749          assert(isa<ExtractValueInst>(*I) && "Return value not only used by extractvalue?");
750          ExtractValueInst *EV = cast<ExtractValueInst>(*I);
751          // Increment now, since we're about to throw away this use.
752          ++I;
753          assert(EV->hasIndices() && "Return value used by extractvalue without indices?");
754          unsigned Idx = *EV->idx_begin();
755          if (NewRetIdxs[Idx] != -1) {
756            if (RetTypes.size() > 1) {
757              // We're still returning a struct, create a new extractvalue
758              // instruction with the first index updated
759              std::vector<unsigned> NewIdxs(EV->idx_begin(), EV->idx_end());
760              NewIdxs[0] = NewRetIdxs[Idx];
761              Value *NEV = ExtractValueInst::Create(New, NewIdxs.begin(), NewIdxs.end(), "retval", EV);
762              EV->replaceAllUsesWith(NEV);
763              EV->eraseFromParent();
764            } else {
765              // We are now only returning a simple value, remove the
766              // extractvalue
767              EV->replaceAllUsesWith(New);
768              EV->eraseFromParent();
769            }
770          } else {
771            // Value unused, replace uses by null for now, they will get removed
772            // later on
773            EV->replaceAllUsesWith(Constant::getNullValue(EV->getType()));
774            EV->eraseFromParent();
775          }
776        }
777        New->takeName(Call);
778      } else {
779        // The original function had a single return value
780        Call->replaceAllUsesWith(New);
781        New->takeName(Call);
782      }
783    }
784
785    // Finally, remove the old call from the program, reducing the use-count of
786    // F.
787    Call->eraseFromParent();
788  }
789
790  // Since we have now created the new function, splice the body of the old
791  // function right into the new function, leaving the old rotting hulk of the
792  // function empty.
793  NF->getBasicBlockList().splice(NF->begin(), F->getBasicBlockList());
794
795  // Loop over the argument list, transfering uses of the old arguments over to
796  // the new arguments, also transfering over the names as well.
797  i = 0;
798  for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(),
799       I2 = NF->arg_begin(); I != E; ++I, ++i)
800    if (ArgAlive[i]) {
801      // If this is a live argument, move the name and users over to the new
802      // version.
803      I->replaceAllUsesWith(I2);
804      I2->takeName(I);
805      ++I2;
806    } else {
807      // If this argument is dead, replace any uses of it with null constants
808      // (these are guaranteed to become unused later on)
809      I->replaceAllUsesWith(Constant::getNullValue(I->getType()));
810    }
811
812  // If we change the return value of the function we must rewrite any return
813  // instructions.  Check this now.
814  if (F->getReturnType() != NF->getReturnType())
815    for (Function::iterator BB = NF->begin(), E = NF->end(); BB != E; ++BB)
816      if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
817        Value *RetVal;
818
819        if (NFTy->getReturnType() == Type::VoidTy) {
820          RetVal = 0;
821        } else {
822          assert (isa<StructType>(RetTy));
823          // The original return value was a struct, insert
824          // extractvalue/insertvalue chains to extract only the values we need
825          // to return and insert them into our new result.
826          // This does generate messy code, but we'll let it to instcombine to
827          // clean that up
828          Value *OldRet = RI->getOperand(0);
829          // Start out building up our return value from undef
830          RetVal = llvm::UndefValue::get(NRetTy);
831          for (unsigned i = 0; i != RetCount; ++i)
832            if (NewRetIdxs[i] != -1) {
833              ExtractValueInst *EV = ExtractValueInst::Create(OldRet, i, "newret", RI);
834              if (RetTypes.size() > 1) {
835                // We're still returning a struct, so reinsert the value into
836                // our new return value at the new index
837
838                RetVal = InsertValueInst::Create(RetVal, EV, NewRetIdxs[i], "oldret");
839              } else {
840                // We are now only returning a simple value, so just return the
841                // extracted value
842                RetVal = EV;
843              }
844            }
845        }
846        // Replace the return instruction with one returning the new return
847        // value (possibly 0 if we became void).
848        ReturnInst::Create(RetVal, RI);
849        BB->getInstList().erase(RI);
850      }
851
852  // Now that the old function is dead, delete it.
853  F->eraseFromParent();
854
855  return true;
856}
857
858bool DAE::runOnModule(Module &M) {
859  bool Changed = false;
860  // First pass: Do a simple check to see if any functions can have their "..."
861  // removed.  We can do this if they never call va_start.  This loop cannot be
862  // fused with the next loop, because deleting a function invalidates
863  // information computed while surveying other functions.
864  DOUT << "DAE - Deleting dead varargs\n";
865  for (Module::iterator I = M.begin(), E = M.end(); I != E; ) {
866    Function &F = *I++;
867    if (F.getFunctionType()->isVarArg())
868      Changed |= DeleteDeadVarargs(F);
869  }
870
871  // Second phase:loop through the module, determining which arguments are live.
872  // We assume all arguments are dead unless proven otherwise (allowing us to
873  // determine that dead arguments passed into recursive functions are dead).
874  //
875  DOUT << "DAE - Determining liveness\n";
876  for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
877    SurveyFunction(*I);
878
879  // Now, remove all dead arguments and return values from each function in
880  // turn
881  for (Module::iterator I = M.begin(), E = M.end(); I != E; ) {
882    // Increment now, because the function will probably get removed (ie
883    // replaced by a new one)
884    Function *F = I++;
885    Changed |= RemoveDeadStuffFromFunction(F);
886  }
887
888  return Changed;
889}
890