In the current statepoint design, we have four distinct groups of operands to the call: call args, gc transition args, deopt args, and gc args. This format prexisted the support in IR for operand bundles and was in fact one of the inspirations for the extension. However, we never went back and rearchitected statepoints to fully leverage bundles.
This change is the first in a small sequence to do so. All this does is extend the SelectionDAG lowering code to allow deopt and gc transition operands to be specified in either inline argument bundles or operand bundles.
Once this is in, I plan to do a few follow on changes:
- Switch RS4GC to default to the bundle representation where possible. This will involve auto-updating a bunch of tests and should greatly improve readability.
2a) Manually migrate most of the codegen tests to using bundles.
2b) Mark the inline bundles as deprecated in LangRef.
- Propose a new "gc" bundle type to remove the second to last embedded bundle. (Call args seem to make sense where they are, so I'm not planning to remove those.)
- Default RS4GC to generating the operand bundle form.
- Repeat 2a/2b for gc operands. 5a (test update) is the most error prone manual step unfortunately.
- Once all of the above has landed, and baked for a bit, change the format in LangRef and drop lowering support for the old format.
hmm. so we currently don't actually have any optimizations leveraging OB_gc_transition.