diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2020-01-06 13:42:35 -0800 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2020-02-20 05:04:39 +0000 |
commit | 49f8d45994b6782e4925057909e4896832334a26 (patch) | |
tree | 1879c7fb1ccb3fb58a27bd714612e41e427ccdca /src/cmd/compile/internal/ssa/rewriteARM.go | |
parent | a63ed10d448d96d2f580e229ed46c02b5cd7a1a4 (diff) | |
download | go-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.go | 255 |
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 { |