Mercurial > hg > graal-jvmci-8
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)) { |