Here is a simple place I wanted to use it.
...
On multiply, the result implicit is placed in a 64 bit hi/lo register.
//
// Format: MFLO rx MIPS16e
// Purpose: Move From LO Register
// To copy the special purpose LO register to a GPR.
//
def Mflo16: FRR16_M_ins<0b10010, "mflo", IIAlu> {
let Uses = [LO];
let neverHasSideEffects = 1;
}
//
// Pseudo Instruction for mult
//
def MultRxRy16: FMULT16_ins<"mult", IIAlu> {
let isCommutable = 1;
let neverHasSideEffects = 1;
let Defs = [HI, LO];
}
def: Mips16Pattern<(mul CPU16Regs:$l, CPU16Regs:$r),
[(MultRxRyRz16 CPU16Regs:$l, CPU16Regs:$r), (Mflo16) ]>;
Without the list of instructions feature in the Pattern class, I am forced to
make a pseudo that has both the mul and mflo instruction in it.
This is a very simple example and some, like for example the conditional move
have 3 instructions with sequences like:
cmp x,y
bnez .+4
move a, b
I am able to do all of this just fine with pseudo's but it's not as
clean a solution.
________________________________________
From: Sean Silva [silvas at purdue.edu]
Sent: Sunday, September 16, 2012 1:09 PM
To: Kotler, Reed
Cc: Hal Finkel; Anton Korobeynikov; LLVM-Dev [llvmdev at cs.uiuc.edu]
Subject: Re: [LLVMdev] Pattern class
What have you tried?
On Sun, Sep 16, 2012 at 3:34 PM, Kotler, Reed <rkotler at mips.com>
wrote:> This Pattern class says it's possible but seems just to not work or
maybe I'm using it incorrectly.
>
> Probably I will go and fix it when I'm done with mips16.
>
>
> ________________________________________
> From: Hal Finkel [hfinkel at anl.gov]
> Sent: Sunday, September 16, 2012 10:59 AM
> To: Anton Korobeynikov
> Cc: Kotler, Reed; LLVM-Dev [llvmdev at cs.uiuc.edu]
> Subject: Re: [LLVMdev] Pattern class
>
> On Sun, 16 Sep 2012 21:33:26 +0400
> Anton Korobeynikov <anton at korobeynikov.info> wrote:
>
>> > This has several problems for direct object emitting
>> Why? Just expand these pseudos before asm printing and you're done.
>> This is the approach used by other targets. Check e.g. ARM backend for
>> handling movw + movt pair of instructions.
>
> I think that *if* it were possible to do this with patterns, then that
> would be the preferred mechanism.
>
> -Hal
>
>>
>
>
>
> --
> Hal Finkel
> Postdoctoral Appointee
> Leadership Computing Facility
> Argonne National Laboratory
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev