This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
[gimplefe] Regarding command line option handling
- From: Prasad Ghangal <prasad dot ghangal at gmail dot com>
- To: gcc Mailing List <gcc at gcc dot gnu dot org>, Richard Biener <richard dot guenther at gmail dot com>
- Date: Wed, 4 May 2016 12:11:13 +0530
- Subject: [gimplefe] Regarding command line option handling
- Authentication-results: sourceware.org; auth=none
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.
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