[llvm-dev] MIPS instruction with optional flag

Francesco Bertolaccini via llvm-dev llvm-dev at lists.llvm.org
Sat Jun 26 00:55:04 PDT 2021


I'm self-replying to this email because I was able to find a solution in
the end!
The way to make instructions "variadic" is to create aliases with
default arguments, so something like this:

  def SV_Q : SV_WT<0b111110, "sv.q $rt, $addr, wt">;
  def : MipsInstAlias<"sv.q $rt", (SV_Q MyOpnd:$rt, 0)>;

This makes it possible to pass either one or two arguments to sv.q

Francesco

On 21/06/2021 10:42, Francesco Bertolaccini wrote:
> I'm in the process of adding support for some custom instructions to the
> MIPS backend.
> 
> Some of the instructions I'm planning on adding support an optional
> flag, like so:
> 
>     sv.q C000, 16($s0)
>     sv.q C000, 16($s0), wt ; both should be accepted
> 
> Note that the 'wt' operand is not an identifier, it's a "keyword".
> 
> I haven't found the correct way to do it: at first, I thought of
> creating a custom operand
> 
>   def VFPUWriteThroughAsmOpnd : AsmOperandClass {
>     let Name = "WriteThrough";
>     let PredicateMethod = "isWriteThrough";
>     let ParserMethod = "parseWriteThrough";
>   }
> 
>   def VFPUWriteThrough : Operand<i32> {
>     let PrintMethod = "printWriteThrough";
>     let ParserMatchClass = WriteThroughAsmOpnd;
>     let OperandType = "OPERAND_IMMEDIATE";
>   }
> 
> in the hope that I could just declare the instruction like so
> 
>   def SV_Q : SV<0b111110, "sv.q $rt, $addr $wt">; // Note lack of comma
> 
> and detect the absence or presence of the comma in the parseWriteThrough
> method. This didn't work, and the parser still chokes when trying to
> parse statements which do not have the 'wt' flag.
> 
> I then tried to declare two different instructions
> 
>   def SV_Q : SV<0b111110, "sv.q $rt, $addr">;
>   def SV_Q_WT : SV_WT<0b111110, "sv.q $rt, $addr, wt">;
> 
> This failed too, this time in recognizing statements which _do_ have the
> wt flag. It seems like the second definition is ignored.
> 
> How can I implement this?
> Thanks,
> 
> Francesco
> 



More information about the llvm-dev mailing list