comparison src/share/vm/opto/loopopts.cpp @ 850:fd50a67f97d1

6860469: remix_address_expressions sets incorrect control causing crash in split_if_with_block_post Reviewed-by: never, kvn Contributed-by: yamauchi@google.com, rasbold@google.com
author never
date Wed, 15 Jul 2009 13:37:35 -0700
parents 0f2d888530e7
children 18f526145aea
comparison
equal deleted inserted replaced
849:83906a156fc0 850:fd50a67f97d1
344 if( n_loop == add_invar_loop || !add_invar_loop->is_member( n_loop ) ) 344 if( n_loop == add_invar_loop || !add_invar_loop->is_member( n_loop ) )
345 return NULL; // No invariant part of the add? 345 return NULL; // No invariant part of the add?
346 346
347 // Yes! Reshape address expression! 347 // Yes! Reshape address expression!
348 Node *inv_scale = new (C, 3) LShiftINode( add_invar, scale ); 348 Node *inv_scale = new (C, 3) LShiftINode( add_invar, scale );
349 register_new_node( inv_scale, add_invar_ctrl ); 349 Node *inv_scale_ctrl =
350 dom_depth(add_invar_ctrl) > dom_depth(scale_ctrl) ?
351 add_invar_ctrl : scale_ctrl;
352 register_new_node( inv_scale, inv_scale_ctrl );
350 Node *var_scale = new (C, 3) LShiftINode( add_var, scale ); 353 Node *var_scale = new (C, 3) LShiftINode( add_var, scale );
351 register_new_node( var_scale, n_ctrl ); 354 register_new_node( var_scale, n_ctrl );
352 Node *var_add = new (C, 3) AddINode( var_scale, inv_scale ); 355 Node *var_add = new (C, 3) AddINode( var_scale, inv_scale );
353 register_new_node( var_add, n_ctrl ); 356 register_new_node( var_add, n_ctrl );
354 _igvn.hash_delete( n ); 357 _igvn.hash_delete( n );