On Wed, Nov 08, 2023 at 11:47:33AM +0800, Lehua Ding wrote: > Hi, > > These patchs try to support subreg coalesce feature in > register allocation passes (ira and lra).
Hi Lehua, This patch set breaks the build for at least three embedded targets. See below. For avr the GCC build fails with: /mnt/nvme/dinux/local-workspace/gcc/gcc/ira-lives.cc:149:39: error: call of overloaded ‘set_subreg_conflict_hard_regs(ira_allocno*&, int&)’ is ambiguous 149 | set_subreg_conflict_hard_regs (OBJECT_ALLOCNO (obj), regno); For arm-none-eabi the newlib build fails with: /mnt/nvme/dinux/local-workspace/newlib/newlib/libm/math/e_jn.c:279:1: internal compiler error: Floating point exception 279 | } | ^ 0x1176e0f crash_signal /mnt/nvme/dinux/local-workspace/gcc/gcc/toplev.cc:316 0xf6008d get_range_hard_regs(int, subreg_range const&) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:609 0xf6008d get_range_hard_regs(int, subreg_range const&) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:601 0xf60312 new_insn_reg /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:658 0xf6064d add_regs_to_insn_regno_info /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1623 0xf62909 lra_update_insn_regno_info(rtx_insn*) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1769 0xf62e46 lra_update_insn_regno_info(rtx_insn*) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1762 0xf62e46 lra_push_insn_1 /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1919 0xf62f2d lra_push_insn(rtx_insn*) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1927 0xf62f2d push_insns /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1970 0xf63302 push_insns /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1966 0xf63302 lra(_IO_FILE*) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:2511 0xf0e399 do_reload /mnt/nvme/dinux/local-workspace/gcc/gcc/ira.cc:5960 0xf0e399 execute /mnt/nvme/dinux/local-workspace/gcc/gcc/ira.cc:6148 For pru-elf the GCC build fails with: /mnt/nvme/dinux/local-workspace/gcc/libgcc/unwind-dw2-fde.c: In function 'linear_search_fdes': /mnt/nvme/dinux/local-workspace/gcc/libgcc/unwind-dw2-fde.c:1035:1: internal compiler error: Floating point exception 1035 | } | ^ 0x1694f2e crash_signal /mnt/nvme/dinux/local-workspace/gcc/gcc/toplev.cc:316 0x1313178 get_range_hard_regs(int, subreg_range const&) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:609 0x131343a new_insn_reg /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:658 0x13174f0 add_regs_to_insn_regno_info /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1608 0x1318479 lra_update_insn_regno_info(rtx_insn*) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1769 0x13196ab lra_push_insn_1 /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1919 0x13196de lra_push_insn(rtx_insn*) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1927 0x13197da push_insns /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1970 0x131b6dc lra(_IO_FILE*) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:2511 0x129f237 do_reload /mnt/nvme/dinux/local-workspace/gcc/gcc/ira.cc:5960 0x129f6c6 execute /mnt/nvme/dinux/local-workspace/gcc/gcc/ira.cc:6148 The divide by zero error above is interesting. I'm not sure why ira_reg_class_max_nregs[] yields 0 for the pseudo register 168 in the following rtx: (debug_insn 168 167 169 19 (var_location:SI encoding (reg/v:SI 168 [ encoding ])) -1 (nil)) Regards, Dimitar