On Wed, Jan 24, 2018 at 02:56:28PM +0100, Tom de Vries wrote: > +#if WORKAROUND_PTXJIT_BUG_2 > +/* Variant of pc_set that only requires JUMP_P (INSN) if STRICT. This > variant > + is needed in the nvptx target because the branches generated for > + parititioning are NONJUMP_INSN_P, not JUMP_P. */ > + > +static rtx > +nvptx_pc_set (const rtx_insn *insn, bool strict = true) > +{ > + rtx pat; > + if ((strict && !JUMP_P (insn)) > + || (!strict && !INSN_P (insn))) > + return NULL_RTX; > + pat = PATTERN (insn); > + > + /* The set is allowed to appear either as the insn pattern or > + the first set in a PARALLEL. */ > + if (GET_CODE (pat) == PARALLEL) > + pat = XVECEXP (pat, 0, 0);
This could have been single_set. > + if (!x) > + return NULL_RTX; > + x = SET_SRC (x); > + if (GET_CODE (x) == LABEL_REF) > + return x; > + if (GET_CODE (x) != IF_THEN_ELSE) > + return NULL_RTX; > + if (XEXP (x, 2) == pc_rtx && GET_CODE (XEXP (x, 1)) == LABEL_REF) > + return XEXP (x, 1); > + if (XEXP (x, 1) == pc_rtx && GET_CODE (XEXP (x, 2)) == LABEL_REF) > + return XEXP (x, 2); > + return NULL_RTX; And this looks like condjump_label. What are the nvptx conditional jumps that aren't JUMP_INSN and why? That looks like a bad idea. Otherwise, there is also JUMP_LABEL (insn)... Jakub