[LLVMdev] No more TargetFlags on MO_Register MachineOperands
Owen Anderson
resistor at mac.com
Tue Aug 21 11:37:15 PDT 2012
Tom,
On Aug 21, 2012, at 11:21 AM, Tom Stellard <thomas.stellard at amd.com> wrote:
> I've been working on replacing the MachineOperand flags in the R600
> backend with immediate operands, but I can't figure out how to modify
> the instruction patterns to make this work. For example, I have the class:
>
> class R600_1OP <bits<32> inst, string opName, list<dag> pattern,
> InstrItinClass itin = AnyALU> :
> InstR600 <inst,
> (outs R600_Reg32:$dst),
> (ins R600_Reg32:$src, R600_Pred:$p, i32imm:$flags),
> !strconcat(opName, " $dst, $src ($p)"),
> pattern,
> itin
>> ;
>
> And an instruction def:
>
> def CEIL : R600_1OP <
> 0x12, "CEIL",
> [(set R600_Reg32:$dst, (fceil R600_Reg32:$src))]
>> ;
>
> Tablegen fails to compile this with an error: "Operand $flag does not
> appear in the instruction pattern"
>
> Is there some way I can have this pattern initialize the $flag operand
> to 0?
The generally accepted way of achieving this is to leave the built-in pattern on the instruction empty, and to use def : Pat constructs to provide the default values.
def : Pat<(fceil R600_Reg32:$src), (CEIL R600_Reg32:$src, (i32 0))>;
--Owen
More information about the llvm-dev
mailing list