I've hit a bug in a refactored version of coalescing and I'm trying to understand what is going on. In particular, I'm curious about this line in SimpleRegisterCoalescing.cpp: 00710 LHSValsDefinedFromRHS[VNI] = RHS.getLiveRangeContaining(VNI->def-1)->valno; Why VNI->def-1? The bug I'm seeing is that RHS returns a NULL LiveRange because it doesn't contain VNI->def-1: %reg1093,0 = [5750,5754:2)[5754,5782:1)[5782,5858:0)[5868,5870:0) 0 at 5782-(5858 5870) 1 at 5754-(5778) 2 at 5750 Should it really be VNI->def-1 here? If so, why? -Dave
On Tuesday 25 September 2007 10:49, David Greene wrote:> I've hit a bug in a refactored version of coalescing and I'm trying to > understand what is going on. In particular, I'm curious about this > line in SimpleRegisterCoalescing.cpp: > > 00710 LHSValsDefinedFromRHS[VNI] > RHS.getLiveRangeContaining(VNI->def-1)->valno; > > Why VNI->def-1? The bug I'm seeing is that RHS returns a NULL > LiveRange because it doesn't contain VNI->def-1: > > %reg1093,0 = [5750,5754:2)[5754,5782:1)[5782,5858:0)[5868,5870:0) > 0 at 5782-(5858 5870) 1 at 5754-(5778) 2 at 5750I should aff that VNI->def is 5750 which is in the interval. -Dave
LLVM is assuming this: struct InstrSlots { enum { LOAD = 0, USE = 1, DEF = 2, STORE = 3, NUM = 4 }; So VNI->def is always modulo 2. For coalescing, it's checking if the RHS is live at the "use" cycle. So it's checking VNI->def-1. Evan On Sep 25, 2007, at 8:55 AM, David Greene wrote:> On Tuesday 25 September 2007 10:49, David Greene wrote: >> I've hit a bug in a refactored version of coalescing and I'm >> trying to >> understand what is going on. In particular, I'm curious about this >> line in SimpleRegisterCoalescing.cpp: >> >> 00710 LHSValsDefinedFromRHS[VNI] >> RHS.getLiveRangeContaining(VNI->def-1)->valno; >> >> Why VNI->def-1? The bug I'm seeing is that RHS returns a NULL >> LiveRange because it doesn't contain VNI->def-1: >> >> %reg1093,0 = [5750,5754:2)[5754,5782:1)[5782,5858:0)[5868,5870:0) >> 0 at 5782-(5858 5870) 1 at 5754-(5778) 2 at 5750 > > I should aff that VNI->def is 5750 which is in the interval. > > -Dave > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev