src/share/vm/opto/memnode.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/memnode.hpp	Fri Mar 25 20:28:58 2016
--- new/src/share/vm/opto/memnode.hpp	Fri Mar 25 20:28:57 2016

*** 169,179 **** --- 169,179 ---- // otherwise it wouldn't be safe to have a non pinned LoadNode with // those inputs in the first place. If the graph already has a // pinned LoadNode and we add a non pinned LoadNode with the same // inputs, it's safe (but suboptimal) for GVN to replace the // non-pinned LoadNode by the pinned LoadNode. ! bool _depends_only_on_test; ! ControlDependency _control_dependency; // On platforms with weak memory ordering (e.g., PPC, Ia64) we distinguish // loads that can be reordered, and such requiring acquire semantics to // adhere to the Java specification. The required behaviour is stored in // this field.
*** 188,198 **** --- 188,198 ---- virtual Node* find_previous_arraycopy(PhaseTransform* phase, Node* ld_alloc, Node*& mem, bool can_see_stored_value) const; public: LoadNode(Node *c, Node *mem, Node *adr, const TypePtr* at, const Type *rt, MemOrd mo, ControlDependency control_dependency) ! : MemNode(c,mem,adr,at), _type(rt), _mo(mo), _depends_only_on_test(control_dependency == DependsOnlyOnTest) { ! : MemNode(c,mem,adr,at), _type(rt), _mo(mo), _control_dependency(control_dependency) { init_class_id(Class_Load); } inline bool is_unordered() const { return !is_acquire(); } inline bool is_acquire() const { assert(_mo == unordered || _mo == acquire, "unexpected");
*** 254,263 **** --- 254,266 ---- virtual int store_Opcode() const = 0; // Check if the load's memory input is a Phi node with the same control. bool is_instance_field_load_with_local_phi(Node* ctrl); + Node* convert_to_unsigned_load(PhaseGVN& gvn); + Node* convert_to_signed_load(PhaseGVN& gvn); + #ifndef PRODUCT virtual void dump_spec(outputStream *st) const; #endif #ifdef ASSERT // Helper function to allow a raw load without control edge for some cases
*** 276,286 **** --- 279,291 ---- // a Safepoint instead of the memory edge. (An unfortunate consequence of having // Safepoints not set Raw Memory; itself an unfortunate consequence of having Nodes // which produce results (new raw memory state) inside of loops preventing all // manner of other optimizations). Basically, it's ugly but so is the alternative. // See comment in macro.cpp, around line 125 expand_allocate_common(). - virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM && _depends_only_on_test; } + return adr_type() != TypeRawPtr::BOTTOM && _control_dependency == DependsOnlyOnTest; + } }; //------------------------------LoadBNode-------------------------------------- // Load a byte (8bits signed) from memory class LoadBNode : public LoadNode {

src/share/vm/opto/memnode.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File