cmd/compile: rip out support for OVARKILL from compiler frontend

Change-Id: I2c5b1064084bade68aaa065cf74dca6886fb752f
Reviewed-on: https://go-review.googlesource.com/c/go/+/419236
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
Keith Randall 2022-07-22 15:19:34 -07:00
parent a10da772a6
commit e21c1f7896
8 changed files with 22 additions and 35 deletions

View file

@ -734,7 +734,7 @@ func (n *UnaryExpr) SetOp(op Op) {
case OBITNOT, ONEG, ONOT, OPLUS, ORECV, case OBITNOT, ONEG, ONOT, OPLUS, ORECV,
OALIGNOF, OCAP, OCLOSE, OIMAG, OLEN, ONEW, OALIGNOF, OCAP, OCLOSE, OIMAG, OLEN, ONEW,
OOFFSETOF, OPANIC, OREAL, OSIZEOF, OOFFSETOF, OPANIC, OREAL, OSIZEOF,
OCHECKNIL, OCFUNC, OIDATA, OITAB, OSPTR, OVARDEF, OVARKILL, OVARLIVE: OCHECKNIL, OCFUNC, OIDATA, OITAB, OSPTR, OVARDEF, OVARLIVE:
n.op = op n.op = op
} }
} }

View file

@ -289,7 +289,6 @@ const (
OCFUNC // reference to c function pointer (not go func value) OCFUNC // reference to c function pointer (not go func value)
OCHECKNIL // emit code to ensure pointer/interface not nil OCHECKNIL // emit code to ensure pointer/interface not nil
OVARDEF // variable is about to be fully initialized OVARDEF // variable is about to be fully initialized
OVARKILL // variable is dead
OVARLIVE // variable is alive OVARLIVE // variable is alive
ORESULT // result of a function call; Xoffset is stack offset ORESULT // result of a function call; Xoffset is stack offset
OINLMARK // start of an inlined body, with file/line of caller. Xoffset is an index into the inline tree. OINLMARK // start of an inlined body, with file/line of caller. Xoffset is an index into the inline tree.

View file

@ -147,25 +147,24 @@ func _() {
_ = x[OCFUNC-136] _ = x[OCFUNC-136]
_ = x[OCHECKNIL-137] _ = x[OCHECKNIL-137]
_ = x[OVARDEF-138] _ = x[OVARDEF-138]
_ = x[OVARKILL-139] _ = x[OVARLIVE-139]
_ = x[OVARLIVE-140] _ = x[ORESULT-140]
_ = x[ORESULT-141] _ = x[OINLMARK-141]
_ = x[OINLMARK-142] _ = x[OLINKSYMOFFSET-142]
_ = x[OLINKSYMOFFSET-143] _ = x[OJUMPTABLE-143]
_ = x[OJUMPTABLE-144] _ = x[ODYNAMICDOTTYPE-144]
_ = x[ODYNAMICDOTTYPE-145] _ = x[ODYNAMICDOTTYPE2-145]
_ = x[ODYNAMICDOTTYPE2-146] _ = x[ODYNAMICTYPE-146]
_ = x[ODYNAMICTYPE-147] _ = x[OTAILCALL-147]
_ = x[OTAILCALL-148] _ = x[OGETG-148]
_ = x[OGETG-149] _ = x[OGETCALLERPC-149]
_ = x[OGETCALLERPC-150] _ = x[OGETCALLERSP-150]
_ = x[OGETCALLERSP-151] _ = x[OEND-151]
_ = x[OEND-152]
} }
const _Op_name = "XXXNAMENONAMETYPELITERALNILADDSUBORXORADDSTRADDRANDANDAPPENDBYTES2STRBYTES2STRTMPRUNES2STRSTR2BYTESSTR2BYTESTMPSTR2RUNESSLICE2ARRPTRASAS2AS2DOTTYPEAS2FUNCAS2MAPRAS2RECVASOPCALLCALLFUNCCALLMETHCALLINTERCAPCLOSECLOSURECOMPLITMAPLITSTRUCTLITARRAYLITSLICELITPTRLITCONVCONVIFACECONVIDATACONVNOPCOPYDCLDCLFUNCDCLCONSTDCLTYPEDELETEDOTDOTPTRDOTMETHDOTINTERXDOTDOTTYPEDOTTYPE2EQNELTLEGEGTDEREFINDEXINDEXMAPKEYSTRUCTKEYLENMAKEMAKECHANMAKEMAPMAKESLICEMAKESLICECOPYMULDIVMODLSHRSHANDANDNOTNEWNOTBITNOTPLUSNEGORORPANICPRINTPRINTNPARENSENDSLICESLICEARRSLICESTRSLICE3SLICE3ARRSLICEHEADERRECOVERRECOVERFPRECVRUNESTRSELRECV2REALIMAGCOMPLEXALIGNOFOFFSETOFSIZEOFUNSAFEADDUNSAFESLICEMETHEXPRMETHVALUEBLOCKBREAKCASECONTINUEDEFERFALLFORGOTOIFLABELGORANGERETURNSELECTSWITCHTYPESWFUNCINSTINLCALLEFACEITABIDATASPTRCFUNCCHECKNILVARDEFVARKILLVARLIVERESULTINLMARKLINKSYMOFFSETJUMPTABLEDYNAMICDOTTYPEDYNAMICDOTTYPE2DYNAMICTYPETAILCALLGETGGETCALLERPCGETCALLERSPEND" const _Op_name = "XXXNAMENONAMETYPELITERALNILADDSUBORXORADDSTRADDRANDANDAPPENDBYTES2STRBYTES2STRTMPRUNES2STRSTR2BYTESSTR2BYTESTMPSTR2RUNESSLICE2ARRPTRASAS2AS2DOTTYPEAS2FUNCAS2MAPRAS2RECVASOPCALLCALLFUNCCALLMETHCALLINTERCAPCLOSECLOSURECOMPLITMAPLITSTRUCTLITARRAYLITSLICELITPTRLITCONVCONVIFACECONVIDATACONVNOPCOPYDCLDCLFUNCDCLCONSTDCLTYPEDELETEDOTDOTPTRDOTMETHDOTINTERXDOTDOTTYPEDOTTYPE2EQNELTLEGEGTDEREFINDEXINDEXMAPKEYSTRUCTKEYLENMAKEMAKECHANMAKEMAPMAKESLICEMAKESLICECOPYMULDIVMODLSHRSHANDANDNOTNEWNOTBITNOTPLUSNEGORORPANICPRINTPRINTNPARENSENDSLICESLICEARRSLICESTRSLICE3SLICE3ARRSLICEHEADERRECOVERRECOVERFPRECVRUNESTRSELRECV2REALIMAGCOMPLEXALIGNOFOFFSETOFSIZEOFUNSAFEADDUNSAFESLICEMETHEXPRMETHVALUEBLOCKBREAKCASECONTINUEDEFERFALLFORGOTOIFLABELGORANGERETURNSELECTSWITCHTYPESWFUNCINSTINLCALLEFACEITABIDATASPTRCFUNCCHECKNILVARDEFVARLIVERESULTINLMARKLINKSYMOFFSETJUMPTABLEDYNAMICDOTTYPEDYNAMICDOTTYPE2DYNAMICTYPETAILCALLGETGGETCALLERPCGETCALLERSPEND"
var _Op_index = [...]uint16{0, 3, 7, 13, 17, 24, 27, 30, 33, 35, 38, 44, 48, 54, 60, 69, 81, 90, 99, 111, 120, 132, 134, 137, 147, 154, 161, 168, 172, 176, 184, 192, 201, 204, 209, 216, 223, 229, 238, 246, 254, 260, 264, 273, 282, 289, 293, 296, 303, 311, 318, 324, 327, 333, 340, 348, 352, 359, 367, 369, 371, 373, 375, 377, 379, 384, 389, 397, 400, 409, 412, 416, 424, 431, 440, 453, 456, 459, 462, 465, 468, 471, 477, 480, 483, 489, 493, 496, 500, 505, 510, 516, 521, 525, 530, 538, 546, 552, 561, 572, 579, 588, 592, 599, 607, 611, 615, 622, 629, 637, 643, 652, 663, 671, 680, 685, 690, 694, 702, 707, 711, 714, 718, 720, 725, 727, 732, 738, 744, 750, 756, 764, 771, 776, 780, 785, 789, 794, 802, 808, 815, 822, 828, 835, 848, 857, 871, 886, 897, 905, 909, 920, 931, 934} var _Op_index = [...]uint16{0, 3, 7, 13, 17, 24, 27, 30, 33, 35, 38, 44, 48, 54, 60, 69, 81, 90, 99, 111, 120, 132, 134, 137, 147, 154, 161, 168, 172, 176, 184, 192, 201, 204, 209, 216, 223, 229, 238, 246, 254, 260, 264, 273, 282, 289, 293, 296, 303, 311, 318, 324, 327, 333, 340, 348, 352, 359, 367, 369, 371, 373, 375, 377, 379, 384, 389, 397, 400, 409, 412, 416, 424, 431, 440, 453, 456, 459, 462, 465, 468, 471, 477, 480, 483, 489, 493, 496, 500, 505, 510, 516, 521, 525, 530, 538, 546, 552, 561, 572, 579, 588, 592, 599, 607, 611, 615, 622, 629, 637, 643, 652, 663, 671, 680, 685, 690, 694, 702, 707, 711, 714, 718, 720, 725, 727, 732, 738, 744, 750, 756, 764, 771, 776, 780, 785, 789, 794, 802, 808, 815, 821, 828, 841, 850, 864, 879, 890, 898, 902, 913, 924, 927}
func (i Op) String() string { func (i Op) String() string {
if i >= Op(len(_Op_index)-1) { if i >= Op(len(_Op_index)-1) {

View file

@ -1384,8 +1384,8 @@ func (s *state) stmtList(l ir.Nodes) {
// stmt converts the statement n to SSA and adds it to s. // stmt converts the statement n to SSA and adds it to s.
func (s *state) stmt(n ir.Node) { func (s *state) stmt(n ir.Node) {
if !(n.Op() == ir.OVARKILL || n.Op() == ir.OVARLIVE || n.Op() == ir.OVARDEF) { if !(n.Op() == ir.OVARLIVE || n.Op() == ir.OVARDEF) {
// OVARKILL, OVARLIVE, and OVARDEF are invisible to the programmer, so we don't use their line numbers to avoid confusion in debugging. // OVARLIVE and OVARDEF are invisible to the programmer, so we don't use their line numbers to avoid confusion in debugging.
s.pushLine(n.Pos()) s.pushLine(n.Pos())
defer s.popLine() defer s.popLine()
} }

View file

@ -359,7 +359,7 @@ func typecheck(n ir.Node, top int) (res ir.Node) {
case ir.OAPPEND: case ir.OAPPEND:
// Must be used (and not BinaryExpr/UnaryExpr). // Must be used (and not BinaryExpr/UnaryExpr).
isStmt = false isStmt = false
case ir.OCLOSE, ir.ODELETE, ir.OPANIC, ir.OPRINT, ir.OPRINTN, ir.OVARKILL, ir.OVARLIVE: case ir.OCLOSE, ir.ODELETE, ir.OPANIC, ir.OPRINT, ir.OPRINTN, ir.OVARLIVE:
// Must not be used. // Must not be used.
isExpr = false isExpr = false
isStmt = true isStmt = true
@ -750,7 +750,6 @@ func typecheck1(n ir.Node, top int) ir.Node {
ir.ODCL, ir.ODCL,
ir.OGOTO, ir.OGOTO,
ir.OFALL, ir.OFALL,
ir.OVARKILL,
ir.OVARLIVE: ir.OVARLIVE:
return n return n

View file

@ -597,7 +597,7 @@ func (o *orderState) stmt(n ir.Node) {
default: default:
base.Fatalf("order.stmt %v", n.Op()) base.Fatalf("order.stmt %v", n.Op())
case ir.OVARKILL, ir.OVARLIVE, ir.OINLMARK: case ir.OVARLIVE, ir.OINLMARK:
o.out = append(o.out, n) o.out = append(o.out, n)
case ir.OAS: case ir.OAS:

View file

@ -91,7 +91,6 @@ func walkStmt(n ir.Node) ir.Node {
ir.ODCLTYPE, ir.ODCLTYPE,
ir.OCHECKNIL, ir.OCHECKNIL,
ir.OVARDEF, ir.OVARDEF,
ir.OVARKILL,
ir.OVARLIVE: ir.OVARLIVE:
return n return n

View file

@ -372,19 +372,10 @@ func allCaseExprsAreSideEffectFree(sw *ir.SwitchStmt) bool {
// endsInFallthrough reports whether stmts ends with a "fallthrough" statement. // endsInFallthrough reports whether stmts ends with a "fallthrough" statement.
func endsInFallthrough(stmts []ir.Node) (bool, src.XPos) { func endsInFallthrough(stmts []ir.Node) (bool, src.XPos) {
// Search backwards for the index of the fallthrough if len(stmts) == 0 {
// statement. Do not assume it'll be in the last
// position, since in some cases (e.g. when the statement
// list contains autotmp_ variables), one or more OVARKILL
// nodes will be at the end of the list.
i := len(stmts) - 1
for i >= 0 && stmts[i].Op() == ir.OVARKILL {
i--
}
if i < 0 {
return false, src.NoXPos return false, src.NoXPos
} }
i := len(stmts) - 1
return stmts[i].Op() == ir.OFALL, stmts[i].Pos() return stmts[i].Op() == ir.OFALL, stmts[i].Pos()
} }