diff --git a/src/cmd/compile/internal/ssa/_gen/generic.rules b/src/cmd/compile/internal/ssa/_gen/generic.rules
index b16aa47..4058906 100644
--- a/src/cmd/compile/internal/ssa/_gen/generic.rules
+++ b/src/cmd/compile/internal/ssa/_gen/generic.rules
@@ -904,7 +904,7 @@
=> mem
// Collapse OffPtr
-(OffPtr (OffPtr p [y]) [x]) => (OffPtr p [x+y])
+(OffPtr (OffPtr <t> p [y]) [x]) => (OffPtr <t> p [x+y])
(OffPtr p [0]) && v.Type.Compare(p.Type) == types.CMPeq => p
// indexing operations
diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go
index 5e0135b..c7421cd 100644
--- a/src/cmd/compile/internal/ssa/rewritegeneric.go
+++ b/src/cmd/compile/internal/ssa/rewritegeneric.go
@@ -21821,16 +21821,18 @@
}
func rewriteValuegeneric_OpOffPtr(v *Value) bool {
v_0 := v.Args[0]
- // match: (OffPtr (OffPtr p [y]) [x])
- // result: (OffPtr p [x+y])
+ // match: (OffPtr (OffPtr <t> p [y]) [x])
+ // result: (OffPtr <t> p [x+y])
for {
x := auxIntToInt64(v.AuxInt)
if v_0.Op != OpOffPtr {
break
}
+ t := v_0.Type
y := auxIntToInt64(v_0.AuxInt)
p := v_0.Args[0]
v.reset(OpOffPtr)
+ v.Type = t
v.AuxInt = int64ToAuxInt(x + y)
v.AddArg(p)
return true