Mercurial > hg > icedtea8-forest > hotspot
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());