changeset 6950:f043f9395d36 preview_rc1

added missing predicates for non-volatile store rules rules storeimmX0 for X in {B, C, I, L, P and N) were added in parallel with the volatile load/store rewrite and so omitted this predicate rule storeN seems to have had te predicate omitted by oversight load_volatileP has been renamed to loadP_volatile for consistency
author adinn
date Thu, 10 Oct 2013 13:23:32 +0100
parents 55c04eeb33b9
children a84cf0dd740c
files src/cpu/aarch64/vm/aarch64.ad
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/aarch64.ad	Thu Oct 10 10:27:01 2013 +0100
+++ b/src/cpu/aarch64/vm/aarch64.ad	Thu Oct 10 13:23:32 2013 +0100
@@ -5125,6 +5125,7 @@
 instruct storeimmB0(immI0 zero, memory mem)
 %{
   match(Set mem (StoreB mem zero));
+  predicate(!((MemNode*)n)->is_volatile());
 
   ins_cost(MEMORY_REF_COST);
   format %{ "strb zr, $mem\t# byte" %}
@@ -5151,6 +5152,7 @@
 instruct storeimmC0(immI0 zero, memory mem)
 %{
   match(Set mem (StoreC mem zero));
+  predicate(!((MemNode*)n)->is_volatile());
 
   ins_cost(MEMORY_REF_COST);
   format %{ "strh  zr, $mem\t# short" %}
@@ -5178,6 +5180,7 @@
 instruct storeimmI0(immI0 zero, memory mem)
 %{
   match(Set mem(StoreI mem zero));
+  predicate(!((MemNode*)n)->is_volatile());
 
   ins_cost(MEMORY_REF_COST);
   format %{ "strw  zr, $mem\t# int" %}
@@ -5205,6 +5208,7 @@
 instruct storeimmL0(immL0 zero, memory mem)
 %{
   match(Set mem (StoreL mem zero));
+  predicate(!((MemNode*)n)->is_volatile());
 
   ins_cost(MEMORY_REF_COST);
   format %{ "str  zr, $mem\t# int" %}
@@ -5232,6 +5236,7 @@
 instruct storeimmP0(immP0 zero, memory mem)
 %{
   match(Set mem (StoreP mem zero));
+  predicate(!((MemNode*)n)->is_volatile());
 
   ins_cost(MEMORY_REF_COST);
   format %{ "str zr, $mem\t# ptr" %}
@@ -5302,8 +5307,10 @@
 
 instruct storeImmN0(iRegIHeapbase heapbase, immN0 zero, memory mem)
 %{
-  predicate(Universe::narrow_oop_base() == NULL && Universe::narrow_klass_base() == NULL);
   match(Set mem (StoreN mem zero));
+  predicate(Universe::narrow_oop_base() == NULL &&
+            Universe::narrow_klass_base() == NULL &&
+            !((MemNode*)n)->is_volatile());
 
   ins_cost(MEMORY_REF_COST_LOW);
   format %{ "strw  rheapbase, $mem\t# compressed ptr (rheapbase==0)" %}
@@ -5316,6 +5323,7 @@
 instruct storeImmN(immN src, memory mem)
 %{
   match(Set mem (StoreN mem src));
+  predicate(!((MemNode*)n)->is_volatile());
 
   ins_cost(MEMORY_REF_COST);
   format %{ "strw  $src, $mem\t# compressed ptr " %}
@@ -5575,7 +5583,7 @@
 %}
 
 // Load Pointer
-instruct load_volatileP(iRegPNoSp dst, memory mem)
+instruct loadP_volatile(iRegPNoSp dst, memory mem)
 %{
   match(Set dst (LoadP mem));
   predicate(((MemNode*)n)->is_volatile());