Skip to content
  1. Feb 22, 2021
  2. Feb 12, 2021
  3. Jan 27, 2021
    • Sanjay Patel's avatar
      [LoopVectorize] use IR fast-math-flags exclusively (not FP function attributes) · ab93c18c
      Sanjay Patel authored
      I am trying to untangle the fast-math-flags propagation logic
      in the vectorizers (see a6f02212 for SLP).
      
      The loop vectorizer has a mix of checking FP function attributes,
      IR-level FMF, and just wrong assumptions.
      
      I am trying to avoid regressions while fixing this, and I think
      the IR-level logic is good enough for that, but it's hard to say
      for sure. This would be the 1st step in the clean-up.
      
      The existing test that I changed to include 'fast' actually shows
      a miscompile: the function only had the equivalent of nnan, but we
      created new instructions that had fast (all FMF set). This is
      similar to the example in https://llvm.org/PR35538
      
      Differential Revision: https://reviews.llvm.org/D95452
      ab93c18c
  4. Jan 11, 2021
    • Florian Hahn's avatar
      [VPlan] Unify value/recipe printing after VPDef transition. · eb0371e4
      Florian Hahn authored
      This patch unifies the way recipes and VPValues are printed after the
      transition to VPDef.
      
      VPSlotTracker has been updated to iterate over all recipes and all
      their defined values to number those. There is no need to number
      values in Value2VPValue.
      
      It also updates a few places that only used slot numbers for
      VPInstruction. All recipes now can produce numbered VPValues.
      eb0371e4
  5. Jan 08, 2021
    • David Green's avatar
      [LV] Don't sink into replication regions · 72fb5ba0
      David Green authored
      The new test case here contains a first order recurrences and an
      instruction that is replicated. The first order recurrence forces an
      instruction to be sunk _into_, as opposed to after the replication
      region. That causes several things to go wrong including registering
      vector instructions multiple times and failing to create dominance
      relations correctly.
      
      Instead we should be sinking to after the replication region, which is
      what this patch makes sure happens.
      
      Differential Revision: https://reviews.llvm.org/D93629
      72fb5ba0
  6. Dec 21, 2020
  7. Dec 03, 2020
  8. Nov 29, 2020
  9. Nov 25, 2020
  10. Nov 17, 2020
    • Florian Hahn's avatar
      [VPlan] Add VPDef class. · 52f3714d
      Florian Hahn authored
      This patch introduces a new VPDef class, which can be used to
      manage VPValues defined by recipes/VPInstructions.
      
      The idea here is to mirror VPUser for values defined by a recipe. A
      VPDef can produce either zero (e.g. a store recipe), one (most recipes)
      or multiple (VPInterleaveRecipe) result VPValues.
      
      To traverse the def-use chain from a VPDef to its users, one has to
      traverse the users of all values defined by a VPDef.
      
      VPValues now contain a pointer to their corresponding VPDef, if one
      exists. To traverse the def-use chain upwards from a VPValue, we first
      need to check if the VPValue is defined by a VPDef. If it does not have
      a VPDef, this means we have a VPValue that is not directly defined
      iniside the plan and we are done.
      
      If we have a VPDef, it is defined inside the region by a recipe, which
      is a VPUser, and the upwards def-use chain traversal continues by
      traversing all its operands.
      
      Note that we need to add an additional field to to VPVAlue to link them
      to their defs. The space increase is going to be offset by being able to
      remove the SubclassID field in future patches.
      
      Reviewed By: Ayal
      
      Differential Revision: https://reviews.llvm.org/D90558
      52f3714d
  11. Oct 05, 2020
    • Florian Hahn's avatar
      [VPlan] Clean up uses/operands on VPBB deletion. · 348d85a6
      Florian Hahn authored
      Update the code responsible for deleting VPBBs and recipes to properly
      update users and release operands.
      
      This is another preparation for D84680 & following patches towards
      enabling modeling def-use chains in VPlan.
      348d85a6
  12. Oct 04, 2020
  13. Oct 03, 2020
  14. Sep 30, 2020
    • Florian Hahn's avatar
      [VPlan] Change recipes to inherit from VPUser instead of a member var. · d8563654
      Florian Hahn authored
      Now that VPUser is not inheriting from VPValue, we can take the next
      step and turn the recipes that already manage their operands via VPUser
      into VPUsers directly. This is another small step towards traversing
      def-use chains in VPlan.
      
      This is NFC with respect to the generated code, but makes the interface
      more powerful.
      d8563654
  15. Jun 06, 2020
  16. Mar 31, 2020
  17. Mar 29, 2020
  18. Mar 18, 2020
  19. Mar 05, 2020
    • Florian Hahn's avatar
      [VPlan] Use consecutive numbers to print VPValues instead of addresses. · 40e7bfc4
      Florian Hahn authored
      Currently when printing VPValues we use the object address, which makes
      it hard to distinguish VPValues as they usually are large numbers with
      varying distance between them.
      
      This patch adds a simple slot tracker, similar to the ModuleSlotTracker
      used for IR values. In order to dump a VPValue or anything containing a
      VPValue, a slot tracker for the enclosing VPlan needs to be created. The
      existing VPlanPrinter can take care of that for the existing code. We
      assign consecutive numbers to each VPValue we encounter in a reverse
      post order traversal of the VPlan.
      
      Reviewers: rengolin, hsaito, fhahn, Ayal, dorit, gilr
      
      Reviewed By: gilr
      
      Differential Revision: https://reviews.llvm.org/D73078
      40e7bfc4
  20. Mar 03, 2020
    • Florian Hahn's avatar
      [VPlan] Add getPlan() to VPBlockBase. · 05afa555
      Florian Hahn authored
      This patch adds a getPlan accessor to VPBlockBase, which finds the entry
      block of the plan containing the block and returns the plan set for this
      block.
      
      VPBlockBase contains a VPlan pointer, but it should only be set for
      the entry block of a plan. This allows moving blocks without updating
      the pointer for each moved block and in the future we might introduce a
      parent relationship between plans and blocks, similar to the one in LLVM IR.
      
      Reviewers: rengolin, hsaito, fhahn, Ayal, dorit, gilr
      
      Reviewed By: gilr
      
      Differential Revision: https://reviews.llvm.org/D74445
      05afa555
  21. Mar 02, 2020
  22. Dec 07, 2019
  23. Dec 06, 2019
    • Gil Rapaport's avatar
      [LV] Record GEP widening decisions in recipe (NFCI) · 39ccc099
      Gil Rapaport authored
      InnerLoopVectorizer's code called during VPlan execution still relies on
      original IR's def-use relations to decide which vector code to generate,
      limiting VPlan transformations ability to modify def-use relations and still
      have ILV generate the vector code.
      This commit moves GEP operand queries controlling how GEPs are widened to a
      dedicated recipe and extracts GEP widening code to its own ILV method taking
      those recorded decisions as arguments. This reduces ingredient def-use usage by
      ILV as a step towards full VPlan-based def-use relations.
      
      Differential revision: https://reviews.llvm.org/D69067
      39ccc099
  24. Nov 09, 2019
  25. Nov 08, 2019
  26. Nov 07, 2019
  27. Nov 05, 2019
  28. Nov 04, 2019
  29. Oct 11, 2019
  30. Aug 15, 2019
  31. Feb 11, 2019
  32. Jan 23, 2019
    • Hideki Saito's avatar
      · 4e4ecae0
      Hideki Saito authored
      [LV][VPlan] Change to implement VPlan based predication for
      VPlan-native path
      
      Context: Patch Series #2 for outer loop vectorization support in LV
      using VPlan. (RFC:
      http://lists.llvm.org/pipermail/llvm-dev/2017-December/119523.html).
      
      Patch series #2 checks that inner loops are still trivially lock-step
      among all vector elements. Non-loop branches are blindly assumed as
      divergent.
      
      Changes here implement VPlan based predication algorithm to compute
      predicates for blocks that need predication. Predicates are computed
      for the VPLoop region in reverse post order. A block's predicate is
      computed as OR of the masks of all incoming edges. The mask for an
      incoming edge is computed as AND of predecessor block's predicate and
      either predecessor's Condition bit or NOT(Condition bit) depending on
      whether the edge from predecessor block to the current block is true
      or false edge.
      
      Reviewers: fhahn, rengolin, hsaito, dcaballe
      
      Reviewed By: fhahn
      
      Patch by Satish Guggilla, thanks!
      
      Differential Revision: https://reviews.llvm.org/D53349
      
      llvm-svn: 351990
      4e4ecae0
  33. Jan 19, 2019
    • Chandler Carruth's avatar
      Update the file headers across all of the LLVM projects in the monorepo · 2946cd70
      Chandler Carruth authored
      to reflect the new license.
      
      We understand that people may be surprised that we're moving the header
      entirely to discuss the new license. We checked this carefully with the
      Foundation's lawyer and we believe this is the correct approach.
      
      Essentially, all code in the project is now made available by the LLVM
      project under our new license, so you will see that the license headers
      include that license only. Some of our contributors have contributed
      code under our old license, and accordingly, we have retained a copy of
      our old license notice in the top-level files in each project and
      repository.
      
      llvm-svn: 351636
      2946cd70
  34. Nov 14, 2018
    • Florian Hahn's avatar
      [VPlan, SLP] Add simple SLP analysis on top of VPlan. · 09e516c5
      Florian Hahn authored
      This patch adds an initial implementation of the look-ahead SLP tree
      construction described in 'Look-Ahead SLP: Auto-vectorization in the Presence
      of Commutative Operations, CGO 2018 by Vasileios Porpodas, Rodrigo C. O. Rocha,
      Luís F. W. Góes'.
      
      It returns an SLP tree represented as VPInstructions, with combined
      instructions represented as a single, wider VPInstruction.
      
      This initial version does not support instructions with multiple
      different users (either inside or outside the SLP tree) or
      non-instruction operands; it won't generate any shuffles or
      insertelement instructions.
      
      It also just adds the analysis that builds an SLP tree rooted in a set
      of stores. It does not include any cost modeling or memory legality
      checks. The plan is to integrate it with VPlan based cost modeling, once
      available and to only apply it to operations that can be widened.
      
      A follow-up patch will add a support for replacing instructions in a
      VPlan with their SLP counter parts.
      
      Reviewers: Ayal, mssimpso, rengolin, mkuper, hfinkel, hsaito, dcaballe, vporpo, RKSimon, ABataev
      
      Reviewed By: rengolin
      
      Differential Revision: https://reviews.llvm.org/D4949
      
      llvm-svn: 346857
      09e516c5
  35. Jul 31, 2018
    • Diego Caballero's avatar
      [VPlan] Introduce VPLoopInfo analysis. · 3587150f
      Diego Caballero authored
      The patch introduces loop analysis (VPLoopInfo/VPLoop) for VPBlockBases.
      This analysis will be necessary to perform some H-CFG transformations and
      detect and introduce regions representing a loop in the H-CFG.
      
      Reviewers: fhahn, rengolin, mkuper, hfinkel, mssimpso
      
      Reviewed By: fhahn 
      
      Differential Revision: https://reviews.llvm.org/D48816
      
      llvm-svn: 338346
      3587150f
Loading