diff options
author | Richard Stallman <rms@gnu.org> | 1992-05-16 18:14:50 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-05-16 18:14:50 +0000 |
commit | 754731823fbe874204c1277823e07d9673aa3e93 (patch) | |
tree | 3d74a14f3ffe9bf80130750a97500cc75ac4d5c8 /gcc | |
parent | ea9c2c2af59ebaa85d902112ab7f082ecdfbacd3 (diff) | |
download | gcc-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.c | 13 |
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; |