I guess it is not in our test case, or after this patch, the new
should get a little better result than the old (at present, they are
same).

I shall try to add related case into testsuite within this month.

Thanks

Send from Lenovo A788t.

Michael Eager <ea...@eagerm.com> wrote:

>On 09/25/14 07:03, Chen Gang wrote:
>> Need use VOID instead of SI, or when real VOIDmode comes, it does not
>> match SImode, so cause issue. This patch can fix this issue and pass
>> testsuite.
>>
>> The related test code ('void' will cause CALL instead of SET):
>>
>>    typedef void (*T)(void);
>>    f1 ()
>>    {
>>      ((T) 0)();
>>    }
>>
>> The related error:
>>
>>    [root@localhost gcc]# ./cc1 /tmp/calls.c -o /tmp/1.s
>>     f1
>>    Analyzing compilation unit
>>    Performing interprocedural optimizations
>>     <*free_lang_data> <visibility> <early_local_cleanups> 
>> <free-inline-summary> <whole-program> <inline>Assembling functions:
>>     f1
>>    /tmp/calls.c: In function 'f1':
>>    /tmp/calls.c:5:1: error: unrecognizable insn:
>>     }
>>     ^
>>    (call_insn 5 2 8 2 (parallel [
>>                (call (mem:SI (const_int 0 [0]) [0 MEM[(void (*<T29c>) 
>> (void))0B] S4 A32])
>>                    (const_int 24 [0x18]))
>>                (clobber (reg:SI 15 r15))
>>            ]) /tmp/calls.c:4 -1
>>         (nil)
>>        (nil))
>>    /tmp/calls.c:5:1: internal compiler error: in extract_insn, at 
>> recog.c:2204
>>    0xb0e71b _fatal_insn(char const*, rtx_def const*, char const*, int, char 
>> const*)
>>      ../../gcc/gcc/rtl-error.c:109
>>    0xb0e75c _fatal_insn_not_found(rtx_def const*, char const*, int, char 
>> const*)
>>      ../../gcc/gcc/rtl-error.c:117
>>    0xac552b extract_insn(rtx_def*)
>>      ../../gcc/gcc/recog.c:2204
>>    0x8b919e instantiate_virtual_regs_in_insn
>>      ../../gcc/gcc/function.c:1614
>>    0x8ba347 instantiate_virtual_regs
>>      ../../gcc/gcc/function.c:1934
>>    0x8ba452 execute
>>      ../../gcc/gcc/function.c:1983
>>    Please submit a full bug report,
>>    with preprocessed source if appropriate.
>>    Please include the complete backtrace with any bug report.
>>    See <http://gcc.gnu.org/bugs.html> for instructions.
>
>Is this test case (or a similar one) in the gcc test suite?
>
>If not, can you please add it to the test suite.
>
>>
>>
>> 2014-09-25  Chen Gang  <gang.chen.5...@gmail.com>
>>
>>      * config/microblaze/microblaze.md (call_internal1): Use VOID
>>      instead of SI to fix "((void (*)(void)) 0)()" issue
>>
>> ---
>>   gcc/config/microblaze/microblaze.md | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/gcc/config/microblaze/microblaze.md 
>> b/gcc/config/microblaze/microblaze.md
>> index b971737..3b4faf4 100644
>> --- a/gcc/config/microblaze/microblaze.md
>> +++ b/gcc/config/microblaze/microblaze.md
>> @@ -2062,7 +2062,7 @@
>>     (set_attr "length"       "4")])
>>
>>   (define_insn "call_internal1"
>> -  [(call (mem (match_operand:SI 0 "call_insn_simple_operand" "ri"))
>> +  [(call (mem (match_operand:VOID 0 "call_insn_simple_operand" "ri"))
>>       (match_operand:SI 1 "" "i"))
>>     (clobber (reg:SI R_SR))]
>>     ""
>
>I've verified that your patch does not cause any test suite regressions.
>
>
>-- 
>Michael Eager   ea...@eagercon.com
>1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

Reply via email to