rs6000: Don't ICE when we disassemble an MMA variable [PR101322]
When we expand an MMA disassemble built-in with C++ using a pointer that is cast to a valid MMA type, the type isn't passed down to the expand machinery and we end up using the base type of the pointer which leads to an ICE. This patch enforces we always use the correct MMA type regardless of the pointer type being used. 2022-08-31 Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/101322 * config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_mma_builtin): Enforce the use of a valid MMA pointer type. gcc/testsuite/ PR target/101322 * g++.target/powerpc/pr101322.C: New test.
This commit is contained in:
parent
e8c83ab9d5
commit
2985049049
2 changed files with 23 additions and 1 deletions
|
@ -1085,7 +1085,12 @@ rs6000_gimple_fold_mma_builtin (gimple_stmt_iterator *gsi,
|
|||
unsigned nvec = (fncode == RS6000_BIF_DISASSEMBLE_ACC) ? 4 : 2;
|
||||
tree dst_ptr = gimple_call_arg (stmt, 0);
|
||||
tree src_ptr = gimple_call_arg (stmt, 1);
|
||||
tree src_type = TREE_TYPE (src_ptr);
|
||||
tree src_type = (fncode == RS6000_BIF_DISASSEMBLE_ACC)
|
||||
? build_pointer_type (vector_quad_type_node)
|
||||
: build_pointer_type (vector_pair_type_node);
|
||||
if (TREE_TYPE (src_ptr) != src_type)
|
||||
src_ptr = build1 (NOP_EXPR, src_type, src_ptr);
|
||||
|
||||
tree src = create_tmp_reg_or_ssa_name (TREE_TYPE (src_type));
|
||||
gimplify_assign (src, build_simple_mem_ref (src_ptr), &new_seq);
|
||||
|
||||
|
|
17
gcc/testsuite/g++.target/powerpc/pr101322.C
Normal file
17
gcc/testsuite/g++.target/powerpc/pr101322.C
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* PR target/101322 */
|
||||
/* { dg-require-effective-target power10_ok } */
|
||||
/* { dg-options "-O2 -mdejagnu-cpu=power10" } */
|
||||
|
||||
/* Verify we don't ICE on the following test cases. */
|
||||
|
||||
void
|
||||
foo (char *resp, char *vpp)
|
||||
{
|
||||
__builtin_vsx_disassemble_pair (resp, (__vector_pair *) vpp);
|
||||
}
|
||||
|
||||
void
|
||||
bar (char *resp, char *vpp)
|
||||
{
|
||||
__builtin_mma_disassemble_acc (resp, (__vector_quad *)vpp);
|
||||
}
|
Loading…
Add table
Reference in a new issue