@@ -57,7 +57,6 @@ import capture::{cap_move, cap_drop, cap_copy, cap_ref};
5757
5858export check_crate;
5959export last_use_map;
60- export spill_map;
6160
6261// Maps from an expr id to a list of variable ids for which this expr
6362// is the last use. Typically, the expr is a path and the node id is
@@ -66,13 +65,6 @@ export spill_map;
6665// list of closed over variables that can be moved into the closure.
6766type last_use_map = hashmap < node_id , @dvec < node_id > > ;
6867
69- // A set of variable ids which must be spilled (stored on the stack).
70- // We add in any variables or arguments where:
71- // (1) the variables are moved;
72- // (2) the address of the variable/argument is taken;
73- // or (3) we find a last use (as they may be moved).
74- type spill_map = hashmap < node_id , ( ) > ;
75-
7668enum variable = uint;
7769enum live_node = uint;
7870
@@ -85,7 +77,7 @@ enum live_node_kind {
8577
8678fn check_crate ( tcx : ty:: ctxt ,
8779 method_map : typeck:: method_map ,
88- crate : @crate ) -> ( last_use_map , spill_map ) {
80+ crate : @crate ) -> last_use_map {
8981 let visitor = visit:: mk_vt ( @{
9082 visit_fn: visit_fn,
9183 visit_local: visit_local,
@@ -94,12 +86,11 @@ fn check_crate(tcx: ty::ctxt,
9486 } ) ;
9587
9688 let last_use_map = int_hash ( ) ;
97- let spill_map = int_hash ( ) ;
9889 let initial_maps = @ir_maps ( tcx, method_map,
99- last_use_map, spill_map ) ;
90+ last_use_map) ;
10091 visit:: visit_crate ( * crate , initial_maps, visitor) ;
10192 tcx. sess . abort_if_errors ( ) ;
102- ret ( last_use_map, spill_map ) ;
93+ ret last_use_map;
10394}
10495
10596impl of to_str:: to_str for live_node {
@@ -162,7 +153,6 @@ class ir_maps {
162153 let tcx: ty:: ctxt;
163154 let method_map: typeck:: method_map ;
164155 let last_use_map: last_use_map ;
165- let spill_map: spill_map ;
166156
167157 let mut num_live_nodes: uint ;
168158 let mut num_vars: uint ;
@@ -174,11 +164,10 @@ class ir_maps {
174164 let mut lnks: [ live_node_kind ] ;
175165
176166 new ( tcx: ty:: ctxt, method_map: typeck:: method_map,
177- last_use_map: last_use_map, spill_map : spill_map ) {
167+ last_use_map: last_use_map) {
178168 self . tcx = tcx;
179169 self . method_map = method_map;
180170 self . last_use_map = last_use_map;
181- self . spill_map = spill_map;
182171
183172 self . num_live_nodes = 0 u;
184173 self . num_vars = 0 u;
@@ -264,17 +253,6 @@ class ir_maps {
264253 self . lnks [ * ln]
265254 }
266255
267- fn add_spill ( var : variable ) {
268- let vk = self . var_kinds [ * var] ;
269- alt vk {
270- vk_local( id, _) | vk_arg ( id, _, by_val) {
271- #debug[ "adding spill for %?" , vk] ;
272- self . spill_map . insert ( id, ( ) ) ;
273- }
274- vk_arg ( * ) | vk_field ( _) | vk_self | vk_implicit_ret { }
275- }
276- }
277-
278256 fn add_last_use ( expr_id : node_id , var : variable ) {
279257 let vk = self . var_kinds [ * var] ;
280258 #debug[ "Node %d is a last use of variable %?" , expr_id, vk] ;
@@ -308,7 +286,7 @@ fn visit_fn(fk: visit::fn_kind, decl: fn_decl, body: blk,
308286
309287 // swap in a new set of IR maps for this function body:
310288 let fn_maps = @ir_maps ( self . tcx , self . method_map ,
311- self . last_use_map , self . spill_map ) ;
289+ self . last_use_map ) ;
312290
313291 #debug[ "creating fn_maps: %x" , ptr:: addr_of ( * fn_maps) as uint ] ;
314292
@@ -1407,11 +1385,7 @@ fn check_expr(expr: @expr, &&self: @liveness, vt: vt<@liveness>) {
14071385 vt. visit_expr( f, self , vt) ;
14081386 vec:: iter2( args, targs) { |arg_expr, arg_ty|
14091387 alt ty:: resolved_mode( self . tcx, arg_ty. mode) {
1410- by_val | by_copy {
1411- vt. visit_expr( arg_expr, self, vt) ;
1412- }
1413- by_ref | by_mutbl_ref {
1414- self. spill_expr( arg_expr) ;
1388+ by_val | by_copy | by_ref | by_mutbl_ref {
14151389 vt. visit_expr( arg_expr, self, vt) ;
14161390 }
14171391 by_move {
@@ -1421,10 +1395,6 @@ fn check_expr(expr: @expr, &&self: @liveness, vt: vt<@liveness>) {
14211395 }
14221396 }
14231397
1424- expr_addr_of( _, arg_expr) {
1425- self . spill_expr( arg_expr) ;
1426- }
1427-
14281398 // no correctness conditions related to liveness
14291399 expr_if_check( * ) | expr_if( * ) | expr_alt( * ) |
14301400 expr_while( * ) | expr_loop( * ) |
@@ -1434,7 +1404,7 @@ fn check_expr(expr: @expr, &&self: @liveness, vt: vt<@liveness>) {
14341404 expr_assert( * ) | expr_check( * ) | expr_copy( * ) |
14351405 expr_loop_body( * ) | expr_cast( * ) | expr_unary( * ) | expr_fail( * ) |
14361406 expr_ret( * ) | expr_break | expr_cont | expr_lit( _) |
1437- expr_block( * ) | expr_swap( * ) | expr_mac( * ) {
1407+ expr_block( * ) | expr_swap( * ) | expr_mac( * ) | expr_addr_of ( * ) {
14381408 visit:: visit_expr( expr, self , vt) ;
14391409 }
14401410 }
@@ -1501,10 +1471,7 @@ impl check_methods for @liveness {
15011471 ln. to_str( ) , var. to_str( ) ] ;
15021472
15031473 alt ( * self ) . live_on_exit( ln, var) {
1504- none {
1505- // update spill map to include this variable, as it is moved:
1506- ( * self . ir) . add_spill( var) ;
1507- }
1474+ none { }
15081475 some( lnk) {
15091476 self . report_illegal_move( span, lnk, var) ;
15101477 }
@@ -1516,20 +1483,10 @@ impl check_methods for @liveness {
15161483 some( _) { }
15171484 none {
15181485 ( * self . ir) . add_last_use( expr. id, var) ;
1519-
1520- // update spill map to include this variable, as it may be moved:
1521- ( * self . ir) . add_spill( var) ;
15221486 }
15231487 }
15241488 }
15251489
1526- fn spill_expr( expr: @expr) {
1527- alt ( * self ) . variable_from_path( expr) {
1528- some( var) { ( * self . ir) . add_spill( var) }
1529- none { }
1530- }
1531- }
1532-
15331490 fn check_move_from_expr( expr: @expr, vt: vt < @liveness > ) {
15341491 #debug[ "check_move_from_expr(node %d: %s)" ,
15351492 expr. id, expr_to_str( expr) ] ;
@@ -1775,4 +1732,4 @@ impl check_methods for @liveness {
17751732 }
17761733 }
17771734 }
1778- }
1735+ }
0 commit comments