Hi Tom!

On 2020-09-23T22:46:34+0200, Tom de Vries <tdevr...@suse.de> wrote:
> With test-case gcc.c-torture/compile/pr92231.c, we run into:

"Interesting" testcase...  ;-)

> ...
> nvptx-as: ptxas terminated with signal 11 [Segmentation fault], core dumped^M

Confirmed with:

    $ ptxas --version
    ptxas: NVIDIA (R) Ptx optimizing assembler
    Copyright (c) 2005-2014 NVIDIA Corporation
    Built on Thu_Jul_17_21:41:15_CDT_2014
    Cuda compilation tools, release 6.5, V6.5.12

..., and:

    $ ptxas --version
    ptxas: NVIDIA (R) Ptx optimizing assembler
    Copyright (c) 2005-2017 NVIDIA Corporation
    Built on Fri_Dec__1_00:57:38_CST_2017
    Cuda compilation tools, release 9.1, V9.1.108

Have you reported this to Nvidia?

> compiler exited with status 1
> FAIL: gcc.c-torture/compile/pr92231.c   -O0  (test for excess errors)
> ...
> due to using a function reference plus constant as operand:
> ...
>   mov.u64 %r24,bar+4096';
> ...
>
> Fix this by splitting such an insn into:
> ...
>   mov.u64 %r24,bar';
>   add.u64 %r24,%r24,4096';
> ...

(Spurious single-quote characters in PTX code?)


Grüße
 Thomas


> Tested on nvptx.
>
> Committed to trunk.
>
> Thanks,
> - Tom
>
> [nvptx] Split up function ref plus const
>
> gcc/ChangeLog:
>
>       * config/nvptx/nvptx.md: Don't allow operand containing sum of
>       function ref and const.
>
> ---
>  gcc/config/nvptx/nvptx.md | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md
> index 6178e6a0f77..035f6e0151b 100644
> --- a/gcc/config/nvptx/nvptx.md
> +++ b/gcc/config/nvptx/nvptx.md
> @@ -146,6 +146,13 @@
>    return true;
>  })
>
> +;; Test for a function symbol ref operand
> +(define_predicate "symbol_ref_function_operand"
> +  (match_code "symbol_ref")
> +{
> +  return SYMBOL_REF_FUNCTION_P (op);
> +})
> +
>  (define_attr "predicable" "false,true"
>    (const_string "true"))
>
> @@ -241,6 +248,17 @@
>  }
>    [(set_attr "subregs_ok" "true")])
>
> +;; ptxas segfaults on 'mov.u64 %r24,bar+4096', so break it up.
> +(define_split
> +  [(set (match_operand:DI 0 "nvptx_register_operand")
> +     (const:DI (plus:DI (match_operand:DI 1 "symbol_ref_function_operand")
> +                        (match_operand 2 "const_int_operand"))))]
> +  ""
> +  [(set (match_dup 0) (match_dup 1))
> +   (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 2)))
> +  ]
> +  "")
> +
>  (define_insn "*mov<mode>_insn"
>    [(set (match_operand:SDFM 0 "nonimmediate_operand" "=R,R,m")
>       (match_operand:SDFM 1 "general_operand" "RF,m,R"))]
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander 
Walter

Reply via email to