search for: spilled

Displaying 20 results from an estimated 2002 matches for "spilled".

2018 Feb 22
2
Sink redundant spill after RA
...stp x22, x21, [sp, #176] // 8-byte Folded Spill stp x20, x19, [sp, #192] // 8-byte Folded Spill stp x29, x30, [sp, #208] // 8-byte Folded Spill ldrsw x8, [x0, #4424] sxtw x10, w2 <------------- w2 is the use of spilled value before spill. sxtw x12, w1 madd x8, x8, x10, x12 ldr x9, [x0, #8] add x9, x9, x8, lsl #2 ldrh w11, [x9] ldrh w10, [x0, #16] str x2, [sp, #120] // 8-byte Folded Spill <------------- spill !!!...
2018 Feb 22
2
Sink redundant spill after RA
...e Folded Spill > > stp x20, x19, [sp, #192] // 8-byte Folded Spill > > stp x29, x30, [sp, #208] // 8-byte Folded Spill > > ldrsw x8, [x0, #4424] > > sxtw x10, w2 <------------- w2 is the > use of spilled value before spill. > > sxtw x12, w1 > > madd x8, x8, x10, x12 > > ldr x9, [x0, #8] > > add x9, x9, x8, lsl #2 > > ldrh w11, [x9] > > ldrh w10, [x0, #16] > > str x2, [sp...
2018 Feb 22
0
Sink redundant spill after RA
...stp x20, x19, [sp, #192] // 8-byte Folded Spill > > > > stp x29, x30, [sp, #208] // 8-byte Folded Spill > > > > ldrsw x8, [x0, #4424] > > > > sxtw x10, w2 <------------- w2 is the > > use of spilled value before spill. > > > > sxtw x12, w1 > > > > madd x8, x8, x10, x12 > > > > ldr x9, [x0, #8] > > > > add x9, x9, x8, lsl #2 > > > > ldrh w11, [x9] > > > > ldr...
2018 Jan 30
3
Disable spilling sub-registers in LLVM
...PM, ahmede via llvm-dev >>>> <llvm-dev at lists.llvm.org> wrote: >>>> Hi, >>>> I wonder if there is a way in LLVM to disable spilling a >>>> register-class while still enabling the super-registers of this >>>> register-class to be spilled. >>> What would you have the register allocator do when it runs out of >>> register and you have spilling disabled? Abort the compilation? >>> If you just want a special instruction sequence (like using a bigger >>> loads/stores for the spills) then you should be...
2018 Jan 30
3
Disable spilling sub-registers in LLVM
Right Matthias, I am aware that an implementation for storeRegToStackSlot()/loadRegFromStackSlot() is necessary. But these functions receive the physical register that need to be spilled, they might receive the sub-register. In this case, using the super-register naively is unsafe (e.g., one might overwrite parts of it). Thus, I think the register allocator/spillar need to be aware of the exact register that is spilled. On 2018-01-30 13:23, Matthias Braun wrote: > I still...
2018 Feb 22
0
Sink redundant spill after RA
...stp x22, x21, [sp, #176] // 8-byte Folded Spill stp x20, x19, [sp, #192] // 8-byte Folded Spill stp x29, x30, [sp, #208] // 8-byte Folded Spill ldrsw x8, [x0, #4424] sxtw x10, w2 <------------- w2 is the use of spilled value before spill. sxtw x12, w1 madd x8, x8, x10, x12 ldr x9, [x0, #8] add x9, x9, x8, lsl #2 ldrh w11, [x9] ldrh w10, [x0, #16] str x2, [sp, #120] // 8-byte Folded Spill <------------- spill !!!...
2015 Jan 26
3
[LLVMdev] PBQP crash
Hi, I have run into a test case on an out-of-tree target where PBQP fails to complete register allocation after "Attempting to spill already spilled value" (the triggered assert in InlineSpiller::spill(). First, the original LiveInterval is spilled. It is a load of a symbol into a narrow register class, i.e. a subset of the class of address registers. InlineSpiller decides to rematerialize the load of the symbol to lie right before its on...
2015 Jul 14
4
[LLVMdev] Poor register allocation (constants causing spilling)
...# second use of constant ... vmulps %xmm0, %xmm5, %xmm3 # last use of constant ... The constant is used 3 times within a live range of 86 instructions. Although the constant is clearly rematerializable, the allocator has gone to some length to keep it in a register, and it has spilled a value to the stack. It would have been cheaper to simply fold the constant load into the 3 uses. This is not the only example. Later on we can see this: vmovaps .LCPI0_1(%rip), %xmm6 # xmm6 = [2147483648,2147483648,...] vxorps %xmm6, %xmm2, %xmm3 ... vandps %xmm6, %xmm5, %...
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,
2018 Jan 30
0
Disable spilling sub-registers in LLVM
...as it received the physical register already). Does this make sense? On 2018-01-30 13:33, ahmede wrote: > Right Matthias, I am aware that an implementation for > storeRegToStackSlot()/loadRegFromStackSlot() is necessary. But these > functions receive the physical register that need to be spilled, they > might receive the sub-register. In this case, using the super-register > naively is unsafe (e.g., one might overwrite parts of it). Thus, I > think the register allocator/spillar need to be aware of the exact > register that is spilled. > > > > On 2018-01-30 13:23...
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. In Bill W's implementat...
2018 Jan 30
0
Disable spilling sub-registers in LLVM
I still think my answer applies that you have to modify storeRegToStackSlot()/loadRegFromStackSlot(). They decide how registers are spilled and reloaded. Nobody is stopping you from using super registers spills/reloads to implement spilling/reloading smaller registers there. - Matthias > On Jan 30, 2018, at 10:21 AM, ahmede <ahmede at ece.ubc.ca> wrote: > > Hi Quentin, > > Let me clarify if I understood this co...
2007 Aug 07
0
[LLVMdev] Spillers
On 8/7/07, David Greene <dag at cray.com> wrote: > > 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 colo...
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 it is the > task of the allocator to find these registers. I'm not quite sure about the last statement. See below. &g...
2008 Feb 15
2
[LLVMdev] LiveInterval spilling (was LiveInterval Splitting & SubRegisters)
...l > splitting code? > >>> Is it all in LiveIntervalAnalysis.cpp under addIntervalsForSpills > >>> and child routines? What is it trying to do? > >> > >> It's splitting live intervals that span multiple basic blocks. > That is, when an interval is spilled, it introduce a single reload per >>> basic block and retarget all the uses to use the result of the > single reload. It does not (yet) split intra-bb intervals. When I look at the code, it seems that when linear scan regalloc decides to spill a given live interval, it calls addInterva...
2018 Jan 30
2
Disable spilling sub-registers in LLVM
..., at 1:20 PM, ahmede via llvm-dev >> <llvm-dev at lists.llvm.org> wrote: >> >> Hi, >> >> >> I wonder if there is a way in LLVM to disable spilling a >> register-class while still enabling the super-registers of this >> register-class to be spilled. > What would you have the register allocator do when it runs out of > register and you have spilling disabled? Abort the compilation? > > If you just want a special instruction sequence (like using a bigger > loads/stores for the spills) then you should be able to implement that &g...
2018 Jan 30
0
Disable spilling sub-registers in LLVM
..., Matthias Braun wrote: >>> On Jan 29, 2018, at 1:20 PM, ahmede via llvm-dev <llvm-dev at lists.llvm.org> wrote: >>> Hi, >>> I wonder if there is a way in LLVM to disable spilling a register-class while still enabling the super-registers of this register-class to be spilled. >> What would you have the register allocator do when it runs out of >> register and you have spilling disabled? Abort the compilation? >> If you just want a special instruction sequence (like using a bigger >> loads/stores for the spills) then you should be able to impleme...
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 := 1...
2019 Dec 18
2
Spilling to register for a given register class
...//lists.llvm.org/pipermail/llvm-dev/2016-February/095457.html> for > a related conversation. > > What this conservation boils down to is that you can achieve that by > providing a larger register class that contains the union of the registers > that are used with where they can be spilled. > > For instance, let say you have a register class GPR that can be spilled > into SPR. > You would create three register classes: GPR, SPR and GPR_union_SPR. > GPR_union_SPR is never explicitly used in any real instruction (i.e., it > does not appear in any MC description), but...
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 (mapping given by the caller in the VRM, presumably the caller is regalloc). My question concerns duty #2. There is code in the spill...