comparison src/share/vm/opto/loopPredicate.cpp @ 23055:c1c199dde5c9

8077504: Unsafe load can loose control dependency and cause crash Summary: Node::depends_only_on_test() should return false for Unsafe loads Reviewed-by: kvn, adinn
author roland
date Wed, 03 Jun 2015 14:22:57 +0200
parents 78bbf4d43a14
children dd9cc155639c 37ba410ffd43
comparison
equal deleted inserted replaced
23054:55d07ec5bde4 23055:c1c199dde5c9
436 all_inputs_invariant = false; 436 all_inputs_invariant = false;
437 break; 437 break;
438 } 438 }
439 } 439 }
440 if (all_inputs_invariant) { 440 if (all_inputs_invariant) {
441 _invariant.set(n->_idx); // I am a invariant too 441 // If n's control is a predicate that was moved out of the
442 // loop, it was marked invariant but n is only invariant if
443 // it depends only on that test. Otherwise, unless that test
444 // is out of the loop, it's not invariant.
445 if (n->is_CFG() || n->depends_only_on_test() || n->in(0) == NULL || !_phase->is_member(_lpt, n->in(0))) {
446 _invariant.set(n->_idx); // I am a invariant too
447 }
442 } 448 }
443 } else { // process next input 449 } else { // process next input
444 _stack.set_index(idx + 1); 450 _stack.set_index(idx + 1);
445 Node* m = n->in(idx); 451 Node* m = n->in(idx);
446 if (m != NULL && !_visited.test_set(m->_idx)) { 452 if (m != NULL && !_visited.test_set(m->_idx)) {