blob: 3118b3af9db7dd3042419e90a85d5200994cff53 [file] [log] [blame]
// autogenerated from rulegen/generic.rules: do not edit!
// generated with: go run rulegen/rulegen.go rulegen/generic.rules genericRules generic.go
package ssa
func genericRules(v *Value) bool {
switch v.Op {
case OpAdd:
// match: (Add <t> (Const [c]) (Const [d]))
// cond: is64BitInt(t) && isSigned(t)
// result: (Const [{c.(int64)+d.(int64)}])
{
t := v.Type
if v.Args[0].Op != OpConst {
goto end0
}
c := v.Args[0].Aux
if v.Args[1].Op != OpConst {
goto end0
}
d := v.Args[1].Aux
if !(is64BitInt(t) && isSigned(t)) {
goto end0
}
v.Op = OpConst
v.Aux = nil
v.Args = v.argstorage[:0]
v.Aux = c.(int64) + d.(int64)
return true
}
end0:
;
// match: (Add <t> (Const [c]) (Const [d]))
// cond: is64BitInt(t) && !isSigned(t)
// result: (Const [{c.(uint64)+d.(uint64)}])
{
t := v.Type
if v.Args[0].Op != OpConst {
goto end1
}
c := v.Args[0].Aux
if v.Args[1].Op != OpConst {
goto end1
}
d := v.Args[1].Aux
if !(is64BitInt(t) && !isSigned(t)) {
goto end1
}
v.Op = OpConst
v.Aux = nil
v.Args = v.argstorage[:0]
v.Aux = c.(uint64) + d.(uint64)
return true
}
end1:
;
case OpLoad:
// match: (Load (FPAddr [offset]) mem)
// cond:
// result: (LoadFP [offset] mem)
{
if v.Args[0].Op != OpFPAddr {
goto end2
}
offset := v.Args[0].Aux
mem := v.Args[1]
v.Op = OpLoadFP
v.Aux = nil
v.Args = v.argstorage[:0]
v.Aux = offset
v.AddArg(mem)
return true
}
end2:
;
// match: (Load (SPAddr [offset]) mem)
// cond:
// result: (LoadSP [offset] mem)
{
if v.Args[0].Op != OpSPAddr {
goto end3
}
offset := v.Args[0].Aux
mem := v.Args[1]
v.Op = OpLoadSP
v.Aux = nil
v.Args = v.argstorage[:0]
v.Aux = offset
v.AddArg(mem)
return true
}
end3:
;
case OpStore:
// match: (Store (FPAddr [offset]) val mem)
// cond:
// result: (StoreFP [offset] val mem)
{
if v.Args[0].Op != OpFPAddr {
goto end4
}
offset := v.Args[0].Aux
val := v.Args[1]
mem := v.Args[2]
v.Op = OpStoreFP
v.Aux = nil
v.Args = v.argstorage[:0]
v.Aux = offset
v.AddArg(val)
v.AddArg(mem)
return true
}
end4:
;
// match: (Store (SPAddr [offset]) val mem)
// cond:
// result: (StoreSP [offset] val mem)
{
if v.Args[0].Op != OpSPAddr {
goto end5
}
offset := v.Args[0].Aux
val := v.Args[1]
mem := v.Args[2]
v.Op = OpStoreSP
v.Aux = nil
v.Args = v.argstorage[:0]
v.Aux = offset
v.AddArg(val)
v.AddArg(mem)
return true
}
end5:
}
return false
}