diff options
author | Richard Henderson <rth@cygnus.com> | 1998-06-30 22:10:51 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1998-06-30 22:10:51 -0700 |
commit | aac5cc1620c19d41b26c09982ed666e0dae3d453 (patch) | |
tree | 828f62b36645dd969e85f79cb627a5fabb232ee1 /gcc/cse.c | |
parent | 1eac9f59f2a15474966ffa2fe591119cc5a4360b (diff) | |
download | gcc-aac5cc1620c19d41b26c09982ed666e0dae3d453.zip gcc-aac5cc1620c19d41b26c09982ed666e0dae3d453.tar.gz gcc-aac5cc1620c19d41b26c09982ed666e0dae3d453.tar.bz2 |
expr.c (emit_group_load, [...]): Rewrite considering the size and alignment of the structure being manipulated.
* expr.c (emit_group_load, emit_group_store): Rewrite considering
the size and alignment of the structure being manipulated.
* expr.c, calls.c, function.c: Update all callers.
* expr.h: Update prototypes.
* cse.c (invalidate): Cope with parallels.
From-SVN: r20867
Diffstat (limited to 'gcc/cse.c')
-rw-r--r-- | gcc/cse.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -1609,6 +1609,24 @@ invalidate (x, full_mode) return; } + /* If X is a parallel, invalidate all of its elements. */ + + if (GET_CODE (x) == PARALLEL) + { + for (i = XVECLEN (x, 0) - 1; i >= 0 ; --i) + invalidate (XVECEXP (x, 0, i), VOIDmode); + return; + } + + /* If X is an expr_list, this is part of a disjoint return value; + extract the location in question ignoring the offset. */ + + if (GET_CODE (x) == EXPR_LIST) + { + invalidate (XEXP (x, 0), VOIDmode); + return; + } + /* X is not a register; it must be a memory reference with a nonvarying address. Remove all hash table elements that refer to overlapping pieces of memory. */ |