search for: subreg

Displaying 20 results from an estimated 231 matches for "subreg".

Did you mean: subregs
2012 May 11
2
[LLVMdev] overlaps generation, RA crasch
Hi, Recently on trunk, the ovlaps list for a register got a dual entry on my target, which caused the RA to crash. Reg Subreg1 Subreg b Subreg2 Subreg b I have a register with two subregs that have subreg b in common. This causes the SuperReg to appear twice in the ovelaps list for Subreg b. As this causes a register allocator to crasch (it evicts a register, and then inremenets the *AliasI, but the data struc...
2010 Feb 26
2
[LLVMdev] RegisterScavenging on targets without subregisters
There's an assert at line 192, lib/CodeGen/RegisterScavenging.cpp that appears to get tripped on targets that don't have subregisters defined: bool SubUsed = false; for (const unsigned *SubRegs = TRI->getSubRegisters(Reg); unsigned SubReg = *SubRegs; ++SubRegs) if (isUsed(SubReg)) { SubUsed = true; break; } assert(SubUsed && "U...
2012 Mar 21
4
[LLVMdev] apparent mistake in several ports register td file ???
...by the backend tools. It does not hurt anything but should not be there. // We have banks of 32 registers each. class MipsReg<string n> : Register<n> { field bits<5> Num; let Namespace = "Mips"; } class ARMReg<bits<4> num, string n, list<Register> subregs = []> : Register<n> { field bits<4> Num; let Namespace = "ARM"; let SubRegs = subregs; // All bits of ARM registers with sub-registers are covered by sub-registers. let CoveredBySubRegs = 1; } class ARMFReg<bits<6> num, string n> : Register&lt...
2012 Jul 06
0
[LLVMdev] MachineOperand: Subreg defines and the Undef flag
...r cannot trivially coalesce a copy, say C,, it calls AdjustCopiesBackFrom. In this function, we try to see if have this situation. A3 = B0 ..... ..... B1 = A3 <--The copy C And if so, we check if we can merge the two ranges of B into a single range. However, this is not safe if A3 is a subreg define while A3 is not a subreg use. For instance, consider this code (part of a single block loop). MI1:: %vreg7:subreg_loreg<def,undef>, %vreg30<def> = POST_LDriuh %vreg30, 2, // Post Inc. Load. Vreg7 is a 64bit reg. MI2:: %vreg7:subreg_hireg<def> = COPY %vreg32:subreg_hireg...
2012 Jul 05
3
[LLVMdev] MachineOperand: Subreg defines and the Undef flag
Hi Jakob, Thanks for your reply. > > The <undef> flag goes on NewMI_1 because the virtual register B isn't live > before that instruction. > > But you probably shouldn't be doing this yourself. Your NewMI code isn't in > SSA form because B has multiple definitions. Just use a REG_SEQUENCE > instruction, and let the register allocator do the transformation
2010 Nov 18
1
[LLVMdev] subregs in trivial coalescing
I'm running into a problem with subregs during trivial coalescing in the linear scan allocator. Should RALinScan::attemptTrivialCoalescing be allowed to coalesce a COPY that uses a subreg as a destination? I've got the following sequence of code (unfortunately for an out of tree target) that is moving 32 and 64 bit sub-registers a...
2007 Jun 12
2
[LLVMdev] PR1350 (Vreg subregs) questions
What's the best way to get an SDNode through to DAG scheduling without getting mangled during Lowering/ISel? When should subregs be flattened to actual registers: AsmPrinter? Somewhere in LiveIntervals, during RegAlloc? Is there are common API used to turn vregs into physregs that could be changed to flatten any subregs in a central location? -- Christopher Lamb
2007 Apr 23
2
[LLVMdev] Register based vector insert/extract
Thanks for the detailed response. On Apr 23, 2007, at 4:22 PM, Chris Lattner wrote: > Right. Evan is currently focusing on getting the late stages of > the code > generator (e.g. livevars) to be able to understand arbitrary machine > instrs in the face of physreg subregs. This lays the groundwork for > handling vreg subregs, but won't solve it directly. Is the work Evan doing a prerequisite for supporting vreg subregs? Is there a PR for the feature Evan is working on? >> Is any of this kind of work planned? The addition of those >> MRegisterI...
2012 Mar 28
2
[LLVMdev] Remove subreg copies
Hi, I'm facing a problem in my BE while trying to remove certain copies. Here is a code snippet which I would like to optimize %vreg1<def> = READF32r; vRRegs:%vreg1 %vreg2<def> = COPY %vreg1:rsub_h; iRSubRegs:%vreg2 vRRegs:%vreg1 %vreg3<def> = COPY %vreg1:rsub_l; iRSubRegs:%vreg3 vRRegs:%vreg1 This code produces subreg-to-subreg copies but I would like to have direct uses of vreg1's subregisters instead. I tried to add RAhints in order to form identity copies (vreg1 and vreg2/3 should be a...
2010 Feb 26
0
[LLVMdev] RegisterScavenging on targets without subregisters
Ugh. Management lobotomy kicked in. Need to RTFC better. On Thu, Feb 25, 2010 at 6:18 PM, Scott Michel <scooter.phd at gmail.com> wrote: > There's an assert at line 192, lib/CodeGen/RegisterScavenging.cpp that > appears to get tripped on targets that don't have subregisters defined: > > bool SubUsed = false; > for (const unsigned *SubRegs = TRI->getSubRegisters(Reg); > unsigned SubReg = *SubRegs; ++SubRegs) > if (isUsed(SubReg)) { > SubUsed = true; > break; > } &g...
2012 May 11
0
[LLVMdev] overlaps generation, RA crasch
On May 11, 2012, at 6:35 AM, Jonas Paulsson <jonas.paulsson at ericsson.com> wrote: > Hi, > > Recently on trunk, the ovlaps list for a register got a dual entry on my target, which caused the RA to crash. > > Reg > Subreg1 > Subreg b > Subreg2 > Subreg b > > I have a register with two subregs that have subreg b in common. This causes the SuperReg to appear twice in the ovelaps list for Subreg b This should be fixed in r156629. /jakob -------------- next part -------------- An HTML attac...
2008 Mar 19
2
[LLVMdev] SUBREG instructions and mayLoad/mayStore/etc.
The new SUBREG target-independent instructions aren't getting mayLoad/mayStore flags set correctly. For example, in the generated X86GenInstrInfo.inc file, there is only one entry for INSERT_SUBREG: { 5, 4, 1, 0, "INSERT_SUBREG", 0, 0, NULL, NULL, OperandInfo107 }, // Inst #5...
2012 Jul 06
2
[LLVMdev] MachineOperand: Subreg defines and the Undef flag
...gt; calls AdjustCopiesBackFrom. In this function, we try to see if have this > situation. > > A3 = B0 > ..... > ..... > B1 = A3 <--The copy C > > And if so, we check if we can merge the two ranges of B into a single range. > However, this is not safe if A3 is a subreg define while A3 is not a subreg > use. > For instance, consider this code (part of a single block loop). > > MI1:: %vreg7:subreg_loreg<def,undef>, %vreg30<def> = POST_LDriuh %vreg30, > 2, // Post Inc. Load. Vreg7 is a 64bit reg. > MI2:: %vreg7:subreg_hireg<def&g...
2007 Jun 12
2
[LLVMdev] PR1350 (Vreg subregs) questions
...mean by "mangled"? Please clarify. My mangled I mean the nodes shouldn't be isel'ed into anything else because they need to survive through to scheduling. Is there a preferred means of having those nodes skipped during selection and lowering? >> >> When should subregs be flattened to actual registers: AsmPrinter? >> Somewhere in LiveIntervals, during RegAlloc? > > You mean turning part of a larger physical register into a sub- > register? Yes. > I would think LiveIntervals or else copy coalescing might > not work right. Ok. Can you give...
2012 Mar 23
0
[LLVMdev] apparent mistake in several ports register td file ???
...ing but should not be there. > > // We have banks of 32 registers each. > class MipsReg<string n> : Register<n> { > field bits<5> Num; > let Namespace = "Mips"; > } > > class ARMReg<bits<4> num, string n, list<Register> subregs = []> : > Register<n> { > field bits<4> Num; > let Namespace = "ARM"; > let SubRegs = subregs; > // All bits of ARM registers with sub-registers are covered by > sub-registers. > let CoveredBySubRegs = 1; > } > > class A...
2007 Jun 06
2
[LLVMdev] Register based vector insert/extract
...ieces, so we can tackle these > one at > a time. <snip> > 4. The DAG scheduler pass (which creates machine instrs from dag > nodes) > currently thinks of register operands as simple unsigned's for > vreg > #'s. This needs to be extended to be vreg+subreg pairs (see > 'CreateVirtualRegisters'). > 5. We need to decide how to represent subregs in the DAG. Your > SDSubOperand idea is fine, but I don't think it needs to be an > actual > new subclass of SDOperand. Instead, it could just be a binary > SDNode...
2008 Sep 24
2
[LLVMdev] Multi-Instruction Patterns
...Gohman wrote: >>> #2 is conceptually correct. The problem is 128 bit XMM0 is the same >>> register as 32 bit (or 64 bit) XMM0. So it's not possible to define >>> the super-register / sub-register relationship. >> >> I don't understand the problem with subregs here. Is it just a >> naming issue? That can be solved by introducing alternate names, >> like XMM0_32 and XMM0_64, for each of the subregs. They could >> still be printed as "xmm0" in the assembly output of course. > > this is what the PPC64 backend does. "...
2012 Mar 28
0
[LLVMdev] Remove subreg copies
...ard <ivanllopard at gmail.com> wrote: > Hi, > > I'm facing a problem in my BE while trying to remove certain copies. > Here is a code snippet which I would like to optimize > > %vreg1<def> = READF32r; vRRegs:%vreg1 > %vreg2<def> = COPY %vreg1:rsub_h; iRSubRegs:%vreg2 vRRegs:%vreg1 > %vreg3<def> = COPY %vreg1:rsub_l; iRSubRegs:%vreg3 vRRegs:%vreg1 > > This code produces subreg-to-subreg copies but I would like to have > direct uses of vreg1's subregisters instead. > I tried to add RAhints in order to form identity copies (vreg1...
2007 Jun 12
0
[LLVMdev] PR1350 (Vreg subregs) questions
On Jun 11, 2007, at 6:14 PM, Christopher Lamb wrote: > > What's the best way to get an SDNode through to DAG scheduling > without getting mangled during Lowering/ISel? What do you mean by "mangled"? Please clarify. > > When should subregs be flattened to actual registers: AsmPrinter? > Somewhere in LiveIntervals, during RegAlloc? You mean turning part of a larger physical register into a sub- register? I would think LiveIntervals or else copy coalescing might not work right. Evan > > Is there are common API used to t...
2007 Jun 12
0
[LLVMdev] PR1350 (Vreg subregs) questions
...t be isel'ed into anything else because > they need to survive through to scheduling. Is there a preferred means of > having those nodes skipped during selection and lowering? You'll have to teach legalize and isel about these nodes, just like they know about ISD::Register nodes. subregs will be a new first-class node type that all of the dag stuff will have to know about (at least to pass them through). >> > When should subregs be flattened to actual registers: AsmPrinter? >> > Somewhere in LiveIntervals, during RegAlloc? This should definitely be done dur...