< prev index next >

src/share/vm/c1/c1_Canonicalizer.cpp

Print this page

        

@@ -948,10 +948,21 @@
   int          log2_scale;
 
   if (match(x, &base, &index, &log2_scale)) {
     x->set_base(base);
     x->set_index(index);
+    if (index != NULL) {
+      // If index is pinned, do not scale again
+      if (index->is_pinned()) {
+        log2_scale = 0;
+      } else {
+        // If there is a scale, pin the index so it won't be scaled again
+        if (log2_scale != 0) {
+          index->pin();
+        }
+      } 
+    }
     x->set_log2_scale(log2_scale);
     if (PrintUnsafeOptimization) {
       tty->print_cr("Canonicalizer: UnsafeRawOp id %d: base = id %d, index = id %d, log2_scale = %d",
                     x->id(), x->base()->id(), x->index()->id(), x->log2_scale());
     }
< prev index next >