diff src/share/vm/opto/lcm.cpp @ 14909:4ca6dc0799b6

Backout jdk9 merge
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 01 Apr 2014 13:57:07 +0200
parents cd5d10655495
children 89152779163c
line wrap: on
line diff
--- a/src/share/vm/opto/lcm.cpp	Tue Apr 01 14:09:03 2014 +0200
+++ b/src/share/vm/opto/lcm.cpp	Tue Apr 01 13:57:07 2014 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,52 +45,12 @@
 #ifdef TARGET_ARCH_MODEL_arm
 # include "adfiles/ad_arm.hpp"
 #endif
-#ifdef TARGET_ARCH_MODEL_ppc_32
-# include "adfiles/ad_ppc_32.hpp"
-#endif
-#ifdef TARGET_ARCH_MODEL_ppc_64
-# include "adfiles/ad_ppc_64.hpp"
+#ifdef TARGET_ARCH_MODEL_ppc
+# include "adfiles/ad_ppc.hpp"
 #endif
 
 // Optimization - Graph Style
 
-// Check whether val is not-null-decoded compressed oop,
-// i.e. will grab into the base of the heap if it represents NULL.
-static bool accesses_heap_base_zone(Node *val) {
-  if (Universe::narrow_oop_base() > 0) { // Implies UseCompressedOops.
-    if (val && val->is_Mach()) {
-      if (val->as_Mach()->ideal_Opcode() == Op_DecodeN) {
-        // This assumes all Decodes with TypePtr::NotNull are matched to nodes that
-        // decode NULL to point to the heap base (Decode_NN).
-        if (val->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull) {
-          return true;
-        }
-      }
-      // Must recognize load operation with Decode matched in memory operand.
-      // We should not reach here exept for PPC/AIX, as os::zero_page_read_protected()
-      // returns true everywhere else. On PPC, no such memory operands
-      // exist, therefore we did not yet implement a check for such operands.
-      NOT_AIX(Unimplemented());
-    }
-  }
-  return false;
-}
-
-static bool needs_explicit_null_check_for_read(Node *val) {
-  // On some OSes (AIX) the page at address 0 is only write protected.
-  // If so, only Store operations will trap.
-  if (os::zero_page_read_protected()) {
-    return false;  // Implicit null check will work.
-  }
-  // Also a read accessing the base of a heap-based compressed heap will trap.
-  if (accesses_heap_base_zone(val) &&                    // Hits the base zone page.
-      Universe::narrow_oop_use_implicit_null_checks()) { // Base zone page is protected.
-    return false;
-  }
-
-  return true;
-}
-
 //------------------------------implicit_null_check----------------------------
 // Detect implicit-null-check opportunities.  Basically, find NULL checks
 // with suitable memory ops nearby.  Use the memory op to do the NULL check.
@@ -246,14 +206,6 @@
       }
       break;
     }
-
-    // On some OSes (AIX) the page at address 0 is only write protected.
-    // If so, only Store operations will trap.
-    // But a read accessing the base of a heap-based compressed heap will trap.
-    if (!was_store && needs_explicit_null_check_for_read(val)) {
-      continue;
-    }
-
     // check if the offset is not too high for implicit exception
     {
       intptr_t offset = 0;
@@ -520,6 +472,13 @@
           break;
         }
 
+        // For nodes that produce a FlagsProj, make the node adjacent to the
+        // use of the FlagsProj
+        if (use->is_FlagsProj() && get_block_for_node(use) == block) {
+          found_machif = true;
+          break;
+        }
+
         // More than this instruction pending for successor to be ready,
         // don't choose this if other opportunities are ready
         if (ready_cnt.at(use->_idx) > 1)