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: [PATCH 1/2] SH epilogue unwind, dwarf2 pass changes


On 2012-06-11 01:34, Chung-Lin Tang wrote:
> Ping?
> 
> On 2012/6/1 06:24 PM, Chung-Lin Tang wrote:
>> On 12/5/23 1:46 AM, Richard Henderson wrote:
>>> On 05/18/12 03:48, Chung-Lin Tang wrote:
>>>> @@ -2401,6 +2401,7 @@ scan_trace (dw_trace_info *trace)
>>>>  	{
>>>>  	  /* Propagate across fallthru edges.  */
>>>>  	  dwarf2out_flush_queued_reg_saves ();
>>>> +	  def_cfa_1 (&this_cfa);
>>>>  	  maybe_record_trace_start (insn, NULL);
>>>>  	  break;
>>>>  	}
>>>> @@ -2455,6 +2456,18 @@ scan_trace (dw_trace_info *trace)
>>>>  		  cur_cfa = &this_cfa;
>>>>  		  continue;
>>>>  		}
>>>> +	      else
>>>> +		{
>>>> +		  /* If ELT is a annulled branch-taken instruction (i.e. executed
>>>> +		     only when branch is not taken), the args_size and CFA should
>>>> +		     not change through the jump.  */
>>>> +		  create_trace_edges (control);
>>>> +
>>>> +		  /* Update and continue with the trace.  */
>>>> +		  add_cfi_insn = insn;
>>>> +		  scan_insn_after (elt);
>>>> +		  continue;
>>>> +		}
>>>
>>> I think the def_cfa_1 is misplaced.  It should be immediately before
>>> that last continue.  That mirrors the sort of flow you get via the
>>> other paths through the loop.
>>
>> Or possibly moved before the dwarf2out_flush_queued_reg_saves () call in
>> the patch? (in the save_point_p () break case)  Note I'm only saying
>> this based on overall ordering of those two routine calls in the loop.
>>
>> Attached is a testcase (adapted from libgomp) that, with the SH epilogue
>> unwind patch applied alone, produces the ICE I'm seeing (-O2
>> -funwind-tables).
>>
>> This dwarf2 patch, with any of the three new def_cfa_1() call sites
>> seems to solve it, though you might want to comment on which call site
>> seems "correct"

I've committed the following, after a --enable-languages=c,c++ --target=sh-elf
build and check-gcc with your patch 2/2 applied.  I eyeballed the resulting
debug info and it looked correct.

Given the test case was extracted from libgomp I didn't commit that, trusting
that the real testing will continue to happen during a build.


r~

Attachment: z
Description: Text document


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