Displaying 20 results from an estimated 2000 matches similar to: "[LLVMdev] [LLVMDev] Reg Alloc: Spiller::Spill question"
2011 Jan 21
0
[LLVMdev] [LLVMDev] Reg Alloc: Spiller::Spill question
Jeff Kunkel <jdkunk3 at gmail.com> writes:
> Spiller::Spill( LiveInterval *li,
> SmallVectorImpl<LiveInterval*> &newIntervals,
> const SmallVectorImpl<LiveInterval*> &spillIs );
>
> has two reference vectors which contain a small list of Live
> Intervals. What is the register allocator's job to do
2010 May 05
1
[LLVMdev] Register allocation questions
Hello,
I am currently working another register allocator for LLVM, and I have a
few questions.
I have a list of LiveIntervals that interfere with each other, and once
I figure out that I need to spill one of these, I'm using
LiveIntervals::addIntervalsForSpills to generate spill code. I'm not
sure I'm using this function correctly (or if it's even the right thing
to use).
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
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,
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
2015 Jul 15
4
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
On Wed, Jul 15, 2015 at 1:10 PM, Daniel Berlin <dberlin at dberlin.org> wrote:
> IMHO, This doesn't make a lot of sense to turn off this part on it's own.
> I would just use the enable-pre flag to turn off scalar PRE, as it
> will cause the same issue in other cases as well.
> Is there some reason you aren't just doing that?
> I suspect if this is a performance
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
2015 Jul 15
3
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
I thought about a little bit more, I think adding Register pressure control in your patch or PRE may be the only choice.
Because at least for this case I am looking at, what your patch did is created more relatively complex long live range, rematerialization is not smart enough to undo your change or at least without a lot of work, coalescing only create even longer live range not shorter,
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
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
2015 Jul 17
2
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
That should be literally impossible, which makes me think something
was tested wrong
The second patch i posted disables scalar pre (assuming you use
-disable-pre) but not load pre.
Since the patch you reverted touched only scalar pre, disabling scalar
pre should *also* do the same thing.
On Thu, Jul 16, 2015 at 5:43 PM, Lawrence <lawrence at codeaurora.org> wrote:
> Hi, Daniel:
>
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
2015 Jul 15
3
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
Hi, Daniel:
Thanks a lot for detailed background information, we are willing to provide the right fix, however it will take time, do you mind if you forward me the discussion you had 5 months ago? I may not be able to access it since I only joined ellvmdev list this week.
I did some performance measurement last night, some of our critical benchmark degraded up to 30% with your patch, so we have
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
2015 Jul 15
2
[LLVMdev] Register pressure mechanism in PRE or Smarter rematerialization/split/spiller/coalescing ?
> Given what you are saying, you are also suggesting we are not
rematerializing addressing computations where it is cheaper to do so.
That seems pretty critical to good RA :P
Yep, about 5 months ago I had a conversation about this too... it may even
be the one you're referencing. Our remat is really conservative - it only
rematerializes values that have zero input operands (move immediate
2008 Feb 15
2
[LLVMdev] LiveInterval spilling (was LiveInterval Splitting & SubRegisters)
Hi Fernando,
--- Fernando Magno Quintao Pereira <fernando at cs.ucla.edu> wrote:
>
> Hi, Roman,
>
> maybe I can try to answer this. I think that all boils down to
> having register to reload spilled values.
Ok. That I can follow.
> Once a register is spilled, its live range is split into smaller
> pieces. These pieces most be contained into registers, and
2016 Mar 07
2
Inline Spiller spilling multiple duplicate copies
Looks like spillAroundUses is spilling multiple duplicate copies to the
stack, for example, with some regs we get 1 storeRegToStack call, for
others we get multiple (2-6+) and then these instructions are never
eliminated.
Looking at spillAroundUses it looks like multiple duplicate COPYs are being
generated, why? One for each use?
The reg_bundle holds these multiple copies so that we are
2008 Feb 15
2
[LLVMdev] LiveInterval spilling (was LiveInterval Splitting & SubRegisters)
Hi Evan,
I have a few questions about current implementation of live intervals
spilling, which is required for the implementation of Extended Linear
Scan algorithm.
--- Evan Cheng <evan.cheng at apple.com> wrote:
> > On Wednesday 23 January 2008 02:01, Evan Cheng wrote:
> >> On Jan 22, 2008, at 12:23 PM, David Greene wrote:
> >>> Evan,
> >>>
>
2008 Feb 15
0
[LLVMdev] LiveInterval spilling (was LiveInterval Splitting & SubRegisters)
Hi, Roman,
maybe I can try to answer this. I think that all boils down to having
register to reload spilled values. Once a register is spilled, its live
range is split into smaller pieces. These pieces most be contained into
registers, and it is the task of the allocator to find these registers.
Imagine that you have something like:
Before After
allocation: allocation:
a
2007 Aug 07
0
[LLVMdev] Spillers
Hi,
Sorry for the delay. I was trying to wrap my head around some live
interval analysis code and have forgotten about emails. :-)
On Aug 6, 2007, at 9:20 AM, David Greene wrote:
> 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
>
2007 Aug 06
0
[LLVMdev] Spillers
On Mon, 6 Aug 2007, David Greene wrote:
>> split into smth like [10, 40) and [40, 50). The former part should not be
>> precolored as it has less conflicts (it doesn't intersects with [40, 45) )
>> and can be colored entirely by one register on the next iteration.
>
> Right. Live range splitting would indeed be nice to have. Bill's
> implementation has a
2007 Aug 06
4
[LLVMdev] Spillers
On Monday 06 August 2007 12:15, Anton Vayvod wrote:
> Spill intervals must be precolored because they can't be spilled once more.
> They are the shortest intervals precisely over each def/use of the original
> interval. That is why they also have their weights set to #INF.
Yes, that's true. But I wonder if we shouldn't be smarter about which
register we pick to color it.
2009 Feb 27
2
[LLVMdev] Easiest way to rewrite machine instructions when each live range of a LiveInterval may be assigned a different physical register
Hi,
I'm working on the implementation of Extended Linear Scan register
allocator as described by Sarkar & Bodik.
One of the interesting features of their algorithm is the possibility
to allocate different physical registers to different live-ranges of
the same LiveInterval. Of course, it may require some glue code to be
inserted in cases, where different physical regs were assigned to
2016 Mar 14
2
Inline Spiller spilling multiple duplicate copies
Hi Ryan,
> On Mar 14, 2016, at 7:49 AM, Ryan Taylor via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>
> I looked at this again and it appears that while spillAroundUses sets the register as 'dead', there is no checking to see if it's dead in subsequent iterations of the bundle loop.
>
> Is this intentional?
>
> On Mon, Mar 7, 2016 at 3:28 PM, Ryan
2011 Nov 16
2
[LLVMdev] Possible Remat Bug
I'm working on some enhancements to rematerialization that I hope to
contribute. It's mostly working but I am running into one problem. It
boils down to having spilled a register used by the remat candidate.
I thought this is what getReMatImplicitUse is supposed to handle but
it looks inconsistent to me. The comment says this:
/// getReMatImplicitUse - If the remat definition MI has