Check BIGGEST_ALIGNMENT when forcing a local copy

BIGGEST_ALIGNMENT is the biggest alignment that any data type can require
on the target machine.  It is not the biggest alignment that is supported,
just the biggest alignment that, when violated, may cause a fault.

MAX_SUPPORTED_STACK_ALIGNMENT is the maximum stack alignment guaranteed by
the backend.  If SUPPORTS_STACK_ALIGNMENT is false, it is defined as
PREFERRED_STACK_BOUNDARY.

Adjust alignment check forcing a local copy if the argument on stack is
not aligned to its type and the current alignment is less than the
minimum of BIGGEST_ALIGNMENT and MAX_SUPPORTED_STACK_ALIGNMENT.

gcc/

	PR middle-end/124697
	* function.cc (assign_parm_adjust_stack_rtl): Force a local copy
	if the current alignment is less than the minimum of
	BIGGEST_ALIGNMENT and MAX_SUPPORTED_STACK_ALIGNMENT.

gcc/testsuite/

	PR middle-end/124697
	* gcc.target/i386/pr120839-1b.c: Adjusted.
	* gcc.target/i386/pr124697-1a.c: New test.
	* gcc.target/i386/pr124697-1b.c: Likewise.
	* gcc.target/i386/pr124697-2a.c: Likewise.
	* gcc.target/i386/pr124697-2b.c: Likewise.
	* gcc.target/i386/pr124697-3a.c: Likewise.
	* gcc.target/i386/pr124697-3b.c: Likewise.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
8 files changed