mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 03:47:02 -05:00
if-conv: Prevent vector types in scalar cond reduction [PR123301].
Currently we allow vector types in scalar conditional reductions by accident (via the GNU vector extension). This patch prevents that. PR tree-optimization/123301 gcc/ChangeLog: * tree-if-conv.cc (convert_scalar_cond_reduction): Disallow vector types. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr123301.c: New test.
This commit is contained in:
45
gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123301.c
Normal file
45
gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123301.c
Normal file
@@ -0,0 +1,45 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -march=rv64gcv -mabi=lp64d" } */
|
||||
|
||||
#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type))))
|
||||
#define BITCAST(T, F, arg) \
|
||||
((union { \
|
||||
F src; \
|
||||
T dst; \
|
||||
})arg) \
|
||||
.dst
|
||||
#include <riscv_bitmanip.h>
|
||||
BS_VEC(uint64_t, 2)
|
||||
backsmith_snippet_423(BS_VEC(int16_t, 2), BS_VEC(int32_t, 8), uint8_t)
|
||||
{}
|
||||
uint32_t backsmith_pure_1(BS_VEC(uint32_t, 2) BS_ARG_2, int8_t BS_ARG_3)
|
||||
{
|
||||
BS_VEC(uint64_t, 4) BS_VAR_0;
|
||||
int32_t BS_VAR_4;
|
||||
uint64_t BS_TEMP_105 = 8;
|
||||
for (uint64_t BS_INC_0 = 0; BS_INC_0 < BS_TEMP_105; BS_INC_0 += 1)
|
||||
if (BS_ARG_2[1])
|
||||
{
|
||||
BS_VAR_4 = BS_INC_0;
|
||||
BS_VEC(uint32_t, 2)
|
||||
BS_TEMP_107 = __builtin_convertvector(
|
||||
(BS_VEC(int32_t, 2)){ BS_VAR_4, BS_VAR_4 },
|
||||
BS_VEC(uint32_t, 2));
|
||||
BS_VEC(uint32_t, 2)
|
||||
BS_TEMP_108 = __builtin_convertvector(
|
||||
(BS_VEC(int8_t, 2)){ BS_ARG_3 }, BS_VEC(uint32_t, 2));
|
||||
if (BITCAST(uint64_t, BS_VEC(uint32_t, 2),
|
||||
((BS_VEC(uint32_t, 2)){
|
||||
BS_TEMP_107[0] ? BS_TEMP_108[0] : 0,
|
||||
BS_TEMP_107[1] ? BS_TEMP_108[1] : 0 }))
|
||||
< backsmith_snippet_423(
|
||||
__builtin_convertvector((BS_VEC(uint64_t, 2)){},
|
||||
BS_VEC(int16_t, 2)),
|
||||
(BS_VEC(int32_t, 8)){}, 0)[1])
|
||||
BS_VAR_0 |= __builtin_convertvector(
|
||||
(BS_VEC(int32_t, 4)){ BS_VAR_4 }, BS_VEC(uint64_t, 4));
|
||||
}
|
||||
if (BS_VAR_0[0])
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
@@ -1993,6 +1993,7 @@ convert_scalar_cond_reduction (gimple *reduc, gimple_stmt_iterator *gsi,
|
||||
ifn = get_conditional_internal_fn (reduction_op);
|
||||
if (loop_versioned && ifn != IFN_LAST
|
||||
&& vectorized_internal_fn_supported_p (ifn, TREE_TYPE (lhs))
|
||||
&& !VECTOR_TYPE_P (TREE_TYPE (lhs))
|
||||
&& !swap)
|
||||
{
|
||||
gcall *cond_call = gimple_build_call_internal (ifn, 4,
|
||||
|
||||
Reference in New Issue
Block a user