Commit b8435aa9 by Uros Bizjak Committed by Uros Bizjak

mode-switching.c (create_pre_exit): Force late switching if…

mode-switching.c (create_pre_exit): Force late switching if __builtin_{apply,return} emitted a load that require...

	* mode-switching.c (create_pre_exit): Force late switching if
	__builtin_{apply,return} emitted a load that require mode,
	other than MODE_EXIT.


Co-Authored-By: Vladimir Yakovlev <vladimir.b.yakovlev@intel.com>

From-SVN: r193182
parent 935ec36f
2012-11-05 Uros Bizjak <ubizjak@gmail.com>
Vladimir Yakovlev <vladimir.b.yakovlev@intel.com>
* mode-switching.c (create_pre_exit): Force late switching if
__builtin_{apply,return} emitted a load that require mode,
other than MODE_EXIT.
2012-11-05 Richard Sandiford <rdsandiford@googlemail.com> 2012-11-05 Richard Sandiford <rdsandiford@googlemail.com>
PR target/55204 PR target/55204
/* CPU mode switching /* CPU mode switching
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
2009, 2010 Free Software Foundation, Inc. 2009, 2010, 2012 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -342,6 +342,16 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes) ...@@ -342,6 +342,16 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
} }
if (j >= 0) if (j >= 0)
{ {
/* __builtin_return emits a sequence of loads to all
return registers. One of them might require
another mode than MODE_EXIT, even if it is
unrelated to the return value, so we want to put
the final mode switch after it. */
if (maybe_builtin_apply
&& targetm.calls.function_value_regno_p
(copy_start))
forced_late_switch = 1;
/* For the SH4, floating point loads depend on fpscr, /* For the SH4, floating point loads depend on fpscr,
thus we might need to put the final mode switch thus we might need to put the final mode switch
after the return value copy. That is still OK, after the return value copy. That is still OK,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment