Skip to content

Commit 79159f2

Browse files
committed
cmd/compile: fix simplification rules on arm/arm64
Fixes #48473 Change-Id: Ic1e918f916eae223a3b530a51a58f03031924670 Reviewed-on: https://go-review.googlesource.com/c/go/+/350913 Trust: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
1 parent eff27e8 commit 79159f2

File tree

5 files changed

+314
-374
lines changed

5 files changed

+314
-374
lines changed

src/cmd/compile/internal/ssa/gen/ARM.rules

+18-18
Original file line numberDiff line numberDiff line change
@@ -1239,24 +1239,24 @@
12391239
(AND x (MVN y)) => (BIC x y)
12401240

12411241
// simplification with *shift ops
1242-
(SUBshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVWconst [0])
1243-
(SUBshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVWconst [0])
1244-
(SUBshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVWconst [0])
1245-
(RSBshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVWconst [0])
1246-
(RSBshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVWconst [0])
1247-
(RSBshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVWconst [0])
1248-
(ANDshiftLL x y:(SLLconst x [c]) [d]) && c==d => y
1249-
(ANDshiftRL x y:(SRLconst x [c]) [d]) && c==d => y
1250-
(ANDshiftRA x y:(SRAconst x [c]) [d]) && c==d => y
1251-
(ORshiftLL x y:(SLLconst x [c]) [d]) && c==d => y
1252-
(ORshiftRL x y:(SRLconst x [c]) [d]) && c==d => y
1253-
(ORshiftRA x y:(SRAconst x [c]) [d]) && c==d => y
1254-
(XORshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVWconst [0])
1255-
(XORshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVWconst [0])
1256-
(XORshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVWconst [0])
1257-
(BICshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVWconst [0])
1258-
(BICshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVWconst [0])
1259-
(BICshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVWconst [0])
1242+
(SUBshiftLL (SLLconst x [c]) x [c]) => (MOVWconst [0])
1243+
(SUBshiftRL (SRLconst x [c]) x [c]) => (MOVWconst [0])
1244+
(SUBshiftRA (SRAconst x [c]) x [c]) => (MOVWconst [0])
1245+
(RSBshiftLL (SLLconst x [c]) x [c]) => (MOVWconst [0])
1246+
(RSBshiftRL (SRLconst x [c]) x [c]) => (MOVWconst [0])
1247+
(RSBshiftRA (SRAconst x [c]) x [c]) => (MOVWconst [0])
1248+
(ANDshiftLL y:(SLLconst x [c]) x [c]) => y
1249+
(ANDshiftRL y:(SRLconst x [c]) x [c]) => y
1250+
(ANDshiftRA y:(SRAconst x [c]) x [c]) => y
1251+
(ORshiftLL y:(SLLconst x [c]) x [c]) => y
1252+
(ORshiftRL y:(SRLconst x [c]) x [c]) => y
1253+
(ORshiftRA y:(SRAconst x [c]) x [c]) => y
1254+
(XORshiftLL (SLLconst x [c]) x [c]) => (MOVWconst [0])
1255+
(XORshiftRL (SRLconst x [c]) x [c]) => (MOVWconst [0])
1256+
(XORshiftRA (SRAconst x [c]) x [c]) => (MOVWconst [0])
1257+
(BICshiftLL (SLLconst x [c]) x [c]) => (MOVWconst [0])
1258+
(BICshiftRL (SRLconst x [c]) x [c]) => (MOVWconst [0])
1259+
(BICshiftRA (SRAconst x [c]) x [c]) => (MOVWconst [0])
12601260
(AND x (MVNshiftLL y [c])) => (BICshiftLL x y [c])
12611261
(AND x (MVNshiftRL y [c])) => (BICshiftRL x y [c])
12621262
(AND x (MVNshiftRA y [c])) => (BICshiftRA x y [c])

src/cmd/compile/internal/ssa/gen/ARM64.rules

+27-27
Original file line numberDiff line numberDiff line change
@@ -1723,33 +1723,33 @@
17231723
(TSTshiftRO x (MOVDconst [c]) [d]) => (TSTconst x [rotateRight64(c, d)])
17241724

