In tablegen, if two patterns match, the one that comes first in the file
is given preference. We want the SMRD IMM pattern to be given
preference, because it encodes the pointer offset in its immediate
field, which saves us an add instruction.
multiclass SMRD_Helper <bits<5> op, string asm, RegisterClass dstClass,
ValueType vt> {
-
- def _SGPR : SMRD <
+ def _IMM : SMRD <
op,
(outs dstClass:$dst),
- (ins SMRDmemrr:$src0),
+ (ins SMRDmemri:$src0),
asm,
- [(set (vt dstClass:$dst), (constant_load ADDR_Reg:$src0))]
+ [(set (vt dstClass:$dst), (constant_load ADDR_Offset8:$src0))]
>;
- def _IMM : SMRD <
+ def _SGPR : SMRD <
op,
(outs dstClass:$dst),
- (ins SMRDmemri:$src0),
+ (ins SMRDmemrr:$src0),
asm,
- [(set (vt dstClass:$dst), (constant_load ADDR_Offset8:$src0))]
+ [(set (vt dstClass:$dst), (constant_load ADDR_Reg:$src0))]
>;
}