[LLVMdev] Force register allocator to spill all variables of a basic block

Andrew Trick atrick at apple.com
Mon Apr 14 11:36:42 PDT 2014


On Apr 10, 2014, at 1:37 PM, Ronaldo Ferreira <ronaldorferreira at gmail.com> wrote:

> Hi,
> 
> I need to force all variables of a basic block to spill, i.e., I can't allow basic blocks to share registers. I would like to know where is the most appropriate approach to implement that policy in LLVM. 
> 
> Looking at the LLVM source, it seems that the register allocator is the best choice because it controls the spilling, but I need to guarantee that this policy is not violated by post RA passes.
> 
> To illustrate the policy, let us suppose two BBs A and B:
> 
> BB A:
>     a = x + y
> 
> BB B:
>     b = a * x
> 
> In a pseudo machine code, I need to generate this:
> 
> BB A:
>     load x;
>     load y;
>     add a, x, y
>     store a
> 
> BB B:
>     load a;
>     load x;
>     mul b, a, x;
>     store b;
> 
> 
> Any help is much appreciated!

My first thought is to add an IR pass that generates volatile loads and stores for live-in/out values. There may be more clever ways of doing this though.
-Andy

> 
> Thanks,
> Ronaldo
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list