Optimized (mul x, 27), (mul x, 45), (mul x, 81) in previous patterns may has some problem. Cannot generate two same assembly SH3ADD x, x after isel, so I removed those groups patterns and add some mul optimization which referred to before optimization.
Before:
(mul x, 27) -> (SH1ADD (SH3ADD x, x), (SH3ADD x, x))
(mul x, 45) -> (SH2ADD (SH3ADD x, x), (SH3ADD x, x))
(mul x, 81) -> (SH3ADD (SH3ADD x, x), (SH3ADD x, x))
My Add:
(mul x, 23) -> (SH2ADD (SH2ADD x, x), (SH1ADD x, x))
(mul x, 43) -> (SH3ADD (SH2ADD x, x), (SH1ADD x, x))
(mul x, 39) -> (SH2ADD (SH3ADD x, x), (SH1ADD x, x))
(mul x, 75) -> (SH3ADD (SH3ADD x, x), (SH1ADD x, x))
(mul x, 77) -> (SH3ADD (SH3ADD x, x), (SH2ADD x, x))