Hello! > This bug is introduced by my commit r236181 where the inner rtx of > SUBREG haven't been checked while it should as "in_class_p" only > works with REG, and SUBREG_REG is actually not always REG. If REG_P > check failed, then we should fall back to normal code patch. The > following simple testcase for x86 can reproduce this bug.
> diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c > index 56ab5b4..e4e6c8c 100644 > --- a/gcc/lra-constraints.c > +++ b/gcc/lra-constraints.c > @@ -1317,7 +1317,8 @@ process_addr_reg (rtx *loc, bool check_only_p, > rtx_insn **before, rtx_insn **aft > register, and this normally will be a subreg which should be reloaded > as a whole. This is particularly likely to be triggered when > -fno-split-wide-types specified. */ >- if (in_class_p (reg, cl, &new_class) >+ if (!REG_P (reg) >+ || in_class_p (reg, cl, &new_class) > || GET_MODE_SIZE (mode) <= GET_MODE_SIZE (ptr_mode)) > loc = &SUBREG_REG (*loc); Why not check SUBREG_P instead of !REG_P? Uros.