re PR rtl-optimization/62146 (CSE replaces constant with an expression incorrectly)
2014-09-05 Easwaran Raman <eraman@google.com> PR rtl-optimization/62146 * ifcvt.c (dead_or_predicable): Make removal of REG_EQUAL note of hoisted instruction unconditional. testsuite: * testsuite/g++.dg/opt/pr62146.C: New. From-SVN: r214977
This commit is contained in:
parent
8a03df77b1
commit
14e4c2af43
4 changed files with 64 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-09-05 Easwaran Raman <eraman@google.com>
|
||||
|
||||
PR rtl-optimization/62146
|
||||
* ifcvt.c (dead_or_predicable): Make removal of REG_EQUAL note of
|
||||
hoisted instruction unconditional.
|
||||
|
||||
2014-09-05 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR target/63187
|
||||
|
|
|
@ -4403,17 +4403,14 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb,
|
|||
insn = head;
|
||||
do
|
||||
{
|
||||
rtx note, set;
|
||||
rtx note;
|
||||
|
||||
if (! INSN_P (insn))
|
||||
continue;
|
||||
note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
|
||||
if (! note)
|
||||
continue;
|
||||
set = single_set (insn);
|
||||
if (!set || !function_invariant_p (SET_SRC (set))
|
||||
|| !function_invariant_p (XEXP (note, 0)))
|
||||
remove_note (insn, note);
|
||||
remove_note (insn, note);
|
||||
} while (insn != end && (insn = NEXT_INSN (insn)));
|
||||
|
||||
/* PR46315: when moving insns above a conditional branch, the REG_EQUAL
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-09-05 Easwaran Raman <eraman@google.com>
|
||||
|
||||
PR rtl-optimization/62146
|
||||
* testsuite/g++.dg/opt/pr62146.C: New.
|
||||
|
||||
2014-09-05 Marat Zakirov <m.zakirov@samsung.com>
|
||||
|
||||
* gcc.dg/vect/vect-109.c: Skip predicate added.
|
||||
|
|
51
gcc/testsuite/g++.dg/opt/pr62146.C
Normal file
51
gcc/testsuite/g++.dg/opt/pr62146.C
Normal file
|
@ -0,0 +1,51 @@
|
|||
/* PR rtl-optimization/62146 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 " } */
|
||||
class F
|
||||
{
|
||||
public:
|
||||
virtual ~ F ();
|
||||
};
|
||||
template < class CL > class G:public F
|
||||
{
|
||||
int *member_;
|
||||
public:
|
||||
G ( int *b): member_ (0)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class D
|
||||
{
|
||||
public:
|
||||
template < class CL > void RegisterNonTagCallback (int,
|
||||
void (CL::
|
||||
*p3) ())
|
||||
{
|
||||
InternalRegisterNonTag (p3 ? new G < CL > ( 0) : 0);
|
||||
} void InternalRegisterNonTag (F *);
|
||||
};
|
||||
|
||||
void fn1 ();
|
||||
class C1
|
||||
{
|
||||
void foo();
|
||||
class TokenType
|
||||
{
|
||||
public:
|
||||
void AddToken ()
|
||||
{
|
||||
}
|
||||
};
|
||||
C1::TokenType bar_t;
|
||||
};
|
||||
D a;
|
||||
void C1::foo()
|
||||
{
|
||||
if (&bar_t)
|
||||
fn1 ();
|
||||
for (int i = 0; i < sizeof 0; ++i)
|
||||
a.RegisterNonTagCallback (0, &TokenType::AddToken);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "mov.*_ZN2C19TokenType8AddTokenEv, .\\\(" } } */
|
Loading…
Add table
Reference in a new issue