Commit 56c6a499 by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/38789 (__builtin_constant_p appears to evaluate to true…

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
parent cd3f1729
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
......
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
......
/* 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));
}
/* 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;
}
......
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