I am trying to add a patterns for SMLALBB
I think these two assembly patterns can be reduced to SMLALBB using tablegen.
smulbb r2, r3, r2
adds r0, r2, r0 (RdLo)
asr r3, r2, #31
adc r1, r3, r1 (RdHi) ==> smlalbb r0, r1, r3, r2
I have added pattern in def SMLALBB : AMulxyI64< ..... as below :-
modified to ---> [((set GPR:$RdLo, (ARMaddc (set GPR:$Rd, mul GPR:$Rn, GPR:$Rm), GPR:$RdLo)), (set GPR:$RdHi, (ARMadde (sra GPR:$Rd, (i32 31)), GPR:$RdHi, CPSR)))]
This results in 'expected identifier in dag init' error.
Obviously something is wrong in this pattern, I have not figured out what that is ?
ldrb r2, [r2]
ldrb r3, [r3]
smlal r0, r1, r3, r2 ==> smlalbb r0, r1, r3, r2
def : ARMV5MOPat<(smlal GPRnopc:$RdLo, GPRnopc:$RdHi,
(sra (shl GPR:$a, (i32 24)), (i32 24)),
(sra (shl GPR:$b, (i32 24)), (i32 24))),
(SMLALBB GPRnopc:$RdLo, GPRnopc:$RdHi, GPRnopc:$Rn, GPRnopc:Rm)>;
This throws "Variable not defined: 'smlal'
Any pointers on these would be helpful.