amdgcn: implement vector div and mod libfuncs
Also divmod, but only for scalar modes, for now (because there are no complex int vectors yet). gcc/ChangeLog: * config/gcn/gcn.cc (gcn_expand_divmod_libfunc): New function. (gcn_init_libfuncs): Add div and mod functions for all modes. Add placeholders for divmod functions. (TARGET_EXPAND_DIVMOD_LIBFUNC): Define. libgcc/ChangeLog: * config/gcn/lib2-divmod-di.c: Reimplement like lib2-divmod.c. * config/gcn/lib2-divmod.c: Likewise. * config/gcn/lib2-gcn.h: Add new types and prototypes for all the new vector libfuncs. * config/gcn/t-amdgcn: Add new files. * config/gcn/amdgcn_veclib.h: New file. * config/gcn/lib2-vec_divmod-di.c: New file. * config/gcn/lib2-vec_divmod-hi.c: New file. * config/gcn/lib2-vec_divmod-qi.c: New file. * config/gcn/lib2-vec_divmod.c: New file. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/predcom-2.c: Avoid vectors on amdgcn. * gcc.dg/unroll-8.c: Likewise. * gcc.dg/vect/slp-26.c: Change expected results on amdgdn. * lib/target-supports.exp (check_effective_target_vect_int_mod): Add amdgcn. (check_effective_target_divmod): Likewise. * gcc.target/gcn/simd-math-3-16.c: New test. * gcc.target/gcn/simd-math-3-2.c: New test. * gcc.target/gcn/simd-math-3-32.c: New test. * gcc.target/gcn/simd-math-3-4.c: New test. * gcc.target/gcn/simd-math-3-8.c: New test. * gcc.target/gcn/simd-math-3-char-16.c: New test. * gcc.target/gcn/simd-math-3-char-2.c: New test. * gcc.target/gcn/simd-math-3-char-32.c: New test. * gcc.target/gcn/simd-math-3-char-4.c: New test. * gcc.target/gcn/simd-math-3-char-8.c: New test. * gcc.target/gcn/simd-math-3-char-run-16.c: New test. * gcc.target/gcn/simd-math-3-char-run-2.c: New test. * gcc.target/gcn/simd-math-3-char-run-32.c: New test. * gcc.target/gcn/simd-math-3-char-run-4.c: New test. * gcc.target/gcn/simd-math-3-char-run-8.c: New test. * gcc.target/gcn/simd-math-3-char-run.c: New test. * gcc.target/gcn/simd-math-3-char.c: New test. * gcc.target/gcn/simd-math-3-long-16.c: New test. * gcc.target/gcn/simd-math-3-long-2.c: New test. * gcc.target/gcn/simd-math-3-long-32.c: New test. * gcc.target/gcn/simd-math-3-long-4.c: New test. * gcc.target/gcn/simd-math-3-long-8.c: New test. * gcc.target/gcn/simd-math-3-long-run-16.c: New test. * gcc.target/gcn/simd-math-3-long-run-2.c: New test. * gcc.target/gcn/simd-math-3-long-run-32.c: New test. * gcc.target/gcn/simd-math-3-long-run-4.c: New test. * gcc.target/gcn/simd-math-3-long-run-8.c: New test. * gcc.target/gcn/simd-math-3-long-run.c: New test. * gcc.target/gcn/simd-math-3-long.c: New test. * gcc.target/gcn/simd-math-3-run-16.c: New test. * gcc.target/gcn/simd-math-3-run-2.c: New test. * gcc.target/gcn/simd-math-3-run-32.c: New test. * gcc.target/gcn/simd-math-3-run-4.c: New test. * gcc.target/gcn/simd-math-3-run-8.c: New test. * gcc.target/gcn/simd-math-3-run.c: New test. * gcc.target/gcn/simd-math-3-short-16.c: New test. * gcc.target/gcn/simd-math-3-short-2.c: New test. * gcc.target/gcn/simd-math-3-short-32.c: New test. * gcc.target/gcn/simd-math-3-short-4.c: New test. * gcc.target/gcn/simd-math-3-short-8.c: New test. * gcc.target/gcn/simd-math-3-short-run-16.c: New test. * gcc.target/gcn/simd-math-3-short-run-2.c: New test. * gcc.target/gcn/simd-math-3-short-run-32.c: New test. * gcc.target/gcn/simd-math-3-short-run-4.c: New test. * gcc.target/gcn/simd-math-3-short-run-8.c: New test. * gcc.target/gcn/simd-math-3-short-run.c: New test. * gcc.target/gcn/simd-math-3-short.c: New test. * gcc.target/gcn/simd-math-3.c: New test. * gcc.target/gcn/simd-math-4-char-run.c: New test. * gcc.target/gcn/simd-math-4-char.c: New test. * gcc.target/gcn/simd-math-4-long-run.c: New test. * gcc.target/gcn/simd-math-4-long.c: New test. * gcc.target/gcn/simd-math-4-run.c: New test. * gcc.target/gcn/simd-math-4-short-run.c: New test. * gcc.target/gcn/simd-math-4-short.c: New test. * gcc.target/gcn/simd-math-4.c: New test. * gcc.target/gcn/simd-math-5-16.c: New test. * gcc.target/gcn/simd-math-5-32.c: New test. * gcc.target/gcn/simd-math-5-4.c: New test. * gcc.target/gcn/simd-math-5-8.c: New test. * gcc.target/gcn/simd-math-5-char-16.c: New test. * gcc.target/gcn/simd-math-5-char-32.c: New test. * gcc.target/gcn/simd-math-5-char-4.c: New test. * gcc.target/gcn/simd-math-5-char-8.c: New test. * gcc.target/gcn/simd-math-5-char-run-16.c: New test. * gcc.target/gcn/simd-math-5-char-run-32.c: New test. * gcc.target/gcn/simd-math-5-char-run-4.c: New test. * gcc.target/gcn/simd-math-5-char-run-8.c: New test. * gcc.target/gcn/simd-math-5-char-run.c: New test. * gcc.target/gcn/simd-math-5-char.c: New test. * gcc.target/gcn/simd-math-5-long-16.c: New test. * gcc.target/gcn/simd-math-5-long-32.c: New test. * gcc.target/gcn/simd-math-5-long-4.c: New test. * gcc.target/gcn/simd-math-5-long-8.c: New test. * gcc.target/gcn/simd-math-5-long-run-16.c: New test. * gcc.target/gcn/simd-math-5-long-run-32.c: New test. * gcc.target/gcn/simd-math-5-long-run-4.c: New test. * gcc.target/gcn/simd-math-5-long-run-8.c: New test. * gcc.target/gcn/simd-math-5-long-run.c: New test. * gcc.target/gcn/simd-math-5-long.c: New test. * gcc.target/gcn/simd-math-5-run-16.c: New test. * gcc.target/gcn/simd-math-5-run-32.c: New test. * gcc.target/gcn/simd-math-5-run-4.c: New test. * gcc.target/gcn/simd-math-5-run-8.c: New test. * gcc.target/gcn/simd-math-5-run.c: New test. * gcc.target/gcn/simd-math-5-short-16.c: New test. * gcc.target/gcn/simd-math-5-short-32.c: New test. * gcc.target/gcn/simd-math-5-short-4.c: New test. * gcc.target/gcn/simd-math-5-short-8.c: New test. * gcc.target/gcn/simd-math-5-short-run-16.c: New test. * gcc.target/gcn/simd-math-5-short-run-32.c: New test. * gcc.target/gcn/simd-math-5-short-run-4.c: New test. * gcc.target/gcn/simd-math-5-short-run-8.c: New test. * gcc.target/gcn/simd-math-5-short-run.c: New test. * gcc.target/gcn/simd-math-5-short.c: New test. * gcc.target/gcn/simd-math-5.c: New test.
This commit is contained in:
parent
1ff8ba48a2
commit
d9d6774527
110 changed files with 2260 additions and 65 deletions
|
@ -3786,6 +3786,47 @@ gcn_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
|
|||
TRAMPOLINE_SIZE)));
|
||||
}
|
||||
|
||||
/* Implement TARGET_EXPAND_DIVMOD_LIBFUNC.
|
||||
|
||||
There are divmod libfuncs for all modes except TImode. They return the
|
||||
two values packed into a larger integer/vector. */
|
||||
|
||||
void
|
||||
gcn_expand_divmod_libfunc (rtx libfunc, machine_mode mode, rtx op0, rtx op1,
|
||||
rtx *quot, rtx *rem)
|
||||
{
|
||||
machine_mode innermode = (VECTOR_MODE_P (mode)
|
||||
? GET_MODE_INNER (mode) : mode);
|
||||
machine_mode wideinnermode = VOIDmode;
|
||||
machine_mode widemode = VOIDmode;
|
||||
|
||||
switch (innermode)
|
||||
{
|
||||
case E_QImode:
|
||||
case E_HImode:
|
||||
case E_SImode:
|
||||
wideinnermode = DImode;
|
||||
break;
|
||||
case E_DImode:
|
||||
wideinnermode = TImode;
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
if (VECTOR_MODE_P (mode))
|
||||
widemode = VnMODE (GET_MODE_NUNITS (mode), wideinnermode);
|
||||
else
|
||||
widemode = wideinnermode;
|
||||
|
||||
emit_library_call_value (libfunc, gen_rtx_REG (widemode, RETURN_VALUE_REG),
|
||||
LCT_NORMAL, widemode, op0, mode, op1, mode);
|
||||
|
||||
*quot = gen_rtx_REG (mode, RETURN_VALUE_REG);
|
||||
*rem = gen_rtx_REG (mode,
|
||||
RETURN_VALUE_REG + (wideinnermode == TImode ? 2 : 1));
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ Miscellaneous. */
|
||||
|
||||
|
@ -4224,6 +4265,207 @@ gcn_init_libfuncs (void)
|
|||
set_optab_libfunc (popcount_optab, TImode, "__popcountti2");
|
||||
set_optab_libfunc (parity_optab, TImode, "__parityti2");
|
||||
set_optab_libfunc (bswap_optab, TImode, "__bswapti2");
|
||||
|
||||
set_optab_libfunc (sdivmod_optab, SImode, "__divmodsi4");
|
||||
set_optab_libfunc (udivmod_optab, SImode, "__udivmodsi4");
|
||||
set_optab_libfunc (sdivmod_optab, DImode, "__divmoddi4");
|
||||
set_optab_libfunc (udivmod_optab, DImode, "__udivmoddi4");
|
||||
|
||||
set_optab_libfunc (sdiv_optab, V2QImode, "__divv2qi3");
|
||||
set_optab_libfunc (udiv_optab, V2QImode, "__udivv2qi3");
|
||||
set_optab_libfunc (smod_optab, V2QImode, "__modv2qi3");
|
||||
set_optab_libfunc (umod_optab, V2QImode, "__umodv2qi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V2QImode, "__divmodv2qi4");
|
||||
set_optab_libfunc (udivmod_optab, V2QImode, "__udivmodv2qi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V4QImode, "__divv4qi3");
|
||||
set_optab_libfunc (udiv_optab, V4QImode, "__udivv4qi3");
|
||||
set_optab_libfunc (smod_optab, V4QImode, "__modv4qi3");
|
||||
set_optab_libfunc (umod_optab, V4QImode, "__umodv4qi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V4QImode, "__divmodv4qi4");
|
||||
set_optab_libfunc (udivmod_optab, V4QImode, "__udivmodv4qi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V8QImode, "__divv8qi3");
|
||||
set_optab_libfunc (udiv_optab, V8QImode, "__udivv8qi3");
|
||||
set_optab_libfunc (smod_optab, V8QImode, "__modv8qi3");
|
||||
set_optab_libfunc (umod_optab, V8QImode, "__umodv8qi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V8QImode, "__divmodv8qi4");
|
||||
set_optab_libfunc (udivmod_optab, V8QImode, "__udivmodv8qi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V16QImode, "__divv16qi3");
|
||||
set_optab_libfunc (udiv_optab, V16QImode, "__udivv16qi3");
|
||||
set_optab_libfunc (smod_optab, V16QImode, "__modv16qi3");
|
||||
set_optab_libfunc (umod_optab, V16QImode, "__umodv16qi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V16QImode, "__divmodv16qi4");
|
||||
set_optab_libfunc (udivmod_optab, V16QImode, "__udivmodv16qi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V32QImode, "__divv32qi3");
|
||||
set_optab_libfunc (udiv_optab, V32QImode, "__udivv32qi3");
|
||||
set_optab_libfunc (smod_optab, V32QImode, "__modv32qi3");
|
||||
set_optab_libfunc (umod_optab, V32QImode, "__umodv32qi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V32QImode, "__divmodv32qi4");
|
||||
set_optab_libfunc (udivmod_optab, V32QImode, "__udivmodv32qi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V64QImode, "__divv64qi3");
|
||||
set_optab_libfunc (udiv_optab, V64QImode, "__udivv64qi3");
|
||||
set_optab_libfunc (smod_optab, V64QImode, "__modv64qi3");
|
||||
set_optab_libfunc (umod_optab, V64QImode, "__umodv64qi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V64QImode, "__divmodv64qi4");
|
||||
set_optab_libfunc (udivmod_optab, V64QImode, "__udivmodv64qi4");
|
||||
#endif
|
||||
|
||||
set_optab_libfunc (sdiv_optab, V2HImode, "__divv2hi3");
|
||||
set_optab_libfunc (udiv_optab, V2HImode, "__udivv2hi3");
|
||||
set_optab_libfunc (smod_optab, V2HImode, "__modv2hi3");
|
||||
set_optab_libfunc (umod_optab, V2HImode, "__umodv2hi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V2HImode, "__divmodv2hi4");
|
||||
set_optab_libfunc (udivmod_optab, V2HImode, "__udivmodv2hi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V4HImode, "__divv4hi3");
|
||||
set_optab_libfunc (udiv_optab, V4HImode, "__udivv4hi3");
|
||||
set_optab_libfunc (smod_optab, V4HImode, "__modv4hi3");
|
||||
set_optab_libfunc (umod_optab, V4HImode, "__umodv4hi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V4HImode, "__divmodv4hi4");
|
||||
set_optab_libfunc (udivmod_optab, V4HImode, "__udivmodv4hi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V8HImode, "__divv8hi3");
|
||||
set_optab_libfunc (udiv_optab, V8HImode, "__udivv8hi3");
|
||||
set_optab_libfunc (smod_optab, V8HImode, "__modv8hi3");
|
||||
set_optab_libfunc (umod_optab, V8HImode, "__umodv8hi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V8HImode, "__divmodv8hi4");
|
||||
set_optab_libfunc (udivmod_optab, V8HImode, "__udivmodv8hi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V16HImode, "__divv16hi3");
|
||||
set_optab_libfunc (udiv_optab, V16HImode, "__udivv16hi3");
|
||||
set_optab_libfunc (smod_optab, V16HImode, "__modv16hi3");
|
||||
set_optab_libfunc (umod_optab, V16HImode, "__umodv16hi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V16HImode, "__divmodv16hi4");
|
||||
set_optab_libfunc (udivmod_optab, V16HImode, "__udivmodv16hi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V32HImode, "__divv32hi3");
|
||||
set_optab_libfunc (udiv_optab, V32HImode, "__udivv32hi3");
|
||||
set_optab_libfunc (smod_optab, V32HImode, "__modv32hi3");
|
||||
set_optab_libfunc (umod_optab, V32HImode, "__umodv32hi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V32HImode, "__divmodv32hi4");
|
||||
set_optab_libfunc (udivmod_optab, V32HImode, "__udivmodv32hi4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V64HImode, "__divv64hi3");
|
||||
set_optab_libfunc (udiv_optab, V64HImode, "__udivv64hi3");
|
||||
set_optab_libfunc (smod_optab, V64HImode, "__modv64hi3");
|
||||
set_optab_libfunc (umod_optab, V64HImode, "__umodv64hi3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V64HImode, "__divmodv64hi4");
|
||||
set_optab_libfunc (udivmod_optab, V64HImode, "__udivmodv64hi4");
|
||||
#endif
|
||||
|
||||
set_optab_libfunc (sdiv_optab, V2SImode, "__divv2si3");
|
||||
set_optab_libfunc (udiv_optab, V2SImode, "__udivv2si3");
|
||||
set_optab_libfunc (smod_optab, V2SImode, "__modv2si3");
|
||||
set_optab_libfunc (umod_optab, V2SImode, "__umodv2si3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V2SImode, "__divmodv2si4");
|
||||
set_optab_libfunc (udivmod_optab, V2SImode, "__udivmodv2si4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V4SImode, "__divv4si3");
|
||||
set_optab_libfunc (udiv_optab, V4SImode, "__udivv4si3");
|
||||
set_optab_libfunc (smod_optab, V4SImode, "__modv4si3");
|
||||
set_optab_libfunc (umod_optab, V4SImode, "__umodv4si3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V4SImode, "__divmodv4si4");
|
||||
set_optab_libfunc (udivmod_optab, V4SImode, "__udivmodv4si4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V8SImode, "__divv8si3");
|
||||
set_optab_libfunc (udiv_optab, V8SImode, "__udivv8si3");
|
||||
set_optab_libfunc (smod_optab, V8SImode, "__modv8si3");
|
||||
set_optab_libfunc (umod_optab, V8SImode, "__umodv8si3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V8SImode, "__divmodv8si4");
|
||||
set_optab_libfunc (udivmod_optab, V8SImode, "__udivmodv8si4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V16SImode, "__divv16si3");
|
||||
set_optab_libfunc (udiv_optab, V16SImode, "__udivv16si3");
|
||||
set_optab_libfunc (smod_optab, V16SImode, "__modv16si3");
|
||||
set_optab_libfunc (umod_optab, V16SImode, "__umodv16si3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V16SImode, "__divmodv16si4");
|
||||
set_optab_libfunc (udivmod_optab, V16SImode, "__udivmodv16si4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V32SImode, "__divv32si3");
|
||||
set_optab_libfunc (udiv_optab, V32SImode, "__udivv32si3");
|
||||
set_optab_libfunc (smod_optab, V32SImode, "__modv32si3");
|
||||
set_optab_libfunc (umod_optab, V32SImode, "__umodv32si3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V32SImode, "__divmodv32si4");
|
||||
set_optab_libfunc (udivmod_optab, V32SImode, "__udivmodv32si4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V64SImode, "__divv64si3");
|
||||
set_optab_libfunc (udiv_optab, V64SImode, "__udivv64si3");
|
||||
set_optab_libfunc (smod_optab, V64SImode, "__modv64si3");
|
||||
set_optab_libfunc (umod_optab, V64SImode, "__umodv64si3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V64SImode, "__divmodv64si4");
|
||||
set_optab_libfunc (udivmod_optab, V64SImode, "__udivmodv64si4");
|
||||
#endif
|
||||
|
||||
set_optab_libfunc (sdiv_optab, V2DImode, "__divv2di3");
|
||||
set_optab_libfunc (udiv_optab, V2DImode, "__udivv2di3");
|
||||
set_optab_libfunc (smod_optab, V2DImode, "__modv2di3");
|
||||
set_optab_libfunc (umod_optab, V2DImode, "__umodv2di3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V2DImode, "__divmodv2di4");
|
||||
set_optab_libfunc (udivmod_optab, V2DImode, "__udivmodv2di4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V4DImode, "__divv4di3");
|
||||
set_optab_libfunc (udiv_optab, V4DImode, "__udivv4di3");
|
||||
set_optab_libfunc (smod_optab, V4DImode, "__modv4di3");
|
||||
set_optab_libfunc (umod_optab, V4DImode, "__umodv4di3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V4DImode, "__divmodv4di4");
|
||||
set_optab_libfunc (udivmod_optab, V4DImode, "__udivmodv4di4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V8DImode, "__divv8di3");
|
||||
set_optab_libfunc (udiv_optab, V8DImode, "__udivv8di3");
|
||||
set_optab_libfunc (smod_optab, V8DImode, "__modv8di3");
|
||||
set_optab_libfunc (umod_optab, V8DImode, "__umodv8di3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V8DImode, "__divmodv8di4");
|
||||
set_optab_libfunc (udivmod_optab, V8DImode, "__udivmodv8di4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V16DImode, "__divv16di3");
|
||||
set_optab_libfunc (udiv_optab, V16DImode, "__udivv16di3");
|
||||
set_optab_libfunc (smod_optab, V16DImode, "__modv16di3");
|
||||
set_optab_libfunc (umod_optab, V16DImode, "__umodv16di3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V16DImode, "__divmodv16di4");
|
||||
set_optab_libfunc (udivmod_optab, V16DImode, "__udivmodv16di4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V32DImode, "__divv32di3");
|
||||
set_optab_libfunc (udiv_optab, V32DImode, "__udivv32di3");
|
||||
set_optab_libfunc (smod_optab, V32DImode, "__modv32di3");
|
||||
set_optab_libfunc (umod_optab, V32DImode, "__umodv32di3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V32DImode, "__divmodv32di4");
|
||||
set_optab_libfunc (udivmod_optab, V32DImode, "__udivmodv32di4");
|
||||
#endif
|
||||
set_optab_libfunc (sdiv_optab, V64DImode, "__divv64di3");
|
||||
set_optab_libfunc (udiv_optab, V64DImode, "__udivv64di3");
|
||||
set_optab_libfunc (smod_optab, V64DImode, "__modv64di3");
|
||||
set_optab_libfunc (umod_optab, V64DImode, "__umodv64di3");
|
||||
#if 0
|
||||
set_optab_libfunc (sdivmod_optab, V64DImode, "__divmodv64di4");
|
||||
set_optab_libfunc (udivmod_optab, V64DImode, "__udivmodv64di4");
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Expand the CMP_SWAP GCN builtins. We have our own versions that do
|
||||
|
@ -7495,6 +7737,8 @@ gcn_dwarf_register_span (rtx rtl)
|
|||
#define TARGET_EMUTLS_VAR_INIT gcn_emutls_var_init
|
||||
#undef TARGET_EXPAND_BUILTIN
|
||||
#define TARGET_EXPAND_BUILTIN gcn_expand_builtin
|
||||
#undef TARGET_EXPAND_DIVMOD_LIBFUNC
|
||||
#define TARGET_EXPAND_DIVMOD_LIBFUNC gcn_expand_divmod_libfunc
|
||||
#undef TARGET_FRAME_POINTER_REQUIRED
|
||||
#define TARGET_FRAME_POINTER_REQUIRED gcn_frame_pointer_rqd
|
||||
#undef TARGET_FUNCTION_ARG
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -funroll-loops --param max-unroll-times=8 -fpredictive-commoning -fdump-tree-pcom-details -fno-tree-pre" } */
|
||||
/* { dg-additional-options "-fno-tree-vectorize" { target amdgcn-*-* } } */
|
||||
|
||||
void abort (void);
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-rtl-loop2_unroll -funroll-loops" } */
|
||||
/* { dg-additional-options "-fno-tree-vectorize" { target amdgcn-*-* } } */
|
||||
|
||||
struct a {int a[7];};
|
||||
int t(struct a *a, int n)
|
||||
{
|
||||
|
|
|
@ -46,7 +46,7 @@ int main (void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! mips_msa } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { mips_msa } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! mips_msa } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { mips_msa } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { mips_msa || amdgcn-*-* } } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { mips_msa || amdgcn-*-* } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { mips_msa || amdgcn-*-* } } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { mips_msa || amdgcn-*-* } } } } */
|
||||
|
|
13
gcc/testsuite/gcc.target/gcn/simd-math-3-16.c
Normal file
13
gcc/testsuite/gcc.target/gcn/simd-math-3-16.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
#define STYPE v16si
|
||||
#define UTYPE v16usi
|
||||
#define N 16
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv16si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv16si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv16si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv16si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv16si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divsi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivsi3@rel32@lo} 1 } } */
|
13
gcc/testsuite/gcc.target/gcn/simd-math-3-2.c
Normal file
13
gcc/testsuite/gcc.target/gcn/simd-math-3-2.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
#define STYPE v2si
|
||||
#define UTYPE v2usi
|
||||
#define N 2
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv2si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv2si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv2si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv2si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv2si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv2si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divsi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivsi3@rel32@lo} 1 } } */
|
13
gcc/testsuite/gcc.target/gcn/simd-math-3-32.c
Normal file
13
gcc/testsuite/gcc.target/gcn/simd-math-3-32.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
#define STYPE v32si
|
||||
#define UTYPE v32usi
|
||||
#define N 32
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv32si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv32si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv32si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv32si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv32si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divsi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivsi3@rel32@lo} 1 } } */
|
13
gcc/testsuite/gcc.target/gcn/simd-math-3-4.c
Normal file
13
gcc/testsuite/gcc.target/gcn/simd-math-3-4.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
#define STYPE v4si
|
||||
#define UTYPE v4usi
|
||||
#define N 4
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv4si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv4si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv4si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv4si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv4si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divsi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivsi3@rel32@lo} 1 } } */
|
13
gcc/testsuite/gcc.target/gcn/simd-math-3-8.c
Normal file
13
gcc/testsuite/gcc.target/gcn/simd-math-3-8.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
#define STYPE v8si
|
||||
#define UTYPE v8usi
|
||||
#define N 8
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv8si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv8si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv8si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv8si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv8si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divsi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivsi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-16.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-16.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v16qi
|
||||
#define UTYPE v16uqi
|
||||
#define N 16
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv16qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv16qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv16qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv16qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv16qi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-2.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-2.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v2qi
|
||||
#define UTYPE v2uqi
|
||||
#define N 2
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv2qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv2qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv2qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv2qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv2qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv2qi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-32.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-32.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v32qi
|
||||
#define UTYPE v32uqi
|
||||
#define N 32
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv32qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv32qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv32qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv32qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv32qi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-4.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-4.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v4qi
|
||||
#define UTYPE v4uqi
|
||||
#define N 4
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv4qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv4qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv4qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv4qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv4qi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-8.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-char-8.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v8qi
|
||||
#define UTYPE v8uqi
|
||||
#define N 8
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv8qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv8qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv8qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv8qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv8qi3@rel32@lo} 1 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-16.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-16.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-char-16.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-2.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-2.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-char-2.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-32.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-32.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-char-32.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-4.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-4.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-char-4.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-8.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run-8.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-char-8.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-char-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-char.c"
|
10
gcc/testsuite/gcc.target/gcn/simd-math-3-char.c
Normal file
10
gcc/testsuite/gcc.target/gcn/simd-math-3-char.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
#define STYPE v64qi
|
||||
#define UTYPE v64uqi
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64qi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-16.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-16.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v16di
|
||||
#define UTYPE v16udi
|
||||
#define N 16
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv16di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv16di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv16di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv16di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv16di3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-2.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-2.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v2di
|
||||
#define UTYPE v2udi
|
||||
#define N 2
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv2di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv2di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv2di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv2di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv2di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv2di3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-32.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-32.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v32di
|
||||
#define UTYPE v32udi
|
||||
#define N 32
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv32di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv32di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv32di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv32di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv32di3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-4.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-4.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v4di
|
||||
#define UTYPE v4udi
|
||||
#define N 4
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv4di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv4di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv4di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv4di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv4di3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-8.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-long-8.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v8di
|
||||
#define UTYPE v8udi
|
||||
#define N 8
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv8di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv8di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv8di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv8di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv8di3@rel32@lo} 1 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-16.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-16.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-long-16.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-2.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-2.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-long-2.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-32.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-32.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-long-32.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-4.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-4.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-long-4.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-8.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run-8.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-long-8.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-long-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-long.c"
|
10
gcc/testsuite/gcc.target/gcn/simd-math-3-long.c
Normal file
10
gcc/testsuite/gcc.target/gcn/simd-math-3-long.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
#define STYPE v64di
|
||||
#define UTYPE v64udi
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64di3@rel32@lo} 1 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run-16.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run-16.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-16.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run-2.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run-2.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-2.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run-32.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run-32.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-32.c"
|
3
gcc/testsuite/gcc.target/gcn/simd-math-3-run-4.c
Normal file
3
gcc/testsuite/gcc.target/gcn/simd-math-3-run-4.c
Normal file
|
@ -0,0 +1,3 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-4.c"
|
||||
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run-8.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run-8.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-8.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3.c"
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-16.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-16.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v16hi
|
||||
#define UTYPE v16uhi
|
||||
#define N 16
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv16hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv16hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv16hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv16hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv16hi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-2.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-2.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v2hi
|
||||
#define UTYPE v2uhi
|
||||
#define N 2
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv2hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv2hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv2hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv2hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv2hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv2hi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-32.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-32.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v32hi
|
||||
#define UTYPE v32uhi
|
||||
#define N 32
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv32hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv32hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv32hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv32hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv32hi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-4.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-4.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v4hi
|
||||
#define UTYPE v4uhi
|
||||
#define N 4
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv4hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv4hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv4hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv4hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv4hi3@rel32@lo} 1 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-8.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-3-short-8.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define STYPE v8hi
|
||||
#define UTYPE v8uhi
|
||||
#define N 8
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv8hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv8hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv8hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv8hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv8hi3@rel32@lo} 1 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-16.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-16.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-short-16.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-2.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-2.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-short-2.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-32.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-32.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-short-32.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-4.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-4.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-short-4.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-8.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run-8.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-short-8.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-3-short-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-3-short.c"
|
10
gcc/testsuite/gcc.target/gcn/simd-math-3-short.c
Normal file
10
gcc/testsuite/gcc.target/gcn/simd-math-3-short.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
#define STYPE v64hi
|
||||
#define UTYPE v64uhi
|
||||
#include "simd-math-3.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64hi3@rel32@lo} 1 } } */
|
186
gcc/testsuite/gcc.target/gcn/simd-math-3.c
Normal file
186
gcc/testsuite/gcc.target/gcn/simd-math-3.c
Normal file
|
@ -0,0 +1,186 @@
|
|||
/* Test that signed and unsigned division and modulus use the correct
|
||||
vector routines and give the correct results. */
|
||||
|
||||
/* Setting it this way ensures the run tests use the same flag as the
|
||||
compile tests. */
|
||||
#pragma GCC optimize("O2")
|
||||
|
||||
typedef signed char v2qi __attribute__ ((vector_size (2)));
|
||||
typedef signed char v4qi __attribute__ ((vector_size (4)));
|
||||
typedef signed char v8qi __attribute__ ((vector_size (8)));
|
||||
typedef signed char v16qi __attribute__ ((vector_size (16)));
|
||||
typedef signed char v32qi __attribute__ ((vector_size (32)));
|
||||
typedef signed char v64qi __attribute__ ((vector_size (64)));
|
||||
|
||||
typedef unsigned char v2uqi __attribute__ ((vector_size (2)));
|
||||
typedef unsigned char v4uqi __attribute__ ((vector_size (4)));
|
||||
typedef unsigned char v8uqi __attribute__ ((vector_size (8)));
|
||||
typedef unsigned char v16uqi __attribute__ ((vector_size (16)));
|
||||
typedef unsigned char v32uqi __attribute__ ((vector_size (32)));
|
||||
typedef unsigned char v64uqi __attribute__ ((vector_size (64)));
|
||||
|
||||
typedef short v2hi __attribute__ ((vector_size (4)));
|
||||
typedef short v4hi __attribute__ ((vector_size (8)));
|
||||
typedef short v8hi __attribute__ ((vector_size (16)));
|
||||
typedef short v16hi __attribute__ ((vector_size (32)));
|
||||
typedef short v32hi __attribute__ ((vector_size (64)));
|
||||
typedef short v64hi __attribute__ ((vector_size (128)));
|
||||
|
||||
typedef unsigned short v2uhi __attribute__ ((vector_size (4)));
|
||||
typedef unsigned short v4uhi __attribute__ ((vector_size (8)));
|
||||
typedef unsigned short v8uhi __attribute__ ((vector_size (16)));
|
||||
typedef unsigned short v16uhi __attribute__ ((vector_size (32)));
|
||||
typedef unsigned short v32uhi __attribute__ ((vector_size (64)));
|
||||
typedef unsigned short v64uhi __attribute__ ((vector_size (128)));
|
||||
|
||||
typedef int v2si __attribute__ ((vector_size (8)));
|
||||
typedef int v4si __attribute__ ((vector_size (16)));
|
||||
typedef int v8si __attribute__ ((vector_size (32)));
|
||||
typedef int v16si __attribute__ ((vector_size (64)));
|
||||
typedef int v32si __attribute__ ((vector_size (128)));
|
||||
typedef int v64si __attribute__ ((vector_size (256)));
|
||||
|
||||
typedef unsigned int v2usi __attribute__ ((vector_size (8)));
|
||||
typedef unsigned int v4usi __attribute__ ((vector_size (16)));
|
||||
typedef unsigned int v8usi __attribute__ ((vector_size (32)));
|
||||
typedef unsigned int v16usi __attribute__ ((vector_size (64)));
|
||||
typedef unsigned int v32usi __attribute__ ((vector_size (128)));
|
||||
typedef unsigned int v64usi __attribute__ ((vector_size (256)));
|
||||
|
||||
typedef long v2di __attribute__ ((vector_size (16)));
|
||||
typedef long v4di __attribute__ ((vector_size (32)));
|
||||
typedef long v8di __attribute__ ((vector_size (64)));
|
||||
typedef long v16di __attribute__ ((vector_size (128)));
|
||||
typedef long v32di __attribute__ ((vector_size (256)));
|
||||
typedef long v64di __attribute__ ((vector_size (512)));
|
||||
|
||||
typedef unsigned long v2udi __attribute__ ((vector_size (16)));
|
||||
typedef unsigned long v4udi __attribute__ ((vector_size (32)));
|
||||
typedef unsigned long v8udi __attribute__ ((vector_size (64)));
|
||||
typedef unsigned long v16udi __attribute__ ((vector_size (128)));
|
||||
typedef unsigned long v32udi __attribute__ ((vector_size (256)));
|
||||
typedef unsigned long v64udi __attribute__ ((vector_size (512)));
|
||||
|
||||
#ifndef STYPE
|
||||
#define STYPE v64si
|
||||
#define UTYPE v64usi
|
||||
#endif
|
||||
#ifndef N
|
||||
#define N 64
|
||||
#endif
|
||||
|
||||
STYPE a;
|
||||
STYPE b;
|
||||
UTYPE ua;
|
||||
UTYPE ub;
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
STYPE squot, srem;
|
||||
UTYPE usquot, usrem;
|
||||
STYPE vquot, vrem;
|
||||
UTYPE uvquot, uvrem;
|
||||
STYPE vquot2, vrem2;
|
||||
UTYPE uvquot2, uvrem2;
|
||||
STYPE refquot, refrem;
|
||||
UTYPE urefquot, urefrem;
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
a[i] = i * (i >> 2) + (i >> 1);
|
||||
ua[i] = a[i];
|
||||
b[i] = i;
|
||||
ub[i] = i;
|
||||
}
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
/* Calculate reference values using regular scalar div and mod. */
|
||||
refquot[i] = a[i] / b[i];
|
||||
__asm__ ("" ::: "memory");
|
||||
refrem[i] = a[i] % b[i];
|
||||
urefquot[i] = ua[i] / ub[i];
|
||||
__asm__ ("" ::: "memory");
|
||||
urefrem[i] = ua[i] % ub[i];
|
||||
}
|
||||
|
||||
__asm__ ("" ::: "memory");
|
||||
/* Scalar with divmod. */
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
squot[i] = a[i] / b[i];
|
||||
srem[i] = a[i] % b[i];
|
||||
usquot[i] = ua[i] / ub[i];
|
||||
usrem[i] = ua[i] % ub[i];
|
||||
}
|
||||
|
||||
__asm__ ("" ::: "memory");
|
||||
/* Vectorized with divmod. */
|
||||
vquot = a / b;
|
||||
vrem = a % b;
|
||||
uvquot = ua / ub;
|
||||
uvrem = ua % ub;
|
||||
|
||||
__asm__ ("" ::: "memory");
|
||||
/* Vectorized with separte div and mod. */
|
||||
vquot2 = a / b;
|
||||
__asm__ ("" ::: "memory");
|
||||
vrem2 = a % b;
|
||||
uvquot2 = ua / ub;
|
||||
__asm__ ("" ::: "memory");
|
||||
uvrem2 = ua % ub;
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DUMP(VAR) \
|
||||
__builtin_printf ("%8s: ", #VAR); \
|
||||
for (i = 0; i < N; i++) \
|
||||
__builtin_printf ("%d ", (int)VAR[i]); \
|
||||
__builtin_printf ("\n");
|
||||
DUMP (refquot)
|
||||
DUMP (squot)
|
||||
DUMP (vquot)
|
||||
DUMP (vquot2)
|
||||
__builtin_printf ("\n");
|
||||
DUMP (urefquot)
|
||||
DUMP (usquot)
|
||||
DUMP (uvquot)
|
||||
DUMP (uvquot2)
|
||||
__builtin_printf ("\n");
|
||||
DUMP (refrem)
|
||||
DUMP (srem)
|
||||
DUMP (vrem)
|
||||
DUMP (vrem2)
|
||||
__builtin_printf ("\n");
|
||||
DUMP (urefrem)
|
||||
DUMP (usrem)
|
||||
DUMP (uvrem)
|
||||
DUMP (uvrem2)
|
||||
__builtin_printf ("\n");
|
||||
#endif
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
if (squot[i] != refquot[i]
|
||||
|| vquot[i] != refquot[i]
|
||||
|| vquot2[i] != refquot[i]
|
||||
|| usquot[i] != urefquot[i]
|
||||
|| uvquot[i] != urefquot[i]
|
||||
|| uvquot2[i] != urefquot[i]
|
||||
|| srem[i] != refrem[i]
|
||||
|| vrem[i] != refrem[i]
|
||||
|| vrem2[i] != refrem[i]
|
||||
|| usrem[i] != urefrem[i]
|
||||
|| uvrem[i] != urefrem[i]
|
||||
|| uvrem2[i] != urefrem[i])
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divsi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivsi3@rel32@lo} 1 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-4-char-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-4-char-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-4-char.c"
|
9
gcc/testsuite/gcc.target/gcn/simd-math-4-char.c
Normal file
9
gcc/testsuite/gcc.target/gcn/simd-math-4-char.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
#define TYPE v64qi
|
||||
#include "simd-math-4.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64qi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64qi4@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64qi3@rel32@lo} 0 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-4-long-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-4-long-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-4-long.c"
|
9
gcc/testsuite/gcc.target/gcn/simd-math-4-long.c
Normal file
9
gcc/testsuite/gcc.target/gcn/simd-math-4-long.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
#define TYPE v64di
|
||||
#include "simd-math-4.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64di4@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64di3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64di3@rel32@lo} 0 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-4-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-4-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-4.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-4-short-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-4-short-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-4-short.c"
|
9
gcc/testsuite/gcc.target/gcn/simd-math-4-short.c
Normal file
9
gcc/testsuite/gcc.target/gcn/simd-math-4-short.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
#define TYPE v64hi
|
||||
#include "simd-math-4.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64hi4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64hi4@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64hi3@rel32@lo} 0 } } */
|
99
gcc/testsuite/gcc.target/gcn/simd-math-4.c
Normal file
99
gcc/testsuite/gcc.target/gcn/simd-math-4.c
Normal file
|
@ -0,0 +1,99 @@
|
|||
/* Test that signed division and modulus give the correct result with
|
||||
different variations of signedness. */
|
||||
|
||||
/* Setting it this way ensures the run tests use the same flag as the
|
||||
compile tests. */
|
||||
#pragma GCC optimize("O2")
|
||||
|
||||
typedef char v64qi __attribute__ ((vector_size (64)));
|
||||
typedef short v64hi __attribute__ ((vector_size (128)));
|
||||
typedef int v64si __attribute__ ((vector_size (256)));
|
||||
typedef long v64di __attribute__ ((vector_size (512)));
|
||||
|
||||
#ifndef TYPE
|
||||
#define TYPE v64si
|
||||
#endif
|
||||
#define N 64
|
||||
|
||||
TYPE a;
|
||||
TYPE b;
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
TYPE squot, srem;
|
||||
TYPE usquot, usrem;
|
||||
TYPE vquot, vrem;
|
||||
TYPE vquot2, vrem2;
|
||||
TYPE refquot, refrem;
|
||||
|
||||
for (i = 0; i < 64; i++)
|
||||
{
|
||||
a[i] = i * (i >> 2) * (i&1 ? -1 : 1);
|
||||
b[i] = i * (i&2 ? -1 : 1);
|
||||
}
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
/* Calculate reference values using regular scalar div and mod. */
|
||||
refquot[i] = a[i] / b[i];
|
||||
__asm__ ("" ::: "memory");
|
||||
refrem[i] = a[i] % b[i];
|
||||
}
|
||||
|
||||
__asm__ ("" ::: "memory");
|
||||
/* Scalar with divmod. */
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
squot[i] = a[i] / b[i];
|
||||
srem[i] = a[i] % b[i];
|
||||
}
|
||||
|
||||
__asm__ ("" ::: "memory");
|
||||
/* Vectorized with divmod. */
|
||||
vquot = a / b;
|
||||
vrem = a % b;
|
||||
|
||||
__asm__ ("" ::: "memory");
|
||||
/* Vectorized with separte div and mod. */
|
||||
vquot2 = a / b;
|
||||
__asm__ ("" ::: "memory");
|
||||
vrem2 = a % b;
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DUMP(VAR) \
|
||||
__builtin_printf ("%8s: ", #VAR); \
|
||||
for (i = 0; i < N; i++) \
|
||||
__builtin_printf ("%d ", (int)VAR[i]); \
|
||||
__builtin_printf ("\n");
|
||||
DUMP (refquot)
|
||||
DUMP (squot)
|
||||
DUMP (vquot)
|
||||
DUMP (vquot2)
|
||||
__builtin_printf ("\n");
|
||||
DUMP (refrem)
|
||||
DUMP (srem)
|
||||
DUMP (vrem)
|
||||
DUMP (vrem2)
|
||||
__builtin_printf ("\n");
|
||||
#endif
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
if (squot[i] != refquot[i]
|
||||
|| vquot[i] != refquot[i]
|
||||
|| vquot2[i] != refquot[i]
|
||||
|| srem[i] != refrem[i]
|
||||
|| vrem[i] != refrem[i]
|
||||
|| vrem2[i] != refrem[i])
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64si4@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64si3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64si3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__divsi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivsi3@rel32@lo} 0 } } */
|
8
gcc/testsuite/gcc.target/gcn/simd-math-5-16.c
Normal file
8
gcc/testsuite/gcc.target/gcn/simd-math-5-16.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
#define N 16
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv16si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv16si3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv16si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv16si3@rel32@lo} 0 } } */
|
8
gcc/testsuite/gcc.target/gcn/simd-math-5-32.c
Normal file
8
gcc/testsuite/gcc.target/gcn/simd-math-5-32.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
#define N 32
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv32si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv32si3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv32si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv32si3@rel32@lo} 0 } } */
|
8
gcc/testsuite/gcc.target/gcn/simd-math-5-4.c
Normal file
8
gcc/testsuite/gcc.target/gcn/simd-math-5-4.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
#define N 4
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv4si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv4si3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv4si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv4si3@rel32@lo} 0 } } */
|
8
gcc/testsuite/gcc.target/gcn/simd-math-5-8.c
Normal file
8
gcc/testsuite/gcc.target/gcn/simd-math-5-8.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
#define N 8
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv8si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv8si3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv8si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv8si3@rel32@lo} 0 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-5-char-16.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-5-char-16.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define TYPE char
|
||||
#define N 16
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses HImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmod16.i4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv16qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv16qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv16qi3@rel32@lo} 0 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-5-char-32.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-5-char-32.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define TYPE char
|
||||
#define N 32
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses HImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmod32.i4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv32qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv32qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv32qi3@rel32@lo} 0 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-5-char-4.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-5-char-4.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define TYPE char
|
||||
#define N 4
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses HImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmod4.i4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv4qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv4qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv4qi3@rel32@lo} 0 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-5-char-8.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-5-char-8.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define TYPE char
|
||||
#define N 8
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses HImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmod8.i4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv8qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv8qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv8qi3@rel32@lo} 0 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run-16.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run-16.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-char-16.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run-32.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run-32.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-char-32.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run-4.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run-4.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-char-4.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run-8.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run-8.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-char-8.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-char-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-char.c"
|
10
gcc/testsuite/gcc.target/gcn/simd-math-5-char.c
Normal file
10
gcc/testsuite/gcc.target/gcn/simd-math-5-char.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
#define TYPE char
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses HImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmodv64si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64qi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64qi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64qi3@rel32@lo} 0 } } */
|
9
gcc/testsuite/gcc.target/gcn/simd-math-5-long-16.c
Normal file
9
gcc/testsuite/gcc.target/gcn/simd-math-5-long-16.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
#define TYPE long
|
||||
#define N 16
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv16di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv16di3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv16di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv16di3@rel32@lo} 0 } } */
|
9
gcc/testsuite/gcc.target/gcn/simd-math-5-long-32.c
Normal file
9
gcc/testsuite/gcc.target/gcn/simd-math-5-long-32.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
#define TYPE long
|
||||
#define N 32
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv32di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv32di3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv32di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv32di3@rel32@lo} 0 } } */
|
9
gcc/testsuite/gcc.target/gcn/simd-math-5-long-4.c
Normal file
9
gcc/testsuite/gcc.target/gcn/simd-math-5-long-4.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
#define TYPE long
|
||||
#define N 4
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv4di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv4di3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv4di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv4di3@rel32@lo} 0 } } */
|
9
gcc/testsuite/gcc.target/gcn/simd-math-5-long-8.c
Normal file
9
gcc/testsuite/gcc.target/gcn/simd-math-5-long-8.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
#define TYPE long
|
||||
#define N 8
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv8di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv8di3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv8di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv8di3@rel32@lo} 0 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run-16.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run-16.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long-16.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run-32.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run-32.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long-32.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run-4.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run-4.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long-4.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run-8.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run-8.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long-8.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-long-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long.c"
|
8
gcc/testsuite/gcc.target/gcn/simd-math-5-long.c
Normal file
8
gcc/testsuite/gcc.target/gcn/simd-math-5-long.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
#define TYPE long
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64di4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64di3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64di3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64di3@rel32@lo} 0 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run-16.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run-16.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long-16.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run-32.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run-32.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long-32.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run-4.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run-4.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long-4.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run-8.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run-8.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-long-8.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5.c"
|
11
gcc/testsuite/gcc.target/gcn/simd-math-5-short-16.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-5-short-16.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define TYPE short
|
||||
#define N 16
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses SImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmod16.i4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv16hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv16hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv16hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv16hi3@rel32@lo} 0 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-5-short-32.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-5-short-32.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define TYPE short
|
||||
#define N 32
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses SImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmod32.i4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv32hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv32hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv32hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv32hi3@rel32@lo} 0 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-5-short-4.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-5-short-4.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define TYPE short
|
||||
#define N 4
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses SImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmod4.i4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv4hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv4hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv4hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv4hi3@rel32@lo} 0 } } */
|
11
gcc/testsuite/gcc.target/gcn/simd-math-5-short-8.c
Normal file
11
gcc/testsuite/gcc.target/gcn/simd-math-5-short-8.c
Normal file
|
@ -0,0 +1,11 @@
|
|||
#define TYPE short
|
||||
#define N 8
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses SImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmod8.i4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv8hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv8hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv8hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv8hi3@rel32@lo} 0 } } */
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run-16.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run-16.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-short-16.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run-32.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run-32.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-short-32.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run-4.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run-4.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-short-4.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run-8.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run-8.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-short-8.c"
|
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run.c
Normal file
2
gcc/testsuite/gcc.target/gcn/simd-math-5-short-run.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* { dg-do run } */
|
||||
#include "simd-math-5-short.c"
|
10
gcc/testsuite/gcc.target/gcn/simd-math-5-short.c
Normal file
10
gcc/testsuite/gcc.target/gcn/simd-math-5-short.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
#define TYPE short
|
||||
#include "simd-math-5.c"
|
||||
|
||||
/* C integer promotion means that div uses SImode and divmod doesn't match. */
|
||||
/* { dg-final { scan-assembler-times {__divmodv64si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64hi3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64hi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64hi3@rel32@lo} 0 } } */
|
88
gcc/testsuite/gcc.target/gcn/simd-math-5.c
Normal file
88
gcc/testsuite/gcc.target/gcn/simd-math-5.c
Normal file
|
@ -0,0 +1,88 @@
|
|||
/* Test that the auto-vectorizer uses the libgcc vectorized division and
|
||||
modulus functions. */
|
||||
|
||||
/* Setting it this way ensures the run tests use the same flag as the
|
||||
compile tests. */
|
||||
#pragma GCC optimize("O2")
|
||||
|
||||
#ifndef TYPE
|
||||
#define TYPE int
|
||||
#endif
|
||||
#ifndef N
|
||||
#define N 64
|
||||
#endif
|
||||
|
||||
TYPE a[N];
|
||||
TYPE b[N];
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
TYPE quot[N], rem[N];
|
||||
TYPE quot2[N], rem2[N];
|
||||
TYPE refquot[N], refrem[N];
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
a[i] = i * (i >> 2) + (i >> 1);
|
||||
b[i] = i;
|
||||
}
|
||||
__asm__ ("" ::: "memory");
|
||||
|
||||
/* Vector divmod. */
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
quot[i] = (TYPE)a[i] / (TYPE)b[i];
|
||||
rem[i] = (TYPE)a[i] % (TYPE)b[i];
|
||||
}
|
||||
__asm__ ("" ::: "memory");
|
||||
|
||||
/* Vector div. */
|
||||
for (i = 0; i < N; i++)
|
||||
quot2[i] = (TYPE)a[i] / (TYPE)b[i];
|
||||
__asm__ ("" ::: "memory");
|
||||
|
||||
/* Vector mod. */
|
||||
for (i = 0; i < N; i++)
|
||||
rem2[i] = (TYPE)a[i] % (TYPE)b[i];
|
||||
|
||||
/* Calculate reference values with no vectorization. */
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
refquot[i] = (TYPE)a[i] / (TYPE)b[i];
|
||||
__asm__ ("" ::: "memory");
|
||||
refrem[i] = (TYPE)a[i] % (TYPE)b[i];
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DUMP(VAR) \
|
||||
__builtin_printf ("%8s: ", #VAR); \
|
||||
for (i = 0; i < N; i++) \
|
||||
__builtin_printf ("%d ", (int)VAR[i]); \
|
||||
__builtin_printf ("\n");
|
||||
DUMP (refquot)
|
||||
DUMP (quot)
|
||||
DUMP (quot2)
|
||||
__builtin_printf ("\n");
|
||||
DUMP (refrem)
|
||||
DUMP (rem)
|
||||
DUMP (rem2)
|
||||
#endif
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
if (quot[i] != refquot[i]
|
||||
|| quot2[i] != refquot[i]
|
||||
|| rem[i] != refrem[i]
|
||||
|| rem2[i] != refrem[i])
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-times {__divmodv64si4@rel32@lo} 1 { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-assembler-times {__udivmodv64si4@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__divv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivv64si3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__modv64si3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__umodv64si3@rel32@lo} 0 } } */
|
||||
/* { dg-final { scan-assembler-times {__divsi3@rel32@lo} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {__udivsi3@rel32@lo} 0 } } */
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue