< prev index next >

src/hotspot/share/opto/matcher.cpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 42,51 **** --- 42,54 ---- #include "runtime/sharedRuntime.hpp" #include "utilities/align.hpp" #if INCLUDE_ZGC #include "gc/z/zBarrierSetRuntime.hpp" #endif // INCLUDE_ZGC + #if INCLUDE_SHENANDOAHGC + #include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp" + #endif OptoReg::Name OptoReg::c_frame_pointer; const RegMask *Matcher::idealreg2regmask[_last_machine_leaf]; RegMask Matcher::mreg2regmask[_last_Mach_Reg];
*** 1000,1009 **** --- 1003,1015 ---- // Calls match special. They match alone with no children. // Their children, the incoming arguments, match normally. m = n->is_SafePoint() ? match_sfpt(n->as_SafePoint()):match_tree(n); if (C->failing()) return NULL; if (m == NULL) { Matcher::soft_match_failure(); return NULL; } + if (n->is_MemBar()) { + m->as_MachMemBar()->set_adr_type(n->adr_type()); + } } else { // Nothing the matcher cares about if (n->is_Proj() && n->in(0) != NULL && n->in(0)->is_Multi()) { // Projections? // Convert to machine-dependent projection m = n->in(0)->as_Multi()->match( n->as_Proj(), this ); #ifdef ASSERT
*** 2152,2161 **** --- 2158,2176 ---- break; case Op_ClearArray: case Op_SafePoint: mem_op = true; break; + #if INCLUDE_SHENANDOAHGC + case Op_ShenandoahReadBarrier: + if (n->in(ShenandoahBarrierNode::ValueIn)->is_DecodeNarrowPtr()) { + set_shared(n->in(ShenandoahBarrierNode::ValueIn)->in(1)); + } + mem_op = true; + set_shared(n); + break; + #endif #if INCLUDE_ZGC case Op_CallLeaf: if (UseZGC) { if (n->as_Call()->entry_point() == ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded_addr() || n->as_Call()->entry_point() == ZBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded_addr()) {
< prev index next >