[llvm-dev] imm COPY generated by PHI elim not propagated

Quentin Colombet via llvm-dev llvm-dev at lists.llvm.org
Wed Nov 13 17:50:07 PST 2019


Hi Ryan,

Unless you can fold your immediate directly in an instruction, it is actually not profitable to propagate them. Indeed you will end up with a bunch of load imm instead of reusing a register that already hold this value.

The way it works right now is, if holding this value in a register is too expensive, i.e., it triggers a spill, then we rematerialize the immediate instead of holding a register for it.

Cheers,
-Quentin

> On Nov 13, 2019, at 7:36 AM, Ryan Taylor via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> I have some code such that:
> 
> vgpr1 = mov 0
> branch bb
> bb:
> PHI vgpr2 = vgpr1, ….
> PHI vgpr3 = vgpr1, ….
> PHI vgpr4 = vgpr1, ….
> PHI vgpr5 = vgpr1, ….
> 
> PHI node elimination is generating copies for all these PHIs (and hoisting them) as such:
> 
> vgpr1 = 0
> vgpr20 = COPY vgpr1 // old vgpr2
> vgpr30 = COPY vgpr1 // old vgpr3
> vgpr40 = COPY vgpr1 // old vgpr4
> vgpr 50 = COPY vgprt1 // old vgpr5
> 
> I expect the zero to get propagated in a later phase but it's not. I was looking at adding immediate folding to the register coalescer but this doesn't really seem like the right place. Any suggestions?
> 
> I'm sort of surprised that other targets haven't run into this issue.
> 
> -Ryan
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list