aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2014-12-17 21:25:18 +0000
committerVladimir Makarov <vmakarov@redhat.com>2014-12-17 21:25:18 +0000
commitd8bece5b871dd717f27b9c0c6c3287a735aca507 (patch)
tree6bb070c307762898cfd11f8f02245b0e065ca865
parente83bf2348f4aa87392e4e610ad167f2bed5bc892 (diff)
2014-12-17 Vladimir Makarov <vmakarov@redhat.com>
* lra-constrints.c (process_alt_operands): Remove non allocatable hard regs when considering ira_prohibited_class_mode_regs. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@218835 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/lra-constraints.c32
2 files changed, 24 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eb016cdbc96..aef7f045b36 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-12-17 Vladimir Makarov <vmakarov@redhat.com>
+
+ * lra-constrints.c (process_alt_operands): Remove non allocatable
+ hard regs when considering ira_prohibited_class_mode_regs.
+
2014-12-17 Jan Hubicka <hubicka@ucw.cz>
* sreal.h (sreal::normalize): Implement inline.
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index a108b84c120..2526954b02a 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -2280,22 +2280,28 @@ process_alt_operands (int only_alternative)
not hold the mode value. */
&& ! HARD_REGNO_MODE_OK (ira_class_hard_regs
[this_alternative][0],
- GET_MODE (*curr_id->operand_loc[nop]))
+ GET_MODE (*curr_id->operand_loc[nop])))
+ {
+ HARD_REG_SET temp;
+
+ COPY_HARD_REG_SET (temp, this_alternative_set);
+ AND_COMPL_HARD_REG_SET (temp, lra_no_alloc_regs);
/* The above condition is not enough as the first
reg in ira_class_hard_regs can be not aligned for
multi-words mode values. */
- && hard_reg_set_subset_p (this_alternative_set,
- ira_prohibited_class_mode_regs
- [this_alternative]
- [GET_MODE (*curr_id->operand_loc[nop])]))
- {
- if (lra_dump_file != NULL)
- fprintf
- (lra_dump_file,
- " alt=%d: reload pseudo for op %d "
- " can not hold the mode value -- refuse\n",
- nalt, nop);
- goto fail;
+ if (hard_reg_set_subset_p (temp,
+ ira_prohibited_class_mode_regs
+ [this_alternative]
+ [GET_MODE (*curr_id->operand_loc[nop])]))
+ {
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " alt=%d: reload pseudo for op %d "
+ " can not hold the mode value -- refuse\n",
+ nalt, nop);
+ goto fail;
+ }
}
/* Check strong discouragement of reload of non-constant