https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102429

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tom de Vries <vr...@gcc.gnu.org>:

https://gcc.gnu.org/g:c2e0d0c1cfb4bf29daed189b39885841ee201a65

commit r12-7425-gc2e0d0c1cfb4bf29daed189b39885841ee201a65
Author: Tom de Vries <tdevr...@suse.de>
Date:   Mon Feb 28 16:06:54 2022 +0100

    [nvptx] Handle DCmode in define_expand "omp_simt_xchg_{bfly,idx}"

    For a test-case doing an openmp target simd reduction on a complex double:
    ...
      DOUBLE COMPLEX :: counter_N0
      ...
      !$OMP TARGET SIMD reduction(+: counter_N0)
    ...
    we run into:
    ...
    during RTL pass: expand
    b.f90: In function âMAIN__._omp_fn.0â:
    b.f90:23:32: internal compiler error: in expand_insn, at optabs.cc:8029
       23 |     counter_N0 = counter_N0 + 1.
          |                                ^
    0x10f1cd3 expand_insn(insn_code, unsigned int, expand_operand*)
            gcc/optabs.cc:8029
    0xeac435 expand_GOMP_SIMT_XCHG_BFLY
            gcc/internal-fn.cc:375
    ...

    Fix this by handling DCmode and CDImode in define_expand
    "omp_simt_xchg_{bfly,idx}".

    Tested on x86_64 with nvptx accelerator.

    gcc/ChangeLog:

    2022-02-28  Tom de Vries  <tdevr...@suse.de>

            PR target/102429
            * config/nvptx/nvptx.cc (nvptx_gen_shuffle): Handle DCmode and
CDImode.
            * config/nvptx/nvptx.md
            (define_predicate
"nvptx_register_or_complex_di_df_register_operand"):
            New predicate.
            (define_expand "omp_simt_xchg_bfly", define_expand
"omp_simt_xchg_idx"):
            Use nvptx_register_or_complex_di_df_register_operand.

Reply via email to