From 01a9a4021848aabc4bb68600a89a380a76a33ff1 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Mon, 6 Jul 2026 15:44:00 +0000 Subject: [PATCH] 8387721: C2: Print Node barrier data Reviewed-by: amitkumar, chagedorn --- src/hotspot/share/opto/memnode.cpp | 30 ++++++++++++++++++++++++++---- src/hotspot/share/opto/memnode.hpp | 4 ++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp index 4f68ff281a0..00ccb3e3dbc 100644 --- a/src/hotspot/share/opto/memnode.cpp +++ b/src/hotspot/share/opto/memnode.cpp @@ -86,12 +86,13 @@ bool MemNode::check_if_adr_maybe_raw(Node* adr) { #ifndef PRODUCT void MemNode::dump_spec(outputStream *st) const { - if (in(Address) == nullptr) return; // node is dead + if (in(Address) == nullptr) { + // node is dead + return; + } #ifndef ASSERT // fake the missing field - const TypePtr* _adr_type = nullptr; - if (in(Address) != nullptr) - _adr_type = in(Address)->bottom_type()->isa_ptr(); + const TypePtr* _adr_type = in(Address)->bottom_type()->isa_ptr(); #endif dump_adr_type(_adr_type, st); @@ -108,6 +109,7 @@ void MemNode::dump_spec(outputStream *st) const { if (_unsafe_access) { st->print(" unsafe"); } + st->print(" barrier(0x%x)", _barrier_data); } void MemNode::dump_adr_type(const TypePtr* adr_type, outputStream* st) { @@ -4145,6 +4147,26 @@ MemBarNode* LoadStoreNode::trailing_membar() const { uint LoadStoreNode::size_of() const { return sizeof(*this); } +#ifndef PRODUCT +void LoadStoreNode::dump_spec(outputStream* st) const { + if (in(MemNode::Address) == nullptr) { + // node is dead + return; + } +#ifndef ASSERT + // fake the missing field + const TypePtr* _adr_type = in(MemNode::Address)->bottom_type()->isa_ptr(); +#endif + MemNode::dump_adr_type(_adr_type, st); + + Compile* C = Compile::current(); + if (C->alias_type(_adr_type)->is_volatile()) { + st->print(" Volatile!"); + } + st->print(" barrier(0x%x)", _barrier_data); +} +#endif + //============================================================================= //----------------------------------LoadStoreConditionalNode-------------------- LoadStoreConditionalNode::LoadStoreConditionalNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex ) : LoadStoreNode(c, mem, adr, val, nullptr, TypeInt::BOOL, 5) { diff --git a/src/hotspot/share/opto/memnode.hpp b/src/hotspot/share/opto/memnode.hpp index f3f65608972..77252520324 100644 --- a/src/hotspot/share/opto/memnode.hpp +++ b/src/hotspot/share/opto/memnode.hpp @@ -880,6 +880,10 @@ public: uint8_t barrier_data() { return _barrier_data; } void set_barrier_data(uint8_t barrier_data) { _barrier_data = barrier_data; } +#ifndef PRODUCT + virtual void dump_spec(outputStream *st) const; +#endif + private: virtual bool depends_only_on_test_impl() const { return false; } };