This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: ifcvt/crossjump patch: Fix PR 42496, 21803


On Tue, Oct 5, 2010 at 6:12 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Sun, Oct 3, 2010 at 4:34 AM, Bernd Schmidt <bernds@codesourcery.com> wrote:
>> On 10/02/2010 03:07 PM, H.J. Lu wrote:
>>> On Wed, Aug 4, 2010 at 6:35 AM, Bernd Schmidt <bernds@codesourcery.com> wrote:
>>>> On 08/03/2010 07:12 PM, Jeff Law wrote:
>>>>> OK. ?WRT the comment, we might want to just say that BB_MODIFIED is set
>>>>> at the same time as a block is marked dirty, but is not cleared during a
>>>>> df_analyze allowing a pass to update the DF information and still know
>>>>> what blocks were modified.
>>>>
>>>> New patch below.
>>>>
>>>
>>> This caused:
>>>
>>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45865
>>
>> This should fix it, refusing to move NOTE_EPILOGUE_BEGIN and anything
>> beyond it.
>>
>> Bootstrapped and tested on i686-linux, ok?
>>
>
> It still failed this testcase.
>
> --
> H.J.
> ---
> [hjl@gnu-32 rrs]$ cat pr45865.c
> typedef struct rtx_def *rtx;
> enum machine_mode {
> ?VOIDmode,
> ?CCFPmode,
> ?CCFPUmode,
> ?MAX_MACHINE_MODE
> };
> enum mode_class {
> ?MODE_CC,
> ?MODE_FLOAT,
> ?MODE_COMPLEX_FLOAT,
> ?MODE_VECTOR_FLOAT
> };
> extern const enum mode_class mode_class[(int) MAX_MACHINE_MODE];
> enum rtx_code {
> ?UNKNOWN,
> ?GEU,
> ?ORDERED,
> ?CONST_INT
> };
> struct rtx_def {
> ?unsigned int code: 16;
> ?unsigned int mode : 8;
> };
> extern enum rtx_code reverse_condition (enum rtx_code);
> enum rtx_code
> reversed_comparison_code_parts (enum rtx_code code, rtx insn, rtx arg0,
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rtx arg1)
> {
> ?enum machine_mode mode;
> ?mode = (enum machine_mode) (arg0)->mode;
> ?if (mode == VOIDmode)
> ? ?mode = (enum machine_mode) (arg1)->mode;
> ?if ((mode_class[(int) (mode)]) == MODE_CC)
> ? ?return (mode != CCFPmode && mode != CCFPUmode
> ? ? ? ? ? ?? reverse_condition (code)
> ? ? ? ? ? ?: reverse_condition_maybe_unordered (code));
> ?switch (code)
> ? ?{
> ? ?case GEU:
> ? ? ?return reverse_condition (code);
> ? ?case ORDERED:
> ? ? ?return UNKNOWN;
> ? ?}
> ?if (((enum rtx_code) (arg0)->code) == CONST_INT
> ? ? ?|| (((enum machine_mode) (arg0)->mode) != VOIDmode
> ? ? ? ? ?&& ! ((mode_class[(int) (mode)]) == MODE_FLOAT
> ? ? ? ? ? ? ? ?|| (mode_class[(int) (mode)]) == MODE_COMPLEX_FLOAT
> ? ? ? ? ? ? ? ?|| (mode_class[(int) (mode)]) == MODE_VECTOR_FLOAT)))
> ? ?return reverse_condition (code);
> ?return UNKNOWN;
> }
> [hjl@gnu-32 rrs]$ /export/gnu/import/rrs/164914/usr/bin/gcc -O2 -S
> -m32 pr45865.c
> pr45865.c: In function \u2018reversed_comparison_code_parts\u2019:
> pr45865.c:52:1: internal compiler error: in
> dwarf2out_cfi_begin_epilogue, at dwarf2out.c:2930
> Please submit a full bug report,
> with preprocessed source if appropriate.
> See <http://gcc.gnu.org/bugs.html> for instructions.
> [hjl@gnu-32 rrs]$
>

One problem is:

if (max_to == NULL_RTX || (fail && pmove_upto == NULL))

When pmove_upto isn't NULL,*pmove_upto is initialized to NULL
This patch works for me.  OK for trunk?

Thanks.

-- 
H.J.
---
gcc/

2010-10-05  Bernd Schmidt  <bernds@codesourcery.com>
	    H.J. Lu  <hongjiu.lu@intel.com>

	 PR rtl-optimization/45865
	 * df-problems.c (can_move_insns_across): Don't move
	 NOTE_EPILOGUE_BEGIN and anything beyond it.  Properly check
	 pmove_upto.

gcc/testsuite/

2010-10-05  H.J. Lu  <hongjiu.lu@intel.com>

	 PR rtl-optimization/45865
	 * gcc.dg/torture/pr45865.c: New.

Attachment: gcc-pr45865-1.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]