[Bug target/95523] New: aarch64:ICE in register_tuple_type,at config/aarch64/aarch64-sve-builtins.cc:3434
z.zhanghaijian at huawei dot com
gcc-bugzilla@gcc.gnu.org
Thu Jun 4 01:44:30 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95523
Bug ID: 95523
Summary: aarch64:ICE in register_tuple_type,at
config/aarch64/aarch64-sve-builtins.cc:3434
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: z.zhanghaijian at huawei dot com
Target Milestone: ---
ICE issue triggered under option -fpack-struct=n:
Example:
test.c:
#include "arm_sve.h"
gcc test.c -S -fpack-struct=2
In file included from test.c:1:
lib/gcc/aarch64-linux-gnu/11.0.0/include/arm_sve.h:40:9: internal compiler
error: in register_tuple_type, at config/aarch64/aarch64-sve-builtins.cc:3434
40 | #pragma GCC aarch64 "arm_sve.h"
| ^~~
0x17ef8b3 register_tuple_type
../.././gcc/config/aarch64/aarch64-sve-builtins.cc:3434
0x17f00ff aarch64_sve::handle_arm_sve_h()
../.././gcc/config/aarch64/aarch64-sve-builtins.cc:3516
0xae927f aarch64_pragma_aarch64
../.././gcc/config/aarch64/aarch64-c.c:281
0xaafe53 c_invoke_pragma_handler(unsigned int)
../.././gcc/c-family/c-pragma.c:1501
0x9f6133 c_parser_pragma
../.././gcc/c/c-parser.c:12509
0x9dc03f c_parser_external_declaration
../.././gcc/c/c-parser.c:1726
0x9dbb43 c_parser_translation_unit
../.././gcc/c/c-parser.c:1618
0xa14a23 c_parse_file()
../.././gcc/c/c-parser.c:21746
0xaa7ed3 c_common_parse_file()
../.././gcc/c-family/c-opts.c:1190
The #pragma GCC aarch64 "arm_sve.h" will tell GCC to insert the necessary type
and function definitions.
When register the tuple type, the function register_tuple_type will check
TYPE_ALIGN (tuple_type) == 128. The option -fpack-struct=n will change the
alignment of the tuple. When -fpack-struct=2, the value of TYPE_ALIGN
(tuple_type) is 16, which will cause ICE.
I think there is no need to judge TYPE_ALIGN, even if type_mode is SVE vector.
Any questions?
Proposed patch:
diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc
b/gcc/config/aarch64/aarch64-sve-builtins.cc
index bdb04e8170d..5bc5af91016 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins.cc
@@ -3432,8 +3432,7 @@ register_tuple_type (unsigned int num_vectors,
vector_type_index type)
make_type_sizeless (tuple_type);
layout_type (tuple_type);
gcc_assert (VECTOR_MODE_P (TYPE_MODE (tuple_type))
- && TYPE_MODE_RAW (tuple_type) == TYPE_MODE (tuple_type)
- && TYPE_ALIGN (tuple_type) == 128);
+ && TYPE_MODE_RAW (tuple_type) == TYPE_MODE (tuple_type));
/* Work out the structure name. */
char buffer[sizeof ("svbfloat16x4_t")];
More information about the Gcc-bugs
mailing list