[LLVMdev] Possible issue with EXPANDING POST-RA PSEUDO INSTRS
Sergei Larin
slarin at codeaurora.org
Mon Jul 9 07:56:04 PDT 2012
Jakob,
It looks something like this:
%vreg15<def> = COMBINE_rr %vreg11, %vreg14<kill>; DoubleRegs:%vreg15
IntRegs:%vreg11,%vreg14
%vreg20<def> = CONST32GP_set <ga:@inst3>; IntRegs:%vreg20
STriw_GP <ga:@inst2+4>, 0, %vreg3<kill>; mem:ST4[getelementptr
inbounds (%struct.myStruct* @inst2, i32 0, i32 1)](tbaa=!"int")
IntRegs:%vreg3
%vreg28<def> = CONST32GP_set <ga:@inst2>; IntRegs:%vreg28
%vreg17:subreg_hireg<def> = COPY %vreg15:subreg_loreg<kill>;
DoubleRegs:%vreg17,%vreg15
COMBINE_rr == combine two (32) regs into one (64) pair.
You are seeing whole live range of vreg15.
At this point:
%vreg17:subreg_hireg<def> = COPY %vreg15:subreg_loreg<kill>;
DoubleRegs:%vreg17,%vreg15
We know that we are killing %vreg15:subreg_loreg, but after Stack Slot
Coloring I got this:
%R15<def> = COPY %R4, %D2<imp-use,kill>, %D7<imp-use,kill>, %D7<imp-def>
The actual problem happens much later, in post RA scheduler - we use
critical antidependency breaker, and that is messed up by the missing kill.
Thanks for your help.
Sergei
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum.
> -----Original Message-----
> From: Jakob Stoklund Olesen [mailto:stoklund at 2pi.dk]
> Sent: Sunday, July 08, 2012 8:27 PM
> To: Sergei Larin
> Cc: 'List'
> Subject: Re: [LLVMdev] Possible issue with EXPANDING POST-RA PSEUDO
> INSTRS
>
>
> On Jul 8, 2012, at 3:42 PM, Sergei Larin <slarin at codeaurora.org> wrote:
>
> > ********** EXPANDING POST-RA PSEUDO INSTRS **********
> > ********** Function: main
> > real copy: %R15<def> = COPY %R4, %D2<imp-use,kill>, %D7<imp-
> use,kill>,
> > %D7<imp-def>
> > replaced by: %R15<def> = TFR %R4, %D7<imp-def>
> >
> > The R4 is a subreg of D2 double register (basically R0:R1==D0;
> > R4:R5==D2 etc.). After this copy D2 is dead, and is marked as such.
> > Register allocator did not mark R4 as <kill>, and when ExpandPostRA
> > copies operands, it loses the live range marker.
> >
> > My questions - is this a known issue? ...and should R4 has been
> marked
> > as <kill> in the original instruction?
>
> It's not a bug as such. It is OK for kill flags to be missing.
>
> It's weird that R4 isn't killed out of RA, though. What does it look
> like before rewriting? (-debug-only=regalloc).
>
> /jakob
More information about the llvm-dev
mailing list