protected void lowerCompareAndExchangeNode(UnsafeCompareAndExchangeNode cas) { StructuredGraph graph = cas.graph(); JavaKind valueKind = cas.getValueKind(); ValueNode expectedValue = implicitStoreConvert(graph, valueKind, cas.expected()); ValueNode newValue = implicitStoreConvert(graph, valueKind, cas.newValue()); AddressNode address = graph.unique(new OffsetAddressNode(cas.object(), cas.offset())); BarrierType barrierType = guessStoreBarrierType(cas.object(), expectedValue); ValueCompareAndSwapNode atomicNode = graph.add(new ValueCompareAndSwapNode(address, expectedValue, newValue, cas.getLocationIdentity(), barrierType)); ValueNode coercedNode = implicitLoadConvert(graph, valueKind, atomicNode, true); atomicNode.setStateAfter(cas.stateAfter()); cas.replaceAtUsages(coercedNode); graph.replaceFixedWithFixed(cas, atomicNode); }