public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/94678] New: aarch64: unexpected result with -mgeneral-regs-only and sve
@ 2020-04-21  7:11 felix.yang at huawei dot com
  2020-04-21  7:12 ` [Bug target/94678] " felix.yang at huawei dot com
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: felix.yang at huawei dot com @ 2020-04-21  7:11 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 94678
           Summary: aarch64: unexpected result with -mgeneral-regs-only
                    and sve
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: felix.yang at huawei dot com
                CC: richard.sandiford at arm dot com
  Target Milestone: ---
            Target: aarch64

It looks like there are several issues out there for aarch64 sve codegen with
-mgeneral-regs-only.

>> test1.c:
#pragma GCC aarch64 "arm_sve.h" 

svbool_t
f1()
{
  return svptrue_b8 ();
}

$aarch64-linux-gnu-gcc -S -march=armv8.2-a+sve -mgeneral-regs-only test1.c 

Assembly output:
f1:
.LFB0:
        .cfi_startproc
        ptrue   p0.b, all   <==== predicate register is used here even with
-mgeneral-regs-only 
        ret
        .cfi_endproc
.LFE0:

>> test2.c:
#pragma GCC aarch64 "arm_sve.h"

svint8_t
f2 (svbool_t *x, svint8_t *y)
{
  return svadd_m (*x, *y, 1);
}

$aarch64-linux-gnu-gcc -S -march=armv8.2-a+sve -mgeneral-regs-only test2.c 

This will trigger an ICE.

We do ISA extension checks for SVE in
check_required_extensions(aarch64-sve-builtins.cc), I think we may also need to
check -mgeneral-regs-only there and issue an error message when this option is
specified.  This would be cheap as compared with adding &&
TARGET_GENERAL_REGS_ONLY to TARGET_SVE and similar macros.  I have created a
patch for that.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/94678] aarch64: unexpected result with -mgeneral-regs-only and sve
  2020-04-21  7:11 [Bug target/94678] New: aarch64: unexpected result with -mgeneral-regs-only and sve felix.yang at huawei dot com
@ 2020-04-21  7:12 ` felix.yang at huawei dot com
  2020-04-22 17:25 ` cvs-commit at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: felix.yang at huawei dot com @ 2020-04-21  7:12 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Fei Yang <felix.yang at huawei dot com> ---
crash log for test2.c:

during RTL pass: expand
foo.c: In function 'f2':
foo.c:14:10: internal compiler error: in emit_move_insn, at expr.c:3815
   14 |   return svadd_m (*x, *y, 1);
      |          ^~~~~~~~~~~~~~~~~~~
0xd21797 emit_move_insn(rtx_def*, rtx_def*)
        ../../gcc-git/gcc/expr.c:3814
0xcf52cb copy_to_mode_reg(machine_mode, rtx_def*)
        ../../gcc-git/gcc/explow.c:634
0x11021f7 maybe_legitimize_operand
        ../../gcc-git/gcc/optabs.c:7283
0x1102caf maybe_legitimize_operands(insn_code, unsigned int, unsigned int,
expand_operand*)
        ../../gcc-git/gcc/optabs.c:7415
0x1102d9b maybe_gen_insn(insn_code, unsigned int, expand_operand*)
        ../../gcc-git/gcc/optabs.c:7434
0x1103223 maybe_expand_insn(insn_code, unsigned int, expand_operand*)
        ../../gcc-git/gcc/optabs.c:7477
0x11032c3 expand_insn(insn_code, unsigned int, expand_operand*)
        ../../gcc-git/gcc/optabs.c:7508
0x10edec3 expand_vector_broadcast(machine_mode, rtx_def*)
        ../../gcc-git/gcc/optabs.c:419
0x1859ec3 aarch64_sve::function_expander::add_input_operand(insn_code,
rtx_def*)
        ../../gcc-git/gcc/config/aarch64/aarch64-sve-builtins.cc:2790
0x185b1b3 aarch64_sve::function_expander::use_cond_insn(insn_code, unsigned
int)
        ../../gcc-git/gcc/config/aarch64/aarch64-sve-builtins.cc:3078
0x185b753 aarch64_sve::function_expander::map_to_rtx_codes(rtx_code, rtx_code,
int, unsigned int)
        ../../gcc-git/gcc/config/aarch64/aarch64-sve-builtins.cc:3224
0x18768d7
aarch64_sve::rtx_code_function::expand(aarch64_sve::function_expander&) const
        ../../gcc-git/gcc/config/aarch64/aarch64-sve-builtins-functions.h:211
0x185b9fb aarch64_sve::function_expander::expand()
        ../../gcc-git/gcc/config/aarch64/aarch64-sve-builtins.cc:3281
0x185dcab aarch64_sve::expand_builtin(unsigned int, tree_node*, rtx_def*)
        ../../gcc-git/gcc/config/aarch64/aarch64-sve-builtins.cc:3569
0x17c0ceb aarch64_expand_builtin
        ../../gcc-git/gcc/config/aarch64/aarch64.c:13147
0xb3782f expand_builtin(tree_node*, rtx_def*, rtx_def*, machine_mode, int)
        ../../gcc-git/gcc/builtins.c:7736
0xd4039b expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
        ../../gcc-git/gcc/expr.c:11132
0xd3338f expand_expr_real(tree_node*, rtx_def*, machine_mode, expand_modifier,
rtx_def**, bool)
        ../../gcc-git/gcc/expr.c:8359
0xd28337 store_expr(tree_node*, rtx_def*, int, bool, bool)
        ../../gcc-git/gcc/expr.c:5755
0xd26d27 expand_assignment(tree_node*, tree_node*, bool)
        ../../gcc-git/gcc/expr.c:5514
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/94678] aarch64: unexpected result with -mgeneral-regs-only and sve
  2020-04-21  7:11 [Bug target/94678] New: aarch64: unexpected result with -mgeneral-regs-only and sve felix.yang at huawei dot com
  2020-04-21  7:12 ` [Bug target/94678] " felix.yang at huawei dot com
