43 lines
959 B
C
43 lines
959 B
C
|
/* Test that using a character splat to set up a shift-right logical
|
||
|
for a doubleword vector works correctly after gimple folding. */
|
||
|
|
||
|
/* { dg-do run { target { p8vector_hw } } } */
|
||
|
/* { dg-options "-O2 -mpower8-vector" } */
|
||
|
|
||
|
#include <altivec.h>
|
||
|
|
||
|
typedef __vector unsigned long long vui64_t;
|
||
|
|
||
|
static inline vui64_t
|
||
|
vec_srdi (vui64_t vra, const unsigned int shb)
|
||
|
{
|
||
|
vui64_t rshift;
|
||
|
vui64_t result;
|
||
|
|
||
|
/* Note legitimate use of wrong-type splat due to expectation that only
|
||
|
lower 6-bits are read. */
|
||
|
rshift = (vui64_t) vec_splat_s8 (shb);
|
||
|
|
||
|
/* Vector Shift Right [Logical] Doublewords based on the lower 6-bits
|
||
|
of corresponding element of rshift. */
|
||
|
result = vec_vsrd (vra, rshift);
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
__attribute__ ((noinline)) vui64_t
|
||
|
test_srdi_4 (vui64_t a)
|
||
|
{
|
||
|
return vec_srdi (a, 4);
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main ()
|
||
|
{
|
||
|
vui64_t x = {1992357, 1025};
|
||
|
x = test_srdi_4 (x);
|
||
|
if (x[0] != 124522 || x[1] != 64)
|
||
|
__builtin_abort ();
|
||
|
return 0;
|
||
|
}
|