Message ID | 20160929192616.GF18222@embecosm.com |
---|---|
State | New |
Headers | show |
> I wonder if we should warn for the TARGET_V2 case? Currently if the > option is supplied on an ARCv2 (-mcompact-casesi) then the option is > silently ignored. This might confuse some users. Good idea, I will update the docs accordingly. > > In the non TARGET_V2 case I notice that the option is _always_ > enabled, with no option of disabling the option. If we add a check of > global_options_set then we can make this smarter, default on, but can > still be tuned off if a user ever wants to. The alternative would be > to entirely remove the TARGET_COMPACT_CASESI flag altogether? I would prefer to remove compact_casesi feature entirely as it is a trouble maker rather than a helper. > > While I was thinking about this I wrote the code below, it probably > needs polishing, but gives an idea of what I have in mind. What do > you think? It looks good, I will add the docs update. Coming back to u asap. Claudiu
diff --git a/gcc/common/config/arc/arc-common.c b/gcc/common/config/arc/arc-common.c index f5b9c6d..5b687fb 100644 --- a/gcc/common/config/arc/arc-common.c +++ b/gcc/common/config/arc/arc-common.c @@ -56,7 +56,6 @@ static const struct default_options arc_option_optimization_table[] = { OPT_LEVELS_ALL, OPT_mbbit_peephole, NULL, 1 }, { OPT_LEVELS_SIZE, OPT_mq_class, NULL, 1 }, { OPT_LEVELS_SIZE, OPT_mcase_vector_pcrel, NULL, 1 }, - { OPT_LEVELS_SIZE, OPT_mcompact_casesi, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } }; diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index 2b25b0b..65a5c10 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -858,6 +858,18 @@ arc_override_options (void) if (arc_size_opt_level == 3) optimize_size = 1; + /* Compact casesi is not a valid option for ARCv2 family. */ + if (TARGET_V2 + && global_options_set.x_TARGET_COMPACT_CASESI + && global_options.x_TARGET_COMPACT_CASESI) + { + warning (0, "compact-casesi is not applicable to arc-v2"); + TARGET_COMPACT_CASESI = 0; + } + else if (optimize_size == 1 + && !global_options_set.x_TARGET_COMPACT_CASESI) + TARGET_COMPACT_CASESI = 1; + if (flag_pic) target_flags |= MASK_NO_SDATA_SET;