On 6/5/23 22:51, Dimitar Dimitrov wrote:
During libgcc configure stage for riscv32-none-elf, when
"--enable-checking=yes,rtl" has been activated, the following error
is observed:

   configure:3814: 
/home/dinux/projects/pru/local-workspace/riscv32-gcc-build/./gcc/xgcc 
-B/home/dinux/projects/pru/local-workspace/riscv32-gcc-build/./gcc/ 
-B/mnt/nvme/dinux/local-workspace/riscv32-opt/riscv32-none-elf/bin/ 
-B/mnt/nvme/dinux/local-workspace/riscv32-opt/riscv32-none-elf/lib/ -isystem 
/mnt/nvme/dinux/local-workspace/riscv32-opt/riscv32-none-elf/include -isystem 
/mnt/nvme/dinux/local-workspace/riscv32-opt/riscv32-none-elf/sys-include    -c -g -O2  
conftest.c >&5
   during RTL pass: final
   conftest.c: In function 'main':
   conftest.c:16:1: internal compiler error: RTL check: expected code 
'const_int', have 'reg' in riscv_print_operand, at config/riscv/riscv.cc:4462
      16 | }
         | ^
   0x843c4d rtl_check_failed_code1(rtx_def const*, rtx_code, char const*, int, 
char const*)
           /mnt/nvme/dinux/local-workspace/gcc/gcc/rtl.cc:916
   0x8ea823 riscv_print_operand
           /mnt/nvme/dinux/local-workspace/gcc/gcc/config/riscv/riscv.cc:4462
   0xde84b5 output_operand(rtx_def*, int)
           /mnt/nvme/dinux/local-workspace/gcc/gcc/final.cc:3632
   0xde8ef8 output_asm_insn(char const*, rtx_def**)
           /mnt/nvme/dinux/local-workspace/gcc/gcc/final.cc:3544
   0xded33b output_asm_insn(char const*, rtx_def**)
           /mnt/nvme/dinux/local-workspace/gcc/gcc/final.cc:3421
   0xded33b final_scan_insn_1
           /mnt/nvme/dinux/local-workspace/gcc/gcc/final.cc:2841
   0xded6cb final_scan_insn(rtx_insn*, _IO_FILE*, int, int, int*)
           /mnt/nvme/dinux/local-workspace/gcc/gcc/final.cc:2887
   0xded8b7 final_1
           /mnt/nvme/dinux/local-workspace/gcc/gcc/final.cc:1979
   0xdee518 rest_of_handle_final
           /mnt/nvme/dinux/local-workspace/gcc/gcc/final.cc:4240
   0xdee518 execute
           /mnt/nvme/dinux/local-workspace/gcc/gcc/final.cc:4318

Fix by moving the calculation of memmodel to the cases where it is used.

Regression tested for riscv32-none-elf. No changes in gcc.sum and
g++.sum.  I don't have setup to test riscv64.

gcc/ChangeLog:

        * config/riscv/riscv.cc (riscv_print_operand): Calculate
        memmodel only when it is valid.
Good to see you poking around in the RISC-V world Dimitar! Are you still poking at the PRU as well?

Anyway, this is fine for the trunk and for backporting to gcc-13 if the problem exists there as well.

jeff

Reply via email to