Hello maintainers:
I also find some warnings during compiling microblaze, I also shall try
to fix them, but excuse me, I am not quite familiar the testsuite for
microblaze, could you provide any related information for it?
Thanks.
On 09/08/2014 11:28 PM, Chen Gang wrote:
> On 09/08/2014 10:24 AM, Chen Gang wrote:
>> On 09/07/2014 11:17 PM, Chen Gang wrote:
>>>> On 8/13/14 23:10, Michael Eager wrote:
>>>>> On 07/06/14 03:26, Chen Gang wrote:
>>>>>>
>>>>>> * microblaze/mocroblaze.md (call_value_intern): Use 'SI' instead of
>>>>>> 'VOID' for operand 1, just like 'call_internal1' has done.
>>>>>>
>>>>>> The related warning:
>>>>>>
>>>>>> ../../gcc/gcc/config/microblaze/microblaze.md:2172: warning: operand 1 missing mode?
>>>>>>
>>>>>>
>>>>>> Signed-off-by: Chen Gang <***@gmail.com>
>>>>>> ---
>>>>>> 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 2bd5d72..9580221 100644
>>>>>> --- a/gcc/config/microblaze/microblaze.md
>>>>>> +++ b/gcc/config/microblaze/microblaze.md
>>>>>> @@ -2171,7 +2171,7 @@
>>>>>>
>>>>>> (define_insn "call_value_intern"
>>>>>> [(set (match_operand:VOID 0 "register_operand" "=d")
>>>>>> - (call (mem (match_operand:VOID 1 "call_insn_operand" "ri"))
>>>>>> + (call (mem (match_operand:SI 1 "call_insn_operand" "ri"))
>>>>>> (match_operand:SI 2 "" "i")))
>>>>>> (clobber (match_operand:SI 3 "register_operand" "=d"))]
>>>>>> ""
>>>>>
>>>>> This patch causes a test suite regression:
>>>>>
>>>>> Executing on host: mb-gcc -fno-diagnostics-show-caret -fdiagnostics-color=never -O0 -w -c -mno-xl-soft-mul -mxl-barrel-shift -mcpu=v6.00.a -o calls.o testsuite/gcc.c-torture/compile/calls.c (timeout = 60)
>>>>> pid is 24832 -24832
>>>>> testsuite/gcc.c-torture/compile/calls.c: In function 'f1':
>>>>> testsuite/gcc.c-torture/compile/calls.c:6:1: error: unrecognizable insn:
>>>>> (call_insn 5 2 8 2 (parallel [
>>>>> (set (reg:SI 3 r3)
>>>>> (call (mem:SI (const_int 0 [0]) [0 MEM[(void * (*<T29e>) (void))0B] S4 A32])
>>>>> (const_int 24 [0x18])))
>>>>> (clobber (reg:SI 15 r15))
>>>>> ]) testsuite/gcc.c-torture/compile/calls.c:5 -1
>>>>> (nil)
>>>>> (nil))
>>>>> testsuite/gcc.c-torture/compile/calls.c:6:1: internal compiler error: in extract_insn, at recog.c:2204
>>>>> 0x983018 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
>>>>> /store/Xilinx/repo/fsf/gcc/gcc/rtl-error.c:109
>>>>> 0x983041 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
>>>>> /store/Xilinx/repo/fsf/gcc/gcc/rtl-error.c:117
>>>>> 0x9539cd extract_insn(rtx_def*)
>>>>> /store/Xilinx/repo/fsf/gcc/gcc/recog.c:2204
>>>>> 0x7a5b59 instantiate_virtual_regs_in_insn
>>>>> /store/Xilinx/repo/fsf/gcc/gcc/function.c:1561
>>>>> 0x7aaa78 instantiate_virtual_regs
>>>>> /store/Xilinx/repo/fsf/gcc/gcc/function.c:1932
>>>>>
>>>
>
> At present, I guess the original code is correct, need not additional
> fix: "When call call_insn_operand() in gencog(), related 'rtx' mode is
> VOIDmode (which need VOID, not SI)".
>
> For the compiler's warning: "operand 1 is VOIDmode", after give some
> related test, "operand 1 is VOIDmode" is all OK, the related tests are
> below:
>
> - For almost same definitions, they are OK:
>
> - int *(*T)(void);
>
> - char *(*T)(int);
>
> ...
>
> - For incorrect assignments, report related correct warning/error:
>
> - char a = ((long long *(*)(short)) 0) (1);
>
> - ((long long *(*)(short)) 0) ();
>
> ...
>
> If what I guess is correct, the below issue can be fixed in the same
> way, please help check.
>
>>> typedef void (*T)(void);
>>> f1 ()
>>> {
>>> ((T) 0)();
>>> }
>>>
>>
>> Oh, sorry, neither original nor the new one (with this patch) can
>> recognize the code above.
>>
>
> Need use VOID instead of SI, or when real VOIDmode comes, it does not
> match SImode, so cause issue.
>
> The related test code ('void' will cause CALL instead of SET):
>
> typedef void (*T)(void);
> f1 ()
> {
> ((T) 0)();
> }
>
> The related error:
>
> [***@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.
>
> 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))]
> ""
>
>
> Thanks.
>
--
Chen Gang
Open share and attitude like air water and life which God blessed