aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/rewriteARM.go
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2020-01-06 13:42:35 -0800
committerJosh Bleecher Snyder <josharian@gmail.com>2020-02-20 05:04:39 +0000
commit49f8d45994b6782e4925057909e4896832334a26 (patch)
tree1879c7fb1ccb3fb58a27bd714612e41e427ccdca /src/cmd/compile/internal/ssa/rewriteARM.go
parenta63ed10d448d96d2f580e229ed46c02b5cd7a1a4 (diff)
downloadgo-49f8d45994b6782e4925057909e4896832334a26.tar.gz
go-49f8d45994b6782e4925057909e4896832334a26.zip
cmd/compile: delete duplicate rules
Add logic during rulegen to detect exact duplicates (after applying commutativity), and clean up existing duplicates. Change-Id: I7179f40fc48e236c74b74f429ec9f0f100026530 Reviewed-on: https://go-review.googlesource.com/c/go/+/213699 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/ssa/rewriteARM.go')
-rw-r--r--src/cmd/compile/internal/ssa/rewriteARM.go255
1 files changed, 2 insertions, 253 deletions
diff --git a/src/cmd/compile/internal/ssa/rewriteARM.go b/src/cmd/compile/internal/ssa/rewriteARM.go
index fb7a7570f2..7bd34106fc 100644
--- a/src/cmd/compile/internal/ssa/rewriteARM.go
+++ b/src/cmd/compile/internal/ssa/rewriteARM.go
@@ -9,7 +9,7 @@ import "cmd/compile/internal/types"
func rewriteValueARM(v *Value) bool {
switch v.Op {
case OpARMADC:
- return rewriteValueARM_OpARMADC_0(v) || rewriteValueARM_OpARMADC_10(v) || rewriteValueARM_OpARMADC_20(v)
+ return rewriteValueARM_OpARMADC_0(v) || rewriteValueARM_OpARMADC_10(v)
case OpARMADCconst:
return rewriteValueARM_OpARMADCconst_0(v)
case OpARMADCshiftLL:
@@ -872,38 +872,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool {
v.AddArg(flags)
return true
}
- // match: (ADC x (MOVWconst [c]) flags)
- // result: (ADCconst [c] x flags)
- for {
- flags := v.Args[2]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpARMMOVWconst {
- break
- }
- c := v_1.AuxInt
- v.reset(OpARMADCconst)
- v.AuxInt = c
- v.AddArg(x)
- v.AddArg(flags)
- return true
- }
- // match: (ADC (MOVWconst [c]) x flags)
- // result: (ADCconst [c] x flags)
- for {
- flags := v.Args[2]
- v_0 := v.Args[0]
- if v_0.Op != OpARMMOVWconst {
- break
- }
- c := v_0.AuxInt
- x := v.Args[1]
- v.reset(OpARMADCconst)
- v.AuxInt = c
- v.AddArg(x)
- v.AddArg(flags)
- return true
- }
// match: (ADC x (SLLconst [c] y) flags)
// result: (ADCshiftLL x y [c] flags)
for {
@@ -940,42 +908,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool {
v.AddArg(flags)
return true
}
- // match: (ADC (SLLconst [c] y) x flags)
- // result: (ADCshiftLL x y [c] flags)
- for {
- flags := v.Args[2]
- v_0 := v.Args[0]
- if v_0.Op != OpARMSLLconst {
- break
- }
- c := v_0.AuxInt
- y := v_0.Args[0]
- x := v.Args[1]
- v.reset(OpARMADCshiftLL)
- v.AuxInt = c
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(flags)
- return true
- }
- // match: (ADC x (SLLconst [c] y) flags)
- // result: (ADCshiftLL x y [c] flags)
- for {
- flags := v.Args[2]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpARMSLLconst {
- break
- }
- c := v_1.AuxInt
- y := v_1.Args[0]
- v.reset(OpARMADCshiftLL)
- v.AuxInt = c
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(flags)
- return true
- }
// match: (ADC x (SRLconst [c] y) flags)
// result: (ADCshiftRL x y [c] flags)
for {
@@ -1012,45 +944,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool {
v.AddArg(flags)
return true
}
- return false
-}
-func rewriteValueARM_OpARMADC_10(v *Value) bool {
- // match: (ADC (SRLconst [c] y) x flags)
- // result: (ADCshiftRL x y [c] flags)
- for {
- flags := v.Args[2]
- v_0 := v.Args[0]
- if v_0.Op != OpARMSRLconst {
- break
- }
- c := v_0.AuxInt
- y := v_0.Args[0]
- x := v.Args[1]
- v.reset(OpARMADCshiftRL)
- v.AuxInt = c
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(flags)
- return true
- }
- // match: (ADC x (SRLconst [c] y) flags)
- // result: (ADCshiftRL x y [c] flags)
- for {
- flags := v.Args[2]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpARMSRLconst {
- break
- }
- c := v_1.AuxInt
- y := v_1.Args[0]
- v.reset(OpARMADCshiftRL)
- v.AuxInt = c
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(flags)
- return true
- }
// match: (ADC x (SRAconst [c] y) flags)
// result: (ADCshiftRA x y [c] flags)
for {
@@ -1087,42 +980,6 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool {
v.AddArg(flags)
return true
}
- // match: (ADC (SRAconst [c] y) x flags)
- // result: (ADCshiftRA x y [c] flags)
- for {
- flags := v.Args[2]
- v_0 := v.Args[0]
- if v_0.Op != OpARMSRAconst {
- break
- }
- c := v_0.AuxInt
- y := v_0.Args[0]
- x := v.Args[1]
- v.reset(OpARMADCshiftRA)
- v.AuxInt = c
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(flags)
- return true
- }
- // match: (ADC x (SRAconst [c] y) flags)
- // result: (ADCshiftRA x y [c] flags)
- for {
- flags := v.Args[2]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpARMSRAconst {
- break
- }
- c := v_1.AuxInt
- y := v_1.Args[0]
- v.reset(OpARMADCshiftRA)
- v.AuxInt = c
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(flags)
- return true
- }
// match: (ADC x (SLL y z) flags)
// result: (ADCshiftLLreg x y z flags)
for {
@@ -1159,45 +1016,9 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool {
v.AddArg(flags)
return true
}
- // match: (ADC (SLL y z) x flags)
- // result: (ADCshiftLLreg x y z flags)
- for {
- flags := v.Args[2]
- v_0 := v.Args[0]
- if v_0.Op != OpARMSLL {
- break
- }
- z := v_0.Args[1]
- y := v_0.Args[0]
- x := v.Args[1]
- v.reset(OpARMADCshiftLLreg)
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(z)
- v.AddArg(flags)
- return true
- }
- // match: (ADC x (SLL y z) flags)
- // result: (ADCshiftLLreg x y z flags)
- for {
- flags := v.Args[2]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpARMSLL {
- break
- }
- z := v_1.Args[1]
- y := v_1.Args[0]
- v.reset(OpARMADCshiftLLreg)
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(z)
- v.AddArg(flags)
- return true
- }
return false
}
-func rewriteValueARM_OpARMADC_20(v *Value) bool {
+func rewriteValueARM_OpARMADC_10(v *Value) bool {
// match: (ADC x (SRL y z) flags)
// result: (ADCshiftRLreg x y z flags)
for {
@@ -1234,42 +1055,6 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool {
v.AddArg(flags)
return true
}
- // match: (ADC (SRL y z) x flags)
- // result: (ADCshiftRLreg x y z flags)
- for {
- flags := v.Args[2]
- v_0 := v.Args[0]
- if v_0.Op != OpARMSRL {
- break
- }
- z := v_0.Args[1]
- y := v_0.Args[0]
- x := v.Args[1]
- v.reset(OpARMADCshiftRLreg)
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(z)
- v.AddArg(flags)
- return true
- }
- // match: (ADC x (SRL y z) flags)
- // result: (ADCshiftRLreg x y z flags)
- for {
- flags := v.Args[2]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpARMSRL {
- break
- }
- z := v_1.Args[1]
- y := v_1.Args[0]
- v.reset(OpARMADCshiftRLreg)
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(z)
- v.AddArg(flags)
- return true
- }
// match: (ADC x (SRA y z) flags)
// result: (ADCshiftRAreg x y z flags)
for {
@@ -1306,42 +1091,6 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool {
v.AddArg(flags)
return true
}
- // match: (ADC (SRA y z) x flags)
- // result: (ADCshiftRAreg x y z flags)
- for {
- flags := v.Args[2]
- v_0 := v.Args[0]
- if v_0.Op != OpARMSRA {
- break
- }
- z := v_0.Args[1]
- y := v_0.Args[0]
- x := v.Args[1]
- v.reset(OpARMADCshiftRAreg)
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(z)
- v.AddArg(flags)
- return true
- }
- // match: (ADC x (SRA y z) flags)
- // result: (ADCshiftRAreg x y z flags)
- for {
- flags := v.Args[2]
- x := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpARMSRA {
- break
- }
- z := v_1.Args[1]
- y := v_1.Args[0]
- v.reset(OpARMADCshiftRAreg)
- v.AddArg(x)
- v.AddArg(y)
- v.AddArg(z)
- v.AddArg(flags)
- return true
- }
return false
}
func rewriteValueARM_OpARMADCconst_0(v *Value) bool {