aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-05-16 18:14:50 +0000
committerRichard Stallman <rms@gnu.org>1992-05-16 18:14:50 +0000
commit754731823fbe874204c1277823e07d9673aa3e93 (patch)
tree3d74a14f3ffe9bf80130750a97500cc75ac4d5c8 /gcc
parentea9c2c2af59ebaa85d902112ab7f082ecdfbacd3 (diff)
downloadgcc-754731823fbe874204c1277823e07d9673aa3e93.zip
gcc-754731823fbe874204c1277823e07d9673aa3e93.tar.gz
gcc-754731823fbe874204c1277823e07d9673aa3e93.tar.bz2
*** empty log message ***
From-SVN: r997
Diffstat (limited to 'gcc')
-rw-r--r--gcc/combine.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 8db1fb9..044a413 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -3687,11 +3687,16 @@ expand_compound_operation (x)
case ZERO_EXTEND:
unsignedp = 1;
case SIGN_EXTEND:
- /* If we somehow managed to end up with (sign/zero_extend (const_int x)),
- just return the CONST_INT. We can't know how much masking to do
- in that case. */
+ /* We can't necessarily use a const_int for a multiword mode;
+ it depends on implicitly extending the value.
+ Since we don't know the right way to extend it,
+ we can't tell whether the implicit way is right.
+
+ Even for a mode that is no wider than a const_int,
+ we can't win, because we need to sign extend one of its bits through
+ the rest of it, and we don't know which bit. */
if (GET_CODE (XEXP (x, 0)) == CONST_INT)
- return XEXP (x, 0);
+ return x;
if (! FAKE_EXTEND_SAFE_P (GET_MODE (XEXP (x, 0)), XEXP (x, 0)))
return x;