llvm-6502/lib/Transforms/IPO
Shuxin Yang e0409098ae Fix a bug in Dead Argument Elimination.
If a function seen at compile time is not necessarily the one linked to
the binary being built, it is illegal to change the actual arguments
passing to it. 

  e.g. 
   --------------------------
   void foo(int lol) {
     // foo() has linkage satisifying isWeakForLinker()
     // "lol" is not used at all.
   }

   void bar(int lo2) {
      // xform to foo(undef) is illegal, as compiler dose not know which
      // instance of foo() will be linked to the the binary being built.
      foo(lol2); 
   }
  -----------------------------

  Such functions can be captured by isWeakForLinker(). NOTE that
mayBeOverridden() is insufficient for this purpose as it dosen't include
linkage types like AvailableExternallyLinkage and LinkOnceODRLinkage.
Take link_odr* as an example, it indicates a set of *EQUIVALENT* globals
that can be merged at link-time. However, the semantic of 
*EQUIVALENT*-functions includes parameters. Changing parameters breaks
the assumption.

  Thank John McCall for help, especially for the explanation of subtle
difference between linkage types.

  rdar://11546243


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192302 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-09 17:21:44 +00:00
..
ArgumentPromotion.cpp Clean up some of this code a tiny bit, no functionality change. 2013-07-18 22:32:32 +00:00
BarrierNoopPass.cpp Introduce a BarrierNoop pass, a hack designed to allow *some* control 2012-10-18 08:05:46 +00:00
CMakeLists.txt Introduce a BarrierNoop pass, a hack designed to allow *some* control 2012-10-18 08:05:46 +00:00
ConstantMerge.cpp Fix const merging when an alias of a const is llvm.used. 2013-05-06 01:48:55 +00:00
DeadArgumentElimination.cpp Fix a bug in Dead Argument Elimination. 2013-10-09 17:21:44 +00:00
ExtractGV.cpp Check isDiscardableIfUnused, rather than hasLocalLinkage, when bumping 2013-03-04 22:40:44 +00:00
FunctionAttrs.cpp Avoid a compiler warning about Found not being used when assertions are 2013-09-13 08:16:06 +00:00
GlobalDCE.cpp Implement function prefix data as an IR feature. 2013-09-16 01:08:15 +00:00
GlobalOpt.cpp Revert r191834 until we measure the effect of this benchmarks and maybe find a better way to fix it 2013-10-07 19:03:24 +00:00
InlineAlways.cpp Make the inline cost a proper analysis pass. This remains essentially 2013-01-21 11:39:18 +00:00
Inliner.cpp Fix comparisons of alloca alignment in inliner merging 2013-07-17 14:32:41 +00:00
InlineSimple.cpp Make the inline cost a proper analysis pass. This remains essentially 2013-01-21 11:39:18 +00:00
Internalize.cpp Optimize linkonce_odr unnamed_addr functions during LTO. 2013-10-03 18:29:09 +00:00
IPConstantPropagation.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
IPO.cpp Optimize linkonce_odr unnamed_addr functions during LTO. 2013-10-03 18:29:09 +00:00
LLVMBuild.txt Extracted ObjCARC.cpp into its own library libLLVMObjCARCOpts in preparation for refactoring the ARC Optimizer. 2013-01-28 01:35:51 +00:00
LoopExtractor.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
Makefile
MergeFunctions.cpp Don't merge tiny functions. 2013-10-01 18:05:30 +00:00
PartialInlining.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
PassManagerBuilder.cpp Optimize linkonce_odr unnamed_addr functions during LTO. 2013-10-03 18:29:09 +00:00
PruneEH.cpp PruneEH: Only merge attribute sets when used. No functionality change. 2013-06-15 10:55:39 +00:00
StripDeadPrototypes.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
StripSymbols.cpp Fixed typo. 2013-08-27 04:43:03 +00:00