]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: add more generic rewrite rules to reassociate (op (op y C) x|C)
authorfanzha02 <fannie.zhang@arm.com>
Thu, 28 May 2020 10:11:52 +0000 (18:11 +0800)
committerKeith Randall <khr@golang.org>
Mon, 24 Aug 2020 14:52:54 +0000 (14:52 +0000)
commitd556c251a1f1506f68e1e4064c3537948ff667a3
treede93499d86a24e3b777265f99122c161ce3ac768
parent4e4d5df0b0af23d2fcb5690e89f27bd7e64e48f1
cmd/compile: add more generic rewrite rules to reassociate (op (op y C) x|C)

With this patch, opt pass can expose more obvious constant-folding
opportunites.

Example:
func test(i int) int {return (i+8)-(i+4)}

The previous version:
  MOVD "".i(FP), R0
  ADD $8, R0, R1
  ADD $4, R0, R0
  SUB R0, R1, R0
  MOVD R0, "".~r1+8(FP)
  RET (R30)

The optimized version:
  MOVD $4, R0
  MOVD R0, "".~r1+8(FP)
  RET (R30)

This patch removes some existing reassociation rules, such as "x+(z-C)",
because the current generic rewrite rules will canonicalize "x-const"
to "x+(-const)", making "x+(z-C)" equal to "x+(z+(-C))".

This patch also adds test cases.

Change-Id: I857108ba0b5fcc18a879eeab38e2551bc4277797
Reviewed-on: https://go-review.googlesource.com/c/go/+/237137
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/gen/generic.rules
src/cmd/compile/internal/ssa/rewritegeneric.go
test/codegen/arithmetic.go