Skip to content
  1. Jul 03, 2009
  2. Jul 02, 2009
  3. Jun 27, 2009
    • Dan Gohman's avatar
      When a value is used multiple times within a single PHI, instructions · fe174b69
      Dan Gohman authored
      inserted to replace that value must dominate all of of the basic
      blocks associated with the uses of the value in the PHI, not just
      one of them.
      
      llvm-svn: 74376
      fe174b69
    • Dan Gohman's avatar
      Incorporate the insertion point into the key of SCEVExpander's CSE map. · daafbe61
      Dan Gohman authored
      This helps it avoid reusing an instruction that doesn't dominate all
      of the users, in cases where the original instruction was inserted
      before all of the users were known.  This may result in redundant
      expansions of sub-expressions that depend on loop-unpredictable values
      in some cases, however this isn't very common, and it primarily impacts
      IndVarSimplify, so GVN can be expected to clean these up.
      
      This eliminates the need for IndVarSimplify's FixUsesBeforeDefs,
      which fixes several bugs.
      
      llvm-svn: 74352
      daafbe61
  4. Jun 24, 2009
    • Dan Gohman's avatar
      When inserting code into a loop preheader, insert it before the · 929fa7b0
      Dan Gohman authored
      terminator, instead of after the last phi. This fixes a bug
      exposed by ScalarEvolution analyzing more kinds of loops.
      This fixes PR4436.
      
      llvm-svn: 74072
      929fa7b0
    • Dan Gohman's avatar
      Extend ScalarEvolution's multiple-exit support to compute exact · f19aeec3
      Dan Gohman authored
      trip counts in more cases.
      
      Generalize ScalarEvolution's isLoopGuardedByCond code to recognize
      And and Or conditions, splitting the code out into an
      isNecessaryCond helper function so that it can evaluate Ands and Ors
      recursively, and make SCEVExpander be much more aggressive about
      hoisting instructions out of loops.
      
      test/CodeGen/X86/pr3495.ll has an additional instruction now, but
      it appears to be due to an arbitrary register allocation difference.
      
      llvm-svn: 74048
      f19aeec3
  5. Jun 23, 2009
  6. Jun 22, 2009
  7. Jun 15, 2009
  8. Jun 13, 2009
    • Dan Gohman's avatar
      Teach SCEVExpander's visitAddRecExpr to reuse an existing canonical · 426901aa
      Dan Gohman authored
      induction variable when the addrec to be expanded does not require
      a wider type. This eliminates the need for IndVarSimplify to
      micro-manage SCEV expansions, because SCEVExpander now
      automatically expands them in the form that IndVarSimplify considers
      to be canonical. (LSR still micro-manages its SCEV expansions,
      because it's optimizing for the target, rather than for
      other optimizations.)
      
      Also, this uses the new getAnyExtendExpr, which has more clever
      expression simplification logic than the IndVarSimplify code it
      replaces, and this cleans up some ugly expansions in code such as
      the included masked-iv.ll testcase.
      
      llvm-svn: 73294
      426901aa
  9. Jun 05, 2009
  10. Jun 03, 2009
  11. May 25, 2009
  12. May 24, 2009
  13. May 22, 2009
    • Dan Gohman's avatar
      Teach IndVarSimplify's FixUsesBeforeDefs to handle InvokeInsts by · 781b75a7
      Dan Gohman authored
      assuming that the use of the value is in a block dominated by the
      "normal" destination. LangRef.html and other documentation sources
      don't explicitly guarantee this, but it seems to be assumed in
      other places in LLVM at least.
      
      This fixes an assertion failure on the included testcase, which
      is derived from the Ada testsuite.
      
      FixUsesBeforeDefs is a temporary measure which I'm looking to
      replace with a more capable solution.
      
      llvm-svn: 72266
      781b75a7
  14. May 19, 2009
    • Dan Gohman's avatar
      Remove an irrelevant comment. · 67587ce2
      Dan Gohman authored
      llvm-svn: 72132
      67587ce2
    • Dan Gohman's avatar
      Trim unneeded #includes. · adc70d68
      Dan Gohman authored
      llvm-svn: 72130
      adc70d68
    • Dan Gohman's avatar
      Teach SCEVExpander to expand arithmetic involving pointers into GEP · 2649491f
      Dan Gohman authored
      instructions. It attempts to create high-level multi-operand GEPs,
      though in cases where this isn't possible it falls back to casting
      the pointer to i8* and emitting a GEP with that. Using GEP instructions
      instead of ptrtoint+arithmetic+inttoptr helps pointer analyses that
      don't use ScalarEvolution, such as BasicAliasAnalysis.
      
      Also, make the AddrModeMatcher more aggressive in handling GEPs.
      Previously it assumed that operand 0 of a GEP would require a register
      in almost all cases. It now does extra checking and can do more
      matching if operand 0 of the GEP is foldable. This fixes a problem
      that was exposed by SCEVExpander using GEPs.
      
      llvm-svn: 72093
      2649491f
  15. May 14, 2009
  16. May 12, 2009
    • Dan Gohman's avatar
      Factor the code for collecting IV users out of LSR into an IVUsers class, · d76d71a2
      Dan Gohman authored
      and generalize it so that it can be used by IndVarSimplify. Implement the
      base IndVarSimplify transformation code using IVUsers. This removes
      TestOrigIVForWrap and associated code, as ScalarEvolution now has enough
      builtin overflow detection and folding logic to handle all the same cases,
      and more. Run "opt -iv-users -analyze -disable-output" on your favorite
      loop for an example of what IVUsers does.
      
      This lets IndVarSimplify eliminate IV casts and compute trip counts in
      more cases. Also, this happens to finally fix the remaining testcases
      in PR1301.
      
      Now that IndVarSimplify is being more aggressive, it occasionally runs
      into the problem where ScalarEvolutionExpander's code for avoiding
      duplicate expansions makes it difficult to ensure that all expanded
      instructions dominate all the instructions that will use them. As a
      temporary measure, IndVarSimplify now uses a FixUsesBeforeDefs function
      to fix up instructions inserted by SCEVExpander. Fortunately, this code
      is contained, and can be easily removed once a more comprehensive
      solution is available.
      
      llvm-svn: 71535
      d76d71a2
  17. May 05, 2009
    • Dan Gohman's avatar
      Re-apply 70645, converting ScalarEvolution to use · 48f82222
      Dan Gohman authored
      CallbackVH, with fixes. allUsesReplacedWith need to
      walk the def-use chains and invalidate all users of a
      value that is replaced. SCEVs of users need to be
      recalcualted even if the new value is equivalent. Also,
      make forgetLoopPHIs walk def-use chains, since any
      SCEV that depends on a PHI should be recalculated when
      more information about that PHI becomes available.
      
      llvm-svn: 70927
      48f82222
  18. May 03, 2009
  19. May 02, 2009
  20. Apr 28, 2009
  21. Apr 27, 2009
  22. Apr 23, 2009
  23. Apr 21, 2009
  24. Apr 18, 2009
  25. Apr 16, 2009
    • Dan Gohman's avatar
      Expand GEPs in ScalarEvolution expressions. SCEV expressions can now · 0a40ad93
      Dan Gohman authored
      have pointer types, though in contrast to C pointer types, SCEV
      addition is never implicitly scaled. This not only eliminates the
      need for special code like IndVars' EliminatePointerRecurrence
      and LSR's own GEP expansion code, it also does a better job because
      it lets the normal optimizations handle pointer expressions just
      like integer expressions.
      
      Also, since LLVM IR GEPs can't directly index into multi-dimensional
      VLAs, moving the GEP analysis out of client code and into the SCEV
      framework makes it easier for clients to handle multi-dimensional
      VLAs the same way as other arrays.
      
      Some existing regression tests show improved optimization.
      test/CodeGen/ARM/2007-03-13-InstrSched.ll in particular improved to
      the point where if-conversion started kicking in; I turned it off
      for this test to preserve the intent of the test.
      
      llvm-svn: 69258
      0a40ad93
    • Dale Johannesen's avatar
      Eliminate zext over (iv | const) or (signed iv), · a71daa83
      Dale Johannesen authored
      and sext over (iv | const), if a longer iv is
      available.  Allow expressions to have more than
      one zext/sext parent.  All from OpenSSL.
      
      llvm-svn: 69241
      a71daa83
  26. Apr 15, 2009
Loading