// license that can be found in the LICENSE file.
// Fold constant shift with extension.
-(SRAI <t> [c] (MOVBreg x)) && c < 8 => (SRAI [56+c] (SLLI <t> [56] x))
-(SRAI <t> [c] (MOVHreg x)) && c < 16 => (SRAI [48+c] (SLLI <t> [48] x))
-(SRAI <t> [c] (MOVWreg x)) && c < 32 => (SRAI [32+c] (SLLI <t> [32] x))
-(SRLI <t> [c] (MOVBUreg x)) && c < 8 => (SRLI [56+c] (SLLI <t> [56] x))
-(SRLI <t> [c] (MOVHUreg x)) && c < 16 => (SRLI [48+c] (SLLI <t> [48] x))
-(SRLI <t> [c] (MOVWUreg x)) && c < 32 => (SRLI [32+c] (SLLI <t> [32] x))
-(SLLI <t> [c] (MOVBUreg x)) && c <= 56 => (SRLI [56-c] (SLLI <t> [56] x))
-(SLLI <t> [c] (MOVHUreg x)) && c <= 48 => (SRLI [48-c] (SLLI <t> [48] x))
-(SLLI <t> [c] (MOVWUreg x)) && c <= 32 => (SRLI [32-c] (SLLI <t> [32] x))
+(SRAI [c] (MOVBreg x)) && c < 8 => (SRAI [56+c] (SLLI <typ.Int64> [56] x))
+(SRAI [c] (MOVHreg x)) && c < 16 => (SRAI [48+c] (SLLI <typ.Int64> [48] x))
+(SRAI [c] (MOVWreg x)) && c < 32 => (SRAI [32+c] (SLLI <typ.Int64> [32] x))
+(SRLI [c] (MOVBUreg x)) && c < 8 => (SRLI [56+c] (SLLI <typ.UInt64> [56] x))
+(SRLI [c] (MOVHUreg x)) && c < 16 => (SRLI [48+c] (SLLI <typ.UInt64> [48] x))
+(SRLI [c] (MOVWUreg x)) && c < 32 => (SRLI [32+c] (SLLI <typ.UInt64> [32] x))
+(SLLI [c] (MOVBUreg x)) && c <= 56 => (SRLI [56-c] (SLLI <typ.UInt64> [56] x))
+(SLLI [c] (MOVHUreg x)) && c <= 48 => (SRLI [48-c] (SLLI <typ.UInt64> [48] x))
+(SLLI [c] (MOVWUreg x)) && c <= 32 => (SRLI [32-c] (SLLI <typ.UInt64> [32] x))
// Shift by zero.
(SRAI [0] x) => x
func rewriteValueRISCV64latelower_OpRISCV64SLLI(v *Value) bool {
v_0 := v.Args[0]
b := v.Block
- // match: (SLLI <t> [c] (MOVBUreg x))
+ typ := &b.Func.Config.Types
+ // match: (SLLI [c] (MOVBUreg x))
// cond: c <= 56
- // result: (SRLI [56-c] (SLLI <t> [56] x))
+ // result: (SRLI [56-c] (SLLI <typ.UInt64> [56] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVBUreg {
break
}
v.reset(OpRISCV64SRLI)
v.AuxInt = int64ToAuxInt(56 - c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64)
v0.AuxInt = int64ToAuxInt(56)
v0.AddArg(x)
v.AddArg(v0)
return true
}
- // match: (SLLI <t> [c] (MOVHUreg x))
+ // match: (SLLI [c] (MOVHUreg x))
// cond: c <= 48
- // result: (SRLI [48-c] (SLLI <t> [48] x))
+ // result: (SRLI [48-c] (SLLI <typ.UInt64> [48] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVHUreg {
break
}
v.reset(OpRISCV64SRLI)
v.AuxInt = int64ToAuxInt(48 - c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64)
v0.AuxInt = int64ToAuxInt(48)
v0.AddArg(x)
v.AddArg(v0)
return true
}
- // match: (SLLI <t> [c] (MOVWUreg x))
+ // match: (SLLI [c] (MOVWUreg x))
// cond: c <= 32
- // result: (SRLI [32-c] (SLLI <t> [32] x))
+ // result: (SRLI [32-c] (SLLI <typ.UInt64> [32] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVWUreg {
break
}
v.reset(OpRISCV64SRLI)
v.AuxInt = int64ToAuxInt(32 - c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64)
v0.AuxInt = int64ToAuxInt(32)
v0.AddArg(x)
v.AddArg(v0)
func rewriteValueRISCV64latelower_OpRISCV64SRAI(v *Value) bool {
v_0 := v.Args[0]
b := v.Block
- // match: (SRAI <t> [c] (MOVBreg x))
+ typ := &b.Func.Config.Types
+ // match: (SRAI [c] (MOVBreg x))
// cond: c < 8
- // result: (SRAI [56+c] (SLLI <t> [56] x))
+ // result: (SRAI [56+c] (SLLI <typ.Int64> [56] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVBreg {
break
}
v.reset(OpRISCV64SRAI)
v.AuxInt = int64ToAuxInt(56 + c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.Int64)
v0.AuxInt = int64ToAuxInt(56)
v0.AddArg(x)
v.AddArg(v0)
return true
}
- // match: (SRAI <t> [c] (MOVHreg x))
+ // match: (SRAI [c] (MOVHreg x))
// cond: c < 16
- // result: (SRAI [48+c] (SLLI <t> [48] x))
+ // result: (SRAI [48+c] (SLLI <typ.Int64> [48] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVHreg {
break
}
v.reset(OpRISCV64SRAI)
v.AuxInt = int64ToAuxInt(48 + c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.Int64)
v0.AuxInt = int64ToAuxInt(48)
v0.AddArg(x)
v.AddArg(v0)
return true
}
- // match: (SRAI <t> [c] (MOVWreg x))
+ // match: (SRAI [c] (MOVWreg x))
// cond: c < 32
- // result: (SRAI [32+c] (SLLI <t> [32] x))
+ // result: (SRAI [32+c] (SLLI <typ.Int64> [32] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVWreg {
break
}
v.reset(OpRISCV64SRAI)
v.AuxInt = int64ToAuxInt(32 + c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.Int64)
v0.AuxInt = int64ToAuxInt(32)
v0.AddArg(x)
v.AddArg(v0)
func rewriteValueRISCV64latelower_OpRISCV64SRLI(v *Value) bool {
v_0 := v.Args[0]
b := v.Block
- // match: (SRLI <t> [c] (MOVBUreg x))
+ typ := &b.Func.Config.Types
+ // match: (SRLI [c] (MOVBUreg x))
// cond: c < 8
- // result: (SRLI [56+c] (SLLI <t> [56] x))
+ // result: (SRLI [56+c] (SLLI <typ.UInt64> [56] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVBUreg {
break
}
v.reset(OpRISCV64SRLI)
v.AuxInt = int64ToAuxInt(56 + c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64)
v0.AuxInt = int64ToAuxInt(56)
v0.AddArg(x)
v.AddArg(v0)
return true
}
- // match: (SRLI <t> [c] (MOVHUreg x))
+ // match: (SRLI [c] (MOVHUreg x))
// cond: c < 16
- // result: (SRLI [48+c] (SLLI <t> [48] x))
+ // result: (SRLI [48+c] (SLLI <typ.UInt64> [48] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVHUreg {
break
}
v.reset(OpRISCV64SRLI)
v.AuxInt = int64ToAuxInt(48 + c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64)
v0.AuxInt = int64ToAuxInt(48)
v0.AddArg(x)
v.AddArg(v0)
return true
}
- // match: (SRLI <t> [c] (MOVWUreg x))
+ // match: (SRLI [c] (MOVWUreg x))
// cond: c < 32
- // result: (SRLI [32+c] (SLLI <t> [32] x))
+ // result: (SRLI [32+c] (SLLI <typ.UInt64> [32] x))
for {
- t := v.Type
c := auxIntToInt64(v.AuxInt)
if v_0.Op != OpRISCV64MOVWUreg {
break
}
v.reset(OpRISCV64SRLI)
v.AuxInt = int64ToAuxInt(32 + c)
- v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t)
+ v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64)
v0.AuxInt = int64ToAuxInt(32)
v0.AddArg(x)
v.AddArg(v0)