Ok I see your idea and we need to adjust scalar_to_vec accurately. Inside the loop we have these 2 scalar_to_vec:
1. MIN_EXPR <patt_28, 15> 1 times scalar_to_vec costs 1 in prologue This scalar_to_vec cost should be 0 or 1 since it only generate single instructions: vmv.v.i v16,15 2. 32872 >> patt_26 1 times scalar_to_vec costs 1 in prologue This cost should be higher since it cost 3 instructions: li a4,-32768 addiw a4,a4,104 vmv.v.x v16,a4 Am I correct ? I guess if we cost 1 case as 1 cost and 2 case as 3 cost. Then we will be good. juzhe.zh...@rivai.ai From: Robin Dapp Date: 2024-01-11 18:14 To: juzhe.zh...@rivai.ai; Richard Biener CC: rdapp.gcc; gcc-patches; kito.cheng; Kito.cheng; jeffreyalaw Subject: Re: [PATCH] RISC-V: Increase scalar_to_vec_cost from 1 to 3 > Yeah... I just noticed. I should set it as 4 to fix it with biggest VLEN > size, > that is, -march=rv64gcv_zvl4096b --param=riscv-autovec-lmul=m8... > > I am confused now how to fix this case. 4 is definitely too high compared to a regular instruction. vmv.vx could even be zero-cost for constants. To catch constants we could add handling in add_stmt_cost, inspecting the stmt directly. Regards Robin