On 6 May 2016 at 16:09, Richard Biener <richard.guent...@gmail.com> wrote: > On Wed, May 4, 2016 at 4:29 PM, Prasad Ghangal <prasad.ghan...@gmail.com> > wrote: >> On 4 May 2016 at 15:54, Richard Biener <richard.guent...@gmail.com> wrote: >>> On Wed, May 4, 2016 at 11:46 AM, Prasad Ghangal >>> <prasad.ghan...@gmail.com> wrote: >>>> On 4 May 2016 at 13:02, Richard Biener <richard.guent...@gmail.com> wrote: >>>>> 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. >>>>> >>>> >>>> Yes, I did stage 1 build on latest revision. Still it's giving this >>>> strange error - "gcc: error: unrecognized command line option >>>> ‘-fgimple’; did you mean ‘-fgimple’?" >>> >>> The error is indeed strage. W/o the patch I get >>> >>>> ./xgcc -B. -fgimple -S t.i >>> xgcc: error: unrecognized command line option '-fgimple'; did you mean >>> '--compile'? >>> >>> and with it (re-building cc1 and xgcc inside gcc/ of my dev-tree) >>> >>>> ./xgcc -B. -fgimple -S t.i >>> (no error) >>> >>> so it works fine for me. Note that 'gcc' inside the build tree is called >>> xgcc. >>> >> >> Yes, it works for $build/gcc/cc1 but not for $prefix/bin/gcc i.e. >> after installing > > Does it work for $build/gcc/xgcc? >
No. It doesn't work for me. I even tried bootstrapped build-install, still same issue. > Richard. > >>> 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