https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84035

            Bug ID: 84035
           Summary: [nvptx] Review jumps that are not JUMP_INSN
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

https://gcc.gnu.org/ml/gcc-patches/2018-01/msg02028.html :
...
> What are the nvptx conditional jumps
> that aren't JUMP_INSN and why?  That looks like a bad idea.

OpenACC has different execution modes:
- gang redundant vs gang partitioned
- worker single vs worker partitioned
- vector single vs vector partitioned

The transitions between the different modes are represented by:
- nvptx_fork
- nvptx_forked
- nvptx_join
- nvptx_joined
until pass_machine_reorg.

In pass_machine_reorg, they are expanded into more detailed operations
implementing state propagation and neutering code for single mode.

The neutering code consists of branch-around code, which uses these conditional
jumps that are not JUMP_INSN.

My assumption is that this is done in order to make the compiler behave
conservatively with these jumps. I'm not sure if this is related to one or more
passes after reorg, or if this is just defensive programming.

I could try to change these into JUMP_INSN in stage1, and see how that goes.
...

Reply via email to