Skip to content

Commit

Permalink
i386: Fix rtl checking ICE in ix86_elim_entry_set_got [PR112837]
Browse files Browse the repository at this point in the history
The following testcase ICEs with RTL checking, because it sets if
XINT (SET_SRC (set), 1) is UNSPEC_SET_GOT without checking if SET_SRC (set)
is actually an UNSPEC, so any time we see any other insn with PARALLEL
and a SET in it which is not an UNSPEC we ICE during RTL checking or
access there some other union member as if it was an rt_int.
The rest is just small cleanup.

2023-12-04  Jakub Jelinek  <jakub@redhat.com>

	PR target/112837
	* config/i386/i386.cc (ix86_elim_entry_set_got): Before checking
	for UNSPEC_SET_GOT check that SET_SRC is UNSPEC.  Use SET_SRC and
	SET_DEST macros instead of XEXP, rename vec variable to set.

	* gcc.dg/pr112837.c: New test.
  • Loading branch information
jakubjelinek committed Dec 4, 2023
1 parent 994d6dc commit 4586d7d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
9 changes: 5 additions & 4 deletions gcc/config/i386/i386.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8607,10 +8607,11 @@ ix86_elim_entry_set_got (rtx reg)
rtx pat = PATTERN (c_insn);
if (GET_CODE (pat) == PARALLEL)
{
rtx vec = XVECEXP (pat, 0, 0);
if (GET_CODE (vec) == SET
&& XINT (XEXP (vec, 1), 1) == UNSPEC_SET_GOT
&& REGNO (XEXP (vec, 0)) == REGNO (reg))
rtx set = XVECEXP (pat, 0, 0);
if (GET_CODE (set) == SET
&& GET_CODE (SET_SRC (set)) == UNSPEC
&& XINT (SET_SRC (set), 1) == UNSPEC_SET_GOT
&& REGNO (SET_DEST (set)) == REGNO (reg))
delete_insn (c_insn);
}
}
Expand Down
11 changes: 11 additions & 0 deletions gcc/testsuite/gcc.dg/pr112837.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/* PR target/112837 */
/* { dg-do compile } */
/* { dg-options "-fcompare-elim -fprofile" } */
/* { dg-additional-options "-fpie" { target pie } } */
/* { dg-require-profiling "-fprofile" } */

void
foo (int i)
{
foo (i);
}

0 comments on commit 4586d7d

Please sign in to comment.