Message ID | 913bab85-c591-22a6-37b3-31e1f57ae77b@foss.arm.com |
---|---|
State | New |
Headers | show |
On 01/13/2017 11:19 AM, Thomas Preudhomme wrote: > Ping? I'm not sure if an ok from Valdimir is enough or if I also need RM > approval. Vlad's approval is all you need. jeff
On 01/16/2017 02:26 PM, Jeff Law wrote: > On 01/13/2017 11:19 AM, Thomas Preudhomme wrote: >> Ping? I'm not sure if an ok from Valdimir is enough or if I also need RM >> approval. > Vlad's approval is all you need. > Thomas, the patch is ok for backporting. It is pretty safe.
On 01/16/2017 08:26 PM, Jeff Law wrote: > On 01/13/2017 11:19 AM, Thomas Preudhomme wrote: >> Ping? I'm not sure if an ok from Valdimir is enough or if I also need RM >> approval. > Vlad's approval is all you need. Is that a general rule? I'm never too certain on that. Bernd
On Tue, Jan 17, 2017 at 05:22:34PM +0100, Bernd Schmidt wrote: > On 01/16/2017 08:26 PM, Jeff Law wrote: > > On 01/13/2017 11:19 AM, Thomas Preudhomme wrote: > > > Ping? I'm not sure if an ok from Valdimir is enough or if I also need RM > > > approval. > > Vlad's approval is all you need. > > Is that a general rule? I'm never too certain on that. Unless the branch is frozen for release (at which point all commits need RM approval) or closed, maintainers/reviewers can approve backports in the areas they are maintainers or reviewers for. Of course good judgement should be used on what should be backported and what should not. Jakub
diff --git a/gcc/lra-remat.c b/gcc/lra-remat.c index 187ee3e7752d1ebe15ba8e8014620c0a94e11424..79504d4eb1a052d906a69178d847e6e618b468ec 100644 --- a/gcc/lra-remat.c +++ b/gcc/lra-remat.c @@ -1116,6 +1116,7 @@ update_scratch_ops (rtx_insn *remat_insn) static bool do_remat (void) { + unsigned regno; rtx_insn *insn; basic_block bb; bitmap_head avail_cands; @@ -1123,12 +1124,21 @@ do_remat (void) bool changed_p = false; /* Living hard regs and hard registers of living pseudos. */ HARD_REG_SET live_hard_regs; + bitmap_iterator bi; bitmap_initialize (&avail_cands, ®_obstack); bitmap_initialize (&active_cands, ®_obstack); FOR_EACH_BB_FN (bb, cfun) { - REG_SET_TO_HARD_REG_SET (live_hard_regs, df_get_live_out (bb)); + CLEAR_HARD_REG_SET (live_hard_regs); + EXECUTE_IF_SET_IN_BITMAP (df_get_live_in (bb), 0, regno, bi) + { + int hard_regno = regno < FIRST_PSEUDO_REGISTER + ? regno + : reg_renumber[regno]; + if (hard_regno >= 0) + SET_HARD_REG_BIT (live_hard_regs, hard_regno); + } bitmap_and (&avail_cands, &get_remat_bb_data (bb)->avin_cands, &get_remat_bb_data (bb)->livein_cands); /* Activating insns are always in the same block as their corresponding diff --git a/gcc/testsuite/gcc.c-torture/execute/pr78617.c b/gcc/testsuite/gcc.c-torture/execute/pr78617.c new file mode 100644 index 0000000000000000000000000000000000000000..89c4f6dea8cb507b963f91debb94cbe16eb1db90 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr78617.c @@ -0,0 +1,25 @@ +int a = 0; +int d = 1; +int f = 1; + +int fn1() { + return a || 1 >> a; +} + +int fn2(int p1, int p2) { + return p2 >= 2 ? p1 : p1 >> 1; +} + +int fn3(int p1) { + return d ^ p1; +} + +int fn4(int p1, int p2) { + return fn3(!d > fn2((f = fn1() - 1000) || p2, p1)); +} + +int main() { + if (fn4(0, 0) != 1) + __builtin_abort (); + return 0; +}