re PR target/91528 (ICE in ix86_expand_prologue at i386.c:7844 since r274481)

PR target/91528
	* config/i386/i386-features.c (convert_scalars_to_vector):
	Update crtl->stack_realign_needed, crtl->stack_realign_tried and
	crtl->stack_realign_processed.  Update crtl->drap_reg by calling
	targetm.calls.get_drap_rtx.  If drap_rtx is non-null then
	Update crtl->args.internal_arg_pointer and call fixup_tail_calls.

testsuite/ChangeLog:

	PR target/91528
	* gcc.target/i386/pr91528.c: New test.

From-SVN: r274962
This commit is contained in:
Uros Bizjak 2019-08-27 19:23:59 +02:00 committed by Uros Bizjak
parent c8935981ff
commit c1441faf15
4 changed files with 54 additions and 0 deletions

View file

@ -1,3 +1,12 @@
2019-08-27 Uroš Bizjak <ubizjak@gmail.com>
PR target/91528
* config/i386/i386-features.c (convert_scalars_to_vector):
Update crtl->stack_realign_needed, crtl->stack_realign_tried and
crtl->stack_realign_processed. Update crtl->drap_reg by calling
targetm.calls.get_drap_rtx. If drap_rtx is non-null then
Update crtl->args.internal_arg_pointer and call fixup_tail_calls.
2019-08-27 Richard Biener <rguenther@suse.de>
* config/i386/i386-features.h

View file

@ -1651,6 +1651,32 @@ convert_scalars_to_vector (bool timode_p)
crtl->stack_alignment_needed = 128;
if (crtl->stack_alignment_estimated < 128)
crtl->stack_alignment_estimated = 128;
crtl->stack_realign_needed
= INCOMING_STACK_BOUNDARY < crtl->stack_alignment_estimated;
crtl->stack_realign_tried = crtl->stack_realign_needed;
crtl->stack_realign_processed = true;
if (!crtl->drap_reg)
{
rtx drap_rtx = targetm.calls.get_drap_rtx ();
/* stack_realign_drap and drap_rtx must match. */
gcc_assert ((stack_realign_drap != 0) == (drap_rtx != NULL));
/* Do nothing if NULL is returned,
which means DRAP is not needed. */
if (drap_rtx != NULL)
{
crtl->args.internal_arg_pointer = drap_rtx;
/* Call fixup_tail_calls to clean up
REG_EQUIV note if DRAP is needed. */
fixup_tail_calls ();
}
}
/* Fix up DECL_RTL/DECL_INCOMING_RTL of arguments. */
if (TARGET_64BIT)
for (tree parm = DECL_ARGUMENTS (current_function_decl);

View file

@ -1,3 +1,8 @@
2019-08-27 Uroš Bizjak <ubizjak@gmail.com>
PR target/91528
* gcc.target/i386/pr91528.c: New test.
2019-08-27 Martin Sebor <msebor@redhat.com>
PR c++/83431

View file

@ -0,0 +1,14 @@
/* PR target/91528 */
/* { dg-do compile { target ia32 } } */
/* { dg-options "-Os -mavx512vbmi2 -mforce-drap" } */
extern long int labs (long int j);
int
main ()
{
long *a = (long *)"empty";
int i = 1441516387;
a[i] = labs (a[i]);
return 0;
}