src/hotspot/share/opto/loopopts.cpp
changeset 48595 5d699d81c10c
parent 48309 1a0499fd252e
child 48603 e5da6c246176
equal deleted inserted replaced
48594:4e4929530412 48595:5d699d81c10c
     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) {