search for: getphys

Displaying 13 results from an estimated 13 matches for "getphys".

Did you mean: geophys
2017 Jun 05
3
VirtRegMap invariant: no reserved physical registers?
Hey all, I've found a bug in either the PBQP register allocator or in VirtRegRewriter. I'm observing this assertion in VirtRegRewriter::rewrite() fail: unsigned VirtReg = MO.getReg(); unsigned PhysReg = VRM->getPhys(VirtReg); ... assert(!MRI->isReserved(PhysReg) && "Reserved register assignment"); Indeed there is a case where PhysReg may be a reserved physical register. Specificially, RegAllocPBQP::finalizeAlloc() may select a physical register thusly: const Target...
2011 Nov 30
2
[LLVMdev] Register allocation in two passes
...he spill code handling inside selectOrSplit() (ignoring some control logic): for (LiveIntervals::const_iterator I = LIS->begin(), E = LIS->end(); I != E; ++I) { unsigned VirtReg = I->first; if ((TargetRegisterInfo::isVirtualRegister(VirtReg)) && (VRM->getPhys(VirtReg) == REG_Y)) { LiveInterval &LI = LIS->getInterval(VirtReg); unassign(LI, REG_Y); enqueue(&LI); } } RegClassInfo.runOnMachineFunction(VRM->getMachineFunction()); // update reserve reglist So similar to what's done in LRE_WillShrinkVirtReg(), it...
2009 Jan 13
2
[LLVMdev] Possible bug in the ARM backend?
...e = li_->end(); i != e; ++i) { LiveInterval &cur = *i->second; unsigned Reg = 0; bool isPhys = TargetRegisterInfo::isPhysicalRegister(cur.reg); if (isPhys) Reg = cur.reg; else if (vrm_->isAssignedReg(cur.reg)) Reg = attemptTrivialCoalescing(cur, vrm_->getPhys(cur.reg)); if (!Reg) continue; // Ignore splited live intervals. if (!isPhys && vrm_->getPreSplitReg(cur.reg)) continue; for (LiveInterval::Ranges::const_iterator I = cur.begin(), E = cur.end(); I != E; ++I) { const LiveRange &LR = *I;...
2008 May 28
3
[LLVMdev] Possible VirtRegMap Bug
...// Each valnum may have its own remat id. 00989 ReMatIds[VNI->id] = vrm.assignVirtReMatId(NewVReg); Linear scan dutifully assigns %reg1631 to AL. Then SimpleSpiller runs and does this: 00261 unsigned VirtReg = MO.getReg(); 00262 unsigned PhysReg = VRM.getPhys(VirtReg); 00263 if (!VRM.isAssignedReg(VirtReg)) { 00264 int StackSlot = VRM.getStackSlot(VirtReg); Well, according to VRM, %reg1631 is NOT assigned to a register (because it has a remat id) even though linear scan assigned it one. VRM then returns garbage as the stack...
2007 Aug 06
5
[LLVMdev] Spillers
...signed LIReg = L.reg; if (!MRegisterInfo::isVirtualRegister(LIReg) || LIReg == VReg) continue; // **** Check to see if the physreg we assigned conflicts with something // **** else. If so, that thing has to live in memory too. if (VRM->hasPhys(LIReg) && VRM->getPhys(LIReg) == PReg && !VRM->hasStackSlot(LIReg) && Added[I]->overlaps(L)) VRM->assignVirt2StackSlot(LIReg); } } The two points I want to talk about are noted by the **** comments. The first takes a newly-created live interval to represent the lifetime...
2011 Nov 30
0
[LLVMdev] Register allocation in two passes
...tOrSplit() (ignoring some control logic): > > for (LiveIntervals::const_iterator I = LIS->begin(), E = LIS->end(); I != E; > ++I) > { > unsigned VirtReg = I->first; > if ((TargetRegisterInfo::isVirtualRegister(VirtReg)) > && (VRM->getPhys(VirtReg) == REG_Y)) > { > LiveInterval &LI = LIS->getInterval(VirtReg); > unassign(LI, REG_Y); > enqueue(&LI); > } > } > RegClassInfo.runOnMachineFunction(VRM->getMachineFunction()); // update reserve reglist > > So similar to wh...
2011 Nov 29
0
[LLVMdev] Register allocation in two passes
On Nov 29, 2011, at 10:24 AM, Borja Ferrer wrote: > Yes, I want the register to be allocatable when there are no stack frames used in the function so it can be used for other purposes. In fact, I looked at how other backends solve this problem, but they are all too conservative by always reserving the register which in my case it is not a good solution because of the performance impact of not
2008 May 30
0
[LLVMdev] Possible VirtRegMap Bug
...remat id. > 00989 ReMatIds[VNI->id] = vrm.assignVirtReMatId(NewVReg); > > Linear scan dutifully assigns %reg1631 to AL. Then SimpleSpiller > runs and > does this: > > 00261 unsigned VirtReg = MO.getReg(); > 00262 unsigned PhysReg = VRM.getPhys(VirtReg); > 00263 if (!VRM.isAssignedReg(VirtReg)) { > 00264 int StackSlot = VRM.getStackSlot(VirtReg); > > Well, according to VRM, %reg1631 is NOT assigned to a register > (because it has > a remat id) even though linear scan assigned it one. VRM then...
2011 Nov 29
2
[LLVMdev] Register allocation in two passes
Yes, I want the register to be allocatable when there are no stack frames used in the function so it can be used for other purposes. In fact, I looked at how other backends solve this problem, but they are all too conservative by always reserving the register which in my case it is not a good solution because of the performance impact of not having this register available. I find very interesting
2007 Aug 07
0
[LLVMdev] Spillers
...!MRegisterInfo::isVirtualRegister(LIReg) || LIReg == > VReg) continue; > > // **** Check to see if the physreg we assigned conflicts > with something > // **** else. If so, that thing has to live in memory too. > if (VRM->hasPhys(LIReg) && VRM->getPhys(LIReg) == PReg && > !VRM->hasStackSlot(LIReg) && Added[I]->overlaps(L)) > VRM->assignVirt2StackSlot(LIReg); > } > } > > The two points I want to talk about are noted by the **** > comments. The first > takes a newly-created...
2009 Jan 13
0
[LLVMdev] Possible bug in the ARM backend?
On Jan 13, 2009, at 12:27 AM, Roman Levenstein <romix.llvm at googlemail.com > wrote: > 2009/1/13 Evan Cheng <echeng at apple.com>: >> >> On Jan 7, 2009, at 2:48 AM, Roman Levenstein wrote: >> >>> bb368: 0x8fdad00, LLVM BB @0x8fc2c98, ID#1: >>> Predecessors according to CFG: 0x8fdac90 (#0) >>> %R0<def> = MOVi 0, 14, %reg0,
2009 Jan 13
2
[LLVMdev] Possible bug in the ARM backend?
2009/1/13 Evan Cheng <echeng at apple.com>: > > On Jan 7, 2009, at 2:48 AM, Roman Levenstein wrote: > >> bb368: 0x8fdad00, LLVM BB @0x8fc2c98, ID#1: >> Predecessors according to CFG: 0x8fdac90 (#0) >> %R0<def> = MOVi 0, 14, %reg0, %reg0 >> *** STR %LR<kill>, %R0<kill>, %reg0, 0, 14, %reg0, Mem:ST(4,4) >> [0x8fc2d68 + 0]
2014 Jul 18
5
[PATCH 0/5] nvc0: fp64 preparation
Most of codegen is already FP64-ready. There are a few edge-cases that I ran into, many of which can apply even to non-fp64-enabled programs (although the double-wide registers are not very common without fp64). I've yet to give this a full piglit run, but wanted to send these out in case someone wanted to comment. They do not depend on the preliminary core fp64 work. Ilia Mirkin (5):