diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2012-05-04 11:01:34 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2012-05-04 11:01:34 +0000 |
commit | a2f2d218dd337a6508d504e477a3ae5371069d59 (patch) | |
tree | ff51844afb0d248a98556451ecbb9b1c3a056a0d /gcc/recog.c | |
parent | 9178a345850d1c35cc1fe2bed529a8a0029c4251 (diff) | |
download | gcc-a2f2d218dd337a6508d504e477a3ae5371069d59.zip gcc-a2f2d218dd337a6508d504e477a3ae5371069d59.tar.gz gcc-a2f2d218dd337a6508d504e477a3ae5371069d59.tar.bz2 |
re PR target/48496 ('asm' operand requires impossible reload)
PR target/48496
* recog.c (constrain_operands): If extra constraints are present, also
accept pseudo-registers with equivalent memory locations during reload.
From-SVN: r187150
Diffstat (limited to 'gcc/recog.c')
-rw-r--r-- | gcc/recog.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/recog.c b/gcc/recog.c index cb2bfd3..3f6bc54 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -2680,6 +2680,16 @@ constrain_operands (int strict) /* Every address operand can be reloaded to fit. */ && strict < 0) win = 1; + /* Cater to architectures like IA-64 that define extra memory + constraints without using define_memory_constraint. */ + else if (reload_in_progress + && REG_P (op) + && REGNO (op) >= FIRST_PSEUDO_REGISTER + && reg_renumber[REGNO (op)] < 0 + && reg_equiv_mem (REGNO (op)) != 0 + && EXTRA_CONSTRAINT_STR + (reg_equiv_mem (REGNO (op)), c, p)) + win = 1; #endif break; } |