--- old/src/share/vm/compiler/compileBroker.hpp 2015-09-25 16:23:21.874913915 +0200 +++ new/src/share/vm/compiler/compileBroker.hpp 2015-09-25 16:23:21.782913919 +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,31 @@ ~CompileTaskWrapper(); }; +class DirectivesStack : AllStatic { //public CHeapObj { +private: + static CompilerDirectives* _top; + static CompilerDirectives* _bottom; + static int _depth; + + static void pop_inner(); // no lock version of pop +public: + static void init(); + static DirectiveSet* getDefaultDirective(AbstractCompiler* comp); + static void push(CompilerDirectives* directive); + static void pop(); + static void clear(); + static DirectiveSet* getMatchingDirective(methodHandle mh, AbstractCompiler* comp); + static void print(outputStream* st); + static void release(DirectiveSet* set); + static void release(CompilerDirectives* dir); +}; // Compilation // // The broker for all compilation requests. class CompileBroker: AllStatic { friend class Threads; - friend class CompileTaskWrapper; + friend class CompileTaskWrapper; public: enum { @@ -246,7 +265,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 +279,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 +297,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;