< prev index next >

src/hotspot/share/gc/shared/c2/barrierSetC2.cpp

Print this page
*** 127,10 ***
--- 127,16 ---
      _preserve.remove(OptoReg::as_OptoReg(vm_reg));
      vm_reg = vm_reg->next();
    } while (vm_reg->is_Register() && !vm_reg->is_concrete());
  }
  
+ bool BarrierStubC2::is_preserved(Register r) {
+   const VMReg vm_reg = r->as_VMReg();
+   assert(vm_reg->is_Register(), "r must be a general-purpose register");
+   return _preserve.member(OptoReg::as_OptoReg(vm_reg));
+ }
+ 
  const RegMask& BarrierStubC2::preserve_set() const {
    return _preserve;
  }
  
  Node* BarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue& val) const {

*** 1109,11 ***
        const uint mem_index = block_index(mem_block, mem);
  
        if (access_block == mem_block) {
          // Earlier accesses in the same block
          if (mem_index < access_index && !block_has_safepoint(mem_block, mem_index + 1, access_index)) {
!           elide_dominated_barrier(access);
          }
        } else if (mem_block->dominates(access_block)) {
          // Dominating block? Look around for safepoints
          ResourceMark rm;
          Block_List stack;
--- 1115,11 ---
        const uint mem_index = block_index(mem_block, mem);
  
        if (access_block == mem_block) {
          // Earlier accesses in the same block
          if (mem_index < access_index && !block_has_safepoint(mem_block, mem_index + 1, access_index)) {
!           elide_dominated_barrier(access, mem->is_Mach() ? mem->as_Mach() : nullptr);
          }
        } else if (mem_block->dominates(access_block)) {
          // Dominating block? Look around for safepoints
          ResourceMark rm;
          Block_List stack;

*** 1139,11 ***
              stack.push(pred);
            }
          }
  
          if (!safepoint_found) {
!           elide_dominated_barrier(access);
          }
        }
      }
    }
  }
--- 1145,11 ---
              stack.push(pred);
            }
          }
  
          if (!safepoint_found) {
!           elide_dominated_barrier(access, mem->is_Mach() ? mem->as_Mach() : nullptr);
          }
        }
      }
    }
  }
< prev index next >