https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112447
--- Comment #17 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
The incorrect elimination happens on pre_global_vsetvl_info
You can try simple hack like this:
diff --git a/gcc/config/riscv/riscv-vsetvl.cc
b/gcc/config/riscv/riscv-vsetvl.cc
index 8466b5d019e..65dcf931808 100644
--- a/gcc/config/riscv/riscv-vsetvl.cc
+++ b/gcc/config/riscv/riscv-vsetvl.cc
@@ -3135,6 +3135,8 @@ pre_vsetvl::pre_global_vsetvl_info ()
for (const bb_info *bb : crtl->ssa->bbs ())
{
sbitmap d = m_del[bb->index ()];
+ if (bb->index () == 113 || bb->index () == 54)
+ continue;
if (bitmap_count_bits (d) == 0)
continue;
FAIL will be fixed.
So, the idea is that we should investigate why LCM calculation return
m_del to be true on BB 54 and BB 113.
The calculation is done by pre_edge_lcm_avs