]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/38789 (__builtin_constant_p appears to evaluate to true for...
authorJakub Jelinek <jakub@redhat.com>
Fri, 16 Jan 2009 15:01:24 +0000 (16:01 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 16 Jan 2009 15:01:24 +0000 (16:01 +0100)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr38789.c [new file with mode: 0644]
gcc/tree-ssa-threadedge.c

index 3a7a72cd1f55c3652027d01ab2b4099f25d345c5..d2f9fe7425da1d8025d0560513d45303e327650e 100644 (file)
@@ -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
index ac03e178defadc9d7fa88baa30063f909ce1e6f6..e8a3cc3e5d15f6f5a8e1bf8181ccd672bdc02c64 100644 (file)
@@ -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
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr38789.c b/gcc/testsuite/gcc.c-torture/compile/pr38789.c
new file mode 100644 (file)
index 0000000..9179f6c
--- /dev/null
@@ -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));
+}
index a193d94b01041d45d59dde9fea9fc20a3fee319c..1429c18c99832aa83926d8f1e5c2051e1641baca 100644 (file)
@@ -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;
        }