OK I guess change register_operand into REG_P should fix those ICEs. I will have a try and send a patch.
Thanks. juzhe.zh...@rivai.ai From: Andrew Pinski Date: 2024-01-22 15:14 To: juzhe.zh...@rivai.ai CC: gcc-patches; Kito.cheng; kito.cheng; jeffreyalaw; vineetg; Robin Dapp; palmer; Patrick O'Neill Subject: Re: [PATCH] PR rtl-optimization/111267: Improved forward propagation. On Sun, Jan 21, 2024 at 11:06 PM juzhe.zh...@rivai.ai <juzhe.zh...@rivai.ai> wrote: > > Hi, this patch causes these regressions (all ICEs) in RISC-V backend: Note this is related to the fix for PR 109092. But right now register_operand still accepts `(SUBREG (MEM...))` before reload ... So basically there is a check against register_operand to then reg_or_subregno is called but since register_operand allows `(SUBREG (MEM())` but reg_or_subregno asserts on only having `REG` or `SUBREG(REG)`, things go downhill. What a mess. I really wish `(SUBREG (MEM...))` handling would go away ... Thanks, Andrew Pinski > > FAIL: gcc.dg/torture/float32-tg-2.c -O1 (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg-2.c -O1 (test for excess errors) > FAIL: gcc.dg/torture/float32-tg-2.c -O2 (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg-2.c -O2 (test for excess errors) > FAIL: gcc.dg/torture/float32-tg-2.c -O2 -flto -fno-use-linker-plugin > -flto-partition=none (internal compiler error: in reg_or_subregno, at > jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg-2.c -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for excess errors) > FAIL: gcc.dg/torture/float32-tg-2.c -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (internal compiler error: in reg_or_subregno, at > jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg-2.c -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for excess errors) > FAIL: gcc.dg/torture/float32-tg-2.c -O3 -g (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg-2.c -O3 -g (test for excess errors) > FAIL: gcc.dg/torture/float32-tg-2.c -Os (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg-2.c -Os (test for excess errors) > FAIL: gcc.dg/torture/float32-tg.c -O1 (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg.c -O1 (test for excess errors) > FAIL: gcc.dg/torture/float32-tg.c -O2 (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg.c -O2 (test for excess errors) > FAIL: gcc.dg/torture/float32-tg.c -O2 -flto -fno-use-linker-plugin > -flto-partition=none (internal compiler error: in reg_or_subregno, at > jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg.c -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for excess errors) > FAIL: gcc.dg/torture/float32-tg.c -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (internal compiler error: in reg_or_subregno, at > jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg.c -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for excess errors) > FAIL: gcc.dg/torture/float32-tg.c -O3 -g (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg.c -O3 -g (test for excess errors) > FAIL: gcc.dg/torture/float32-tg.c -Os (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/float32-tg.c -Os (test for excess errors) > FAIL: gcc.dg/torture/pr48124-4.c -O1 (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/pr48124-4.c -O1 (test for excess errors) > FAIL: gcc.dg/torture/pr48124-4.c -O2 (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/pr48124-4.c -O2 (test for excess errors) > FAIL: gcc.dg/torture/pr48124-4.c -O2 -flto -fno-use-linker-plugin > -flto-partition=none (internal compiler error: in reg_or_subregno, at > jump.cc:1895) > FAIL: gcc.dg/torture/pr48124-4.c -O2 -flto -fno-use-linker-plugin > -flto-partition=none (test for excess errors) > FAIL: gcc.dg/torture/pr48124-4.c -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (internal compiler error: in reg_or_subregno, at > jump.cc:1895) > FAIL: gcc.dg/torture/pr48124-4.c -O2 -flto -fuse-linker-plugin > -fno-fat-lto-objects (test for excess errors) > FAIL: gcc.dg/torture/pr48124-4.c -O3 -fomit-frame-pointer -funroll-loops > -fpeel-loops -ftracer -finline-functions (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/pr48124-4.c -O3 -fomit-frame-pointer -funroll-loops > -fpeel-loops -ftracer -finline-functions (test for excess errors) > FAIL: gcc.dg/torture/pr48124-4.c -O3 -g (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/pr48124-4.c -O3 -g (test for excess errors) > FAIL: gcc.dg/torture/pr48124-4.c -Os (internal compiler error: in > reg_or_subregno, at jump.cc:1895) > FAIL: gcc.dg/torture/pr48124-4.c -Os (test for excess errors) > > ________________________________ > juzhe.zh...@rivai.ai