SUGGESTED FIX
repo: /net/jano2.sfbay/export2/hotspot/hg/hotspot-comp.clean
changeset: 51:daf38130e60d
user: never
date: Tue Mar 18 23:44:46 2008 -0700
description:
6676841: ClearArrayNode::Identity is incorrect for 64-bit
Summary: ClearArrayNode::Identity should use TypeX instead of TypeInt
Reviewed-by: jrose, kvn, sgoldman
files:
src/share/vm/opto/memnode.cpp
|
SUGGESTED FIX
diff -r 6dbf1a175d6b src/share/vm/opto/memnode.cpp
--- a/src/share/vm/opto/memnode.cpp Fri Mar 14 16:40:42 2008 -0700
+++ b/src/share/vm/opto/memnode.cpp Tue Mar 18 11:01:12 2008 -0700
@@ -1881,7 +1881,7 @@ uint ClearArrayNode::match_edge(uint idx
//------------------------------Identity---------------------------------------
// Clearing a zero length array does nothing
Node *ClearArrayNode::Identity( PhaseTransform *phase ) {
- return phase->type(in(2))->higher_equal(TypeInt::ZERO) ? in(1) : this;
+ return phase->type(in(2))->higher_equal(TypeX::ZERO) ? in(1) : this;
}
//------------------------------Idealize---------------------------------------
@@ -1954,6 +1954,11 @@ Node* ClearArrayNode::clear_memory(Node*
Node* start_offset,
Node* end_offset,
PhaseGVN* phase) {
+ if (start_offset == end_offset) {
+ // nothing to do
+ return mem;
+ }
+
Compile* C = phase->C;
int unit = BytesPerLong;
Node* zbase = start_offset;
@@ -1979,6 +1984,11 @@ Node* ClearArrayNode::clear_memory(Node*
intptr_t start_offset,
intptr_t end_offset,
PhaseGVN* phase) {
+ if (start_offset == end_offset) {
+ // nothing to do
+ return mem;
+ }
+
Compile* C = phase->C;
assert((end_offset % BytesPerInt) == 0, "odd end offset");
intptr_t done_offset = end_offset;
|