]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: clean up store rules to use store type, not argument type
authorKeith Randall <khr@golang.org>
Sun, 9 Apr 2023 15:11:06 +0000 (08:11 -0700)
committerKeith Randall <khr@google.com>
Mon, 10 Apr 2023 17:06:55 +0000 (17:06 +0000)
Argument type is dangerous because it may be thinner than the actual
store being issued.

Change-Id: Id19fbd8e6c41390a453994f897dd5048473136aa
Reviewed-on: https://go-review.googlesource.com/c/go/+/483438
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: David Chase <drchase@google.com>
20 files changed:
src/cmd/compile/internal/ssa/_gen/386.rules
src/cmd/compile/internal/ssa/_gen/AMD64.rules
src/cmd/compile/internal/ssa/_gen/ARM.rules
src/cmd/compile/internal/ssa/_gen/ARM64.rules
src/cmd/compile/internal/ssa/_gen/LOONG64.rules
src/cmd/compile/internal/ssa/_gen/MIPS.rules
src/cmd/compile/internal/ssa/_gen/MIPS64.rules
src/cmd/compile/internal/ssa/_gen/PPC64.rules
src/cmd/compile/internal/ssa/_gen/RISCV64.rules
src/cmd/compile/internal/ssa/_gen/S390X.rules
src/cmd/compile/internal/ssa/rewrite386.go
src/cmd/compile/internal/ssa/rewriteAMD64.go
src/cmd/compile/internal/ssa/rewriteARM.go
src/cmd/compile/internal/ssa/rewriteARM64.go
src/cmd/compile/internal/ssa/rewriteLOONG64.go
src/cmd/compile/internal/ssa/rewriteMIPS.go
src/cmd/compile/internal/ssa/rewriteMIPS64.go
src/cmd/compile/internal/ssa/rewritePPC64.go
src/cmd/compile/internal/ssa/rewriteRISCV64.go
src/cmd/compile/internal/ssa/rewriteS390X.go

index 03413b289edc475b4cb89049789a194b913c12b2..9abc98107933faf00e629011886dc21e9ec9896d 100644 (file)
 (Load <t> ptr mem) && is64BitFloat(t) => (MOVSDload ptr mem)
 
 // Lowering stores
