mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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:
parent
a10da772a6
commit
e21c1f7896
8 changed files with 22 additions and 35 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue