PR target/52555: attribute optimize is overriding command line options

Richard Sandiford rdsandiford@googlemail.com
Tue Feb 12 17:48:00 GMT 2013


Aldy Hernandez <aldyh@redhat.com> writes:
>> Rather than:
>>
>> 	  /* Change optabs if needed.  */
>> 	  if (TREE_OPTIMIZATION_OPTABS (opts))
>> 	    this_target_optabs
>> 	      = (struct target_optabs *) TREE_OPTIMIZATION_OPTABS (opts);
>> 	  else
>> 	    this_target_optabs = &default_target_optabs;
>>
>> I think it'd be better to have:
>>
>> 	  /* Change optabs if needed.  */
>> 	  if (TREE_OPTIMIZATION_OPTABS (opts))
>> 	    this_fn_optabs
>> 	      = (struct target_optabs *) TREE_OPTIMIZATION_OPTABS (opts);
>> 	  else
>> 	    this_fn_optabs = this_target_optabs;
>>
>> with genopinit.c updated to use this_fn_optabs instead of this_target_optabs.
>
> Hmmm, ok.
>
> I also added a default case setting this_fn_optabs = 
> &default_target_optabs when the optimizations haven't changed.  I can 
> remove this if redundant.

No, sounds like a good plan, but I think it should be this_target_optabs
rather than &default_target_optabs.  Also:

@@ -76,11 +76,8 @@ struct target_optabs {
 };
 
 extern struct target_optabs default_target_optabs;
-#if SWITCHABLE_TARGET
 extern struct target_optabs *this_target_optabs;
-#else
-#define this_target_optabs (&default_target_optabs)
-#endif

This shouldn't be needed now, and:

@@ -44,8 +44,9 @@ along with GCC; see the file COPYING3.  If not see
 
 struct target_optabs default_target_optabs;
 struct target_libfuncs default_target_libfuncs;
-#if SWITCHABLE_TARGET
 struct target_optabs *this_target_optabs = &default_target_optabs;
+struct target_optabs *this_fn_optabs = &default_target_optabs;
+#if SWITCHABLE_TARGET
 struct target_libfuncs *this_target_libfuncs = &default_target_libfuncs;
 #endif

I think this should be:

 struct target_optabs default_target_optabs;
 struct target_libfuncs default_target_libfuncs;
+struct target_optabs *this_fn_optabs = &default_target_optabs;
 #if SWITCHABLE_TARGET
 struct target_optabs *this_target_optabs = &default_target_optabs;
 struct target_libfuncs *this_target_libfuncs = &default_target_libfuncs;
 #endif

Looks good to me otherwise as far as switchable targets go.

Richard



More information about the Gcc-patches mailing list