<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-text-flowed" style="font-family: -moz-fixed;
      font-size: 12px;" lang="x-unicode">Hi all,
      <br>
      <br>
      I am looking into the benefits of a VPlan-based cost model, and
      into how such a cost model should be implemented to make the most
      out of these benefits.
      <br>
      <br>
      Over the last year I have been working with LLVM, mainly focused
      on the ARM backend, in the course of a one-year internship at Arm
      Ltd. My main project from December 2019 to August 2020 was to
      introduce gather/scatters for MVE auto-vectorization. One of the
      recurring challenges during this work was to get things right in
      the cost model.
      <br>
      For example, gathers can extend the data they load, while scatters
      can truncate their input, meaning that an extend following the
      load, or a truncate preceding the store, is for free if it meets
      certain type conditions. As the current cost model is not designed
      for context-based analysis, this was a pain to model.
      <br>
      <br>
      I have done some research and found out that one of the proposed
      benefits of VPlan is that a new cost model making use of it would
      be able to better support context-dependent decisions like this.
      <br>
      However, there does not exist much specification about what such a
      cost model should look like.
      <br>
      <br>
      Also, I have read through the respective code to understand how
      loop vectorization is currently done and how far the introduction
      of VPlan has progressed and have realised that the only recipe
      that actually handles more than one instruction from the input IR
      is the one for interleaved groups. When the VPlan is generated on
      the VPlan-native path, every IR instruction is considered and
      transformed into a recipe separately, ignoring its context (to
      give a code location, I am looking at
      VPlanTransforms::VPInstructionsToVPRecipes).
      <br>
      And maybe there are architectures that for some cases do not have
      the same vector instructions, so a pattern that works great for
      one could be useless for others. So I am wondering: Is there any
      plan to have target-dependent flavours of recipes, or how will
      those things be handled?
      <br>
      Right now it makes sense that nothing like this has been
      implemented yet, as there is no cost model that could guide the
      transformation. But if recipes are a general thing, should the
      cost model be the component actually providing the target-specific
      pattern for a recipe, together with its cost?
      <br>
      <br>
      I am considering choosing a topic related to VPlan, possibly cost
      modelling, for my Master thesis, with the goal to present a
      solution and implement a prototype.
      <br>
      <br>
      What I would like to ask the community is
      <br>
      <br>
      (1) what goals there are or should be for VPlan-based cost
      modelling,
      <br>
      (2) whether there have been any discussions on target-dependent
      patterns yet, and
      <br>
      (3) which examples of inefficiencies and shortcomings of the
      current cost model they have come across.
      <br>
      <br>
      I am looking forward to your feedback.
      <br>
      <br>
      Many thanks,
      <br>
      Anna Welker
      <br>
      <br>
    </div>
  </body>
</html>