[LLVMdev] Optimization passes break machine instructions on new backend

Per Fagrell per.fagrell at coresonic.com
Wed Dec 15 01:11:36 PST 2010


But in the first version it's used on the next row:
     %reg16388<def> = CMPrr %reg16384, %reg16385, %CFR<imp-def,dead>;
IntRegs:%reg16388,16384,16385
     SKIPCOND 1, *%CFR<imp-use>*
Or doesn't that count?

Following are patters for cmp and skipcond:

def cmpcc : SDNode<"CSISD::CMP", SDTIntBinOp, [SDNPOutFlag]>;
let Defs = [CFR] in {

  def CMPrr  : InstCS<(outs IntRegs:$dst), (ins IntRegs:$b, IntRegs:$c),
                 "cmp $c, $dst",
                 [(set IntRegs:$dst, (cmpcc IntRegs:$b, IntRegs:$c)),
(implicit CFR)]>;
}

let Uses = [CFR], isBranch = 1, isTerminator = 1 in
    def SKIPCOND : InstCS<(outs), (ins CCOp:$cc),
                         "s$cc",
                        [(skipcc imm:$cc)]>;

On Wed, Dec 15, 2010 at 10:02 AM, Anton Korobeynikov <
anton at korobeynikov.info> wrote:

> Hello Per,
>
> > The CMPrr instruction is moved down to after the PHI node. My guess is
> that
> > the 'dead' in CFR<imp-def,dead> is to blame, but I can't see what I'm
> doing
> > differently from MSP430/sparc that makes this not work. Any help GREATLY
> > appreciated!
> It seems like no use of CFR after CMP, indeed. How condbranches on
> your platform look like (patterns, etc.) ?
>
> --
> With best regards, Anton Korobeynikov
> Faculty of Mathematics and Mechanics, Saint Petersburg State University
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101215/962d699c/attachment.html>


More information about the llvm-dev mailing list