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
This commit is contained in:
parent
ca4ae08d95
commit
4e9efe546e
@ -1,3 +1,8 @@
|
|||||||
|
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>
|
Wed Aug 2 15:59:34 MET DST 2000 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
* i386.md (shift to lea splitter): Use const_int_operand.
|
* i386.md (shift to lea splitter): Use const_int_operand.
|
||||||
|
@ -2506,14 +2506,27 @@ legitimate_address_p (mode, addr, strict)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Verify that a symbolic pic displacement includes
|
/* This code used to verify that a symbolic pic displacement
|
||||||
the pic_offset_table_rtx register. */
|
includes the pic_offset_table_rtx register.
|
||||||
if (base != pic_offset_table_rtx
|
|
||||||
&& (index != pic_offset_table_rtx || scale != 1))
|
While this is good idea, unfortunately these constructs may
|
||||||
{
|
be created by "adds using lea" optimization for incorrect
|
||||||
reason = "pic displacement against invalid base";
|
code like:
|
||||||
goto error;
|
|
||||||
}
|
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 ())
|
else if (HALF_PIC_P ())
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user