@ 2020-04-22 17:25 ` cvs-commit at gcc dot gnu.org
  2020-04-22 17:26 ` rsandifo at gcc dot gnu.org
  2020-04-23 15:08 ` cvs-commit at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-04-22 17:25 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Sandiford <rsandifo@gcc.gnu.org>:

https://gcc.gnu.org/g:154ae7d4e921d704118d6a16ee5cc2a10b9047da

commit r10-7891-g154ae7d4e921d704118d6a16ee5cc2a10b9047da
Author: Fei Yang <felix.yang@huawei.com>
Date:   Wed Apr 22 18:24:59 2020 +0100

    aarch64: unexpected result with -mgeneral-regs-only and sve [PR94678]

    As the two testcases for PR94678 show, -mgeneral-regs-only is handled
    properly with SVE.  We should issue an error message instead of expanding
    SVE builtin funtions when -mgeneral-regs-only option is specified.

    The middle end should never try to use vector patterns when the vector
    modes have been disabled by !have_regs_of_mode.  But it's still wrong
    for the target to provide patterns that would inevitably lead to spill
    failure due to lack of registers.  So we should also add check for
    !TARGET_GENERAL_REGS_ONLY in TARGET_SVE and other SVE related macros.

    2020-04-22  Felix Yang  <felix.yang@huawei.com>

    gcc/
            PR target/94678
            * config/aarch64/aarch64.h (TARGET_SVE):
            Add && !TARGET_GENERAL_REGS_ONLY.
            (TARGET_SVE2): Add && TARGET_SVE.
            (TARGET_SVE2_AES, TARGET_SVE2_BITPERM, TARGET_SVE2_SHA3,
            TARGET_SVE2_SM4): Add && TARGET_SVE2.
            * config/aarch64/aarch64-sve-builtins.h
            (sve_switcher::m_old_general_regs_only): New member.
            * config/aarch64/aarch64-sve-builtins.cc
(check_required_registers):
            New function.
            (reported_missing_registers_p): New variable.
            (check_required_extensions): Call check_required_registers before
            return if all required extenstions are present.
            (sve_switcher::sve_switcher): Save TARGET_GENERAL_REGS_ONLY in
            m_old_general_regs_only and clear MASK_GENERAL_REGS_ONLY in
            global_options.x_target_flags.
            (sve_switcher::~sve_switcher): Set MASK_GENERAL_REGS_ONLY in
            global_options.x_target_flags if m_old_general_regs_only is true.

    gcc/testsuite/
            PR target/94678
            * gcc.target/aarch64/sve/acle/general/nosve_6.c: New test.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/94678] aarch64: unexpected result with -mgeneral-regs-only and sve
  2020-04-21  7:11 [Bug target/94678] New: aarch64: unexpected result with -mgeneral-regs-only and sve felix.yang at huawei dot com
  2020-04-21  7:12 ` [Bug target/94678] " felix.yang at huawei dot com
  2020-04-22 17:25 ` cvs-commit at gcc dot gnu.org
@ 2020-04-22 17:26 ` rsandifo at gcc dot gnu.org
  2020-04-23 15:08 ` cvs-commit at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: rsandifo at gcc dot gnu.org @ 2020-04-22 17:26 UTC (permalink / raw)
  To: gcc-bugs

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

rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rsandifo at gcc dot gnu.org
         Resolution|---                         |FIXED
             Status|UNCONFIRMED                 |RESOLVED

--- Comment #3 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> ---
Fixed on master.  Thanks for the patch.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/94678] aarch64: unexpected result with -mgeneral-regs-only and sve
  2020-04-21  7:11 [Bug target/94678] New: aarch64: unexpected result with -mgeneral-regs-only and sve felix.yang at huawei dot com
                   ` (2 preceding siblings ...)
  2020-04-22 17:26 ` rsandifo at gcc dot gnu.org
@ 2020-04-23 15:08 ` cvs-commit at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-04-23 15:08 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Sandiford <rsandifo@gcc.gnu.org>:

https://gcc.gnu.org/g:857d1fa3f0a04569382bab12829e5bfd3725ecbf

commit r10-7917-g857d1fa3f0a04569382bab12829e5bfd3725ecbf
Author: Fei Yang <felix.yang@huawei.com>
Date:   Thu Apr 23 16:08:03 2020 +0100

    testsuite: Add extra aarch64 predefine tests

    Add extra testing in the following two tests to make sure CPP predefines
    redefinitions on #pragma works as expected when -mgeneral-regs-only
    option is specified (See PR94678):
    gcc.target/aarch64/pragma_cpp_predefs_2.c
    gcc.target/aarch64/pragma_cpp_predefs_3.c

    2020-04-23  Felix Yang  <felix.yang@huawei.com>

    gcc/testsuite/
            PR target/94678
            * gcc.target/aarch64/pragma_cpp_predefs_2.c: Fix typos, pop_pragma
->
            pop_options. Add tests for general-regs-only.
            * gcc.target/aarch64/pragma_cpp_predefs_3.c: Add tests for
            general-regs-only.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-04-23 15:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-21  7:11 [Bug target/94678] New: aarch64: unexpected result with -mgeneral-regs-only and sve felix.yang at huawei dot com
2020-04-21  7:12 ` [Bug target/94678] " felix.yang at huawei dot com
2020-04-22 17:25 ` cvs-commit at gcc dot gnu.org
2020-04-22 17:26 ` rsandifo at gcc dot gnu.org
2020-04-23 15:08 ` cvs-commit at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).