Similar to #10873 but about GT_ADDR nodes. Like GT_ASG nodes, GT_ADDR nodes have one fundamental issue: they change the semantics of their operand nodes.
A GT_LCL_VAR that is used by GT_ADDR is no longer a node that produces a value, it's a node that represents a location. It also affects GT_FIELD so you can have a chain like GT_FIELD(GT_ADDR(GT_FIELD(GT_ADDR(GT_FIELD(…))))) where the outer GT_FIELD is an indirection that produces a value while the inner ones just represent locations.
This approach results in various code complications, inefficiencies and bugs.
category:implementation
theme:ir
skill-level:expert
cost:extra-large
Similar to #10873 but about
GT_ADDRnodes. LikeGT_ASGnodes,GT_ADDRnodes have one fundamental issue: they change the semantics of their operand nodes.A
GT_LCL_VARthat is used byGT_ADDRis no longer a node that produces a value, it's a node that represents a location. It also affectsGT_FIELDso you can have a chain likeGT_FIELD(GT_ADDR(GT_FIELD(GT_ADDR(GT_FIELD(…)))))where the outerGT_FIELDis an indirection that produces a value while the inner ones just represent locations.This approach results in various code complications, inefficiencies and bugs.
category:implementation
theme:ir
skill-level:expert
cost:extra-large