Commit 4e9efe54 by Jan Hubicka Committed by Jan Hubicka

i386.c (legitimate_address_p): Accept other bases than pic_offset_table_rtx for GOTOFF constructs.

	* i386.c (legitimate_address_p): Accept other bases than
	pic_offset_table_rtx for GOTOFF constructs.

From-SVN: r35424
parent ca4ae08d
Wed Aug 2 16:26:15 MET DST 2000 Jan Hubicka <jh@suse.cz>
* i386.c (legitimate_address_p): Accept other bases than
pic_offset_table_rtx for GOTOFF constructs.
Wed Aug 2 15:59:34 MET DST 2000 Jan Hubicka <jh@suse.cz>
* i386.md (shift to lea splitter): Use const_int_operand.
......
......@@ -2506,14 +2506,27 @@ legitimate_address_p (mode, addr, strict)
goto error;
}
/* Verify that a symbolic pic displacement includes
the pic_offset_table_rtx register. */
if (base != pic_offset_table_rtx
&& (index != pic_offset_table_rtx || scale != 1))
{
reason = "pic displacement against invalid base";
goto error;
}
/* This code used to verify that a symbolic pic displacement
includes the pic_offset_table_rtx register.
While this is good idea, unfortunately these constructs may
be created by "adds using lea" optimization for incorrect
code like:
int a;
int foo(int i)
{
return *(&a+i);
}
This code nonsential, but results in addressing
GOT table with pic_offset_table_rtx base. We can't
just refuse it easilly, since it gets matched by
"addsi3" pattern, that later gets split to lea in the
case output register differs from input. While this
can be handled by separate addsi pattern for this case
that never results in lea, this seems to be easier and
correct fix for crash to disable this test. */
}
else if (HALF_PIC_P ())
{
......
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