[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