From: Andreas Krebbel Date: Fri, 10 Jan 2014 14:59:41 +0000 (+0000) Subject: s390.c (s390_expand_tbegin): Remove jump over CC extraction in good case. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=86464cbd91790f0bb04cb382f20a60f6afbc323a;p=gcc.git s390.c (s390_expand_tbegin): Remove jump over CC extraction in good case. 2014-01-10 Andreas Krebbel * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC extraction in good case. From-SVN: r206527 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7b5229136a7..3bf48320499 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-10 Andreas Krebbel + + * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC + extraction in good case. + 2014-01-10 Richard Biener PR tree-optimization/59374 diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 3d480fd631b..eeccaedfb08 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -10005,16 +10005,9 @@ s390_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, void s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p) { - const int CC0 = 1 << 3; - const int CC1 = 1 << 2; - const int CC3 = 1 << 0; - rtx abort_label = gen_label_rtx (); - rtx leave_label = gen_label_rtx (); rtx retry_plus_two = gen_reg_rtx (SImode); rtx retry_reg = gen_reg_rtx (SImode); rtx retry_label = NULL_RTX; - rtx jump; - int very_unlikely = REG_BR_PROB_BASE / 100 - 1; if (retry != NULL_RTX) { @@ -10031,38 +10024,25 @@ s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p) emit_insn (gen_tbegin_nofloat_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK), tdb)); - jump = s390_emit_jump (abort_label, - gen_rtx_NE (VOIDmode, - gen_rtx_REG (CCRAWmode, CC_REGNUM), - gen_rtx_CONST_INT (VOIDmode, CC0))); - - JUMP_LABEL (jump) = abort_label; - LABEL_NUSES (abort_label) = 1; - add_int_reg_note (jump, REG_BR_PROB, very_unlikely); - - /* Initialize CC return value. */ - emit_move_insn (dest, const0_rtx); - - s390_emit_jump (leave_label, NULL_RTX); - LABEL_NUSES (leave_label) = 1; - emit_barrier (); - - /* Abort handler code. */ - - emit_label (abort_label); emit_move_insn (dest, gen_rtx_UNSPEC (SImode, gen_rtvec (1, gen_rtx_REG (CCRAWmode, CC_REGNUM)), UNSPEC_CC_TO_INT)); if (retry != NULL_RTX) { + const int CC0 = 1 << 3; + const int CC1 = 1 << 2; + const int CC3 = 1 << 0; + rtx jump; rtx count = gen_reg_rtx (SImode); + rtx leave_label = gen_label_rtx (); + + /* Exit for success and permanent failures. */ jump = s390_emit_jump (leave_label, gen_rtx_EQ (VOIDmode, gen_rtx_REG (CCRAWmode, CC_REGNUM), - gen_rtx_CONST_INT (VOIDmode, CC1 | CC3))); - LABEL_NUSES (leave_label) = 2; - add_int_reg_note (jump, REG_BR_PROB, very_unlikely); + gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3))); + LABEL_NUSES (leave_label) = 1; /* CC2 - transient failure. Perform retry with ppa. */ emit_move_insn (count, retry_plus_two); @@ -10073,9 +10053,8 @@ s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p) retry_reg)); JUMP_LABEL (jump) = retry_label; LABEL_NUSES (retry_label) = 1; + emit_label (leave_label); } - - emit_label (leave_label); } /* Builtins. */