* tree-ssa-ccp.c (ccp_fold_stmt): Fold away OBJ_TYPE_REF when
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Oct 2010 22:03:18 +0000 (22:03 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Oct 2010 22:03:18 +0000 (22:03 +0000)
call destination is known.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164908 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-ccp.c

index 121a273..1fa311d 100644 (file)
@@ -1,3 +1,8 @@
+2010-10-02  Jan Hubicka  <jh@suse.cz>
+
+       * tree-ssa-ccp.c (ccp_fold_stmt): Fold away OBJ_TYPE_REF when
+       call destination is known.
+
 2010-10-02  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
        PR target/45820
index 13c51bc..a3d5155 100644 (file)
@@ -2307,6 +2307,17 @@ ccp_fold_stmt (gimple_stmt_iterator *gsi)
                changed = true;
              }
          }
+       if (TREE_CODE (gimple_call_fn (stmt)) == OBJ_TYPE_REF)
+         {
+           tree expr = OBJ_TYPE_REF_EXPR (gimple_call_fn (stmt));
+           expr = valueize_op (expr);
+           if (TREE_CODE (expr) == ADDR_EXPR
+               && TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL)
+            {
+              gimple_call_set_fn (stmt, expr);
+              changed = true;
+            }
+         }
 
        return changed;
       }