aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/ia64
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2007-11-15 00:21:15 +0100
committerEric Botcazou <ebotcazou@gcc.gnu.org>2007-11-14 23:21:15 +0000
commitc6f4f1d196519805291afdc140fdd2e43388499e (patch)
tree36aea9f33ba007b4bed28b66f158e01080ecc402 /gcc/config/ia64
parentf7bc70c5bfd8b06a03df87734d37201cc0ac9463 (diff)
downloadgcc-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.h10
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 */