Commit 4b1a1d98 by Dragan Mladjenovic Committed by Jeff Law

cfgcleanup.c (old_insns_match_p): Check if used hard regs set is equal for both call instructions.

2019-07-09  Dragan Mladjenovic  <dmladjenovic@wavecomp.com>

	* cfgcleanup.c (old_insns_match_p): Check if used hard regs set is equal
	for both call instructions.

2019-07-09  Dragan Mladjenovic  <dmladjenovic@wavecomp.com>

	* gcc.target/mips/cfgcleanup-jalr1.c: New test.
	* gcc.target/mips/cfgcleanup-jalr2.c: New test.
	* gcc.target/mips/cfgcleanup-jalr3.c: New test.

From-SVN: r273314
parent 4faba5c3
2019-07-09 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
* cfgcleanup.c (old_insns_match_p): Check if used hard regs set is equal
for both call instructions.
2019-07-09 John Darrington <john@darrington.wattle.id.au> 2019-07-09 John Darrington <john@darrington.wattle.id.au>
* simplify-rtx.c (simplify_unary_operation_1): Use GET_MODE_PRECISION * simplify-rtx.c (simplify_unary_operation_1): Use GET_MODE_PRECISION
......
...@@ -53,6 +53,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -53,6 +53,7 @@ along with GCC; see the file COPYING3. If not see
#include "dce.h" #include "dce.h"
#include "dbgcnt.h" #include "dbgcnt.h"
#include "rtl-iter.h" #include "rtl-iter.h"
#include "regs.h"
#define FORWARDER_BLOCK_P(BB) ((BB)->flags & BB_FORWARDER_BLOCK) #define FORWARDER_BLOCK_P(BB) ((BB)->flags & BB_FORWARDER_BLOCK)
...@@ -1224,6 +1225,14 @@ old_insns_match_p (int mode ATTRIBUTE_UNUSED, rtx_insn *i1, rtx_insn *i2) ...@@ -1224,6 +1225,14 @@ old_insns_match_p (int mode ATTRIBUTE_UNUSED, rtx_insn *i1, rtx_insn *i2)
} }
} }
} }
HARD_REG_SET i1_used, i2_used;
get_call_reg_set_usage (i1, &i1_used, call_used_reg_set);
get_call_reg_set_usage (i2, &i2_used, call_used_reg_set);
if (!hard_reg_set_equal_p (i1_used, i2_used))
return dir_none;
} }
/* If both i1 and i2 are frame related, verify all the CFA notes /* If both i1 and i2 are frame related, verify all the CFA notes
......
2019-07-09 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
* gcc.target/mips/cfgcleanup-jalr1.c: New test.
* gcc.target/mips/cfgcleanup-jalr2.c: New test.
* gcc.target/mips/cfgcleanup-jalr3.c: New test.
2019-07-09 Richard Biener <rguenther@suse.de> 2019-07-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/91114 PR tree-optimization/91114
......
/* { dg-do compile } */
/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */
/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */
extern void foo (void*);
extern void bar (void*);
void
test (void* p)
{
if (!p)
foo(p);
else
bar(p);
}
/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */
/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */
/* { dg-do compile } */
/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */
/* { dg-additional-options "-fno-inline -fipa-ra -mcompact-branches=never" } */
/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */
static int foo (void* p) { __asm__ (""::"r"(p):"$t0"); return 0; }
static int bar (void* p) { return 1; }
int
test (void* p)
{
int res = !p ? foo(p) : bar(p);
register int tmp __asm__("$t0") = -1;
__asm__ (""::"r"(tmp));
return res;
}
/* { dg-final { scan-assembler "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */
/* { dg-final { scan-assembler "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */
/* { dg-final { scan-assembler-not "\\.set\tnomacro\n\tjalr\t\\\$25" } } */
/* { dg-do compile } */
/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */
/* { dg-additional-options "-fno-inline -fipa-ra -mcompact-branches=never" } */
/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */
static int foo (void* p) { return 0; }
static int bar (void* p) { return 1; }
int
test (void* p)
{
int res = !p ? foo(p) : bar(p);
register int tmp __asm__("$t0") = -1;
__asm__ (""::"r"(tmp));
return res;
}
/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */
/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */
/* { dg-final { scan-assembler "\\.set\tnomacro\n\tjalr\t\\\$25" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment