aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2013-02-07 17:15:02 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2013-02-07 17:15:02 +0000
commit027ece11c1e1e4ea23a92b49699934a192d155cc (patch)
tree56311bdf8734bb5677f0044a0e6e8b21916b4c00 /gcc/lra-constraints.c
parentaa62fd35b56fbbe16fa7aa3176b5b6e4ff4c5c77 (diff)
downloadgcc-027ece11c1e1e4ea23a92b49699934a192d155cc.zip
gcc-027ece11c1e1e4ea23a92b49699934a192d155cc.tar.gz
gcc-027ece11c1e1e4ea23a92b49699934a192d155cc.tar.bz2
re PR rtl-optimization/56225 (ICE in lra-constraints.c when executing the testsuite with -m32 -march=pentium3)
2013-02-07 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/56225 * lra-constraints.c (process_alt_operands): Check that reload hard reg can hold value for strict_low_part. 2013-02-07 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/56225 * gcc.target/i386/pr56225.c: New test. From-SVN: r195856
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r--gcc/lra-constraints.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index cc28854..932b699 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -1895,7 +1895,22 @@ process_alt_operands (int only_alternative)
? in_hard_reg_set_p (this_alternative_set,
mode, hard_regno[nop])
: in_class_p (op, this_alternative, NULL))))
- losers++;
+ {
+ /* Strict_low_part requires reload the register not
+ the sub-register. In this case we should check
+ that a final reload hard reg can hold the
+ value. */
+ if (curr_static_id->operand[nop].strict_low
+ && REG_P (op)
+ && hard_regno[nop] < 0
+ && GET_CODE (*curr_id->operand_loc[nop]) == SUBREG
+ && ira_class_hard_regs_num[this_alternative] > 0
+ && ! HARD_REGNO_MODE_OK (ira_class_hard_regs
+ [this_alternative][0],
+ GET_MODE (op)))
+ goto fail;
+ losers++;
+ }
if (operand_reg[nop] != NULL_RTX
/* Output operands and matched input operands are
not inherited. The following conditions do not