diff options
author | Eric Botcazou <ebotcazou@libertysurf.fr> | 2007-11-15 00:21:15 +0100 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2007-11-14 23:21:15 +0000 |
commit | c6f4f1d196519805291afdc140fdd2e43388499e (patch) | |
tree | 36aea9f33ba007b4bed28b66f158e01080ecc402 /gcc/config/ia64 | |
parent | f7bc70c5bfd8b06a03df87734d37201cc0ac9463 (diff) | |
download | gcc-c6f4f1d196519805291afdc140fdd2e43388499e.zip gcc-c6f4f1d196519805291afdc140fdd2e43388499e.tar.gz gcc-c6f4f1d196519805291afdc140fdd2e43388499e.tar.bz2 |
re PR target/33923 (ICE in reload_cse_simplify_operands (insn does not satisfy its constraints))
PR target/33923
* config/ia64/ia64.h (CANNOT_CHANGE_MODE_CLASS): Forbid mode changes
for registers in BR_REGS class.
From-SVN: r130188
Diffstat (limited to 'gcc/config/ia64')
-rw-r--r-- | gcc/config/ia64/ia64.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index 5d32b70..5f0c28c 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -887,12 +887,16 @@ enum reg_class : (((CLASS) == FR_REGS || (CLASS) == FP_REGS) && (MODE) == XCmode) ? 2 \ : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) -/* In FP regs, we can't change FP values to integer values and vice versa, +/* In BR regs, we can't change the DImode at all. + In FP regs, we can't change FP values to integer values and vice versa, but we can change e.g. DImode to SImode, and V2SFmode into DImode. */ #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ - (SCALAR_FLOAT_MODE_P (FROM) != SCALAR_FLOAT_MODE_P (TO) \ - ? reg_classes_intersect_p (CLASS, FR_REGS) : 0) + (reg_classes_intersect_p (CLASS, BR_REGS) \ + ? (FROM) != (TO) \ + : (SCALAR_FLOAT_MODE_P (FROM) != SCALAR_FLOAT_MODE_P (TO) \ + ? reg_classes_intersect_p (CLASS, FR_REGS) \ + : 0)) /* Basic Stack Layout */ |