cmd/compile: fix misscompile in rewrite generic rules We canonicalize *sh*x(32|16|8) x (Const*) to *sh*x64 x (Const64) however for the shift type we were using the shift's type. This is wrong since if we have let's say Rsh32x32 <uint32> we would generate a Const64 with a type size of 4 (given it takes the uint32 type). This causes me confirmed crashes, maybe misscompilations too but I didn't tried coming up with one. Change-Id: Idcef7a371836524aa6649e13424431d716497860 Reviewed-on: https://go-review.googlesource.com/c/go/+/795240 Auto-Submit: Jorropo <jorropo.pgm@gmail.com> Auto-Submit: Junyang Shao <shaojunyang@google.com> Reviewed-by: Keith Randall <khr@golang.org> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Junyang Shao <shaojunyang@google.com>
diff --git a/src/cmd/compile/internal/ssa/_gen/generic.rules b/src/cmd/compile/internal/ssa/_gen/generic.rules index 84cf50a..80e7c8e 100644 --- a/src/cmd/compile/internal/ssa/_gen/generic.rules +++ b/src/cmd/compile/internal/ssa/_gen/generic.rules
@@ -428,45 +428,45 @@ // rewrite shifts of 8/16/32 bit consts into 64 bit consts to reduce // the number of the other rewrite rules for const shifts -(Lsh64x32 <t> x (Const32 [c])) => (Lsh64x64 x (Const64 <t> [int64(uint32(c))])) -(Lsh64x16 <t> x (Const16 [c])) => (Lsh64x64 x (Const64 <t> [int64(uint16(c))])) -(Lsh64x8 <t> x (Const8 [c])) => (Lsh64x64 x (Const64 <t> [int64(uint8(c))])) -(Rsh64x32 <t> x (Const32 [c])) => (Rsh64x64 x (Const64 <t> [int64(uint32(c))])) -(Rsh64x16 <t> x (Const16 [c])) => (Rsh64x64 x (Const64 <t> [int64(uint16(c))])) -(Rsh64x8 <t> x (Const8 [c])) => (Rsh64x64 x (Const64 <t> [int64(uint8(c))])) -(Rsh64Ux32 <t> x (Const32 [c])) => (Rsh64Ux64 x (Const64 <t> [int64(uint32(c))])) -(Rsh64Ux16 <t> x (Const16 [c])) => (Rsh64Ux64 x (Const64 <t> [int64(uint16(c))])) -(Rsh64Ux8 <t> x (Const8 [c])) => (Rsh64Ux64 x (Const64 <t> [int64(uint8(c))])) +(Lsh64x32 x (Const32 [c])) => (Lsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Lsh64x16 x (Const16 [c])) => (Lsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Lsh64x8 x (Const8 [c])) => (Lsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) +(Rsh64x32 x (Const32 [c])) => (Rsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Rsh64x16 x (Const16 [c])) => (Rsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Rsh64x8 x (Const8 [c])) => (Rsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) +(Rsh64Ux32 x (Const32 [c])) => (Rsh64Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Rsh64Ux16 x (Const16 [c])) => (Rsh64Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Rsh64Ux8 x (Const8 [c])) => (Rsh64Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) -(Lsh32x32 <t> x (Const32 [c])) => (Lsh32x64 x (Const64 <t> [int64(uint32(c))])) -(Lsh32x16 <t> x (Const16 [c])) => (Lsh32x64 x (Const64 <t> [int64(uint16(c))])) -(Lsh32x8 <t> x (Const8 [c])) => (Lsh32x64 x (Const64 <t> [int64(uint8(c))])) -(Rsh32x32 <t> x (Const32 [c])) => (Rsh32x64 x (Const64 <t> [int64(uint32(c))])) -(Rsh32x16 <t> x (Const16 [c])) => (Rsh32x64 x (Const64 <t> [int64(uint16(c))])) -(Rsh32x8 <t> x (Const8 [c])) => (Rsh32x64 x (Const64 <t> [int64(uint8(c))])) -(Rsh32Ux32 <t> x (Const32 [c])) => (Rsh32Ux64 x (Const64 <t> [int64(uint32(c))])) -(Rsh32Ux16 <t> x (Const16 [c])) => (Rsh32Ux64 x (Const64 <t> [int64(uint16(c))])) -(Rsh32Ux8 <t> x (Const8 [c])) => (Rsh32Ux64 x (Const64 <t> [int64(uint8(c))])) +(Lsh32x32 x (Const32 [c])) => (Lsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Lsh32x16 x (Const16 [c])) => (Lsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Lsh32x8 x (Const8 [c])) => (Lsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) +(Rsh32x32 x (Const32 [c])) => (Rsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Rsh32x16 x (Const16 [c])) => (Rsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Rsh32x8 x (Const8 [c])) => (Rsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) +(Rsh32Ux32 x (Const32 [c])) => (Rsh32Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Rsh32Ux16 x (Const16 [c])) => (Rsh32Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Rsh32Ux8 x (Const8 [c])) => (Rsh32Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) -(Lsh16x32 <t> x (Const32 [c])) => (Lsh16x64 x (Const64 <t> [int64(uint32(c))])) -(Lsh16x16 <t> x (Const16 [c])) => (Lsh16x64 x (Const64 <t> [int64(uint16(c))])) -(Lsh16x8 <t> x (Const8 [c])) => (Lsh16x64 x (Const64 <t> [int64(uint8(c))])) -(Rsh16x32 <t> x (Const32 [c])) => (Rsh16x64 x (Const64 <t> [int64(uint32(c))])) -(Rsh16x16 <t> x (Const16 [c])) => (Rsh16x64 x (Const64 <t> [int64(uint16(c))])) -(Rsh16x8 <t> x (Const8 [c])) => (Rsh16x64 x (Const64 <t> [int64(uint8(c))])) -(Rsh16Ux32 <t> x (Const32 [c])) => (Rsh16Ux64 x (Const64 <t> [int64(uint32(c))])) -(Rsh16Ux16 <t> x (Const16 [c])) => (Rsh16Ux64 x (Const64 <t> [int64(uint16(c))])) -(Rsh16Ux8 <t> x (Const8 [c])) => (Rsh16Ux64 x (Const64 <t> [int64(uint8(c))])) +(Lsh16x32 x (Const32 [c])) => (Lsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Lsh16x16 x (Const16 [c])) => (Lsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Lsh16x8 x (Const8 [c])) => (Lsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) +(Rsh16x32 x (Const32 [c])) => (Rsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Rsh16x16 x (Const16 [c])) => (Rsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Rsh16x8 x (Const8 [c])) => (Rsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) +(Rsh16Ux32 x (Const32 [c])) => (Rsh16Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Rsh16Ux16 x (Const16 [c])) => (Rsh16Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Rsh16Ux8 x (Const8 [c])) => (Rsh16Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) -(Lsh8x32 <t> x (Const32 [c])) => (Lsh8x64 x (Const64 <t> [int64(uint32(c))])) -(Lsh8x16 <t> x (Const16 [c])) => (Lsh8x64 x (Const64 <t> [int64(uint16(c))])) -(Lsh8x8 <t> x (Const8 [c])) => (Lsh8x64 x (Const64 <t> [int64(uint8(c))])) -(Rsh8x32 <t> x (Const32 [c])) => (Rsh8x64 x (Const64 <t> [int64(uint32(c))])) -(Rsh8x16 <t> x (Const16 [c])) => (Rsh8x64 x (Const64 <t> [int64(uint16(c))])) -(Rsh8x8 <t> x (Const8 [c])) => (Rsh8x64 x (Const64 <t> [int64(uint8(c))])) -(Rsh8Ux32 <t> x (Const32 [c])) => (Rsh8Ux64 x (Const64 <t> [int64(uint32(c))])) -(Rsh8Ux16 <t> x (Const16 [c])) => (Rsh8Ux64 x (Const64 <t> [int64(uint16(c))])) -(Rsh8Ux8 <t> x (Const8 [c])) => (Rsh8Ux64 x (Const64 <t> [int64(uint8(c))])) +(Lsh8x32 x (Const32 [c])) => (Lsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Lsh8x16 x (Const16 [c])) => (Lsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Lsh8x8 x (Const8 [c])) => (Lsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) +(Rsh8x32 x (Const32 [c])) => (Rsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Rsh8x16 x (Const16 [c])) => (Rsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Rsh8x8 x (Const8 [c])) => (Rsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) +(Rsh8Ux32 x (Const32 [c])) => (Rsh8Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) +(Rsh8Ux16 x (Const16 [c])) => (Rsh8Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) +(Rsh8Ux8 x (Const8 [c])) => (Rsh8Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) // shifts by zero (Lsh(64|32|16|8)x64 x (Const64 [0])) => x
diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go index e39e08d..a5e0478 100644 --- a/src/cmd/compile/internal/ssa/rewritegeneric.go +++ b/src/cmd/compile/internal/ssa/rewritegeneric.go
@@ -14845,17 +14845,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh16x16 <t> x (Const16 [c])) - // result: (Lsh16x64 x (Const64 <t> [int64(uint16(c))])) + // match: (Lsh16x16 x (Const16 [c])) + // result: (Lsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpLsh16x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -14897,17 +14896,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh16x32 <t> x (Const32 [c])) - // result: (Lsh16x64 x (Const64 <t> [int64(uint32(c))])) + // match: (Lsh16x32 x (Const32 [c])) + // result: (Lsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpLsh16x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -15324,17 +15322,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh16x8 <t> x (Const8 [c])) - // result: (Lsh16x64 x (Const64 <t> [int64(uint8(c))])) + // match: (Lsh16x8 x (Const8 [c])) + // result: (Lsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpLsh16x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -15376,17 +15373,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh32x16 <t> x (Const16 [c])) - // result: (Lsh32x64 x (Const64 <t> [int64(uint16(c))])) + // match: (Lsh32x16 x (Const16 [c])) + // result: (Lsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpLsh32x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -15428,17 +15424,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh32x32 <t> x (Const32 [c])) - // result: (Lsh32x64 x (Const64 <t> [int64(uint32(c))])) + // match: (Lsh32x32 x (Const32 [c])) + // result: (Lsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpLsh32x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -15855,17 +15850,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh32x8 <t> x (Const8 [c])) - // result: (Lsh32x64 x (Const64 <t> [int64(uint8(c))])) + // match: (Lsh32x8 x (Const8 [c])) + // result: (Lsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpLsh32x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -15907,17 +15901,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh64x16 <t> x (Const16 [c])) - // result: (Lsh64x64 x (Const64 <t> [int64(uint16(c))])) + // match: (Lsh64x16 x (Const16 [c])) + // result: (Lsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpLsh64x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -15959,17 +15952,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh64x32 <t> x (Const32 [c])) - // result: (Lsh64x64 x (Const64 <t> [int64(uint32(c))])) + // match: (Lsh64x32 x (Const32 [c])) + // result: (Lsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpLsh64x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -16386,17 +16378,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh64x8 <t> x (Const8 [c])) - // result: (Lsh64x64 x (Const64 <t> [int64(uint8(c))])) + // match: (Lsh64x8 x (Const8 [c])) + // result: (Lsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpLsh64x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -16438,17 +16429,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh8x16 <t> x (Const16 [c])) - // result: (Lsh8x64 x (Const64 <t> [int64(uint16(c))])) + // match: (Lsh8x16 x (Const16 [c])) + // result: (Lsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpLsh8x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -16490,17 +16480,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh8x32 <t> x (Const32 [c])) - // result: (Lsh8x64 x (Const64 <t> [int64(uint32(c))])) + // match: (Lsh8x32 x (Const32 [c])) + // result: (Lsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpLsh8x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -16917,17 +16906,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Lsh8x8 <t> x (Const8 [c])) - // result: (Lsh8x64 x (Const64 <t> [int64(uint8(c))])) + // match: (Lsh8x8 x (Const8 [c])) + // result: (Lsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpLsh8x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -30221,17 +30209,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh16Ux16 <t> x (Const16 [c])) - // result: (Rsh16Ux64 x (Const64 <t> [int64(uint16(c))])) + // match: (Rsh16Ux16 x (Const16 [c])) + // result: (Rsh16Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpRsh16Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -30273,17 +30260,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh16Ux32 <t> x (Const32 [c])) - // result: (Rsh16Ux64 x (Const64 <t> [int64(uint32(c))])) + // match: (Rsh16Ux32 x (Const32 [c])) + // result: (Rsh16Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpRsh16Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -30530,17 +30516,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh16Ux8 <t> x (Const8 [c])) - // result: (Rsh16Ux64 x (Const64 <t> [int64(uint8(c))])) + // match: (Rsh16Ux8 x (Const8 [c])) + // result: (Rsh16Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpRsh16Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -30582,17 +30567,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh16x16 <t> x (Const16 [c])) - // result: (Rsh16x64 x (Const64 <t> [int64(uint16(c))])) + // match: (Rsh16x16 x (Const16 [c])) + // result: (Rsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpRsh16x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -30634,17 +30618,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh16x32 <t> x (Const32 [c])) - // result: (Rsh16x64 x (Const64 <t> [int64(uint32(c))])) + // match: (Rsh16x32 x (Const32 [c])) + // result: (Rsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpRsh16x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -30795,17 +30778,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh16x8 <t> x (Const8 [c])) - // result: (Rsh16x64 x (Const64 <t> [int64(uint8(c))])) + // match: (Rsh16x8 x (Const8 [c])) + // result: (Rsh16x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpRsh16x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -30847,17 +30829,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh32Ux16 <t> x (Const16 [c])) - // result: (Rsh32Ux64 x (Const64 <t> [int64(uint16(c))])) + // match: (Rsh32Ux16 x (Const16 [c])) + // result: (Rsh32Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpRsh32Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -30899,17 +30880,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh32Ux32 <t> x (Const32 [c])) - // result: (Rsh32Ux64 x (Const64 <t> [int64(uint32(c))])) + // match: (Rsh32Ux32 x (Const32 [c])) + // result: (Rsh32Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpRsh32Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -31174,17 +31154,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh32Ux8 <t> x (Const8 [c])) - // result: (Rsh32Ux64 x (Const64 <t> [int64(uint8(c))])) + // match: (Rsh32Ux8 x (Const8 [c])) + // result: (Rsh32Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpRsh32Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -31226,17 +31205,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh32x16 <t> x (Const16 [c])) - // result: (Rsh32x64 x (Const64 <t> [int64(uint16(c))])) + // match: (Rsh32x16 x (Const16 [c])) + // result: (Rsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpRsh32x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -31278,17 +31256,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh32x32 <t> x (Const32 [c])) - // result: (Rsh32x64 x (Const64 <t> [int64(uint32(c))])) + // match: (Rsh32x32 x (Const32 [c])) + // result: (Rsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpRsh32x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -31457,17 +31434,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh32x8 <t> x (Const8 [c])) - // result: (Rsh32x64 x (Const64 <t> [int64(uint8(c))])) + // match: (Rsh32x8 x (Const8 [c])) + // result: (Rsh32x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpRsh32x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -31509,17 +31485,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh64Ux16 <t> x (Const16 [c])) - // result: (Rsh64Ux64 x (Const64 <t> [int64(uint16(c))])) + // match: (Rsh64Ux16 x (Const16 [c])) + // result: (Rsh64Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpRsh64Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -31561,17 +31536,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh64Ux32 <t> x (Const32 [c])) - // result: (Rsh64Ux64 x (Const64 <t> [int64(uint32(c))])) + // match: (Rsh64Ux32 x (Const32 [c])) + // result: (Rsh64Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpRsh64Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -31854,17 +31828,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh64Ux8 <t> x (Const8 [c])) - // result: (Rsh64Ux64 x (Const64 <t> [int64(uint8(c))])) + // match: (Rsh64Ux8 x (Const8 [c])) + // result: (Rsh64Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpRsh64Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -31906,17 +31879,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh64x16 <t> x (Const16 [c])) - // result: (Rsh64x64 x (Const64 <t> [int64(uint16(c))])) + // match: (Rsh64x16 x (Const16 [c])) + // result: (Rsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpRsh64x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -31958,17 +31930,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh64x32 <t> x (Const32 [c])) - // result: (Rsh64x64 x (Const64 <t> [int64(uint32(c))])) + // match: (Rsh64x32 x (Const32 [c])) + // result: (Rsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpRsh64x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -32155,17 +32126,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh64x8 <t> x (Const8 [c])) - // result: (Rsh64x64 x (Const64 <t> [int64(uint8(c))])) + // match: (Rsh64x8 x (Const8 [c])) + // result: (Rsh64x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpRsh64x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -32207,17 +32177,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh8Ux16 <t> x (Const16 [c])) - // result: (Rsh8Ux64 x (Const64 <t> [int64(uint16(c))])) + // match: (Rsh8Ux16 x (Const16 [c])) + // result: (Rsh8Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpRsh8Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -32259,17 +32228,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh8Ux32 <t> x (Const32 [c])) - // result: (Rsh8Ux64 x (Const64 <t> [int64(uint32(c))])) + // match: (Rsh8Ux32 x (Const32 [c])) + // result: (Rsh8Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpRsh8Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -32498,17 +32466,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh8Ux8 <t> x (Const8 [c])) - // result: (Rsh8Ux64 x (Const64 <t> [int64(uint8(c))])) + // match: (Rsh8Ux8 x (Const8 [c])) + // result: (Rsh8Ux64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpRsh8Ux64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true @@ -32550,17 +32517,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh8x16 <t> x (Const16 [c])) - // result: (Rsh8x64 x (Const64 <t> [int64(uint16(c))])) + // match: (Rsh8x16 x (Const16 [c])) + // result: (Rsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint16(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst16 { break } c := auxIntToInt16(v_1.AuxInt) v.reset(OpRsh8x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint16(c))) v.AddArg2(x, v0) return true @@ -32602,17 +32568,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh8x32 <t> x (Const32 [c])) - // result: (Rsh8x64 x (Const64 <t> [int64(uint32(c))])) + // match: (Rsh8x32 x (Const32 [c])) + // result: (Rsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint32(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst32 { break } c := auxIntToInt32(v_1.AuxInt) v.reset(OpRsh8x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint32(c))) v.AddArg2(x, v0) return true @@ -32744,17 +32709,16 @@ v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - // match: (Rsh8x8 <t> x (Const8 [c])) - // result: (Rsh8x64 x (Const64 <t> [int64(uint8(c))])) + // match: (Rsh8x8 x (Const8 [c])) + // result: (Rsh8x64 x (Const64 <types.Types[types.TUINT64]> [int64(uint8(c))])) for { - t := v.Type x := v_0 if v_1.Op != OpConst8 { break } c := auxIntToInt8(v_1.AuxInt) v.reset(OpRsh8x64) - v0 := b.NewValue0(v.Pos, OpConst64, t) + v0 := b.NewValue0(v.Pos, OpConst64, types.Types[types.TUINT64]) v0.AuxInt = int64ToAuxInt(int64(uint8(c))) v.AddArg2(x, v0) return true