aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-12-09 15:54:01 -0800
committerRichard Henderson <rth@gcc.gnu.org>2002-12-09 15:54:01 -0800
commit3a04ff6433538b4cec71fe681ded309db4d91cab (patch)
tree57341f6e2c1ac600113f5797665b9c84f0d000d3 /gcc/expr.c
parenta9a4005fca1d4a58133419bc33c89a62fe534cbb (diff)
downloadgcc-3a04ff6433538b4cec71fe681ded309db4d91cab.zip
gcc-3a04ff6433538b4cec71fe681ded309db4d91cab.tar.gz
gcc-3a04ff6433538b4cec71fe681ded309db4d91cab.tar.bz2
target.h (gcc_target): Add cannot_force_const_mem.
* target.h (gcc_target): Add cannot_force_const_mem. * target-def.h (TARGET_CANNOT_FORCE_CONST_MEM): New. (TARGET_INITIALIZER): Add it. * varasm.c (force_const_mem): Fail if cannot_force_const_mem. * expr.c (emit_move_insn): Be prepared for force_const_mem to fail. * reload1.c (reload): Likewise. * hooks.c (hook_bool_rtx_false): New. * hooks.h: Declare it. * config/i386/i386.c (ix86_cannot_force_const_mem): New. (TARGET_CANNOT_FORCE_CONST_MEM): New. (ix86_expand_move): Remove de-const-pooling hack. * gcc.dg/tls/opt-4.c: New. From-SVN: r59971
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 85d329f..f1b2271 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -3146,6 +3146,12 @@ emit_move_insn (x, y)
{
y_cst = y;
y = force_const_mem (mode, y);
+
+ /* If the target's cannot_force_const_mem prevented the spill,
+ assume that the target's move expanders will also take care
+ of the non-legitimate constant. */
+ if (!y)
+ y = y_cst;
}
}