LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DeadArgumentElimination.cpp
Go to the documentation of this file.
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/ADT/DenseMap.h"
23 #include "llvm/ADT/SmallVector.h"
24 #include "llvm/ADT/Statistic.h"
25 #include "llvm/ADT/StringExtras.h"
26 #include "llvm/DIBuilder.h"
27 #include "llvm/DebugInfo.h"
28 #include "llvm/IR/CallingConv.h"
29 #include "llvm/IR/Constant.h"
30 #include "llvm/IR/DerivedTypes.h"
31 #include "llvm/IR/Instructions.h"
32 #include "llvm/IR/IntrinsicInst.h"
33 #include "llvm/IR/LLVMContext.h"
34 #include "llvm/IR/Module.h"
35 #include "llvm/Pass.h"
36 #include "llvm/Support/CallSite.h"
37 #include "llvm/Support/Debug.h"
39 #include <map>
40 #include <set>
41 using namespace llvm;
42 
43 STATISTIC(NumArgumentsEliminated, "Number of unread args removed");
44 STATISTIC(NumRetValsEliminated , "Number of unused return values removed");
45 STATISTIC(NumArgumentsReplacedWithUndef,
46  "Number of unread args replaced with undef");
47 namespace {
48  /// DAE - The dead argument elimination pass.
49  ///
50  class DAE : public ModulePass {
51  public:
52 
53  /// Struct that represents (part of) either a return value or a function
54  /// argument. Used so that arguments and return values can be used
55  /// interchangeably.
56  struct RetOrArg {
57  RetOrArg(const Function *F, unsigned Idx, bool IsArg) : F(F), Idx(Idx),
58  IsArg(IsArg) {}
59  const Function *F;
60  unsigned Idx;
61  bool IsArg;
62 
63  /// Make RetOrArg comparable, so we can put it into a map.
64  bool operator<(const RetOrArg &O) const {
65  if (F != O.F)
66  return F < O.F;
67  else if (Idx != O.Idx)
68  return Idx < O.Idx;
69  else
70  return IsArg < O.IsArg;
71  }
72 
73  /// Make RetOrArg comparable, so we can easily iterate the multimap.
74  bool operator==(const RetOrArg &O) const {
75  return F == O.F && Idx == O.Idx && IsArg == O.IsArg;
76  }
77 
78  std::string getDescription() const {
79  return std::string((IsArg ? "Argument #" : "Return value #"))
80  + utostr(Idx) + " of function " + F->getName().str();
81  }
82  };
83 
84  /// Liveness enum - During our initial pass over the program, we determine
85  /// that things are either alive or maybe alive. We don't mark anything
86  /// explicitly dead (even if we know they are), since anything not alive
87  /// with no registered uses (in Uses) will never be marked alive and will
88  /// thus become dead in the end.
89  enum Liveness { Live, MaybeLive };
90 
91  /// Convenience wrapper
92  RetOrArg CreateRet(const Function *F, unsigned Idx) {
93  return RetOrArg(F, Idx, false);
94  }
95  /// Convenience wrapper
96  RetOrArg CreateArg(const Function *F, unsigned Idx) {
97  return RetOrArg(F, Idx, true);
98  }
99 
100  typedef std::multimap<RetOrArg, RetOrArg> UseMap;
101  /// This maps a return value or argument to any MaybeLive return values or
102  /// arguments it uses. This allows the MaybeLive values to be marked live
103  /// when any of its users is marked live.
104  /// For example (indices are left out for clarity):
105  /// - Uses[ret F] = ret G
106  /// This means that F calls G, and F returns the value returned by G.
107  /// - Uses[arg F] = ret G
108  /// This means that some function calls G and passes its result as an
109  /// argument to F.
110  /// - Uses[ret F] = arg F
111  /// This means that F returns one of its own arguments.
112  /// - Uses[arg F] = arg G
113  /// This means that G calls F and passes one of its own (G's) arguments
114  /// directly to F.
115  UseMap Uses;
116 
117  typedef std::set<RetOrArg> LiveSet;
118  typedef std::set<const Function*> LiveFuncSet;
119 
120  /// This set contains all values that have been determined to be live.
121  LiveSet LiveValues;
122  /// This set contains all values that are cannot be changed in any way.
123  LiveFuncSet LiveFunctions;
124 
125  typedef SmallVector<RetOrArg, 5> UseVector;
126 
127  // Map each LLVM function to corresponding metadata with debug info. If
128  // the function is replaced with another one, we should patch the pointer
129  // to LLVM function in metadata.
130  // As the code generation for module is finished (and DIBuilder is
131  // finalized) we assume that subprogram descriptors won't be changed, and
132  // they are stored in map for short duration anyway.
133  typedef DenseMap<Function*, DISubprogram> FunctionDIMap;
134  FunctionDIMap FunctionDIs;
135 
136  protected:
137  // DAH uses this to specify a different ID.
138  explicit DAE(char &ID) : ModulePass(ID) {}
139 
140  public:
141  static char ID; // Pass identification, replacement for typeid
142  DAE() : ModulePass(ID) {
144  }
145 
146  bool runOnModule(Module &M);
147 
148  virtual bool ShouldHackArguments() const { return false; }
149 
150  private:
151  Liveness MarkIfNotLive(RetOrArg Use, UseVector &MaybeLiveUses);
152  Liveness SurveyUse(Value::const_use_iterator U, UseVector &MaybeLiveUses,
153  unsigned RetValNum = 0);
154  Liveness SurveyUses(const Value *V, UseVector &MaybeLiveUses);
155 
156  void CollectFunctionDIs(Module &M);
157  void SurveyFunction(const Function &F);
158  void MarkValue(const RetOrArg &RA, Liveness L,
159  const UseVector &MaybeLiveUses);
160  void MarkLive(const RetOrArg &RA);
161  void MarkLive(const Function &F);
162  void PropagateLiveness(const RetOrArg &RA);
163  bool RemoveDeadStuffFromFunction(Function *F);
164  bool DeleteDeadVarargs(Function &Fn);
165  bool RemoveDeadArgumentsFromCallers(Function &Fn);
166  };
167 }
168 
169 
170 char DAE::ID = 0;
171 INITIALIZE_PASS(DAE, "deadargelim", "Dead Argument Elimination", false, false)
172 
173 namespace {
174  /// DAH - DeadArgumentHacking pass - Same as dead argument elimination, but
175  /// deletes arguments to functions which are external. This is only for use
176  /// by bugpoint.
177  struct DAH : public DAE {
178  static char ID;
179  DAH() : DAE(ID) {}
180 
181  virtual bool ShouldHackArguments() const { return true; }
182  };
183 }
184 
185 char DAH::ID = 0;
186 INITIALIZE_PASS(DAH, "deadarghaX0r",
187  "Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE)",
188  false, false)
189 
190 /// createDeadArgEliminationPass - This pass removes arguments from functions
191 /// which are not used by the body of the function.
192 ///
193 ModulePass *llvm::createDeadArgEliminationPass() { return new DAE(); }
195 
196 /// CollectFunctionDIs - Map each function in the module to its debug info
197 /// descriptor.
198 void DAE::CollectFunctionDIs(Module &M) {
199  FunctionDIs.clear();
200 
202  E = M.named_metadata_end(); I != E; ++I) {
203  NamedMDNode &NMD = *I;
204  for (unsigned MDIndex = 0, MDNum = NMD.getNumOperands();
205  MDIndex < MDNum; ++MDIndex) {
206  MDNode *Node = NMD.getOperand(MDIndex);
207  if (!DIDescriptor(Node).isCompileUnit())
208  continue;
209  DICompileUnit CU(Node);
210  const DIArray &SPs = CU.getSubprograms();
211  for (unsigned SPIndex = 0, SPNum = SPs.getNumElements();
212  SPIndex < SPNum; ++SPIndex) {
213  DISubprogram SP(SPs.getElement(SPIndex));
214  assert((!SP || SP.isSubprogram()) &&
215  "A MDNode in subprograms of a CU should be null or a DISubprogram.");
216  if (!SP)
217  continue;
218  if (Function *F = SP.getFunction())
219  FunctionDIs[F] = SP;
220  }
221  }
222  }
223 }
224 
225 /// DeleteDeadVarargs - If this is an function that takes a ... list, and if
226 /// llvm.vastart is never called, the varargs list is dead for the function.
227 bool DAE::DeleteDeadVarargs(Function &Fn) {
228  assert(Fn.getFunctionType()->isVarArg() && "Function isn't varargs!");
229  if (Fn.isDeclaration() || !Fn.hasLocalLinkage()) return false;
230 
231  // Ensure that the function is only directly called.
232  if (Fn.hasAddressTaken())
233  return false;
234 
235  // Okay, we know we can transform this function if safe. Scan its body
236  // looking for calls to llvm.vastart.
237  for (Function::iterator BB = Fn.begin(), E = Fn.end(); BB != E; ++BB) {
238  for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
239  if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) {
240  if (II->getIntrinsicID() == Intrinsic::vastart)
241  return false;
242  }
243  }
244  }
245 
246  // If we get here, there are no calls to llvm.vastart in the function body,
247  // remove the "..." and adjust all the calls.
248 
249  // Start by computing a new prototype for the function, which is the same as
250  // the old function, but doesn't have isVarArg set.
251  FunctionType *FTy = Fn.getFunctionType();
252 
253  std::vector<Type*> Params(FTy->param_begin(), FTy->param_end());
255  Params, false);
256  unsigned NumArgs = Params.size();
257 
258  // Create the new function body and insert it into the module...
259  Function *NF = Function::Create(NFTy, Fn.getLinkage());
260  NF->copyAttributesFrom(&Fn);
261  Fn.getParent()->getFunctionList().insert(&Fn, NF);
262  NF->takeName(&Fn);
263 
264  // Loop over all of the callers of the function, transforming the call sites
265  // to pass in a smaller number of arguments into the new function.
266  //
267  std::vector<Value*> Args;
268  for (Value::use_iterator I = Fn.use_begin(), E = Fn.use_end(); I != E; ) {
269  CallSite CS(*I++);
270  if (!CS)
271  continue;
272  Instruction *Call = CS.getInstruction();
273 
274  // Pass all the same arguments.
275  Args.assign(CS.arg_begin(), CS.arg_begin() + NumArgs);
276 
277  // Drop any attributes that were on the vararg arguments.
278  AttributeSet PAL = CS.getAttributes();
279  if (!PAL.isEmpty() && PAL.getSlotIndex(PAL.getNumSlots() - 1) > NumArgs) {
280  SmallVector<AttributeSet, 8> AttributesVec;
281  for (unsigned i = 0; PAL.getSlotIndex(i) <= NumArgs; ++i)
282  AttributesVec.push_back(PAL.getSlotAttributes(i));
283  if (PAL.hasAttributes(AttributeSet::FunctionIndex))
284  AttributesVec.push_back(AttributeSet::get(Fn.getContext(),
285  PAL.getFnAttributes()));
286  PAL = AttributeSet::get(Fn.getContext(), AttributesVec);
287  }
288 
289  Instruction *New;
290  if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
291  New = InvokeInst::Create(NF, II->getNormalDest(), II->getUnwindDest(),
292  Args, "", Call);
293  cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
294  cast<InvokeInst>(New)->setAttributes(PAL);
295  } else {
296  New = CallInst::Create(NF, Args, "", Call);
297  cast<CallInst>(New)->setCallingConv(CS.getCallingConv());
298  cast<CallInst>(New)->setAttributes(PAL);
299  if (cast<CallInst>(Call)->isTailCall())
300  cast<CallInst>(New)->setTailCall();
301  }
302  New->setDebugLoc(Call->getDebugLoc());
303 
304  Args.clear();
305 
306  if (!Call->use_empty())
307  Call->replaceAllUsesWith(New);
308 
309  New->takeName(Call);
310 
311  // Finally, remove the old call from the program, reducing the use-count of
312  // F.
313  Call->eraseFromParent();
314  }
315 
316  // Since we have now created the new function, splice the body of the old
317  // function right into the new function, leaving the old rotting hulk of the
318  // function empty.
319  NF->getBasicBlockList().splice(NF->begin(), Fn.getBasicBlockList());
320 
321  // Loop over the argument list, transferring uses of the old arguments over to
322  // the new arguments, also transferring over the names as well. While we're at
323  // it, remove the dead arguments from the DeadArguments list.
324  //
325  for (Function::arg_iterator I = Fn.arg_begin(), E = Fn.arg_end(),
326  I2 = NF->arg_begin(); I != E; ++I, ++I2) {
327  // Move the name and users over to the new version.
328  I->replaceAllUsesWith(I2);
329  I2->takeName(I);
330  }
331 
332  // Patch the pointer to LLVM function in debug info descriptor.
333  FunctionDIMap::iterator DI = FunctionDIs.find(&Fn);
334  if (DI != FunctionDIs.end())
335  DI->second.replaceFunction(NF);
336 
337  // Fix up any BlockAddresses that refer to the function.
339  // Delete the bitcast that we just created, so that NF does not
340  // appear to be address-taken.
342  // Finally, nuke the old function.
343  Fn.eraseFromParent();
344  return true;
345 }
346 
347 /// RemoveDeadArgumentsFromCallers - Checks if the given function has any
348 /// arguments that are unused, and changes the caller parameters to be undefined
349 /// instead.
350 bool DAE::RemoveDeadArgumentsFromCallers(Function &Fn)
351 {
352  if (Fn.isDeclaration() || Fn.mayBeOverridden())
353  return false;
354 
355  // Functions with local linkage should already have been handled, except the
356  // fragile (variadic) ones which we can improve here.
357  if (Fn.hasLocalLinkage() && !Fn.getFunctionType()->isVarArg())
358  return false;
359 
360  // If a function seen at compile time is not necessarily the one linked to
361  // the binary being built, it is illegal to change the actual arguments
362  // passed to it. These functions can be captured by isWeakForLinker().
363  // *NOTE* that mayBeOverridden() is insufficient for this purpose as it
364  // doesn't include linkage types like AvailableExternallyLinkage and
365  // LinkOnceODRLinkage. Take link_odr* as an example, it indicates a set of
366  // *EQUIVALENT* globals that can be merged at link-time. However, the
367  // semantic of *EQUIVALENT*-functions includes parameters. Changing
368  // parameters breaks this assumption.
369  //
370  if (Fn.isWeakForLinker())
371  return false;
372 
373  if (Fn.use_empty())
374  return false;
375 
376  SmallVector<unsigned, 8> UnusedArgs;
377  for (Function::arg_iterator I = Fn.arg_begin(), E = Fn.arg_end();
378  I != E; ++I) {
379  Argument *Arg = I;
380 
381  if (Arg->use_empty() && !Arg->hasByValAttr())
382  UnusedArgs.push_back(Arg->getArgNo());
383  }
384 
385  if (UnusedArgs.empty())
386  return false;
387 
388  bool Changed = false;
389 
390  for (Function::use_iterator I = Fn.use_begin(), E = Fn.use_end();
391  I != E; ++I) {
392  CallSite CS(*I);
393  if (!CS || !CS.isCallee(I))
394  continue;
395 
396  // Now go through all unused args and replace them with "undef".
397  for (unsigned I = 0, E = UnusedArgs.size(); I != E; ++I) {
398  unsigned ArgNo = UnusedArgs[I];
399 
400  Value *Arg = CS.getArgument(ArgNo);
401  CS.setArgument(ArgNo, UndefValue::get(Arg->getType()));
402  ++NumArgumentsReplacedWithUndef;
403  Changed = true;
404  }
405  }
406 
407  return Changed;
408 }
409 
410 /// Convenience function that returns the number of return values. It returns 0
411 /// for void functions and 1 for functions not returning a struct. It returns
412 /// the number of struct elements for functions returning a struct.
413 static unsigned NumRetVals(const Function *F) {
414  if (F->getReturnType()->isVoidTy())
415  return 0;
416  else if (StructType *STy = dyn_cast<StructType>(F->getReturnType()))
417  return STy->getNumElements();
418  else
419  return 1;
420 }
421 
422 /// MarkIfNotLive - This checks Use for liveness in LiveValues. If Use is not
423 /// live, it adds Use to the MaybeLiveUses argument. Returns the determined
424 /// liveness of Use.
425 DAE::Liveness DAE::MarkIfNotLive(RetOrArg Use, UseVector &MaybeLiveUses) {
426  // We're live if our use or its Function is already marked as live.
427  if (LiveFunctions.count(Use.F) || LiveValues.count(Use))
428  return Live;
429 
430  // We're maybe live otherwise, but remember that we must become live if
431  // Use becomes live.
432  MaybeLiveUses.push_back(Use);
433  return MaybeLive;
434 }
435 
436 
437 /// SurveyUse - This looks at a single use of an argument or return value
438 /// and determines if it should be alive or not. Adds this use to MaybeLiveUses
439 /// if it causes the used value to become MaybeLive.
440 ///
441 /// RetValNum is the return value number to use when this use is used in a
442 /// return instruction. This is used in the recursion, you should always leave
443 /// it at 0.
444 DAE::Liveness DAE::SurveyUse(Value::const_use_iterator U,
445  UseVector &MaybeLiveUses, unsigned RetValNum) {
446  const User *V = *U;
447  if (const ReturnInst *RI = dyn_cast<ReturnInst>(V)) {
448  // The value is returned from a function. It's only live when the
449  // function's return value is live. We use RetValNum here, for the case
450  // that U is really a use of an insertvalue instruction that uses the
451  // original Use.
452  RetOrArg Use = CreateRet(RI->getParent()->getParent(), RetValNum);
453  // We might be live, depending on the liveness of Use.
454  return MarkIfNotLive(Use, MaybeLiveUses);
455  }
456  if (const InsertValueInst *IV = dyn_cast<InsertValueInst>(V)) {
458  && IV->hasIndices())
459  // The use we are examining is inserted into an aggregate. Our liveness
460  // depends on all uses of that aggregate, but if it is used as a return
461  // value, only index at which we were inserted counts.
462  RetValNum = *IV->idx_begin();
463 
464  // Note that if we are used as the aggregate operand to the insertvalue,
465  // we don't change RetValNum, but do survey all our uses.
466 
467  Liveness Result = MaybeLive;
468  for (Value::const_use_iterator I = IV->use_begin(),
469  E = V->use_end(); I != E; ++I) {
470  Result = SurveyUse(I, MaybeLiveUses, RetValNum);
471  if (Result == Live)
472  break;
473  }
474  return Result;
475  }
476 
477  if (ImmutableCallSite CS = V) {
478  const Function *F = CS.getCalledFunction();
479  if (F) {
480  // Used in a direct call.
481 
482  // Find the argument number. We know for sure that this use is an
483  // argument, since if it was the function argument this would be an
484  // indirect call and the we know can't be looking at a value of the
485  // label type (for the invoke instruction).
486  unsigned ArgNo = CS.getArgumentNo(U);
487 
488  if (ArgNo >= F->getFunctionType()->getNumParams())
489  // The value is passed in through a vararg! Must be live.
490  return Live;
491 
492  assert(CS.getArgument(ArgNo)
493  == CS->getOperand(U.getOperandNo())
494  && "Argument is not where we expected it");
495 
496  // Value passed to a normal call. It's only live when the corresponding
497  // argument to the called function turns out live.
498  RetOrArg Use = CreateArg(F, ArgNo);
499  return MarkIfNotLive(Use, MaybeLiveUses);
500  }
501  }
502  // Used in any other way? Value must be live.
503  return Live;
504 }
505 
506 /// SurveyUses - This looks at all the uses of the given value
507 /// Returns the Liveness deduced from the uses of this value.
508 ///
509 /// Adds all uses that cause the result to be MaybeLive to MaybeLiveRetUses. If
510 /// the result is Live, MaybeLiveUses might be modified but its content should
511 /// be ignored (since it might not be complete).
512 DAE::Liveness DAE::SurveyUses(const Value *V, UseVector &MaybeLiveUses) {
513  // Assume it's dead (which will only hold if there are no uses at all..).
514  Liveness Result = MaybeLive;
515  // Check each use.
517  E = V->use_end(); I != E; ++I) {
518  Result = SurveyUse(I, MaybeLiveUses);
519  if (Result == Live)
520  break;
521  }
522  return Result;
523 }
524 
525 // SurveyFunction - This performs the initial survey of the specified function,
526 // checking out whether or not it uses any of its incoming arguments or whether
527 // any callers use the return value. This fills in the LiveValues set and Uses
528 // map.
529 //
530 // We consider arguments of non-internal functions to be intrinsically alive as
531 // well as arguments to functions which have their "address taken".
532 //
533 void DAE::SurveyFunction(const Function &F) {
534  unsigned RetCount = NumRetVals(&F);
535  // Assume all return values are dead
536  typedef SmallVector<Liveness, 5> RetVals;
537  RetVals RetValLiveness(RetCount, MaybeLive);
538 
539  typedef SmallVector<UseVector, 5> RetUses;
540  // These vectors map each return value to the uses that make it MaybeLive, so
541  // we can add those to the Uses map if the return value really turns out to be
542  // MaybeLive. Initialized to a list of RetCount empty lists.
543  RetUses MaybeLiveRetUses(RetCount);
544 
545  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
546  if (const ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator()))
547  if (RI->getNumOperands() != 0 && RI->getOperand(0)->getType()
548  != F.getFunctionType()->getReturnType()) {
549  // We don't support old style multiple return values.
550  MarkLive(F);
551  return;
552  }
553 
554  if (!F.hasLocalLinkage() && (!ShouldHackArguments() || F.isIntrinsic())) {
555  MarkLive(F);
556  return;
557  }
558 
559  DEBUG(dbgs() << "DAE - Inspecting callers for fn: " << F.getName() << "\n");
560  // Keep track of the number of live retvals, so we can skip checks once all
561  // of them turn out to be live.
562  unsigned NumLiveRetVals = 0;
563  Type *STy = dyn_cast<StructType>(F.getReturnType());
564  // Loop all uses of the function.
565  for (Value::const_use_iterator I = F.use_begin(), E = F.use_end();
566  I != E; ++I) {
567  // If the function is PASSED IN as an argument, its address has been
568  // taken.
569  ImmutableCallSite CS(*I);
570  if (!CS || !CS.isCallee(I)) {
571  MarkLive(F);
572  return;
573  }
574 
575  // If this use is anything other than a call site, the function is alive.
576  const Instruction *TheCall = CS.getInstruction();
577  if (!TheCall) { // Not a direct call site?
578  MarkLive(F);
579  return;
580  }
581 
582  // If we end up here, we are looking at a direct call to our function.
583 
584  // Now, check how our return value(s) is/are used in this caller. Don't
585  // bother checking return values if all of them are live already.
586  if (NumLiveRetVals != RetCount) {
587  if (STy) {
588  // Check all uses of the return value.
589  for (Value::const_use_iterator I = TheCall->use_begin(),
590  E = TheCall->use_end(); I != E; ++I) {
592  if (Ext && Ext->hasIndices()) {
593  // This use uses a part of our return value, survey the uses of
594  // that part and store the results for this index only.
595  unsigned Idx = *Ext->idx_begin();
596  if (RetValLiveness[Idx] != Live) {
597  RetValLiveness[Idx] = SurveyUses(Ext, MaybeLiveRetUses[Idx]);
598  if (RetValLiveness[Idx] == Live)
599  NumLiveRetVals++;
600  }
601  } else {
602  // Used by something else than extractvalue. Mark all return
603  // values as live.
604  for (unsigned i = 0; i != RetCount; ++i )
605  RetValLiveness[i] = Live;
606  NumLiveRetVals = RetCount;
607  break;
608  }
609  }
610  } else {
611  // Single return value
612  RetValLiveness[0] = SurveyUses(TheCall, MaybeLiveRetUses[0]);
613  if (RetValLiveness[0] == Live)
614  NumLiveRetVals = RetCount;
615  }
616  }
617  }
618 
619  // Now we've inspected all callers, record the liveness of our return values.
620  for (unsigned i = 0; i != RetCount; ++i)
621  MarkValue(CreateRet(&F, i), RetValLiveness[i], MaybeLiveRetUses[i]);
622 
623  DEBUG(dbgs() << "DAE - Inspecting args for fn: " << F.getName() << "\n");
624 
625  // Now, check all of our arguments.
626  unsigned i = 0;
627  UseVector MaybeLiveArgUses;
629  E = F.arg_end(); AI != E; ++AI, ++i) {
630  Liveness Result;
631  if (F.getFunctionType()->isVarArg()) {
632  // Variadic functions will already have a va_arg function expanded inside
633  // them, making them potentially very sensitive to ABI changes resulting
634  // from removing arguments entirely, so don't. For example AArch64 handles
635  // register and stack HFAs very differently, and this is reflected in the
636  // IR which has already been generated.
637  Result = Live;
638  } else {
639  // See what the effect of this use is (recording any uses that cause
640  // MaybeLive in MaybeLiveArgUses).
641  Result = SurveyUses(AI, MaybeLiveArgUses);
642  }
643 
644  // Mark the result.
645  MarkValue(CreateArg(&F, i), Result, MaybeLiveArgUses);
646  // Clear the vector again for the next iteration.
647  MaybeLiveArgUses.clear();
648  }
649 }
650 
651 /// MarkValue - This function marks the liveness of RA depending on L. If L is
652 /// MaybeLive, it also takes all uses in MaybeLiveUses and records them in Uses,
653 /// such that RA will be marked live if any use in MaybeLiveUses gets marked
654 /// live later on.
655 void DAE::MarkValue(const RetOrArg &RA, Liveness L,
656  const UseVector &MaybeLiveUses) {
657  switch (L) {
658  case Live: MarkLive(RA); break;
659  case MaybeLive:
660  {
661  // Note any uses of this value, so this return value can be
662  // marked live whenever one of the uses becomes live.
663  for (UseVector::const_iterator UI = MaybeLiveUses.begin(),
664  UE = MaybeLiveUses.end(); UI != UE; ++UI)
665  Uses.insert(std::make_pair(*UI, RA));
666  break;
667  }
668  }
669 }
670 
671 /// MarkLive - Mark the given Function as alive, meaning that it cannot be
672 /// changed in any way. Additionally,
673 /// mark any values that are used as this function's parameters or by its return
674 /// values (according to Uses) live as well.
675 void DAE::MarkLive(const Function &F) {
676  DEBUG(dbgs() << "DAE - Intrinsically live fn: " << F.getName() << "\n");
677  // Mark the function as live.
678  LiveFunctions.insert(&F);
679  // Mark all arguments as live.
680  for (unsigned i = 0, e = F.arg_size(); i != e; ++i)
681  PropagateLiveness(CreateArg(&F, i));
682  // Mark all return values as live.
683  for (unsigned i = 0, e = NumRetVals(&F); i != e; ++i)
684  PropagateLiveness(CreateRet(&F, i));
685 }
686 
687 /// MarkLive - Mark the given return value or argument as live. Additionally,
688 /// mark any values that are used by this value (according to Uses) live as
689 /// well.
690 void DAE::MarkLive(const RetOrArg &RA) {
691  if (LiveFunctions.count(RA.F))
692  return; // Function was already marked Live.
693 
694  if (!LiveValues.insert(RA).second)
695  return; // We were already marked Live.
696 
697  DEBUG(dbgs() << "DAE - Marking " << RA.getDescription() << " live\n");
698  PropagateLiveness(RA);
699 }
700 
701 /// PropagateLiveness - Given that RA is a live value, propagate it's liveness
702 /// to any other values it uses (according to Uses).
703 void DAE::PropagateLiveness(const RetOrArg &RA) {
704  // We don't use upper_bound (or equal_range) here, because our recursive call
705  // to ourselves is likely to cause the upper_bound (which is the first value
706  // not belonging to RA) to become erased and the iterator invalidated.
707  UseMap::iterator Begin = Uses.lower_bound(RA);
708  UseMap::iterator E = Uses.end();
709  UseMap::iterator I;
710  for (I = Begin; I != E && I->first == RA; ++I)
711  MarkLive(I->second);
712 
713  // Erase RA from the Uses map (from the lower bound to wherever we ended up
714  // after the loop).
715  Uses.erase(Begin, I);
716 }
717 
718 // RemoveDeadStuffFromFunction - Remove any arguments and return values from F
719 // that are not in LiveValues. Transform the function and all of the callees of
720 // the function to not have these arguments and return values.
721 //
722 bool DAE::RemoveDeadStuffFromFunction(Function *F) {
723  // Don't modify fully live functions
724  if (LiveFunctions.count(F))
725  return false;
726 
727  // Start by computing a new prototype for the function, which is the same as
728  // the old function, but has fewer arguments and a different return type.
729  FunctionType *FTy = F->getFunctionType();
730  std::vector<Type*> Params;
731 
732  // Keep track of if we have a live 'returned' argument
733  bool HasLiveReturnedArg = false;
734 
735  // Set up to build a new list of parameter attributes.
736  SmallVector<AttributeSet, 8> AttributesVec;
737  const AttributeSet &PAL = F->getAttributes();
738 
739  // Remember which arguments are still alive.
740  SmallVector<bool, 10> ArgAlive(FTy->getNumParams(), false);
741  // Construct the new parameter list from non-dead arguments. Also construct
742  // a new set of parameter attributes to correspond. Skip the first parameter
743  // attribute, since that belongs to the return value.
744  unsigned i = 0;
745  for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
746  I != E; ++I, ++i) {
747  RetOrArg Arg = CreateArg(F, i);
748  if (LiveValues.erase(Arg)) {
749  Params.push_back(I->getType());
750  ArgAlive[i] = true;
751 
752  // Get the original parameter attributes (skipping the first one, that is
753  // for the return value.
754  if (PAL.hasAttributes(i + 1)) {
755  AttrBuilder B(PAL, i + 1);
756  if (B.contains(Attribute::Returned))
757  HasLiveReturnedArg = true;
758  AttributesVec.
759  push_back(AttributeSet::get(F->getContext(), Params.size(), B));
760  }
761  } else {
762  ++NumArgumentsEliminated;
763  DEBUG(dbgs() << "DAE - Removing argument " << i << " (" << I->getName()
764  << ") from " << F->getName() << "\n");
765  }
766  }
767 
768  // Find out the new return value.
769  Type *RetTy = FTy->getReturnType();
770  Type *NRetTy = NULL;
771  unsigned RetCount = NumRetVals(F);
772 
773  // -1 means unused, other numbers are the new index
774  SmallVector<int, 5> NewRetIdxs(RetCount, -1);
775  std::vector<Type*> RetTypes;
776 
777  // If there is a function with a live 'returned' argument but a dead return
778  // value, then there are two possible actions:
779  // 1) Eliminate the return value and take off the 'returned' attribute on the
780  // argument.
781  // 2) Retain the 'returned' attribute and treat the return value (but not the
782  // entire function) as live so that it is not eliminated.
783  //
784  // It's not clear in the general case which option is more profitable because,
785  // even in the absence of explicit uses of the return value, code generation
786  // is free to use the 'returned' attribute to do things like eliding
787  // save/restores of registers across calls. Whether or not this happens is
788  // target and ABI-specific as well as depending on the amount of register
789  // pressure, so there's no good way for an IR-level pass to figure this out.
790  //
791  // Fortunately, the only places where 'returned' is currently generated by
792  // the FE are places where 'returned' is basically free and almost always a
793  // performance win, so the second option can just be used always for now.
794  //
795  // This should be revisited if 'returned' is ever applied more liberally.
796  if (RetTy->isVoidTy() || HasLiveReturnedArg) {
797  NRetTy = RetTy;
798  } else {
799  StructType *STy = dyn_cast<StructType>(RetTy);
800  if (STy)
801  // Look at each of the original return values individually.
802  for (unsigned i = 0; i != RetCount; ++i) {
803  RetOrArg Ret = CreateRet(F, i);
804  if (LiveValues.erase(Ret)) {
805  RetTypes.push_back(STy->getElementType(i));
806  NewRetIdxs[i] = RetTypes.size() - 1;
807  } else {
808  ++NumRetValsEliminated;
809  DEBUG(dbgs() << "DAE - Removing return value " << i << " from "
810  << F->getName() << "\n");
811  }
812  }
813  else
814  // We used to return a single value.
815  if (LiveValues.erase(CreateRet(F, 0))) {
816  RetTypes.push_back(RetTy);
817  NewRetIdxs[0] = 0;
818  } else {
819  DEBUG(dbgs() << "DAE - Removing return value from " << F->getName()
820  << "\n");
821  ++NumRetValsEliminated;
822  }
823  if (RetTypes.size() > 1)
824  // More than one return type? Return a struct with them. Also, if we used
825  // to return a struct and didn't change the number of return values,
826  // return a struct again. This prevents changing {something} into
827  // something and {} into void.
828  // Make the new struct packed if we used to return a packed struct
829  // already.
830  NRetTy = StructType::get(STy->getContext(), RetTypes, STy->isPacked());
831  else if (RetTypes.size() == 1)
832  // One return type? Just a simple value then, but only if we didn't use to
833  // return a struct with that simple value before.
834  NRetTy = RetTypes.front();
835  else if (RetTypes.size() == 0)
836  // No return types? Make it void, but only if we didn't use to return {}.
837  NRetTy = Type::getVoidTy(F->getContext());
838  }
839 
840  assert(NRetTy && "No new return type found?");
841 
842  // The existing function return attributes.
843  AttributeSet RAttrs = PAL.getRetAttributes();
844 
845  // Remove any incompatible attributes, but only if we removed all return
846  // values. Otherwise, ensure that we don't have any conflicting attributes
847  // here. Currently, this should not be possible, but special handling might be
848  // required when new return value attributes are added.
849  if (NRetTy->isVoidTy())
850  RAttrs =
851  AttributeSet::get(NRetTy->getContext(), AttributeSet::ReturnIndex,
852  AttrBuilder(RAttrs, AttributeSet::ReturnIndex).
853  removeAttributes(AttributeFuncs::
854  typeIncompatible(NRetTy, AttributeSet::ReturnIndex),
855  AttributeSet::ReturnIndex));
856  else
857  assert(!AttrBuilder(RAttrs, AttributeSet::ReturnIndex).
858  hasAttributes(AttributeFuncs::
859  typeIncompatible(NRetTy, AttributeSet::ReturnIndex),
860  AttributeSet::ReturnIndex) &&
861  "Return attributes no longer compatible?");
862 
863  if (RAttrs.hasAttributes(AttributeSet::ReturnIndex))
864  AttributesVec.push_back(AttributeSet::get(NRetTy->getContext(), RAttrs));
865 
866  if (PAL.hasAttributes(AttributeSet::FunctionIndex))
867  AttributesVec.push_back(AttributeSet::get(F->getContext(),
868  PAL.getFnAttributes()));
869 
870  // Reconstruct the AttributesList based on the vector we constructed.
871  AttributeSet NewPAL = AttributeSet::get(F->getContext(), AttributesVec);
872 
873  // Create the new function type based on the recomputed parameters.
874  FunctionType *NFTy = FunctionType::get(NRetTy, Params, FTy->isVarArg());
875 
876  // No change?
877  if (NFTy == FTy)
878  return false;
879 
880  // Create the new function body and insert it into the module...
881  Function *NF = Function::Create(NFTy, F->getLinkage());
882  NF->copyAttributesFrom(F);
883  NF->setAttributes(NewPAL);
884  // Insert the new function before the old function, so we won't be processing
885  // it again.
886  F->getParent()->getFunctionList().insert(F, NF);
887  NF->takeName(F);
888 
889  // Loop over all of the callers of the function, transforming the call sites
890  // to pass in a smaller number of arguments into the new function.
891  //
892  std::vector<Value*> Args;
893  while (!F->use_empty()) {
894  CallSite CS(F->use_back());
895  Instruction *Call = CS.getInstruction();
896 
897  AttributesVec.clear();
898  const AttributeSet &CallPAL = CS.getAttributes();
899 
900  // The call return attributes.
901  AttributeSet RAttrs = CallPAL.getRetAttributes();
902 
903  // Adjust in case the function was changed to return void.
904  RAttrs =
905  AttributeSet::get(NF->getContext(), AttributeSet::ReturnIndex,
906  AttrBuilder(RAttrs, AttributeSet::ReturnIndex).
907  removeAttributes(AttributeFuncs::
909  AttributeSet::ReturnIndex),
910  AttributeSet::ReturnIndex));
911  if (RAttrs.hasAttributes(AttributeSet::ReturnIndex))
912  AttributesVec.push_back(AttributeSet::get(NF->getContext(), RAttrs));
913 
914  // Declare these outside of the loops, so we can reuse them for the second
915  // loop, which loops the varargs.
916  CallSite::arg_iterator I = CS.arg_begin();
917  unsigned i = 0;
918  // Loop over those operands, corresponding to the normal arguments to the
919  // original function, and add those that are still alive.
920  for (unsigned e = FTy->getNumParams(); i != e; ++I, ++i)
921  if (ArgAlive[i]) {
922  Args.push_back(*I);
923  // Get original parameter attributes, but skip return attributes.
924  if (CallPAL.hasAttributes(i + 1)) {
925  AttrBuilder B(CallPAL, i + 1);
926  // If the return type has changed, then get rid of 'returned' on the
927  // call site. The alternative is to make all 'returned' attributes on
928  // call sites keep the return value alive just like 'returned'
929  // attributes on function declaration but it's less clearly a win
930  // and this is not an expected case anyway
931  if (NRetTy != RetTy && B.contains(Attribute::Returned))
932  B.removeAttribute(Attribute::Returned);
933  AttributesVec.
934  push_back(AttributeSet::get(F->getContext(), Args.size(), B));
935  }
936  }
937 
938  // Push any varargs arguments on the list. Don't forget their attributes.
939  for (CallSite::arg_iterator E = CS.arg_end(); I != E; ++I, ++i) {
940  Args.push_back(*I);
941  if (CallPAL.hasAttributes(i + 1)) {
942  AttrBuilder B(CallPAL, i + 1);
943  AttributesVec.
944  push_back(AttributeSet::get(F->getContext(), Args.size(), B));
945  }
946  }
947 
948  if (CallPAL.hasAttributes(AttributeSet::FunctionIndex))
949  AttributesVec.push_back(AttributeSet::get(Call->getContext(),
950  CallPAL.getFnAttributes()));
951 
952  // Reconstruct the AttributesList based on the vector we constructed.
953  AttributeSet NewCallPAL = AttributeSet::get(F->getContext(), AttributesVec);
954 
955  Instruction *New;
956  if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
957  New = InvokeInst::Create(NF, II->getNormalDest(), II->getUnwindDest(),
958  Args, "", Call);
959  cast<InvokeInst>(New)->setCallingConv(CS.getCallingConv());
960  cast<InvokeInst>(New)->setAttributes(NewCallPAL);
961  } else {
962  New = CallInst::Create(NF, Args, "", Call);
963  cast<CallInst>(New)->setCallingConv(CS.getCallingConv());
964  cast<CallInst>(New)->setAttributes(NewCallPAL);
965  if (cast<CallInst>(Call)->isTailCall())
966  cast<CallInst>(New)->setTailCall();
967  }
968  New->setDebugLoc(Call->getDebugLoc());
969 
970  Args.clear();
971 
972  if (!Call->use_empty()) {
973  if (New->getType() == Call->getType()) {
974  // Return type not changed? Just replace users then.
975  Call->replaceAllUsesWith(New);
976  New->takeName(Call);
977  } else if (New->getType()->isVoidTy()) {
978  // Our return value has uses, but they will get removed later on.
979  // Replace by null for now.
980  if (!Call->getType()->isX86_MMXTy())
981  Call->replaceAllUsesWith(Constant::getNullValue(Call->getType()));
982  } else {
983  assert(RetTy->isStructTy() &&
984  "Return type changed, but not into a void. The old return type"
985  " must have been a struct!");
986  Instruction *InsertPt = Call;
987  if (InvokeInst *II = dyn_cast<InvokeInst>(Call)) {
988  BasicBlock::iterator IP = II->getNormalDest()->begin();
989  while (isa<PHINode>(IP)) ++IP;
990  InsertPt = IP;
991  }
992 
993  // We used to return a struct. Instead of doing smart stuff with all the
994  // uses of this struct, we will just rebuild it using
995  // extract/insertvalue chaining and let instcombine clean that up.
996  //
997  // Start out building up our return value from undef
998  Value *RetVal = UndefValue::get(RetTy);
999  for (unsigned i = 0; i != RetCount; ++i)
1000  if (NewRetIdxs[i] != -1) {
1001  Value *V;
1002  if (RetTypes.size() > 1)
1003  // We are still returning a struct, so extract the value from our
1004  // return value
1005  V = ExtractValueInst::Create(New, NewRetIdxs[i], "newret",
1006  InsertPt);
1007  else
1008  // We are now returning a single element, so just insert that
1009  V = New;
1010  // Insert the value at the old position
1011  RetVal = InsertValueInst::Create(RetVal, V, i, "oldret", InsertPt);
1012  }
1013  // Now, replace all uses of the old call instruction with the return
1014  // struct we built
1015  Call->replaceAllUsesWith(RetVal);
1016  New->takeName(Call);
1017  }
1018  }
1019 
1020  // Finally, remove the old call from the program, reducing the use-count of
1021  // F.
1022  Call->eraseFromParent();
1023  }
1024 
1025  // Since we have now created the new function, splice the body of the old
1026  // function right into the new function, leaving the old rotting hulk of the
1027  // function empty.
1028  NF->getBasicBlockList().splice(NF->begin(), F->getBasicBlockList());
1029 
1030  // Loop over the argument list, transferring uses of the old arguments over to
1031  // the new arguments, also transferring over the names as well.
1032  i = 0;
1033  for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(),
1034  I2 = NF->arg_begin(); I != E; ++I, ++i)
1035  if (ArgAlive[i]) {
1036  // If this is a live argument, move the name and users over to the new
1037  // version.
1038  I->replaceAllUsesWith(I2);
1039  I2->takeName(I);
1040  ++I2;
1041  } else {
1042  // If this argument is dead, replace any uses of it with null constants
1043  // (these are guaranteed to become unused later on).
1044  if (!I->getType()->isX86_MMXTy())
1045  I->replaceAllUsesWith(Constant::getNullValue(I->getType()));
1046  }
1047 
1048  // If we change the return value of the function we must rewrite any return
1049  // instructions. Check this now.
1050  if (F->getReturnType() != NF->getReturnType())
1051  for (Function::iterator BB = NF->begin(), E = NF->end(); BB != E; ++BB)
1052  if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
1053  Value *RetVal;
1054 
1055  if (NFTy->getReturnType()->isVoidTy()) {
1056  RetVal = 0;
1057  } else {
1058  assert (RetTy->isStructTy());
1059  // The original return value was a struct, insert
1060  // extractvalue/insertvalue chains to extract only the values we need
1061  // to return and insert them into our new result.
1062  // This does generate messy code, but we'll let it to instcombine to
1063  // clean that up.
1064  Value *OldRet = RI->getOperand(0);
1065  // Start out building up our return value from undef
1066  RetVal = UndefValue::get(NRetTy);
1067  for (unsigned i = 0; i != RetCount; ++i)
1068  if (NewRetIdxs[i] != -1) {
1070  "oldret", RI);
1071  if (RetTypes.size() > 1) {
1072  // We're still returning a struct, so reinsert the value into
1073  // our new return value at the new index
1074 
1075  RetVal = InsertValueInst::Create(RetVal, EV, NewRetIdxs[i],
1076  "newret", RI);
1077  } else {
1078  // We are now only returning a simple value, so just return the
1079  // extracted value.
1080  RetVal = EV;
1081  }
1082  }
1083  }
1084  // Replace the return instruction with one returning the new return
1085  // value (possibly 0 if we became void).
1086  ReturnInst::Create(F->getContext(), RetVal, RI);
1087  BB->getInstList().erase(RI);
1088  }
1089 
1090  // Patch the pointer to LLVM function in debug info descriptor.
1091  FunctionDIMap::iterator DI = FunctionDIs.find(F);
1092  if (DI != FunctionDIs.end())
1093  DI->second.replaceFunction(NF);
1094 
1095  // Now that the old function is dead, delete it.
1096  F->eraseFromParent();
1097 
1098  return true;
1099 }
1100 
1101 bool DAE::runOnModule(Module &M) {
1102  bool Changed = false;
1103 
1104  // Collect debug info descriptors for functions.
1105  CollectFunctionDIs(M);
1106 
1107  // First pass: Do a simple check to see if any functions can have their "..."
1108  // removed. We can do this if they never call va_start. This loop cannot be
1109  // fused with the next loop, because deleting a function invalidates
1110  // information computed while surveying other functions.
1111  DEBUG(dbgs() << "DAE - Deleting dead varargs\n");
1112  for (Module::iterator I = M.begin(), E = M.end(); I != E; ) {
1113  Function &F = *I++;
1114  if (F.getFunctionType()->isVarArg())
1115  Changed |= DeleteDeadVarargs(F);
1116  }
1117 
1118  // Second phase:loop through the module, determining which arguments are live.
1119  // We assume all arguments are dead unless proven otherwise (allowing us to
1120  // determine that dead arguments passed into recursive functions are dead).
1121  //
1122  DEBUG(dbgs() << "DAE - Determining liveness\n");
1123  for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
1124  SurveyFunction(*I);
1125 
1126  // Now, remove all dead arguments and return values from each function in
1127  // turn.
1128  for (Module::iterator I = M.begin(), E = M.end(); I != E; ) {
1129  // Increment now, because the function will probably get removed (ie.
1130  // replaced by a new one).
1131  Function *F = I++;
1132  Changed |= RemoveDeadStuffFromFunction(F);
1133  }
1134 
1135  // Finally, look for any unused parameters in functions with non-local
1136  // linkage and replace the passed in parameters with undef.
1137  for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
1138  Function& F = *I;
1139 
1140  Changed |= RemoveDeadArgumentsFromCallers(F);
1141  }
1142 
1143  return Changed;
1144 }
use_iterator use_end()
Definition: Value.h:152
LinkageTypes getLinkage() const
Definition: GlobalValue.h:218
static PassRegistry * getPassRegistry()
LLVMContext & getContext() const
Definition: Function.cpp:167
LLVM Argument representation.
Definition: Argument.h:35
The main container class for the LLVM Intermediate Representation.
Definition: Module.h:112
unsigned getNumParams() const
Definition: DerivedTypes.h:133
iterator end()
Definition: Function.h:397
enable_if_c<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
Definition: Casting.h:266
bool isIntrinsic() const
Definition: Function.h:156
named_metadata_iterator named_metadata_end()
Definition: Module.h:559
void operator<(const Optional< T > &X, const Optional< U > &Y)
Poison comparison between two Optional objects. Clients needs to explicitly compare the underlying va...
Type * getReturnType() const
Definition: Function.cpp:179
arg_iterator arg_end()
Definition: Function.h:418
MDNode - a tuple of other values.
Definition: Metadata.h:69
F(f)
static ExtractValueInst * Create(Value *Agg, ArrayRef< unsigned > Idxs, const Twine &NameStr="", Instruction *InsertBefore=0)
STATISTIC(NumArgumentsEliminated,"Number of unread args removed")
void setDebugLoc(const DebugLoc &Loc)
setDebugLoc - Set the debug location information for this instruction.
Definition: Instruction.h:175
size_t arg_size() const
Definition: Function.cpp:248
AttributeSet getRetAttributes() const
The attributes for the ret value are returned.
Definition: Attributes.cpp:800
bool hasIndices() const
static Constant * getNullValue(Type *Ty)
Definition: Constants.cpp:111
StringRef getName() const
Definition: Value.cpp:167
DIArray - This descriptor holds an array of descriptors.
Definition: DebugInfo.h:167
bool isPacked() const
Definition: DerivedTypes.h:241
ModulePass * createDeadArgHackingPass()
Definition: Use.h:60
param_iterator param_end() const
Definition: DerivedTypes.h:125
void copyAttributesFrom(const GlobalValue *Src)
Definition: Function.cpp:347
ID
LLVM Calling Convention Representation.
Definition: CallingConv.h:26
AttributeSet typeIncompatible(Type *Ty, uint64_t Index)
Which attributes cannot be applied to a type.
DISubprogram - This is a wrapper for a subprogram (e.g. a function).
Definition: DebugInfo.h:429
LLVMContext & getContext() const
getContext - Return the LLVMContext in which this type was uniqued.
Definition: Type.h:128
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
Definition: SmallVector.h:56
static FunctionType * get(Type *Result, ArrayRef< Type * > Params, bool isVarArg)
Definition: Type.cpp:361
static std::string utostr(uint64_t X, bool isNeg=false)
Definition: StringExtras.h:88
void replaceAllUsesWith(Value *V)
Definition: Value.cpp:303
void takeName(Value *V)
Definition: Value.cpp:239
iterator begin()
Definition: Function.h:395
bool hasAddressTaken(const User **=0) const
Definition: Function.cpp:698
static bool isWeakForLinker(LinkageTypes Linkage)
Definition: GlobalValue.h:183
unsigned getNumSlots() const
Return the number of slots used in this attribute list. This is the number of arguments that have an ...
Definition: Attributes.cpp:906
value_use_iterator< User > use_iterator
Definition: Value.h:146
static unsigned getAggregateOperandIndex()
static bool mayBeOverridden(LinkageTypes Linkage)
Definition: GlobalValue.h:171
AttributeSet getSlotAttributes(unsigned Slot) const
Return the attributes at the given slot.
Definition: Attributes.cpp:916
DIDescriptor getElement(unsigned Idx) const
Definition: DebugInfo.h:172
Type * getElementType(unsigned N) const
Definition: DerivedTypes.h:287
param_iterator param_begin() const
Definition: DerivedTypes.h:124
ModulePass * createDeadArgEliminationPass()
static InvokeInst * Create(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value * > Args, const Twine &NameStr="", Instruction *InsertBefore=0)
void initializeDAEPass(PassRegistry &)
Return value is always equal to this argument.
Definition: Attributes.h:95
const DebugLoc & getDebugLoc() const
getDebugLoc - Return the debug location for this node as a DebugLoc.
Definition: Instruction.h:178
static Type * getVoidTy(LLVMContext &C)
Definition: Type.cpp:227
MDNode * getOperand(unsigned i) const
getOperand - Return specified operand.
Definition: Metadata.cpp:545
iterator insert(iterator where, NodeTy *New)
Definition: ilist.h:412
arg_iterator arg_begin()
Definition: Function.h:410
unsigned getNumElements() const
Definition: DebugInfo.cpp:328
unsigned getOperandNo() const
Definition: User.h:199
static UndefValue * get(Type *T)
Definition: Constants.cpp:1334
static CallInst * Create(Value *Func, ArrayRef< Value * > Args, const Twine &NameStr="", Instruction *InsertBefore=0)
bool hasByValAttr() const
Return true if this argument has the byval attribute on it in its containing function.
Definition: Function.cpp:81
const FunctionListType & getFunctionList() const
Get the Module's list of functions (constant).
Definition: Module.h:492
static Constant * getBitCast(Constant *C, Type *Ty)
Definition: Constants.cpp:1661
static unsigned NumRetVals(const Function *F)
const BasicBlockListType & getBasicBlockList() const
Definition: Function.h:374
static StructType * get(LLVMContext &Context, ArrayRef< Type * > Elements, bool isPacked=false)
Definition: Type.cpp:405
Type * getType() const
Definition: Value.h:111
void splice(iterator where, iplist &L2)
Definition: ilist.h:570
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
Definition: Debug.cpp:101
AttributeSet getAttributes() const
Return the attribute list for this Function.
Definition: Function.h:170
bool isStructTy() const
Definition: Type.h:212
INITIALIZE_PASS(DAH,"deadarghaX0r","Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE)", false, false) ModulePass *llvm
static InsertValueInst * Create(Value *Agg, Value *Val, ArrayRef< unsigned > Idxs, const Twine &NameStr="", Instruction *InsertBefore=0)
use_iterator use_begin()
Definition: Value.h:150
PointerType * getType() const
getType - Global values are always pointers.
Definition: GlobalValue.h:107
iterator end()
Definition: Module.h:533
bool isDeclaration() const
Definition: Globals.cpp:66
unsigned getSlotIndex(unsigned Slot) const
Return the index for the given slot.
Definition: Attributes.cpp:910
User * use_back()
Definition: Value.h:154
bool hasAttributes(unsigned Index) const
Return true if attribute exists at the given index.
Definition: Attributes.cpp:828
ImmutableCallSite - establish a view to a call site for examination.
Definition: CallSite.h:318
#define I(x, y, z)
Definition: MD5.cpp:54
FunctionType * getFunctionType() const
Definition: Function.cpp:171
iterator begin()
Definition: Module.h:531
virtual void eraseFromParent()
Definition: Function.cpp:187
static ReturnInst * Create(LLVMContext &C, Value *retVal=0, Instruction *InsertBefore=0)
void setAttributes(AttributeSet attrs)
Set the attribute list for this Function.
Definition: Function.h:173
bool hasLocalLinkage() const
Definition: GlobalValue.h:211
bool isVarArg() const
Definition: DerivedTypes.h:120
NamedMDListType::iterator named_metadata_iterator
The named metadata iterators.
Definition: Module.h:141
bool use_empty() const
Definition: Value.h:149
Type * getReturnType() const
Definition: DerivedTypes.h:121
void removeDeadConstantUsers() const
Definition: Constants.cpp:395
Module * getParent()
Definition: GlobalValue.h:286
LLVM Value Representation.
Definition: Value.h:66
unsigned getArgNo() const
Return the index of this formal argument in its containing function.
Definition: Function.cpp:67
unsigned getNumOperands() const
getNumOperands - Return the number of NamedMDNode operands.
Definition: Metadata.cpp:540
#define DEBUG(X)
Definition: Debug.h:97
idx_iterator idx_begin() const
bool operator==(uint64_t V1, const APInt &V2)
Definition: APInt.h:1684
DICompileUnit - A wrapper for a compile unit.
Definition: DebugInfo.h:402
bool isEmpty() const
Return true if there are no attributes.
Definition: Attributes.h:345
named_metadata_iterator named_metadata_begin()
Definition: Module.h:554
static Function * Create(FunctionType *Ty, LinkageTypes Linkage, const Twine &N="", Module *M=0)
Definition: Function.h:128
bool isVoidTy() const
isVoidTy - Return true if this is 'void'.
Definition: Type.h:140
AttributeSet getFnAttributes() const
The function attributes are returned.
Definition: Attributes.cpp:809