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. ...