--- old/src/share/vm/compiler/compileBroker.hpp 2015-09-22 16:26:53.193641892 +0200 +++ new/src/share/vm/compiler/compileBroker.hpp 2015-09-22 16:26:53.089641895 +0200 @@ -29,6 +29,7 @@ #include "compiler/abstractCompiler.hpp" #include "compiler/compileTask.hpp" #include "runtime/perfData.hpp" +#include "utilities/stack.hpp" class nmethod; class nmethodLocker; @@ -138,13 +139,29 @@ ~CompileTaskWrapper(); }; +class DirectivesStack : public CHeapObj { +private: + CompilerDirectives* _top; + CompilerDirectives* _bottom; + int _depth; + + void pop_inner(); // no lock version of pop +public: + DirectivesStack(); + DirectiveSet* peak(AbstractCompiler* comp); + void push(CompilerDirectives* directive); + void pop(); + void clear(); + DirectiveSet* getMatchingDirective(methodHandle mh, int comp_level); + void print(outputStream* st); +}; // Compilation // // The broker for all compilation requests. class CompileBroker: AllStatic { friend class Threads; - friend class CompileTaskWrapper; + friend class CompileTaskWrapper; public: enum { @@ -166,6 +183,9 @@ // The installed compiler(s) static AbstractCompiler* _compilers[2]; + // The directives stack + static DirectivesStack* _dirstack; + // These counters are used for assigning id's to each compilation static volatile jint _compilation_id; static volatile jint _osr_compilation_id; @@ -246,7 +266,6 @@ static void set_last_compile(CompilerThread *thread, methodHandle method, bool is_osr, int comp_level); static void push_jni_handle_block(); static void pop_jni_handle_block(); - static bool check_break_at(methodHandle method, int compile_id, bool is_osr); static void collect_statistics(CompilerThread* thread, elapsedTimer time, CompileTask* task); static void compile_method_base(methodHandle method, @@ -261,7 +280,11 @@ static bool init_compiler_runtime(); static void shutdown_compiler_runtime(AbstractCompiler* comp, CompilerThread* thread); - public: +public: + + static DirectivesStack* dirstack(); + static void set_dirstack(DirectivesStack* stack); + enum { // The entry bci used for non-OSR compilations. standard_entry_bci = InvocationEntryBci @@ -275,6 +298,7 @@ static bool compilation_is_in_queue(methodHandle method); static void print_compile_queues(outputStream* st); + static void print_directives(outputStream* st); static int queue_size(int comp_level) { CompileQueue *q = compile_queue(comp_level); return q != NULL ? q->size() : 0;