During jump bypassing also consider insns of the form (insn 25 57 26 9 (parallel [ (set (reg:CCZ 33 %cc) (compare:CCZ (reg:SI 60 [ _9 ]) (const_int 0 [0]))) (clobber (scratch:SI)) ]) "spaceship-fp-4.c":27:1 1746 {*tstsi_cconly_extimm} (nil))
by testing for a single set insn during bypass_conditional_jumps(). This is a requirement for test gcc.target/s390/spaceship-fp-4.c of the subsequent commit. In order to silence cprop.cc:1621:40: error: 'setcc_dest' may be used uninitialized [-Werror=maybe-uninitialized] 1621 | src = simplify_replace_rtx (src, setcc_dest, setcc_src); | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ initialize setcc_{dest,src} in bypass_block() although this is not really required. gcc/ChangeLog: * cprop.cc (bypass_block): Extract single set. (bypass_conditional_jumps): Ditto. --- Bootstrapped and regtested on aarch64-unknown-linux-gnu, powerpc64le-unknown-linux-gnu, s390x-ibm-linux-gnu, x86_64-pc-linux-gnu. Ok for mainline? gcc/cprop.cc | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/cprop.cc b/gcc/cprop.cc index bc72e64e3a7..dfe3462a0cc 100644 --- a/gcc/cprop.cc +++ b/gcc/cprop.cc @@ -1525,6 +1525,7 @@ static bool bypass_block (basic_block bb, rtx_insn *setcc, rtx_insn *jump) { rtx_insn *insn; + rtx setcc_src, setcc_dest; rtx note; edge e, edest; bool change; @@ -1533,7 +1534,19 @@ bypass_block (basic_block bb, rtx_insn *setcc, rtx_insn *jump) unsigned i; edge_iterator ei; - insn = (setcc != NULL) ? setcc : jump; + if (setcc != NULL) + { + rtx set = single_set (setcc); + setcc_dest = SET_DEST (set); + setcc_src = SET_SRC (set); + insn = setcc; + } + else + { + setcc_dest = NULL; + setcc_src = NULL; + insn = jump; + } /* Determine set of register uses in INSN. */ reg_use_count = 0; @@ -1608,9 +1621,7 @@ bypass_block (basic_block bb, rtx_insn *setcc, rtx_insn *jump) src = SET_SRC (pc_set (jump)); if (setcc != NULL) - src = simplify_replace_rtx (src, - SET_DEST (PATTERN (setcc)), - SET_SRC (PATTERN (setcc))); + src = simplify_replace_rtx (src, setcc_dest, setcc_src); new_rtx = simplify_replace_rtx (src, reg_used, set->src); @@ -1716,10 +1727,11 @@ bypass_conditional_jumps (void) { if (setcc) break; - if (GET_CODE (PATTERN (insn)) != SET) + rtx singleset = single_set (insn); + if (singleset == NULL_RTX) break; - dest = SET_DEST (PATTERN (insn)); + dest = SET_DEST (singleset); if (REG_P (dest)) setcc = insn; else -- 2.49.0