[LLVMdev] MI bundle liveness attributes

Arnold Schwaighofer arnolds at codeaurora.org
Thu Aug 9 11:53:46 PDT 2012


Hi Sergei,

It seems to me that you can represent the semantics of a conditional
instruction by adding a use of the conditionally defined register to the
instruction.

The value of the output register of an instruction is either the value
of the instruction if it was conditionally executed or the value of the
output register before the instruction.

The Bundle would be:

BUNDLE %PC<imp-def>, %R0<imp-def>, %P0<imp-use,kill>, %R16<imp-use>,
    %R0<imp-use,kill>
      * %R0<def> = LDriuh_cdnNotPt %P0<kill,internal>, %R16, 0,
                          %R0<imp-use,kill>
      * %P0<def> = CMPEQri %R16, 0

The individual instruction would be:

   %R0<def> = LDriuh_cdnNotPt %P0<kill,internal>, %R16, 0, %R0<imp-use,
                                                            kill>;

How would you use cond-def/uses? How would they change liveness?

Best,
Arnold

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum.

On 8/9/2012 11:48 AM, Sergei Larin wrote:
>
> Hello everyone,
>
>    Let me (re)present a question that might have previously been discussed,
> but did not result in any code (AFIK).
>
>    How do we represent a _conditional_ assignment (def) in a bundle MI?
>
>    More contents - currently we expose internal def/use/kill information to a
> bundle header - something like this:
>
>
> BUNDLE %PC<imp-def>, %R0<imp-def>, %P0<imp-use,kill>, %R16<imp-use>
>     * %R0<def> = LDriuh_cdnNotPt %P0<kill,internal>, %R16, 0;
>     * %P0<def> = CMPEQri %R16, 0;
>
>    Here CMPEQri is a compare to a predicate register instruction, and
> LDriuh_cdnNotPt is a _conditional_ load, which might or might not
> Take place based on the outcome of the compare... As such R0 might or might
> not be defined in this bundle, which obviously changes the liveness update
> process.
>
>    My question, do we need another attribute along with isImplicit and
> isEarlyClobber etc. to designate a conditional def? Furthermore, depending
> on architectural details we well might have a conditional use as well... and
> what about the individual (unbundled) def/use? Should this:
>
> %R0<def> = LDriuh_cdnNotPt %P0<kill,internal>, %R16, 0;
>
> ...become this:
>
> %R0<def-cond> = LDriuh_cdnNotPt %P0<kill,internal>, %R16, 0;
>
> or even:
>
> %R0<def-cond> = LDriuh_cdnNotPt %P0<kill,internal>, %R16<use-cond>, 0;
>
>    So, if I am missing something in current implementation or an ongoing
> discussions (and that is entirely possible since I am just back after
> vacation), please let me know how to achieve this functionality, but if this
> is something missing in implementation, let's discuss how do we want to
> realize it.
>
>    Thanks.
>
> Sergei Larin
>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum.
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum.



More information about the llvm-dev mailing list