From: Joel Sing Date: Sat, 27 Aug 2022 16:30:58 +0000 (+1000) Subject: cmd/compile: avoid extending floating point comparision on riscv64 X-Git-Tag: go1.20rc1~1317 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=239115c3efcc54fb4f3f306032af40e03f5c66a8;p=gostls13.git cmd/compile: avoid extending floating point comparision on riscv64 The result of these operations are already extended. Change-Id: Ifc8ba362dda7035d8fd0d40046a96f61d3082877 Reviewed-on: https://go-review.googlesource.com/c/go/+/426260 TryBot-Result: Gopher Robot Reviewed-by: Meng Zhuo Reviewed-by: Heschi Kreinick Run-TryBot: Cherry Mui Reviewed-by: Cherry Mui --- diff --git a/src/cmd/compile/internal/ssa/gen/RISCV64.rules b/src/cmd/compile/internal/ssa/gen/RISCV64.rules index ee82c15f95..bf466206c1 100644 --- a/src/cmd/compile/internal/ssa/gen/RISCV64.rules +++ b/src/cmd/compile/internal/ssa/gen/RISCV64.rules @@ -630,6 +630,8 @@ (MOVDstore [off] {sym} ptr (MOVDconst [0]) mem) => (MOVDstorezero [off] {sym} ptr mem) // Boolean ops are already extended. +(MOVBUreg x:((FLES|FLTS|FEQS|FNES) _ _)) => x +(MOVBUreg x:((FLED|FLTD|FEQD|FNED) _ _)) => x (MOVBUreg x:((SEQZ|SNEZ) _)) => x (MOVBUreg x:((SLT|SLTU) _ _)) => x diff --git a/src/cmd/compile/internal/ssa/rewriteRISCV64.go b/src/cmd/compile/internal/ssa/rewriteRISCV64.go index 0aba7e70db..45d82187a5 100644 --- a/src/cmd/compile/internal/ssa/rewriteRISCV64.go +++ b/src/cmd/compile/internal/ssa/rewriteRISCV64.go @@ -3160,6 +3160,86 @@ func rewriteValueRISCV64_OpRISCV64MOVBUload(v *Value) bool { func rewriteValueRISCV64_OpRISCV64MOVBUreg(v *Value) bool { v_0 := v.Args[0] b := v.Block + // match: (MOVBUreg x:(FLES _ _)) + // result: x + for { + x := v_0 + if x.Op != OpRISCV64FLES { + break + } + v.copyOf(x) + return true + } + // match: (MOVBUreg x:(FLTS _ _)) + // result: x + for { + x := v_0 + if x.Op != OpRISCV64FLTS { + break + } + v.copyOf(x) + return true + } + // match: (MOVBUreg x:(FEQS _ _)) + // result: x + for { + x := v_0 + if x.Op != OpRISCV64FEQS { + break + } + v.copyOf(x) + return true + } + // match: (MOVBUreg x:(FNES _ _)) + // result: x + for { + x := v_0 + if x.Op != OpRISCV64FNES { + break + } + v.copyOf(x) + return true + } + // match: (MOVBUreg x:(FLED _ _)) + // result: x + for { + x := v_0 + if x.Op != OpRISCV64FLED { + break + } + v.copyOf(x) + return true + } + // match: (MOVBUreg x:(FLTD _ _)) + // result: x + for { + x := v_0 + if x.Op != OpRISCV64FLTD { + break + } + v.copyOf(x) + return true + } + // match: (MOVBUreg x:(FEQD _ _)) + // result: x + for { + x := v_0 + if x.Op != OpRISCV64FEQD { + break + } + v.copyOf(x) + return true + } + // match: (MOVBUreg x:(FNED _ _)) + // result: x + for { + x := v_0 + if x.Op != OpRISCV64FNED { + break + } + v.copyOf(x) + return true + } // match: (MOVBUreg x:(SEQZ _)) // result: x for {