https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102133
--- Comment #7 from Hongtao.liu <crazylht at gmail dot com> --- Since we also allow something like (concat:(subreg) (subreg)), should we also allow subreg outside? gcc_checking_assert (!x || !(TREE_CODE (t) == SSA_NAME || is_gimple_reg (t)) || (use_register_for_decl (t) - ? (REG_P (x) + ? (REG_P (x) || SUBREG_P (x) || (GET_CODE (x) == CONCAT && (REG_P (XEXP (x, 0)) || SUBREG_P (XEXP (x, 0))) The below code also looks like it's going to handle SUBREG. if (x) { bool skip = false; tree cur = NULL_TREE; rtx xm = x; retry: if (MEM_P (xm)) cur = MEM_EXPR (xm); else if (REG_P (xm)) cur = REG_EXPR (xm); else if (SUBREG_P (xm)) { gcc_assert (subreg_lowpart_p (xm)); xm = SUBREG_REG (xm); goto retry;