diff options
Diffstat (limited to 'gcc/cselib.c')
-rw-r--r-- | gcc/cselib.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cselib.c b/gcc/cselib.c index 64eb8a5752a..0eb17b8a836 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -593,6 +593,22 @@ hash_rtx (x, mode, create) + (unsigned) CONST_DOUBLE_HIGH (x)); return hash ? hash : (unsigned int) CONST_DOUBLE; + case CONST_VECTOR: + { + int units; + rtx elt; + + units = CONST_VECTOR_NUNITS (x); + + for (i = 0; i < units; ++i) + { + elt = CONST_VECTOR_ELT (x, i); + hash += hash_rtx (elt, GET_MODE (elt), 0); + } + + return hash; + } + /* Assume there is only one rtx object for any given label. */ case LABEL_REF: hash @@ -794,6 +810,7 @@ cselib_subst_to_values (x) return e->u.val_rtx; case CONST_DOUBLE: + case CONST_VECTOR: case CONST_INT: return x; @@ -1009,6 +1026,7 @@ cselib_mem_conflict_p (mem_base, val) case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: return 0; |