This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Add support for use_hazard_barrier_return function attribute


Prachi Godbole <Prachi.Godbole@imgtec.com> writes:
> Please find the updated patch below. I hope I've covered everything.
> I've added the test for inline restriction, could you check if I got all
> the options correct?

I think the test is probably good enough. It is a little too forgiving due
to handling the indirect call case to foo which could just detect an
indirect call from foo to bar (the placement of a scan-assembler in the
.c file has no impact on where in the generated output it will match in
the corresponding .s). Given that the test would fail appropriately on
a bare metal configuration (which is where this is likely to be most
useful) then I think that is sufficient.

Watch out for the long lines in comments. There is one that is hitting
80cols noted below to tweak before committing.

> Changelog:
> 
> 2017-06-23  Prachi Godbole  <prachi.godbole@imgtec.com>
> 
> gcc/
> 	* config/mips/mips.h (machine_function): New variable
> 	use_hazard_barrier_return_p.
> 	* config/mips/mips.md (UNSPEC_JRHB): New unspec.
> 	(mips_hb_return_internal): New insn pattern.
> 	* config/mips/mips.c (mips_attribute_table): Add attribute
> 	use_hazard_barrier_return.
> 	(mips_use_hazard_barrier_return_p): New static function.
> 	(mips_function_attr_inlinable_p): Likewise.
> 	(mips_compute_frame_info): Set use_hazard_barrier_return_p.  Emit error
> 	for unsupported architecture choice.
> 	(mips_function_ok_for_sibcall, mips_can_use_return_insn): Return false
> 	for use_hazard_barrier_return.
> 	(mips_expand_epilogue): Emit hazard barrier return.
> 	* doc/extend.texi: Document use_hazard_barrier_return.
> 
> gcc/testsuite/
> 	* gcc.target/mips/hazard-barrier-return-attribute.c: New tests.

OK to commit.

> ===================================================================
> --- gcc/config/mips/mips.c	(revision 246899)
> +++ gcc/config/mips/mips.c	(working copy)
> @@ -7863,6 +7889,17 @@ mips_function_ok_for_sibcall (tree decl, tree exp
>        && !targetm.binds_local_p (decl))
>      return false;
> +  /* Functions that need to return with a hazard barrier cannot sibcall because:

Long line for a comment above.

> +
> +     1) Hazard barriers are not possible for direct jumps
> +
> +     2) Despite an indirect jump with hazard barrier being possible we do
> +	not use it so that the logic for generating a hazard barrier jump
> +	can be contained within the epilogue handling.  */
> +
> +  if (mips_use_hazard_barrier_return_p (current_function_decl))
> +    return false;
> +
>    /* Otherwise OK.  */
>    return true;
>  }

Thanks for the new feature!

Matthew


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]