Displaying 7 results from an estimated 7 matches for "vreg_gpr1".
Did you mean:
vreg_gpr0
2013 Mar 25
0
[LLVMdev] [PATCH] RegScavenger::scavengeRegister
On Mar 25, 2013, at 2:51 PM, Akira Hatanaka <ahatanak at gmail.com> wrote:
> Yes, it sounds like it will solve the problem.
>
> Using the following example where live ranges of accumulators $vreg_acc0 and $vreg_acc1 conflict,
>
> MULT $vreg_acc0, $vreg_gpr0, $vreg_gpr1
> MULT $vreg_acc1, $vreg_gpr2, $vreg_gpr3
>
> (consumer of $vreg_acc1)
> (consumer of $vreg_acc0)
>
> if the register can create new virtual registers $vreg_gpr4 and $vreg_gpr5, I think spilling can be avoided:
>
>
> MULT $vreg_acc0, $vreg_gpr0, $vreg_gpr1
> copy $...
2013 Mar 26
2
[LLVMdev] [PATCH] RegScavenger::scavengeRegister
...at 2:51 PM, Akira Hatanaka <ahatanak at gmail.com> wrote:
>
> > Yes, it sounds like it will solve the problem.
> >
> > Using the following example where live ranges of accumulators $vreg_acc0
> and $vreg_acc1 conflict,
> >
> > MULT $vreg_acc0, $vreg_gpr0, $vreg_gpr1
> > MULT $vreg_acc1, $vreg_gpr2, $vreg_gpr3
> >
> > (consumer of $vreg_acc1)
> > (consumer of $vreg_acc0)
> >
> > if the register can create new virtual registers $vreg_gpr4 and
> $vreg_gpr5, I think spilling can be avoided:
> >
> >
> > MULT...
2013 Mar 25
2
[LLVMdev] [PATCH] RegScavenger::scavengeRegister
...possibly from different register classes.
>
> I think that functionality would solve your problems, right?
>
>
Yes, it sounds like it will solve the problem.
Using the following example where live ranges of accumulators $vreg_acc0
and $vreg_acc1 conflict,
MULT $vreg_acc0, $vreg_gpr0, $vreg_gpr1
MULT $vreg_acc1, $vreg_gpr2, $vreg_gpr3
(consumer of $vreg_acc1)
(consumer of $vreg_acc0)
if the register can create new virtual registers $vreg_gpr4 and $vreg_gpr5,
I think spilling can be avoided:
MULT $vreg_acc0, $vreg_gpr0, $vreg_gpr1
copy $vreg_gpr4, $vreg_acc0:lo // spill lo
copy $vreg_gp...
2013 Mar 26
0
[LLVMdev] [PATCH] RegScavenger::scavengeRegister
...ht be worse than spilling since reload requires two GPR-to-accumulator copy instructions while copying one accumulator to another requires four copy instructions (instruction set doesn't have any accumulator-to-accumulator copy instructions):
>
> copy $vreg_gpr0, $vreg_acc0:lo
> copy $vreg_gpr1, $vreg_acc0:hi
> copy $vreg_acc1:lo, $vreg_gpr0
> copy $vreg_acc1:hi, $vreg_gpr1
There is no way of preventing copies completely.
Once you create a virtual register with some register class, you must support spilling, reloading, and copying of that register class.
The cross class spilling...
2013 Mar 25
0
[LLVMdev] [PATCH] RegScavenger::scavengeRegister
On Mar 25, 2013, at 1:41 PM, Akira Hatanaka <ahatanak at gmail.com> wrote:
> Hi Jakob,
>
> I believe Hal is trying to enable register scavenger to find two (or more) registers that can be used as temporaries.
>
> One problem I see with this approach is that, if you use register scavenger during PEI, you will have to pessimistically set aside two emergency spill slots before
2013 Apr 06
3
[LLVMdev] [PATCH] RegScavenger::scavengeRegister
...es two GPR-to-accumulator copy instructions while copying
> > one accumulator to another requires four copy instructions
> > (instruction set doesn't have any accumulator-to-accumulator copy
> > instructions):
> >
> > copy $vreg_gpr0, $vreg_acc0:lo
> > copy $vreg_gpr1, $vreg_acc0:hi
> > copy $vreg_acc1:lo, $vreg_gpr0
> > copy $vreg_acc1:hi, $vreg_gpr1
>
> There is no way of preventing copies completely.
>
> Once you create a virtual register with some register class, you must
> support spilling, reloading, and copying of that registe...
2013 Mar 25
3
[LLVMdev] [PATCH] RegScavenger::scavengeRegister
Hi Jakob,
I believe Hal is trying to enable register scavenger to find two (or more)
registers that can be used as temporaries.
One problem I see with this approach is that, if you use register scavenger
during PEI, you will have to pessimistically set aside two emergency spill
slots before you call scavengeRegister, even if it turns out you only need
one. Having an extra stack slot might not be