Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8340093 C2 SuperWord: implement cost model
  3. JDK-8366702

C2 SuperWord: refactor VTransform vector nodes

XMLWordPrintable

    • b15

      I'm working on cost-modeling, and am integrating some smaller changes from this proof-of-concept PR:
      https://github.com/openjdk/jdk/pull/20964
      See plan overfiew: JDK-8340093

      This is a pure refactoring - no change in behaviour. I'm presenting it like this because it will make reviews easier.

      ------------------------------------

      I have to say: I'm very sorry for this refactoring. I took some decisions in JDK-8332163 that I'm now partially undoing. I moved too much logic from SuperWord::output (now called SuperWordVTransformBuilder::make_vector_vtnode_for_pack) to the VTransform...Node::apply.

      I had accidentially made the VTransformGraph too close to the PackSet, and not close enough to the future vectorized C2 Graph. And that makes some future changes hard.

      My vision:

      - VLoop / VLoopAnalyzer look at the scalar loop and prepare it for SuperWord
      - SuperWord creates the PackSet: some nodes are packed, all others are scalar.
      - SuperWordVTransformBuilder converts the PackSet into the VTransformGraph
      - The VTransformGraph very closely represents the C2 vectorized loop after vectorization
        - It does not need to know which nodes it packs, it rather just needs to know how to generate the new vector nodes
        - That means it is straight-forward to compute cost
        - And it also makes optimizations on that graph easier
        - And the apply methods are simpler too

      ------------------------------------

      So therefore, the main goal was to make the VTransform...Node::apply calls simpler again. And move the logic back to SuperWordVTransformBuilder::make_vector_vtnode_for_pack.

      One important step to making the the VTransformGraph less of a PackSet is to remove reliance on nodes for the vector nodes.

      What I did:
      - Moving a lot of the logic in VTransformElementWiseVectorNode::apply to SuperWordVTransformBuilder::make_vector_vtnode_for_pack.
        - Will make it easier to optimize and compute cost in future RFE's.
      - VTransformVectorNodePrototype: packs a lot of the info for VTransformVectorNode.
        - pass info about bt, vlen, sopc instead of the pack -> allows us to eventually remove the dependency on nodes.
      - New vector nodes, they are special cases I split away from VTransformElementWiseVectorNode:
        - VTransformReinterpretVectorNode
        - VTransformElementWiseLongOpWithCastToIntVectorNode
        - VTransformCmpVectorNode
       - Rename set_all_req_with_vectors -> init_all_req_with_vectors (forgot it in JDK-8366361)
       - A few smaller changes / refactorings.

            epeter Emanuel Peter
            epeter Emanuel Peter
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: