On Wed, May 4, 2016 at 8:41 AM, Prasad Ghangal <prasad.ghan...@gmail.com> wrote: > Hi ! > Currently I am trying to introduce new command line option -fgimple, > for that I am adding this to c.opt > > diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt > index 4f86876..88e55c6 100644 > --- a/gcc/c-family/c.opt > +++ b/gcc/c-family/c.opt > @@ -66,6 +66,10 @@ C ObjC C++ ObjC++ Separate Alias(d) > -dump= > C ObjC C++ ObjC++ Joined Alias(d) > > +fgimple > +C Var(flag_gimple) Init(0) > +Enable parsing GIMPLE > + > -imacros > C ObjC C++ ObjC++ Separate Alias(imacros) MissingArgError(missing > filename after %qs) > > > But I am getting error as - "gcc: error: unrecognized command line > option ‘-fgimple ’; did you mean ‘-fgimple ’?" > > I am unable to find where to handle it.
Did you properly re-build gcc after that change? It should work just fine. Richard. > > > Till now I am able to JUST parse __GIMPLE keyword > > diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c > index cae2faf..1ccb4d6 100644 > --- a/gcc/c-family/c-common.c > +++ b/gcc/c-family/c-common.c > @@ -468,6 +468,7 @@ const struct c_common_resword c_common_reswords[] = > { "__extension__", RID_EXTENSION, 0 }, > { "__func__", RID_C99_FUNCTION_NAME, 0 }, > { "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY }, > + { "__GIMPLE", RID_GIMPLE, 0 }, > { "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY }, > { "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY }, > { "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY }, > @@ -12393,6 +12394,7 @@ keyword_is_function_specifier (enum rid keyword) > case RID_NORETURN: > case RID_VIRTUAL: > case RID_EXPLICIT: > + case RID_GIMPLE: > return true; > default: > return false; > diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h > index 663e457..a91665f 100644 > --- a/gcc/c-family/c-common.h > +++ b/gcc/c-family/c-common.h > @@ -64,10 +64,10 @@ enum rid > /* Modifiers: */ > /* C, in empirical order of frequency. */ > RID_STATIC = 0, > - RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN, > - RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE, > - RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT, > - RID_NORETURN, RID_ATOMIC, > + RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN, > + RID_GIMPLE, RID_REGISTER, RID_TYPEDEF, RID_SHORT, > + RID_INLINE, RID_VOLATILE, RID_SIGNED, RID_AUTO, > + RID_RESTRICT, RID_NORETURN, RID_ATOMIC, > > /* C extensions */ > RID_COMPLEX, RID_THREAD, RID_SAT, > diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c > index f0c677b..e690ca3 100644 > --- a/gcc/c/c-decl.c > +++ b/gcc/c/c-decl.c > @@ -10401,6 +10401,8 @@ declspecs_add_scspec (source_location loc, > case RID_TYPEDEF: > n = csc_typedef; > break; > + case RID_GIMPLE: > + break; > default: > gcc_unreachable (); > } > diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c > index bdd669d..266b672 100644 > --- a/gcc/c/c-parser.c > +++ b/gcc/c/c-parser.c > @@ -732,6 +732,7 @@ c_token_starts_declspecs (c_token *token) > case RID_ALIGNAS: > case RID_ATOMIC: > case RID_AUTO_TYPE: > + case RID_GIMPLE: > return true; > default: > if (token->keyword >= RID_FIRST_INT_N > @@ -2461,6 +2462,7 @@ c_parser_declspecs (c_parser *parser, struct > c_declspecs *specs, > case RID_NORETURN: > case RID_AUTO: > case RID_THREAD: > + case RID_GIMPLE: > if (!scspec_ok) > goto out; > attrs_ok = true; > @@ -3960,6 +3962,7 @@ c_parser_attribute_any_word (c_parser *parser) > case RID_INT_N_1: > case RID_INT_N_2: > case RID_INT_N_3: > + case RID_GIMPLE: > ok = true; > break; > default: > > > > After recognizing __GIMPLE, I am planning to call gimple_fn_parser > function which will parse gimple body. > For pass manager, basic idea is to introduce new member to struct > function as pass_list and modify function execute_pass_list to run > only passes in pass list. > > > > Thanks, > Prasad Ghangal