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 inJDK-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 inJDK-8366361)
- A few smaller changes / refactorings.
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
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
- A few smaller changes / refactorings.
- blocks
-
JDK-8366969 C2 SuperWord: ensure that all new nodes have node notes copied
-
- Open
-
- links to
-
Commit(master) openjdk/jdk/4cc75be8
-
Review(master) openjdk/jdk/27056