diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2007-07-01 23:41:38 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@gcc.gnu.org> | 2007-07-01 23:41:38 +0000 |
commit | 4794afa5e0e4e701892d8049ec96599bb8fb3555 (patch) | |
tree | f2794ba721b60c7fbde45614b26bbd672f1841e7 | |
parent | 10ae7c7b78beed4a5d924ec89371ecb0b0a9a367 (diff) | |
download | gcc-4794afa5e0e4e701892d8049ec96599bb8fb3555.zip gcc-4794afa5e0e4e701892d8049ec96599bb8fb3555.tar.gz gcc-4794afa5e0e4e701892d8049ec96599bb8fb3555.tar.bz2 |
tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle constants and ohter expected operations explicitly...
2007-07-01 Daniel Berlin <dberlin@dberlin.org>
* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle constants
and ohter expected operations explicitly, change default to
gcc_unreachable.
From-SVN: r126179
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 19 |
2 files changed, 23 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 295dc72..a5a83ee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-07-01 Daniel Berlin <dberlin@dberlin.org> + + * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle constants + and other expected operations explicitly, change default to + gcc_unreachable. + 2007-07-01 Daniel Jacobowitz <dan@codesourcery.com> * config/arm/arm.c (arm_cannot_copy_insn_p): Do not expect a diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 89e3995..45ebe08 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -524,6 +524,10 @@ copy_reference_ops_from_ref (tree ref, VEC(vn_reference_op_s, heap) **result) temp.op0 = TREE_OPERAND (ref, 1); temp.op1 = TREE_OPERAND (ref, 3); break; + case STRING_CST: + case INTEGER_CST: + case COMPLEX_CST: + case VECTOR_CST: case VALUE_HANDLE: case VAR_DECL: case PARM_DECL: @@ -532,12 +536,23 @@ copy_reference_ops_from_ref (tree ref, VEC(vn_reference_op_s, heap) **result) case SSA_NAME: temp.op0 = ref; break; - default: + /* These are only interesting for their operands, their + existence, and their type. They will never be the last + ref in the chain of references (IE they require an + operand), so we don't have to put anything + for op* as it will be handled by the iteration */ + case IMAGPART_EXPR: + case REALPART_EXPR: + case VIEW_CONVERT_EXPR: + case ADDR_EXPR: break; + default: + gcc_unreachable (); + } VEC_safe_push (vn_reference_op_s, heap, *result, &temp); - if (REFERENCE_CLASS_P (ref)) + if (REFERENCE_CLASS_P (ref) || TREE_CODE (ref) == ADDR_EXPR) ref = TREE_OPERAND (ref, 0); else ref = NULL_TREE; |