< prev index next >

src/hotspot/share/c1/c1_LIRGenerator.cpp

Print this page
rev 51408 : [mq]: cleanup-c1.patch

@@ -244,26 +244,18 @@
 }
 
 void LIRItem::load_item_force(LIR_Opr reg) {
   LIR_Opr r = result();
   if (r != reg) {
-    _result = _gen->force_opr_to(r, reg);
-  }
-}
-
-LIR_Opr LIRGenerator::force_opr_to(LIR_Opr op, LIR_Opr reg) {
-  if (op != reg) {
 #if !defined(ARM) && !defined(E500V2)
-    if (op->type() != reg->type()) {
+    if (r->type() != reg->type()) {
       // moves between different types need an intervening spill slot
-      op = force_to_spill(op, reg->type());
+      r = _gen->force_to_spill(r, reg->type());
     }
 #endif
-    __ move(op, reg);
-    return reg;
-  } else {
-    return op;
+    __ move(r, reg);
+    _result = reg;
   }
 }
 
 ciObject* LIRItem::get_jobject_constant() const {
   ObjectType* oc = type()->as_ObjectType();

@@ -1532,19 +1524,17 @@
     tty->print_cr("   ###class not loaded at store_%s bci %d",
                   x->is_static() ?  "static" : "field", x->printable_bci());
   }
 #endif
 
-  LIR_Opr obj = object.result();
-
   if (x->needs_null_check() &&
       (needs_patching ||
        MacroAssembler::needs_explicit_null_check(x->offset()))) {
     // Emit an explicit null check because the offset is too large.
     // If the class is not loaded and the object is NULL, we need to deoptimize to throw a
     // NoClassDefFoundError in the interpreter instead of an implicit NPE from compiled code.
-    __ null_check(obj, new CodeEmitInfo(info), /* deoptimize */ needs_patching);
+    __ null_check(object.result(), new CodeEmitInfo(info), /* deoptimize */ needs_patching);
   }
 
   DecoratorSet decorators = IN_HEAP;
   if (is_volatile) {
     decorators |= MO_SEQ_CST;

@@ -1650,11 +1640,10 @@
   // Atomic operations are SEQ_CST by default
   decorators |= C1_READ_ACCESS;
   decorators |= C1_WRITE_ACCESS;
   decorators |= ((decorators & MO_DECORATOR_MASK) != 0) ? MO_SEQ_CST : 0;
   LIRAccess access(this, decorators, base, offset, type);
-  new_value.load_item();
   if (access.is_raw()) {
     return _barrier_set->BarrierSetC1::atomic_cmpxchg_at(access, cmp_value, new_value);
   } else {
     return _barrier_set->atomic_cmpxchg_at(access, cmp_value, new_value);
   }

@@ -1727,16 +1716,16 @@
     tty->print_cr("   ###class not loaded at load_%s bci %d",
                   x->is_static() ?  "static" : "field", x->printable_bci());
   }
 #endif
 
-  LIR_Opr obj = object.result();
   bool stress_deopt = StressLoopInvariantCodeMotion && info && info->deoptimize_on_exception();
   if (x->needs_null_check() &&
       (needs_patching ||
        MacroAssembler::needs_explicit_null_check(x->offset()) ||
        stress_deopt)) {
+    LIR_Opr obj = object.result();
     if (stress_deopt) {
       obj = new_register(T_OBJECT);
       __ move(LIR_OprFact::oopConst(NULL), obj);
     }
     // Emit an explicit null check because the offset is too large.

@@ -2687,11 +2676,10 @@
     if (method()->is_synchronized() && GenerateSynchronizationCode) {
       LIR_Opr lock = syncLockOpr();
       __ load_stack_address_monitor(0, lock);
 
       CodeEmitInfo* info = new CodeEmitInfo(scope()->start()->state()->copy(ValueStack::StateBefore, SynchronizationEntryBCI), NULL, x->check_flag(Instruction::DeoptimizeOnException));
-      obj = access_resolve_for_write(IN_HEAP | IS_NOT_NULL, obj, info);
       CodeStub* slow_path = new MonitorEnterStub(obj, lock, info);
 
       // receiver is guaranteed non-NULL so don't need CodeEmitInfo
       __ lock_object(syncTempOpr(), obj, lock, new_register(T_OBJECT), slow_path, NULL);
     }
< prev index next >