// Code generated from _gen/RISCV64latelower.rules using 'go generate'; DO NOT EDIT. package rewriteriscv64latelower import "cmd/compile/internal/ssa/ssaop" import "cmd/compile/internal/ssa" func RewriteValue(v *ssa.Value) bool { switch v.Op { case ssaop.OpRISCV64AND: return rewriteValue_OpRISCV64AND(v) case ssaop.OpRISCV64NOT: return rewriteValue_OpRISCV64NOT(v) case ssaop.OpRISCV64OR: return rewriteValue_OpRISCV64OR(v) case ssaop.OpRISCV64SLLI: return rewriteValue_OpRISCV64SLLI(v) case ssaop.OpRISCV64SRAI: return rewriteValue_OpRISCV64SRAI(v) case ssaop.OpRISCV64SRLI: return rewriteValue_OpRISCV64SRLI(v) case ssaop.OpRISCV64XOR: return rewriteValue_OpRISCV64XOR(v) } return false } func rewriteValue_OpRISCV64AND(v *ssa.Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (AND x (NOT y)) // result: (ANDN x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { x := v_0 if v_1.Op != ssaop.OpRISCV64NOT { continue } y := v_1.Args[0] v.Reset(ssaop.OpRISCV64ANDN) v.AddArg2(x, y) return true } break } return false } func rewriteValue_OpRISCV64NOT(v *ssa.Value) bool { v_0 := v.Args[0] // match: (NOT (XOR x y)) // result: (XNOR x y) for { if v_0.Op != ssaop.OpRISCV64XOR { break } y := v_0.Args[1] x := v_0.Args[0] v.Reset(ssaop.OpRISCV64XNOR) v.AddArg2(x, y) return true } return false } func rewriteValue_OpRISCV64OR(v *ssa.Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (OR x (NOT y)) // result: (ORN x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { x := v_0 if v_1.Op != ssaop.OpRISCV64NOT { continue } y := v_1.Args[0] v.Reset(ssaop.OpRISCV64ORN) v.AddArg2(x, y) return true } break } return false } func rewriteValue_OpRISCV64SLLI(v *ssa.Value) bool { v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (SLLI [c] (MOVBUreg x)) // cond: c <= 56 // result: (SRLI [56-c] (SLLI [56] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVBUreg { break } x := v_0.Args[0] if !(c <= 56) { break } v.Reset(ssaop.OpRISCV64SRLI) v.AuxInt = ssa.Int64ToAuxInt(56 - c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.UInt64) v0.AuxInt = ssa.Int64ToAuxInt(56) v0.AddArg(x) v.AddArg(v0) return true } // match: (SLLI [c] (MOVHUreg x)) // cond: c <= 48 // result: (SRLI [48-c] (SLLI [48] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVHUreg { break } x := v_0.Args[0] if !(c <= 48) { break } v.Reset(ssaop.OpRISCV64SRLI) v.AuxInt = ssa.Int64ToAuxInt(48 - c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.UInt64) v0.AuxInt = ssa.Int64ToAuxInt(48) v0.AddArg(x) v.AddArg(v0) return true } // match: (SLLI [c] (MOVWUreg x)) // cond: c <= 32 // result: (SRLI [32-c] (SLLI [32] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVWUreg { break } x := v_0.Args[0] if !(c <= 32) { break } v.Reset(ssaop.OpRISCV64SRLI) v.AuxInt = ssa.Int64ToAuxInt(32 - c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.UInt64) v0.AuxInt = ssa.Int64ToAuxInt(32) v0.AddArg(x) v.AddArg(v0) return true } // match: (SLLI [0] x) // result: x for { if ssa.AuxIntToInt64(v.AuxInt) != 0 { break } x := v_0 v.CopyOf(x) return true } return false } func rewriteValue_OpRISCV64SRAI(v *ssa.Value) bool { v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (SRAI [c] (MOVBreg x)) // cond: c < 8 // result: (SRAI [56+c] (SLLI [56] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVBreg { break } x := v_0.Args[0] if !(c < 8) { break } v.Reset(ssaop.OpRISCV64SRAI) v.AuxInt = ssa.Int64ToAuxInt(56 + c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.Int64) v0.AuxInt = ssa.Int64ToAuxInt(56) v0.AddArg(x) v.AddArg(v0) return true } // match: (SRAI [c] (MOVHreg x)) // cond: c < 16 // result: (SRAI [48+c] (SLLI [48] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVHreg { break } x := v_0.Args[0] if !(c < 16) { break } v.Reset(ssaop.OpRISCV64SRAI) v.AuxInt = ssa.Int64ToAuxInt(48 + c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.Int64) v0.AuxInt = ssa.Int64ToAuxInt(48) v0.AddArg(x) v.AddArg(v0) return true } // match: (SRAI [c] (MOVWreg x)) // cond: c < 32 // result: (SRAI [32+c] (SLLI [32] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVWreg { break } x := v_0.Args[0] if !(c < 32) { break } v.Reset(ssaop.OpRISCV64SRAI) v.AuxInt = ssa.Int64ToAuxInt(32 + c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.Int64) v0.AuxInt = ssa.Int64ToAuxInt(32) v0.AddArg(x) v.AddArg(v0) return true } // match: (SRAI [0] x) // result: x for { if ssa.AuxIntToInt64(v.AuxInt) != 0 { break } x := v_0 v.CopyOf(x) return true } return false } func rewriteValue_OpRISCV64SRLI(v *ssa.Value) bool { v_0 := v.Args[0] b := v.Block typ := &b.Func.Config.Types // match: (SRLI [c] (MOVBUreg x)) // cond: c < 8 // result: (SRLI [56+c] (SLLI [56] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVBUreg { break } x := v_0.Args[0] if !(c < 8) { break } v.Reset(ssaop.OpRISCV64SRLI) v.AuxInt = ssa.Int64ToAuxInt(56 + c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.UInt64) v0.AuxInt = ssa.Int64ToAuxInt(56) v0.AddArg(x) v.AddArg(v0) return true } // match: (SRLI [c] (MOVHUreg x)) // cond: c < 16 // result: (SRLI [48+c] (SLLI [48] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVHUreg { break } x := v_0.Args[0] if !(c < 16) { break } v.Reset(ssaop.OpRISCV64SRLI) v.AuxInt = ssa.Int64ToAuxInt(48 + c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.UInt64) v0.AuxInt = ssa.Int64ToAuxInt(48) v0.AddArg(x) v.AddArg(v0) return true } // match: (SRLI [c] (MOVWUreg x)) // cond: c < 32 // result: (SRLI [32+c] (SLLI [32] x)) for { c := ssa.AuxIntToInt64(v.AuxInt) if v_0.Op != ssaop.OpRISCV64MOVWUreg { break } x := v_0.Args[0] if !(c < 32) { break } v.Reset(ssaop.OpRISCV64SRLI) v.AuxInt = ssa.Int64ToAuxInt(32 + c) v0 := b.NewValue0(v.Pos, ssaop.OpRISCV64SLLI, typ.UInt64) v0.AuxInt = ssa.Int64ToAuxInt(32) v0.AddArg(x) v.AddArg(v0) return true } // match: (SRLI [0] x) // result: x for { if ssa.AuxIntToInt64(v.AuxInt) != 0 { break } x := v_0 v.CopyOf(x) return true } return false } func rewriteValue_OpRISCV64XOR(v *ssa.Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (XOR x (NOT y)) // result: (XNOR x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { x := v_0 if v_1.Op != ssaop.OpRISCV64NOT { continue } y := v_1.Args[0] v.Reset(ssaop.OpRISCV64XNOR) v.AddArg2(x, y) return true } break } return false } func RewriteBlock(b *ssa.Block) bool { return false }