|
1 | 1 | /* |
2 | | - * Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 1998, 2021, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 | 4 | * |
5 | 5 | * This code is free software; you can redistribute it and/or modify it |
@@ -1638,6 +1638,16 @@ bool PhaseIdealLoop::is_counted_loop(Node* x, IdealLoopTree*&loop, BasicType iv_ |
1638 | 1638 | Node* sfpt = sfpt2->clone(); |
1639 | 1639 | sfpt->set_req(0, iffalse); |
1640 | 1640 | outer_le->set_req(0, sfpt); |
| 1641 | + |
| 1642 | + Node* polladdr = sfpt->in(TypeFunc::Parms); |
| 1643 | + if (polladdr != nullptr && polladdr->is_Load()) { |
| 1644 | + // Polling load should be pinned outside inner loop. |
| 1645 | + Node* new_polladdr = polladdr->clone(); |
| 1646 | + new_polladdr->set_req(0, iffalse); |
| 1647 | + _igvn.register_new_node_with_optimizer(new_polladdr, polladdr); |
| 1648 | + set_ctrl(new_polladdr, iffalse); |
| 1649 | + sfpt->set_req(TypeFunc::Parms, new_polladdr); |
| 1650 | + } |
1641 | 1651 | // When this code runs, loop bodies have not yet been populated. |
1642 | 1652 | const bool body_populated = false; |
1643 | 1653 | register_control(sfpt, outer_ilt, iffalse, body_populated); |
|
0 commit comments