search for: liveinterval

Displaying 20 results from an estimated 526 matches for "liveinterval".

Did you mean: liveintervals
2013 Dec 31
2
[LLVMdev] How to update LiveInterval information of newly inserted machine basic block
Hi, I insert a new machine basic block(MBB) before Greedy Register Allocation, after Simple Register Coalescing. But I encounter a fatal error "regalloc = ... not currently supported with -O0". I use command line with opt level O2, not O0. The probable reason of this error is that no LiveInterval information for newly MBB which is used by Register Allocation. And, LiveIntervals depend on LiveVariables which require the machine function to be in SSA form. However, in this case, the modified machine function(including newly inserted MBB) is not SSA form any more. So, how to update LiveInterva...
2012 Aug 17
0
[LLVMdev] Assert in LiveInterval update
Andy, Jacob, I have ported Hexagon MI scheduler to use the new scheduler infrastructure, but one of my tests triggers an assert in LiveInterval update. On the surface it does not make much sense to me, so I wonder if this is something you readily recognize, before I try to prop it open... The assert is: lib/CodeGen/LiveInterval.cpp:266: llvm::LiveRange* llvm::LiveInterval::addRangeFrom(llvm::LiveRange, llvm::LiveRange*): Assertion `B-&g...
2014 Jan 03
2
[LLVMdev] How to update LiveInterval information of newly inserted machine basic block
...Hi, I insert a new machine basic block(MBB) before Greedy Register Allocation, after Simple Register Coalescing. But I encounter a fatal error "regalloc = ... not currently supported with -O0". I use command line with opt level O2, not O0. The probable reason of this error is that no LiveInterval information for newly MBB which is used by Register Allocation. And, LiveIntervals depend on LiveVariables which require the machine function to be in SSA form. However, in this case, the modified machine function(including newly inserted MBB) is not SSA form any more. So, how to update LiveInterva...
2008 Jan 17
1
[LLVMdev] LiveInterval Questions
...can whittle it down. It's a pretty huge function. If it's a coalescing bug it's probably in my code since I'm not using the current default llvm coalescer. It may be that I'm updating dataflow information incorrectly. I'll check on that. > > If so, then isn't LiveInterval::Ranges and LiveInterval::VNInfoList > > redundant? > > What's in VNInfoList that's not in the valno member of the Ranges > > elements, > > and vice-versa? > > I am not sure if I understand your question. Multiple liveranges can > be of the same val#. Each V...
2011 May 24
0
[LLVMdev] Need advice on writing scheduling pass
...ycle with a redefined LiveRange::overlap-function. On a multiple-issue cycle, a register that gets killed > can be reused by another MI - these live ranges do not then overlap. Redefining overlap() won't work for that. There is other code assuming that overlap means overlap, for example the LiveIntervalUnion used by the new register allocators. For VLIW, you probably want to number your packets instead of individual instructions. We don't have any VLIW support, so nobody has thought about how best to do it. > Well, I would like to schedule the VLIW code after SimpleRegisterCoalescer, so t...
2011 May 24
4
[LLVMdev] Need advice on writing scheduling pass
...er that gets killed can be reused by another MI - these live ranges do not then overlap. Well, I would like to schedule the VLIW code after SimpleRegisterCoalescer, so that I get more or less the final code to work with. As the instructions are rearrange, I suppose I must run the SlotIndexes and LiveIntervals again. LiveVariables should also be refreshed as a register might get killed with a different MI if two users change place, etc, I suppose. I would like to just rerun these passes, but you said below that LiveIntervals do not work after SSA form is abandoned. I wonder how you mean to update the...
2015 Sep 04
2
LiveInterval and Loop Info
Thanks Matthias I can also use the method intervalIsInOneMBB() from LiveIntervals class to relate a LiveInterval to a MachineBasicBlock, right? Em 04/09/2015 2:26 PM, "Matthias Braun" <mbraun at apple.com> escreveu: > There is no direct support for this, but you can use > LiveIntervalAnalysis::getMBBStartIndex()/getMBBEndIndex()/getMBBFromIndex() > to...
2005 Sep 07
3
[LLVMdev] LiveIntervals invalidates LiveVariables?
I though LiveVariables may be invalidated by LiveIntervals, but it's declared not: void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const { AU.addPreserved<LiveVariables>(); AU.addRequired<LiveVariables>(); ... LiveInterval may coalesce virtual registers and remove identity moves instructions: bool LiveIntervals::runOnM...
2014 Jan 04
2
[LLVMdev] How to update LiveInterval information of newly inserted machine basic block
On Jan 4, 2014, at 4:38 AM, Haishan <hndxvon at 163.com> wrote: > At 2014-01-04 06:11:38,"Jakob Stoklund Olesen" <stoklund at 2pi.dk> wrote: > > On Jan 3, 2014, at 1:52 PM, Andrew Trick <atrick at apple.com> wrote: > >> He really just wants to rerun LiveIntervals analysis, but LiveVariables is no longer available. Would it work just to clear all the intervals rerun LiveIntervals::computeVirtRegs after all the CFG transforms are complete? > > Yes, I should think so. > > /jakob > > > Thank you very much for your talk. > I think I...
2008 Jan 17
0
[LLVMdev] LiveInterval Questions
...solve.f, line 23, in loop at depth 1, > bb16,0x83a2c70>, > %EFLAGS<imp-use,kill> > > Here we have the curious case of %reg1055 being defined and then > immediately > killed. It's a dead assignment. Why it wasn't removed I don't > know, but the > LiveInterval looks like this: > > %reg1055,0 = [308,348:0 [0]) 0 at 326-(326 326) > > The valno->def is 326, which is what I would expect given the > instruction > numbering above. > > So why does the live range extend throughout the entire basic block? > > %reg1055 doesn'...
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 live-ranges (of the same LiveInterval ) connected by a control-flow edge. I have almost implemented the algorithm for register assignments on a live-range basis. But now I need to rewr...
2014 Jan 03
2
[LLVMdev] How to update LiveInterval information of newly inserted machine basic block
On Jan 3, 2014, at 1:52 PM, Andrew Trick <atrick at apple.com> wrote: > He really just wants to rerun LiveIntervals analysis, but LiveVariables is no longer available. Would it work just to clear all the intervals rerun LiveIntervals::computeVirtRegs after all the CFG transforms are complete? Yes, I should think so. /jakob -------------- next part -------------- An HTML attachment was scrubbed... URL: <ht...
2010 May 08
0
[LLVMdev] Regarding LLVM Compiler
...llocator (-regalloc=pbqp), whereas LLVM uses linear scan by default (-regalloc=linscan). That's why you're not seeing it called. LLVM does not currently have an interference graph as such, because we do not have a graph coloring register allocator. You can get the same information from the LiveIntervals pass though. The LiveIntervals pass holds a set of LiveInterval objects, one for each register (both virtual and physical) that is live in the function. Each LiveInterval object describes the set of instructions for which its register is live. The LiveInterval::overlaps method will tell you whethe...
2014 Apr 04
2
[LLVMdev] How should I update LiveIntervals after removing a use of a register?
...ant to transform: ... %vreg1 = V_MOV_B32 1 %vreg2 = V_ADD_I32 %vreg1, %vreg0 ... into: %vreg1 = V_MOV_B32 1 ; <- Only delete this if it is dead %vreg2 = V_ADD_I32 1, %vreg0 For best results, I am trying to run this pass after the TwoAddressInstruction pass, which means I need to preserve the LiveIntervals analysis. My question is: How do I update the LiveIntervals to reflect the fact that V_ADD_I32 no longer uses %vreg0? Thanks, Tom
2015 Sep 03
2
LiveInterval and Loop Info
Hello to all LLVM Developers. Given a object from a LiveInterval class, is there any way to know if this Live Interval is part or is inside a loop? Att -- Natanael Ramos Membro do corpo discente de Ciência da Computação pelo Instituto Federal de Minas Gerais - Campus Formiga -------------- next part -------------- An HTML attachment was scrubbed... URL: <h...
2018 Nov 07
3
How to invoke the print method in MachineFunctionPass
...have a 'usual' pass, which can be used by the 'opt' tool, we can just pass the '-analyze' command line argument but what about the 'llc' compiler? As I can see, there is an implementation of the 'print(raw_ostream &OS, const Module*)' method in the 'LiveIntervals.cpp'. void LiveIntervals::print(raw_ostream &OS, const Module* ) const { OS << "********** INTERVALS **********\n"; // Dump the regunits. ... The method also is implemented in 'RegisterCoalescer.cpp' (in fact, this method just invokes one from LiveIntervals)...
2014 Jan 03
2
[LLVMdev] How to update LiveInterval information of newly inserted machine basic block
...>>>> >>>> At 2014-01-01 04:36:21,"Andrew Trick" <atrick at apple.com> wrote: >>>> >>>> On Dec 31, 2013, at 3:52 AM, Haishan <hndxvon at 163.com> wrote: >>>> My update steps are shown following: >>>> LiveIntervals *LIS = &getAnalysis<LiveIntervals>(); >>>> 1. LIS->insertMBBInMaps(NewMBB) >>>> 2. LIS->InsertMachineInstrRangeInMaps(NewMBB->begin(), NewMBB->end()) >>>> 3. Due to some machine instructions of NewMBB copy from OldMBB, I have to...
2009 Feb 27
0
[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 > live-ranges (of the same LiveInterval ) connected by a control-flow > edge. > > I have almost implemented the algorithm for register assignments on a > live-range...
2008 Jan 16
4
[LLVMdev] LiveInterval Questions
...%EFLAGS<imp-def> 344 JNS mbb<file solve.f, line 23, in loop at depth 1, bb16,0x83a2c70>, %EFLAGS<imp-use,kill> Here we have the curious case of %reg1055 being defined and then immediately killed. It's a dead assignment. Why it wasn't removed I don't know, but the LiveInterval looks like this: %reg1055,0 = [308,348:0 [0]) 0 at 326-(326 326) The valno->def is 326, which is what I would expect given the instruction numbering above. So why does the live range extend throughout the entire basic block? %reg1055 doesn't appear anywhere else in the program so it sho...
2007 Apr 03
2
[LLVMdev] Live Intervals vs. Live Variables
Toward a better register allocator, I'm attempting to understand the dataflow information available to the allocator. What's the difference between LiveInterval information and LiveVariable information? If a LiveInterval is based on a linear ordering of the machine instructions, isn't it rather conservative in nature? Let's say I have a typical diamond CFG: A / \ B C \ /...