Displaying 7 results from an estimated 7 matches for "adjustcopiesbackfrom".
2012 Jul 06
2
[LLVMdev] MachineOperand: Subreg defines and the Undef flag
...lt;Vreg1, hi_sub_reg, Vreg2, lo_sub_reg> ; B
>> is a
>> 64 bit virt reg.
>
> I used this approach and it worked find until I hit, what I believe is, a
> bug in the register coalescer.
> When the register coalescer 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...
2012 Jul 06
0
[LLVMdev] MachineOperand: Subreg defines and the Undef flag
...> New_MI_3:: B= REG_SEQUENCE<Vreg1, hi_sub_reg, Vreg2, lo_sub_reg> ; B
> is a
> 64 bit virt reg.
I used this approach and it worked find until I hit, what I believe is, a
bug in the register coalescer.
When the register coalescer 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 c...
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
2012 Jul 06
0
[LLVMdev] MachineOperand: Subreg defines and the Undef flag
>
>
> That sounds like a bug, probably adjustCopiesBackFrom needs to check
> ACopyMI->isFullCopy().
>
> Do you have a test case for this?
>
>
Yes and No. Yes because the example is from a unit testcase that I have. No
because it manifests itself only with my half baked pass that I was talking
about earlier in this thread.
Pranav
---------...
2012 Jul 06
1
[LLVMdev] MachineOperand: Subreg defines and the Undef flag
On Jul 6, 2012, at 7:30 AM, Pranav D Bhandarkar <pranav.bhandarkar at utexas.edu> wrote:
> That sounds like a bug, probably adjustCopiesBackFrom needs to check ACopyMI->isFullCopy().
>
> Do you have a test case for this?
>
>
> Yes and No. Yes because the example is from a unit testcase that I have. No because it manifests itself only with my half baked pass that I was talking about earlier in this thread.
Alright. Eve...
2012 Oct 25
0
[LLVMdev] RegisterCoalescing Pass seems to ignore part of CFG.
Thank for your help. You're right, merging vreg32 and vreg48 is perfectly fine, sorry I missed that.
I "brute force" debuged by adding MachineFunction dump after each join, I think I found the issue : it's when vreg32 and vreg10 are merged.
vreg10 only appears in BB#3, and the join only occurs in BB#3 apparently even if vreg32 lives in the 4 machine blocks
After joining, there
2012 Oct 25
3
[LLVMdev] RegisterCoalescing Pass seems to ignore part of CFG.
Hi Vincent,
On 25/10/2012 18:14, Vincent Lejeune wrote:
> When examining the debug output of regalloc, it seems that joining 32bits reg also joins 128 parent reg.
>
> If I look at the :
> %vreg34<def> = COPY %vreg6:sel_y; R600_Reg32:%vreg34 R600_Reg128:%vreg6
>
> instructions ; it gets joined to :
> 928B%vreg34<def> = COPY %vreg48:sel_y;
>
> when vreg6 and