aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2003-07-05 11:51:54 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2003-07-05 07:51:54 -0400
commita8f3bf527144a4ddcffcfd37f022f8bc65de6bef (patch)
tree67847c0636c55f25eddb8f68742e1bd0f9c4c4a7 /gcc
parent0641776cefb0ba35cc75c3bb27451a7e706dc2cd (diff)
downloadgcc-a8f3bf527144a4ddcffcfd37f022f8bc65de6bef.zip
gcc-a8f3bf527144a4ddcffcfd37f022f8bc65de6bef.tar.gz
gcc-a8f3bf527144a4ddcffcfd37f022f8bc65de6bef.tar.bz2
expr.c (expand_expr, [...]): When seeing if should use bitfield operations...
* expr.c (expand_expr, case COMPONENT_REF): When seeing if should use bitfield operations, use STRICT_ALIGNMENT, not SLOW_UNALIGNED_ACCESS if EXPAND_CONST_ADDRESS or EXPAND_INITIALIZER. From-SVN: r68968
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/expr.c5
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f336963..04fa53e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-07-05 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_expr, case COMPONENT_REF): When seeing if should use
+ bitfield operations, use STRICT_ALIGNMENT, not SLOW_UNALIGNED_ACCESS
+ if EXPAND_CONST_ADDRESS or EXPAND_INITIALIZER.
+
2003-07-05 Andreas Jaeger <aj@suse.de>
* genattrtab.c (write_attr_get): Revert part of last patch to
diff --git a/gcc/expr.c b/gcc/expr.c
index 56d733f..88374f3 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -7541,7 +7541,10 @@ expand_expr (tree exp, rtx target, enum machine_mode tmode, enum expand_modifier
|| (mode1 != BLKmode
&& (((TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode)
|| (bitpos % GET_MODE_ALIGNMENT (mode) != 0))
- && SLOW_UNALIGNED_ACCESS (mode1, MEM_ALIGN (op0)))
+ && ((modifier == EXPAND_CONST_ADDRESS
+ || modifier == EXPAND_INITIALIZER)
+ ? STRICT_ALIGNMENT
+ : SLOW_UNALIGNED_ACCESS (mode1, MEM_ALIGN (op0))))
|| (bitpos % BITS_PER_UNIT != 0)))
/* If the type and the field are a constant size and the
size of the type isn't the same size as the bitfield,