re PR tree-optimization/38789 (__builtin_constant_p appears to evaluate to true for non-constant arguments.)
PR tree-optimization/38789 * tree-ssa-threadedge.c (record_temporary_equivalences_from_stmts_at_dest): Ignore calls to __builtin_constant_p. * gcc.c-torture/compile/pr38789.c: New test. From-SVN: r143435
This commit is contained in:
parent
cd3f172908
commit
56c6a49994
4 changed files with 43 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
|||
2009-01-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/38789
|
||||
* tree-ssa-threadedge.c
|
||||
(record_temporary_equivalences_from_stmts_at_dest): Ignore calls to
|
||||
__builtin_constant_p.
|
||||
|
||||
2009-01-16 Kenneth Zadeck <zadeck@naturalbridge.com>
|
||||
|
||||
* dce.c (delete_unmarked_insns): Reversed the order that insns are
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-01-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/38789
|
||||
* gcc.c-torture/compile/pr38789.c: New test.
|
||||
|
||||
2009-01-16 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/38152
|
||||
|
|
18
gcc/testsuite/gcc.c-torture/compile/pr38789.c
Normal file
18
gcc/testsuite/gcc.c-torture/compile/pr38789.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* PR tree-optimization/38789 */
|
||||
|
||||
void
|
||||
baz (int v)
|
||||
{
|
||||
unsigned a = (v == 1) ? 1 : 2;
|
||||
|
||||
if (__builtin_constant_p (a))
|
||||
asm volatile ("# constant %0" :: "i" (a));
|
||||
else
|
||||
asm volatile ("# register %0" :: "r" (a));
|
||||
|
||||
a = 6;
|
||||
if (__builtin_constant_p (a))
|
||||
asm volatile ("# constant %0" :: "i" (a));
|
||||
else
|
||||
asm volatile ("# register %0" :: "r" (a));
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/* SSA Jump Threading
|
||||
Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
Contributed by Jeff Law <law@redhat.com>
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -320,12 +320,22 @@ record_temporary_equivalences_from_stmts_at_dest (edge e,
|
|||
|
||||
The result of __builtin_object_size is defined to be the maximum of
|
||||
remaining bytes. If we use only one edge on the phi, the result will
|
||||
change to be the remaining bytes for the corresponding phi argument. */
|
||||
change to be the remaining bytes for the corresponding phi argument.
|
||||
|
||||
Similarly for __builtin_constant_p:
|
||||
|
||||
r = PHI <1(2), 2(3)>
|
||||
__builtin_constant_p (r)
|
||||
|
||||
Both PHI arguments are constant, but x ? 1 : 2 is still not
|
||||
constant. */
|
||||
|
||||
if (is_gimple_call (stmt))
|
||||
{
|
||||
tree fndecl = gimple_call_fndecl (stmt);
|
||||
if (fndecl && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_OBJECT_SIZE)
|
||||
if (fndecl
|
||||
&& (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_OBJECT_SIZE
|
||||
|| DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P))
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue