https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79058

--- Comment #16 from Dominik Vogt <vogt at linux dot vnet.ibm.com> ---
Or rather this one which avoids triggering an assertion failure in
in_hard_reg_set_p ():

diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -1463,6 +1463,7 @@ static bool
 simplify_operand_subreg (int nop, machine_mode reg_mode)
 {
   int hard_regno;
+  int tmp_regno;
   rtx_insn *before, *after;
   machine_mode mode, innermode;
   rtx reg, new_reg;
@@ -1685,8 +1686,14 @@ simplify_operand_subreg (int nop, machine_mode reg_mode)
               < hard_regno_nregs[hard_regno][mode])
           && (regclass = lra_get_allocno_class (REGNO (reg)))
           && (type != OP_IN
-              || !in_hard_reg_set_p (reg_class_contents[regclass],
-                                     mode, hard_regno)))
+              || (BYTES_BIG_ENDIAN
+                  && ((tmp_regno
+                       = hard_regno - hard_regno_nregs[hard_regno][mode] + 1)
+                      < 0
+                      || !HARD_REGISTER_NUM_P (tmp_regno)))
+              || (!in_hard_reg_set_p (reg_class_contents[regclass], mode,
+                                      (BYTES_BIG_ENDIAN
+                                       ? tmp_regno : hard_regno)))))
     {
       /* The class will be defined later in curr_insn_transform.  */
       enum reg_class rclass

Reply via email to