Skip to content
  1. Dec 10, 2021
  2. Dec 02, 2021
  3. Oct 18, 2021
  4. Sep 28, 2021
    • Congzhe Cao's avatar
      [CodeMoverUtils] Enhance isSafeToMoveBefore() when control flow equivalence is satisfied · c4277275
      Congzhe Cao authored
      With improved analysis in determining CFG equivalence that does
      not require strict dominance and post-dominance conditions, we
      now relax  isSafeToMoveBefore() such that an instruction I can
      be moved before InsertPoint even if they do not strictly dominate
      each other, as long as they follow the same control flow path.
      
      For example,  we can move Instruction 0 before Instruction 1,
      and vice versa.
      
      ```
      if (cond1)
         // Instruction 0: %add = add i32 1, 2
      if (cond1)
         // Instruction 1: %add2 = add i32 2, 1
      ```
      
      Reviewed By: Whitney
      
      Differential Revision: https://reviews.llvm.org/D110456
      c4277275
  5. Sep 24, 2021
  6. Sep 13, 2021
  7. Sep 09, 2021
    • Andrew Litteken's avatar
      [CodeExtractor] Creating exit stubs based off original order branch instructions. · 144cd22b
      Andrew Litteken authored
      Previously the CodeExtractor created exit stubs, and the subsequent return value of the outlined function based on the order of out-of-region blocks after splitting any phi nodes, and collecting the blocks to be outlined. This could cause differences in order if there was a difference of exit block phi nodes between the two regions. This patch moves the collection of the output target blocks to be before this occurs, so that the assignment of target block to output value will be the same, regardless of the contents of the output block.
      
      Reviewers: paquette, roelofs
      
      Differential Revision: https://reviews.llvm.org/D108657
      144cd22b
  8. Aug 26, 2021
  9. Aug 18, 2021
  10. Aug 16, 2021
    • Nikita Popov's avatar
      [MemorySSA] Remove -enable-mssa-loop-dependency option · 735a5904
      Nikita Popov authored
      This option has been enabled by default for quite a while now.
      The practical impact of removing the option is that MSSA use
      cannot be disabled in default pipelines (both LPM and NPM) and
      in manual LPM invocations. NPM can still choose to enable/disable
      MSSA using loop vs loop-mssa.
      
      The next step will be to require MSSA for LICM and drop the
      AST-based implementation entirely.
      
      Differential Revision: https://reviews.llvm.org/D108075
      735a5904
  11. Jul 29, 2021
    • Sander de Smalen's avatar
      [InstSimplify] Don't assume parent function when simplifying llvm.vscale. · 84a4caeb
      Sander de Smalen authored
      D106850 introduced a simplification for llvm.vscale by looking at the
      surrounding function's vscale_range attributes. The call that's being
      simplified may not yet have been inserted into the IR. This happens for
      example during function cloning.
      
      This patch fixes the issue by checking if the instruction is in a
      parent basic block.
      84a4caeb
  12. Jul 27, 2021
  13. Jul 24, 2021
  14. Jul 09, 2021
  15. Jun 23, 2021
  16. Jun 17, 2021
  17. May 24, 2021
  18. May 21, 2021
  19. May 20, 2021
  20. May 18, 2021
    • Arthur Eubanks's avatar
      [NewPM] Don't mark AA analyses as preserved · 6b9524a0
      Arthur Eubanks authored
      Currently all AA analyses marked as preserved are stateless, not taking
      into account their dependent analyses. So there's no need to mark them
      as preserved, they won't be invalidated unless their analyses are.
      
      SCEVAAResults was the one exception to this, it was treated like a
      typical analysis result. Make it like the others and don't invalidate
      unless SCEV is invalidated.
      
      Reviewed By: asbirlea
      
      Differential Revision: https://reviews.llvm.org/D102032
      6b9524a0
  21. May 08, 2021
  22. May 04, 2021
  23. Apr 29, 2021
    • Florian Hahn's avatar
      [VPlan] Add getVPSingleValue helper. · a0e1313c
      Florian Hahn authored
      As suggested in D99294, this adds a getVPSingleValue helper to use for
      recipes that are guaranteed to define a single value. This replaces uses
      of getVPValue() which used to default to I = 0.
      a0e1313c
  24. Apr 26, 2021
  25. Apr 25, 2021
  26. Apr 23, 2021
    • Florian Hahn's avatar
      [VPlan] Add GraphTraits impl to traverse through VPRegionBlock. · 89c4dda0
      Florian Hahn authored
      This patch adds a new iterator to traverse through VPRegionBlocks and a
      GraphTraits specialization using the iterator to traverse through
      VPRegionBlocks.
      
      Because there is already a GraphTraits specialization for VPBlockBase *
      and co, a new VPBlockRecursiveTraversalWrapper helper is introduced.
      This allows us to provide a new GraphTraits specialization for that
      type. Users can use the new recursive traversal by using this wrapper.
      
      The graph trait visits both the entry block of a region, as well as all
      its successors. Exit blocks of a region implicitly have their parent
      region's successors. This ensures all blocks in a region are visited
      before any blocks in a successor region when doing a reverse post-order
      traversal of the graph.
      
      Reviewed By: a.elovikov
      
      Differential Revision: https://reviews.llvm.org/D100175
      89c4dda0
  27. Apr 21, 2021
  28. Apr 15, 2021
  29. Apr 06, 2021
    • Sidharth Baveja's avatar
      [SplitEdge] Update SplitCriticalEdge to return a nullptr only when the edge is not critical · d81d9e8b
      Sidharth Baveja authored
      Summary:
      The function SplitCriticalEdge (called by SplitEdge) can return a nullptr in
      cases where the edge is a critical. SplitEdge uses SplitCriticalEdge assuming it
      can always split all critical edges, which is an incorrect assumption.
      
      The three cases where the function SplitCriticalEdge will return a nullptr is:
      1. DestBB is an exception block
      2. Options.IgnoreUnreachableDests is set to true and
      isa(DestBB->getFirstNonPHIOrDbgOrLifetime()) is not equal to a nullptr
      3. LoopSimplify form must be preserved (Options.PreserveLoopSimplify is true)
      and it cannot be maintained for a loop due to indirect branches
      
      For each of these situations they are handled in the following way:
      1. Modified the function ehAwareSplitEdge originally from
      llvm/lib/Transforms/Coroutines/CoroFrame.cpp to handle the cases when the DestBB
      is an exception block. This function is called directly in SplitEdge.
      SplitEdge does not call SplitCriticalEdge in this case
      2. Options.IgnoreUnreachableDests is set to false by default, so this situation
      does not apply.
      3. Return a nullptr in this situation since the SplitCriticalEdge also returned
      nullptr. Nothing we can do in this case.
      
      Reviewed By: asbirlea
      
      Differential Revision:https://reviews.llvm.org/D94619
      d81d9e8b
    • Florian Hahn's avatar
      [VPlan] Print VPValue operands for VPWidenPHI if possible. · a6b06b78
      Florian Hahn authored
      For VPWidenPHIRecipes that model all incoming values as VPValue
      operands, print those operands instead of printing the original PHI.
      
      D99294 updates recipes of reduction PHIs to use the VPValue for the
      incoming value from the loop backedge, making use of this new printing.
      a6b06b78
  30. Mar 29, 2021
  31. Mar 28, 2021
  32. Mar 19, 2021
Loading