Displaying 20 results from an estimated 1000 matches similar to: "[LLVMdev] InlineSpiller Questions"
2012 Sep 19
0
[LLVMdev] InlineSpiller Questions
On Sep 19, 2012, at 10:13 AM, dag at cray.com wrote:
> The InlineSpiller in 3.1 is quite different from the old spiller so I am
> trying to slog through the code and learn a bit.
>
> On a spill, the spiller calls traceSiblingValue. I gather that this is
> supposed to find the "original" def point of a value, checking back
> through copies, phis, etc. At the end we
2012 Sep 19
2
[LLVMdev] InlineSpiller Questions
Jakob Stoklund Olesen <stoklund at 2pi.dk> writes:
>> If we decide to spill r3, we call traceSiblingValue to find the original
>> def (the load). After traceSiblingValue we have the load instruction to
>> define r1 and the value number information for r3. We don't have the
>> value information from r2 as far as I can tell.
>>
>> Is that correct?
2014 Nov 21
2
[LLVMdev] InlineSpiller.cpp bug?
Hi Quentin,
I have tried to find a test case for an official target, but failed. It seems to be a rare case.
To do it, I added the 'else' clause in the following:
...
if (VNI->def == OrigVNI->def) {
DEBUG(dbgs() << "orig phi value\n");
SVI->second.DefByOrigPHI = true;
SVI->second.AllDefsAreReloads = false;
propagateSiblingValue(SVI);
continue;
2014 Dec 05
2
[LLVMdev] InlineSpiller.cpp bug?
Hi Quentin,
I have rerun the test case on a recent commit, so the numbers have changed. There are also now a few more basic blocks very small basic blocks in the function, and therefore there are some slight differences. I tried to go back to earlier commits, without success for some reason... This is however very similar, except that there becomes two COPYs back to sibling value after the loop.
2014 Dec 09
2
[LLVMdev] InlineSpiller.cpp bug?
Hi Jonas,
Thanks for your patience.
After spending some time looking at the additional output you gave me, I agree that your fix is the right one.
I was worried that this problem may arise because we were spilling not real user, but in fact what I thought was the problem is an optimization we could do :).
See my comments inlined for a few nitpicks before you commit.
Thanks again,
-Quentin
On
2012 Sep 19
0
[LLVMdev] InlineSpiller Questions
On Sep 19, 2012, at 10:49 AM, <dag at cray.com> wrote:
> Jakob Stoklund Olesen <stoklund at 2pi.dk> writes:
>
> So if there are multiple values between r2 and r3 (r2.1, r2.2, etc.) I
> would just follow the chains implied by the SibValueInfo Deps array?
> Basically, I want to find all of the live ranges related to r1.
It really depends on what you're trying to do.
2014 Nov 18
3
[LLVMdev] InlineSpiller.cpp bug?
Hi,
I have encountered a test case where InlineSpiller generates bad code. A register is reloaded but never spilled, and I suspect a bug in InlineSpiller.
A register is live over a loop that also have two inner loops. It is not used or defined over the inner loops. It is split into two sibling registers, where one covers just the inner loops interval, which is then spilled.
In spill(),
2012 Sep 19
3
[LLVMdev] InlineSpiller Questions
Jakob Stoklund Olesen <stoklund at 2pi.dk> writes:
> On Sep 19, 2012, at 10:49 AM, <dag at cray.com> wrote:
>
>> Jakob Stoklund Olesen <stoklund at 2pi.dk> writes:
>>
>> So if there are multiple values between r2 and r3 (r2.1, r2.2, etc.) I
>> would just follow the chains implied by the SibValueInfo Deps array?
>> Basically, I want to find
2012 Sep 19
0
[LLVMdev] InlineSpiller Questions
On Sep 19, 2012, at 4:02 PM, dag at cray.com wrote:
> Jakob Stoklund Olesen <stoklund at 2pi.dk> writes:
>
>> On Sep 19, 2012, at 10:49 AM, <dag at cray.com> wrote:
>>
>>> Jakob Stoklund Olesen <stoklund at 2pi.dk> writes:
>>>
>>> So if there are multiple values between r2 and r3 (r2.1, r2.2, etc.) I
>>> would just follow
2010 Aug 16
0
[LLVMdev] NumLoads/NumStores for linearscan?
On Aug 15, 2010, at 5:12 PM, Silvio Ricardo Cordeiro wrote:
> Is there a way for me to collect statistics about the number of loads/stores added by the "linearscan" register allocator (just like can be done with the "local" allocator)? I still haven't grokked very well the interaction between RALinScan and Spiller... Should I add those two statistics to the
2010 Aug 16
2
[LLVMdev] NumLoads/NumStores for linearscan?
Hi,
Is there a way for me to collect statistics about the number of loads/stores
added by the "linearscan" register allocator (just like can be done with the
"local" allocator)? I still haven't grokked very well the interaction
between RALinScan and Spiller... Should I add those two statistics to the
spiller's class?
Thanks,
-- Silvio Ricardo Cordeiro
--------------
2010 Aug 24
2
[LLVMdev] NumLoads/NumStores for linearscan?
On Sun, Aug 15, 2010 at 10:04 PM, Jakob Stoklund Olesen <stoklund at 2pi.dk>wrote:
>
> On Aug 15, 2010, at 5:12 PM, Silvio Ricardo Cordeiro wrote:
>
> > Is there a way for me to collect statistics about the number of
> loads/stores added by the "linearscan" register allocator (just like can be
> done with the "local" allocator)? I still haven't
2004 Oct 06
1
odd behavior of summary()$r.squared
I may be missing something obvious here, but consider the following simple
dataset simulating repeated measures on 5 individuals with pretty strong
between-individual variance.
set.seed(1003)
n<-5
v<-rep(1:n,each=2)
d<-data.frame(factor(v),v+rnorm(2*n))
names(d)<-c("id","y")
Now consider the following two linear models that provide identical fitted
values,
2019 Dec 18
2
Spilling to register for a given register class
Ok, thanks. Except the question was meant slightly different. Less w.r.t.
organizing the register classes, and more w.r.t. implementation. I've
noticed for instance that when trying to model this straight forwardly by
writing a vreg from spills and reading this from fills (not further
elaborated here), that the spiller can't handle vreg def-use pairs: there
are assertions making sure a
2017 Jan 09
4
Tweaking the Register Allocator's spill placement
Hello,
My target features some very-high-latency instructions that access an on-chip network (we'll call them FXLV). In one important kernel (snippet below), register allocation needs to spill values resulting from FXLV. The spiller is unaware of FXLV's latency, and thus naively inserts those spills immediately after the FXLV, incurring huge and unnecessary data stalls.
FXLV r10,
2011 Sep 16
1
[LLVMdev] Linear scan is going away after 3.0
I will be removing RegAllocLinearScan and VirtRegRewriter from trunk shortly after we cut the 3.0 release branch.
LLVM 3.0 will still ship with the linear scan register allocator, but the default will be the new greedy allocator. Linear scan can be enabled by passing '-regalloc=linearscan -join-physregs' to llc.
RegAllocLinearScan and VirtRegRewriter need to go away soon because they
2016 May 09
2
Is it possible to avoid inserting spill/split code in certain instruction sequence in RA?
Hi all,
I am working on an out-of-tree target. I am wondering if it is possible to
force the register allocator (and/or spiller) to not break certain
instruction sequence.
For example:
phys_reg = MI1 vreg1
vreg 2 = MI2 phys_reg
Is there a way to tell RA/spiller not to insert COPY or spill between MI1
and MI2?
I am using greedy register allocator and inline spiller.
--
Regards,
Dongrui
2007 Aug 18
0
[LLVMdev] Debugger for Register Allocation
On Aug 17, 2007, at 4:17 PM, Fernando Magno Quintao Pereira wrote:
>
> Hi guys,
>
> I have been using a debugger for my register allocator. The
> debugger
> happened to be very useful at catching register assignment errors.
> I've
> put the debugger on-line, if anyone who is working with register
> allocation wants to use. The debugger itself has nothing to
2012 Jul 14
2
[LLVMdev] Issue with Machine Verifier and earlyclobber
Hello Jakob,
I'm still getting the error, I can give you any other debug info you need.
I haven't pasted the regalloc debug info here because it is quite huge, but
if you tell me what specific details you need I will include them.
Thanks for your help!
2012/7/14 Jakob Stoklund Olesen <stoklund at 2pi.dk>
>
> On Jul 14, 2012, at 10:09 AM, Borja Ferrer <borja.ferav at
2007 Aug 06
5
[LLVMdev] Spillers
Can someone explain the theory behind the spillers in VirtRegMap.cpp?
It seems as though the spillers do triple duty:
- Insert load/store operations and/or fold instructions as necessary to carry
out spills
- Rewrite the spilled virtual registers to use machine registers (mapping
given by the caller in the VRM).
- Rewrite machine code to change virtual registers to physical registers