equal
deleted
inserted
replaced
1 /* |
1 /* |
2 * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
237 if (iff->outcnt() != 2) return; |
237 if (iff->outcnt() != 2) return; |
238 |
238 |
239 // Make control-dependent data Nodes on the live path (path that will remain |
239 // Make control-dependent data Nodes on the live path (path that will remain |
240 // once the dominated IF is removed) become control-dependent on the |
240 // once the dominated IF is removed) become control-dependent on the |
241 // dominating projection. |
241 // dominating projection. |
242 Node* dp = iff->as_If()->proj_out(pop == Op_IfTrue); |
242 Node* dp = iff->as_If()->proj_out_or_null(pop == Op_IfTrue); |
243 |
243 |
244 // Loop predicates may have depending checks which should not |
244 // Loop predicates may have depending checks which should not |
245 // be skipped. For example, range check predicate has two checks |
245 // be skipped. For example, range check predicate has two checks |
246 // for lower and upper bounds. |
246 // for lower and upper bounds. |
247 if (dp == NULL) |
247 if (dp == NULL) |
1954 |
1954 |
1955 Node* newuse = NULL; |
1955 Node* newuse = NULL; |
1956 if (head->is_strip_mined() && mode != IgnoreStripMined) { |
1956 if (head->is_strip_mined() && mode != IgnoreStripMined) { |
1957 CountedLoopNode* cl = head->as_CountedLoop(); |
1957 CountedLoopNode* cl = head->as_CountedLoop(); |
1958 CountedLoopEndNode* cle = cl->loopexit(); |
1958 CountedLoopEndNode* cle = cl->loopexit(); |
1959 Node* cle_out = cle->proj_out(false); |
1959 Node* cle_out = cle->proj_out_or_null(false); |
1960 if (use == cle_out) { |
1960 if (use == cle_out) { |
1961 IfNode* le = cl->outer_loop_end(); |
1961 IfNode* le = cl->outer_loop_end(); |
1962 use = le->proj_out(false); |
1962 use = le->proj_out(false); |
1963 use_loop = get_loop(use); |
1963 use_loop = get_loop(use); |
1964 if (mode == CloneIncludesStripMined) { |
1964 if (mode == CloneIncludesStripMined) { |