From: David Malcolm Date: Mon, 1 Dec 2014 17:56:34 +0000 (+0000) Subject: jit-playback: Move argv-creation to its own function X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8f50ee3cbed51591b9297c804a86b9c278bb04ec;p=gcc.git jit-playback: Move argv-creation to its own function gcc/jit/ChangeLog: * jit-playback.c (gcc::jit::playback::context::compile): Use an auto_vec rather than a const char *[20] for the top-level argv, and move the logic to build it to... (gcc::jit::playback::context::make_fake_args): New function. * jit-playback.h (gcc::jit::playback::context::make_fake_args): New function. From-SVN: r218237 --- diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index 455ba59d81c..5035693e1bf 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,12 @@ +2014-12-01 David Malcolm + + * jit-playback.c (gcc::jit::playback::context::compile): Use an + auto_vec rather than a const char *[20] for the + top-level argv, and move the logic to build it to... + (gcc::jit::playback::context::make_fake_args): New function. + * jit-playback.h (gcc::jit::playback::context::make_fake_args): + New function. + 2014-12-01 David Malcolm * Make-lang.in (jit_OBJS): Add jit/jit-result.o. diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c index cd124eb1b84..b12584ec749 100644 --- a/gcc/jit/jit-playback.c +++ b/gcc/jit/jit-playback.c @@ -1548,8 +1548,6 @@ compile () void *handle = NULL; const char *ctxt_progname; result *result_obj = NULL; - const char *fake_args[20]; - unsigned int num_args; m_path_template = make_tempdir_path_template (); if (!m_path_template) @@ -1576,77 +1574,14 @@ compile () if (!ctxt_progname) ctxt_progname = "libgccjit.so"; - fake_args[0] = ctxt_progname; - fake_args[1] = m_path_c_file; - num_args = 2; - -#define ADD_ARG(arg) \ - do \ - { \ - gcc_assert(num_args < sizeof(fake_args)/sizeof(char*)); \ - fake_args[num_args++] = arg; \ - } \ - while (0) - - ADD_ARG ("-fPIC"); - - /* Handle int options: */ - switch (get_int_option (GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL)) - { - default: - add_error (NULL, - "unrecognized optimization level: %i", - get_int_option (GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL)); - return NULL; - - case 0: - ADD_ARG ("-O0"); - break; - - case 1: - ADD_ARG ("-O1"); - break; - - case 2: - ADD_ARG ("-O2"); - break; - - case 3: - ADD_ARG ("-O3"); - break; - } - /* What about -Os? */ - - /* Handle bool options: */ - if (get_bool_option (GCC_JIT_BOOL_OPTION_DEBUGINFO)) - ADD_ARG ("-g"); - - /* Suppress timing (and other) info. */ - if (!get_bool_option (GCC_JIT_BOOL_OPTION_DUMP_SUMMARY)) - { - ADD_ARG ("-quiet"); - quiet_flag = 1; - } - - /* Aggressively garbage-collect, to shake out bugs: */ - if (get_bool_option (GCC_JIT_BOOL_OPTION_SELFCHECK_GC)) - { - ADD_ARG ("--param"); - ADD_ARG ("ggc-min-expand=0"); - ADD_ARG ("--param"); - ADD_ARG ("ggc-min-heapsize=0"); - } - - if (get_bool_option (GCC_JIT_BOOL_OPTION_DUMP_EVERYTHING)) - { - ADD_ARG ("-fdump-tree-all"); - ADD_ARG ("-fdump-rtl-all"); - ADD_ARG ("-fdump-ipa-all"); - } + auto_vec fake_args; + make_fake_args (&fake_args, ctxt_progname); + if (errors_occurred ()) + return NULL; toplev toplev (false); - - toplev.main (num_args, const_cast (fake_args)); + toplev.main (fake_args.length (), + const_cast (fake_args.address ())); toplev.finalize (); active_playback_ctxt = NULL; @@ -1750,6 +1685,78 @@ compile () return result_obj; } +/* Helper functions for gcc::jit::playback::context::compile. */ + +/* Build a fake argv for toplev::main from the options set + by the user on the context . */ + +void +playback::context:: +make_fake_args (auto_vec *argvec, + const char *ctxt_progname) +{ +#define ADD_ARG(arg) argvec->safe_push (arg) + + ADD_ARG (ctxt_progname); + ADD_ARG (m_path_c_file); + ADD_ARG ("-fPIC"); + + /* Handle int options: */ + switch (get_int_option (GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL)) + { + default: + add_error (NULL, + "unrecognized optimization level: %i", + get_int_option (GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL)); + return; + + case 0: + ADD_ARG ("-O0"); + break; + + case 1: + ADD_ARG ("-O1"); + break; + + case 2: + ADD_ARG ("-O2"); + break; + + case 3: + ADD_ARG ("-O3"); + break; + } + /* What about -Os? */ + + /* Handle bool options: */ + if (get_bool_option (GCC_JIT_BOOL_OPTION_DEBUGINFO)) + ADD_ARG ("-g"); + + /* Suppress timing (and other) info. */ + if (!get_bool_option (GCC_JIT_BOOL_OPTION_DUMP_SUMMARY)) + { + ADD_ARG ("-quiet"); + quiet_flag = 1; + } + + /* Aggressively garbage-collect, to shake out bugs: */ + if (get_bool_option (GCC_JIT_BOOL_OPTION_SELFCHECK_GC)) + { + ADD_ARG ("--param"); + ADD_ARG ("ggc-min-expand=0"); + ADD_ARG ("--param"); + ADD_ARG ("ggc-min-heapsize=0"); + } + + if (get_bool_option (GCC_JIT_BOOL_OPTION_DUMP_EVERYTHING)) + { + ADD_ARG ("-fdump-tree-all"); + ADD_ARG ("-fdump-rtl-all"); + ADD_ARG ("-fdump-ipa-all"); + } +#undef ADD_ARG +} + /* Top-level hook for playing back a recording context. This plays back m_recording_ctxt, and, if no errors diff --git a/gcc/jit/jit-playback.h b/gcc/jit/jit-playback.h index 30e9229e093..5ffc8690a89 100644 --- a/gcc/jit/jit-playback.h +++ b/gcc/jit/jit-playback.h @@ -226,6 +226,14 @@ private: void handle_locations (); +private: + + /* Functions for implementing "compile". */ + + void + make_fake_args (auto_vec *argvec, + const char *ctxt_progname); + private: ::gcc::jit::recording::context *m_recording_ctxt;