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 gmail.com> wrote: > > > Hello, > > > > I'm getting a machine verifier error after introducing the earlyclobber > constraint to some instructions where the src and dest regs can't be the > same. The offending instruction pattern is this one: > > > > let canFoldAsLoad = 1, > > isReMaterializable = 1, > > Constraints = "@earlyclobber $dst" in > > def LDDWRdPtrQ : Inst<(outs DREGS:$dst), > > (ins memri:$src), > > "lddw\t$dst, $src", > > [(set DREGS:$dst, (load addr:$src))]>; > > > > This is just a load with displacement instruction of the form "load reg, > [reg_addr+<offs>]", where reg_addr and dest can't be the same register. > > > > This caused the following verifier error: > > > > *** Bad machine code: No live range at def *** > > - function: f3 > > - basic block: entry 0x9d68664 (BB#0) [0B;5056B) > > - instruction: 3688B %vreg96<earlyclobber,def> = LDDWRdPtrQ <fi#0>, > 0; mem:LD2[FixedStack0](align=1) DREGS:%vreg96 > > - operand 0: %vreg96<earlyclobber,def> > > 3688e is not live in [3688r,4480r:0) 0 at 3688r > > > > *** Bad machine code: Early clobber def must be at an early-clobber slot > *** > > - function: f3 > > Valno #0 is defined at 3688r in [3688r,4480r:0) 0 at 3688r > > > > I've noticed this only happens when loading from frame indexes like in > this case, regular loads won't error. > > Spiller bug, should be fixed in r160219. > > /jakob > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120714/75aedd02/attachment.html>
Jakob, one more hint, I've placed some asserts around the code you added and noticed that the InlineSpiller::insertReload() function is not being called. 2012/7/14 Borja Ferrer <borja.ferav at gmail.com>> 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 gmail.com> wrote: >> >> > Hello, >> > >> > I'm getting a machine verifier error after introducing the earlyclobber >> constraint to some instructions where the src and dest regs can't be the >> same. The offending instruction pattern is this one: >> > >> > let canFoldAsLoad = 1, >> > isReMaterializable = 1, >> > Constraints = "@earlyclobber $dst" in >> > def LDDWRdPtrQ : Inst<(outs DREGS:$dst), >> > (ins memri:$src), >> > "lddw\t$dst, $src", >> > [(set DREGS:$dst, (load addr:$src))]>; >> > >> > This is just a load with displacement instruction of the form "load >> reg, [reg_addr+<offs>]", where reg_addr and dest can't be the same register. >> > >> > This caused the following verifier error: >> > >> > *** Bad machine code: No live range at def *** >> > - function: f3 >> > - basic block: entry 0x9d68664 (BB#0) [0B;5056B) >> > - instruction: 3688B %vreg96<earlyclobber,def> = LDDWRdPtrQ <fi#0>, >> 0; mem:LD2[FixedStack0](align=1) DREGS:%vreg96 >> > - operand 0: %vreg96<earlyclobber,def> >> > 3688e is not live in [3688r,4480r:0) 0 at 3688r >> > >> > *** Bad machine code: Early clobber def must be at an early-clobber >> slot *** >> > - function: f3 >> > Valno #0 is defined at 3688r in [3688r,4480r:0) 0 at 3688r >> > >> > I've noticed this only happens when loading from frame indexes like in >> this case, regular loads won't error. >> >> Spiller bug, should be fixed in r160219. >> >> /jakob >> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120715/51f12fda/attachment.html>
Jakob Stoklund Olesen
2012-Jul-15 18:19 UTC
[LLVMdev] Issue with Machine Verifier and earlyclobber
On Jul 15, 2012, at 9:20 AM, Borja Ferrer <borja.ferav at gmail.com> wrote:> Jakob, one more hint, I've placed some asserts around the code you added and noticed that the InlineSpiller::insertReload() function is not being called. > > 2012/7/14 Borja Ferrer <borja.ferav at gmail.com> > 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.Sorry, I can't debug this for you. I suggest you take a look at the code yourself. /jakob -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120715/99d2f033/attachment.html>
Reasonably Related Threads
- [LLVMdev] Issue with Machine Verifier and earlyclobber
- Error at Pre-regalloc Machine LICM: "getVRegDef assumes a single definition or no definition"' failed.
- probleme d'installation de samba sur AIX 5.3 et accés LDAP
- using reshape to do ANOVA mixed models
- [LLVMdev] Issue with Machine Verifier and earlyclobber