17251725
// simplification with *shift ops
1726-
(SUBshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVDconst [0])
1727-
(SUBshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVDconst [0])
1728-
(SUBshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVDconst [0])
1729-
(ANDshiftLL x y:(SLLconst x [c]) [d]) && c==d => y
1730-
(ANDshiftRL x y:(SRLconst x [c]) [d]) && c==d => y
1731-
(ANDshiftRA x y:(SRAconst x [c]) [d]) && c==d => y
1732-
(ANDshiftRO x y:(RORconst x [c]) [d]) && c==d => y
1733-
(ORshiftLL x y:(SLLconst x [c]) [d]) && c==d => y
1734-
(ORshiftRL x y:(SRLconst x [c]) [d]) && c==d => y
1735-
(ORshiftRA x y:(SRAconst x [c]) [d]) && c==d => y
1736-
(ORshiftRO x y:(RORconst x [c]) [d]) && c==d => y
1737-
(XORshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVDconst [0])
1738-
(XORshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVDconst [0])
1739-
(XORshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVDconst [0])
1740-
(XORshiftRO x (RORconst x [c]) [d]) && c==d => (MOVDconst [0])
1741-
(BICshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVDconst [0])
1742-
(BICshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVDconst [0])
1743-
(BICshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVDconst [0])
1744-
(BICshiftRO x (RORconst x [c]) [d]) && c==d => (MOVDconst [0])
1745-
(EONshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVDconst [-1])
1746-
(EONshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVDconst [-1])
1747-
(EONshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVDconst [-1])
1748-
(EONshiftRO x (RORconst x [c]) [d]) && c==d => (MOVDconst [-1])
1749-
(ORNshiftLL x (SLLconst x [c]) [d]) && c==d => (MOVDconst [-1])
1750-
(ORNshiftRL x (SRLconst x [c]) [d]) && c==d => (MOVDconst [-1])
1751-
(ORNshiftRA x (SRAconst x [c]) [d]) && c==d => (MOVDconst [-1])
1752-
(ORNshiftRO x (RORconst x [c]) [d]) && c==d => (MOVDconst [-1])
1726+
(SUBshiftLL (SLLconst x [c]) x [c]) => (MOVDconst [0])
1727+
(SUBshiftRL (SRLconst x [c]) x [c]) => (MOVDconst [0])
1728+
(SUBshiftRA (SRAconst x [c]) x [c]) => (MOVDconst [0])
1729+
(ANDshiftLL y:(SLLconst x [c]) x [c]) => y
1730+
(ANDshiftRL y:(SRLconst x [c]) x [c]) => y
1731+
(ANDshiftRA y:(SRAconst x [c]) x [c]) => y
1732+
(ANDshiftRO y:(RORconst x [c]) x [c]) => y
1733+
(ORshiftLL y:(SLLconst x [c]) x [c]) => y
1734+
(ORshiftRL y:(SRLconst x [c]) x [c]) => y
1735+
(ORshiftRA y:(SRAconst x [c]) x [c]) => y
1736+
(ORshiftRO y:(RORconst x [c]) x [c]) => y
1737+
(XORshiftLL (SLLconst x [c]) x [c]) => (MOVDconst [0])
1738+
(XORshiftRL (SRLconst x [c]) x [c]) => (MOVDconst [0])
1739+
(XORshiftRA (SRAconst x [c]) x [c]) => (MOVDconst [0])
1740+
(XORshiftRO (RORconst x [c]) x [c]) => (MOVDconst [0])
1741+
(BICshiftLL (SLLconst x [c]) x [c]) => (MOVDconst [0])
1742+
(BICshiftRL (SRLconst x [c]) x [c]) => (MOVDconst [0])
1743+
(BICshiftRA (SRAconst x [c]) x [c]) => (MOVDconst [0])
1744+
(BICshiftRO (RORconst x [c]) x [c]) => (MOVDconst [0])
1745+
(EONshiftLL (SLLconst x [c]) x [c]) => (MOVDconst [-1])
1746+
(EONshiftRL (SRLconst x [c]) x [c]) => (MOVDconst [-1])
1747+
(EONshiftRA (SRAconst x [c]) x [c]) => (MOVDconst [-1])
1748+
(EONshiftRO (RORconst x [c]) x [c]) => (MOVDconst [-1])
1749+
(ORNshiftLL (SLLconst x [c]) x [c]) => (MOVDconst [-1])
1750+
(ORNshiftRL (SRLconst x [c]) x [c]) => (MOVDconst [-1])
1751+
(ORNshiftRA (SRAconst x [c]) x [c]) => (MOVDconst [-1])
1752+
(ORNshiftRO (RORconst x [c]) x [c]) => (MOVDconst [-1])
17531753

17541754
// Generate rotates with const shift
17551755
(ADDshiftLL [c] (SRLconst x [64-c]) x) => (RORconst [64-c] x)

0 commit comments

Comments
 (0)