-// These more-specific FP versions of Store pattern should come first.
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVSDstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVSSstore ptr val mem)
-
-(Store {t} ptr val mem) && t.Size() == 4 => (MOVLstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVSDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVSSstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVLstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVWstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 
index d93811e9ff19bcd8a48763ae1c888e74cb8a3c43..905bffe3bf66d2c62470a800cf15f1b8b3609631 100644 (file)
 (Load <t> ptr mem) && is64BitFloat(t) => (MOVSDload ptr mem)
 
 // Lowering stores
-// These more-specific FP versions of Store pattern should come first.
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVSDstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVSSstore ptr val mem)
-
-(Store {t} ptr val mem) && t.Size() == 8 => (MOVQstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 => (MOVLstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVSDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVSSstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVQstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVLstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVWstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 
index 9ea9f9674a29771584c124c878ad9d38579781a6..0947b77231ed0126ce4d89014fcffd671f4ad439 100644 (file)
 // stores
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVFstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVFstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVDstore ptr val mem)
 
 // zero instructions
 (Zero [0] _ mem) => mem
index 3eb3c2e63b067bc4b5bdf621829409bbbe4c4244..70d286b62ae8a5d9dd02fd9622b9490372307071 100644 (file)
 // stores
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVDstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (FMOVSstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (FMOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (FMOVSstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (FMOVDstore ptr val mem)
 
 // zeroing
 (Zero [0] _   mem) => mem
index e68baf07f6b8d3222b865356f65f050704740b5e..d15bf1bd638f8c28542f47edebf9743a0e31f5a9 100644 (file)
 // stores
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVVstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVFstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVVstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVFstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVDstore ptr val mem)
 
 // zeroing
 (Zero [0] _ mem) => mem
index b74ab7b609744e9e9c3490af403824bc8d3c8858..d07f657982a275f4cd5e3d2d662bbf42f6ccfdac 100644 (file)
 // stores
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVFstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVFstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVDstore ptr val mem)
 
 // zero instructions
 (Zero [0] _ mem) => mem
index e5cfd90e82f4ad071b9ce8bfb01fd6da69f009b0..d6cc63cdb09b57c4fd5f7c2f0a4ce0aa3808568c 100644 (file)
 // stores
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVVstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (MOVFstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (MOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVVstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (MOVFstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (MOVDstore ptr val mem)
 
 // zeroing
 (Zero [0] _ mem) => mem
index 1c8142cd812aa29b7dd9e84387cac16ec9b370ec..9e0b44bd2d1f9b5a682d9af8f2e4b0824d9123f7 100644 (file)
 (Load <t> ptr mem) && is32BitFloat(t) => (FMOVSload ptr mem)
 (Load <t> ptr mem) && is64BitFloat(t) => (FMOVDload ptr mem)
 
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (FMOVDstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && is32BitFloat(val.Type) => (FMOVDstore ptr val mem) // glitch from (Cvt32Fto64F x) => x -- type is wrong
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (FMOVSstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVDstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitInt(val.Type) => (MOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (FMOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (FMOVSstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 
index 378b8c06f86266032fa206e4fb0de14eb450344d..b6700cc6ee2593adafb9e7065a94989e3947dcb1 100644 (file)
 // Stores
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && !is32BitFloat(val.Type) => (MOVWstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 && !is64BitFloat(val.Type) => (MOVDstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 &&  is32BitFloat(val.Type) => (FMOVWstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 8 &&  is64BitFloat(val.Type) => (FMOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 &&  t.IsFloat() => (FMOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 &&  t.IsFloat() => (FMOVDstore ptr val mem)
 
 // We need to fold MOVaddr into the LD/MOVDstore ops so that the live variable analysis
 // knows what variables are being read/written by the ops.
index 4502a57384237330d49c022f68870dcad83cbfa5..c85c559b48c1e160eba45a04b6ee2447cb6bd752 100644 (file)
 (Load <t> ptr mem) && is64BitFloat(t) => (FMOVDload ptr mem)
 
 // Lowering stores
-// These more-specific FP versions of Store pattern should come first.
-(Store {t} ptr val mem) && t.Size() == 8 && is64BitFloat(val.Type) => (FMOVDstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 && is32BitFloat(val.Type) => (FMOVSstore ptr val mem)
-
-(Store {t} ptr val mem) && t.Size() == 8 => (MOVDstore ptr val mem)
-(Store {t} ptr val mem) && t.Size() == 4 => (MOVWstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && t.IsFloat() => (FMOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && t.IsFloat() => (FMOVSstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 8 && !t.IsFloat() => (MOVDstore ptr val mem)
+(Store {t} ptr val mem) && t.Size() == 4 && !t.IsFloat() => (MOVWstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 2 => (MOVHstore ptr val mem)
 (Store {t} ptr val mem) && t.Size() == 1 => (MOVBstore ptr val mem)
 
index fe5bbe56a3603b66261dab2d957b7d7838e29a29..550e7d5e4b9c5deae55b71298f7b80c13486e600 100644 (file)
@@ -11224,14 +11224,14 @@ func rewriteValue386_OpStore(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (MOVSDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(Op386MOVSDstore)
@@ -11239,14 +11239,14 @@ func rewriteValue386_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (MOVSSstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(Op386MOVSSstore)
@@ -11254,14 +11254,14 @@ func rewriteValue386_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVLstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(Op386MOVLstore)
index 86b69b5905e57af55f55b40e7249294f16fc3350..2cc80408a3b73f3c97e99b3a37c03b58820ec40b 100644 (file)
@@ -33049,14 +33049,14 @@ func rewriteValueAMD64_OpStore(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (MOVSDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpAMD64MOVSDstore)
@@ -33064,14 +33064,14 @@ func rewriteValueAMD64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (MOVSSstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpAMD64MOVSSstore)
@@ -33079,14 +33079,14 @@ func rewriteValueAMD64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8
+       // cond: t.Size() == 8 && !t.IsFloat()
        // result: (MOVQstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8) {
+               if !(t.Size() == 8 && !t.IsFloat()) {
                        break
                }
                v.reset(OpAMD64MOVQstore)
@@ -33094,14 +33094,14 @@ func rewriteValueAMD64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVLstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpAMD64MOVLstore)
index 896ea50223384353842b518be03f8da6f36695d8..b495a9cbe8914f3ab69e83864540024745a7d48e 100644 (file)
@@ -15912,14 +15912,14 @@ func rewriteValueARM_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && !is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpARMMOVWstore)
@@ -15927,14 +15927,14 @@ func rewriteValueARM_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (MOVFstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpARMMOVFstore)
@@ -15942,14 +15942,14 @@ func rewriteValueARM_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (MOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpARMMOVDstore)
index b7466f945f0ec4e7aa45386fd724a52c811c9733..f6e57962d1e2629e11bb6f944be0391e5067c846 100644 (file)
@@ -28941,14 +28941,14 @@ func rewriteValueARM64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && !is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpARM64MOVWstore)
@@ -28956,14 +28956,14 @@ func rewriteValueARM64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && !is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && !t.IsFloat()
        // result: (MOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && !t.IsFloat()) {
                        break
                }
                v.reset(OpARM64MOVDstore)
@@ -28971,14 +28971,14 @@ func rewriteValueARM64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (FMOVSstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpARM64FMOVSstore)
@@ -28986,14 +28986,14 @@ func rewriteValueARM64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (FMOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpARM64FMOVDstore)
index 8eacc1fda7d256382d2fd70c6b4195292f4e87e2..1581e826988c3f753cc704a7a8f58f59dab9c0d9 100644 (file)
@@ -7225,14 +7225,14 @@ func rewriteValueLOONG64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && !is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpLOONG64MOVWstore)
@@ -7240,14 +7240,14 @@ func rewriteValueLOONG64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && !is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && !t.IsFloat()
        // result: (MOVVstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && !t.IsFloat()) {
                        break
                }
                v.reset(OpLOONG64MOVVstore)
@@ -7255,14 +7255,14 @@ func rewriteValueLOONG64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (MOVFstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpLOONG64MOVFstore)
@@ -7270,14 +7270,14 @@ func rewriteValueLOONG64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (MOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpLOONG64MOVDstore)
index 4d56908b30f8e9848e4a6c35f4da700ed311a908..85be0336add3ab4e289595492d52334aa66e7a5f 100644 (file)
@@ -6785,14 +6785,14 @@ func rewriteValueMIPS_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && !is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpMIPSMOVWstore)
@@ -6800,14 +6800,14 @@ func rewriteValueMIPS_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (MOVFstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpMIPSMOVFstore)
@@ -6815,14 +6815,14 @@ func rewriteValueMIPS_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (MOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpMIPSMOVDstore)
index 8b01407e01b3dcbe04b444e6ed63cc2225450b97..af4ab1efd73b3f4b6f037c0c413e1a021c098faa 100644 (file)
@@ -7337,14 +7337,14 @@ func rewriteValueMIPS64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && !is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpMIPS64MOVWstore)
@@ -7352,14 +7352,14 @@ func rewriteValueMIPS64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && !is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && !t.IsFloat()
        // result: (MOVVstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && !t.IsFloat()) {
                        break
                }
                v.reset(OpMIPS64MOVVstore)
@@ -7367,14 +7367,14 @@ func rewriteValueMIPS64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (MOVFstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpMIPS64MOVFstore)
@@ -7382,14 +7382,14 @@ func rewriteValueMIPS64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (MOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpMIPS64MOVDstore)
index 50c10fd9c489b94fb11590877a78772dc9982890..e4ef3934ae44fe2da3e4f9bdcb7d32b7c9ab739b 100644 (file)
@@ -16056,14 +16056,14 @@ func rewriteValuePPC64_OpStore(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (FMOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpPPC64FMOVDstore)
@@ -16071,29 +16071,14 @@ func rewriteValuePPC64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is32BitFloat(val.Type)
-       // result: (FMOVDstore ptr val mem)
-       for {
-               t := auxToType(v.Aux)
-               ptr := v_0
-               val := v_1
-               mem := v_2
-               if !(t.Size() == 8 && is32BitFloat(val.Type)) {
-                       break
-               }
-               v.reset(OpPPC64FMOVDstore)
-               v.AddArg3(ptr, val, mem)
-               return true
-       }
-       // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (FMOVSstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpPPC64FMOVSstore)
@@ -16101,14 +16086,14 @@ func rewriteValuePPC64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && !is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && !t.IsFloat()
        // result: (MOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && !t.IsFloat()) {
                        break
                }
                v.reset(OpPPC64MOVDstore)
@@ -16116,14 +16101,14 @@ func rewriteValuePPC64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitInt(val.Type)
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitInt(val.Type)) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpPPC64MOVWstore)
index 68851272166e20ca60002649642ad71dce6f8f54..021db10ce61f0962921751d579ec9eb61ecbdee1 100644 (file)
@@ -7862,14 +7862,14 @@ func rewriteValueRISCV64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && !is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && !is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpRISCV64MOVWstore)
@@ -7877,14 +7877,14 @@ func rewriteValueRISCV64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && !is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && !t.IsFloat()
        // result: (MOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && !is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && !t.IsFloat()) {
                        break
                }
                v.reset(OpRISCV64MOVDstore)
@@ -7892,14 +7892,14 @@ func rewriteValueRISCV64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (FMOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpRISCV64FMOVWstore)
@@ -7907,14 +7907,14 @@ func rewriteValueRISCV64_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (FMOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpRISCV64FMOVDstore)
index e8cc88d655faf0b8e2cc7b22c8d6400a0b693f8c..bd920ef4a9898dc0e18c432d084f7bf5d70666d0 100644 (file)
@@ -15646,14 +15646,14 @@ func rewriteValueS390X_OpStore(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8 && is64BitFloat(val.Type)
+       // cond: t.Size() == 8 && t.IsFloat()
        // result: (FMOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8 && is64BitFloat(val.Type)) {
+               if !(t.Size() == 8 && t.IsFloat()) {
                        break
                }
                v.reset(OpS390XFMOVDstore)
@@ -15661,14 +15661,14 @@ func rewriteValueS390X_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4 && is32BitFloat(val.Type)
+       // cond: t.Size() == 4 && t.IsFloat()
        // result: (FMOVSstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4 && is32BitFloat(val.Type)) {
+               if !(t.Size() == 4 && t.IsFloat()) {
                        break
                }
                v.reset(OpS390XFMOVSstore)
@@ -15676,14 +15676,14 @@ func rewriteValueS390X_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 8
+       // cond: t.Size() == 8 && !t.IsFloat()
        // result: (MOVDstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 8) {
+               if !(t.Size() == 8 && !t.IsFloat()) {
                        break
                }
                v.reset(OpS390XMOVDstore)
@@ -15691,14 +15691,14 @@ func rewriteValueS390X_OpStore(v *Value) bool {
                return true
        }
        // match: (Store {t} ptr val mem)
-       // cond: t.Size() == 4
+       // cond: t.Size() == 4 && !t.IsFloat()
        // result: (MOVWstore ptr val mem)
        for {
                t := auxToType(v.Aux)
                ptr := v_0
                val := v_1
                mem := v_2
-               if !(t.Size() == 4) {
+               if !(t.Size() == 4 && !t.IsFloat()) {
                        break
                }
                v.reset(OpS390XMOVWstore)