summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/powerpc/builtins-5.c
blob: c6c7ebf3aefd6a8e6b6131c6b694388c66329e65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-options "-mdejagnu-cpu=power8 -O0 -dp" } */

#include <altivec.h>


int main ()
{
  vector long long la = {5L, 14L};
  vector long long lb = {3L, 86L};
  vector bool long long ld = {0, -1};

  vector unsigned long long ua = {5L, 14L};
  vector unsigned long long ub = {3L, 86L};
  vector bool long long ud = {0, -1};

  /*  vec_or tests generate an xxlor instruction when compiled with -O0.  The xxlor
      instructions get optimized away with higher optimization levels.
      When compiling on Linux we see the xxlor instruction used as a move in various
      places.  When compiling on AIX, a move instruction is used instead of the xxlor
      instruction.  So, these tests have been isolated into a different file to limit
      the xxlor instruction use to just the vex_or builtin tests.  */      
      
  vector long long ls = vec_or (la, lb);
  vector long long lt = vec_or (la, ld);
  vector long long lu = vec_or (ld, la);

  vector unsigned long long us = vec_or (ua, ub);
  vector unsigned long long ut = vec_or (ua, ud);
  vector unsigned long long uu = vec_or (ud, ua);

  return 0;
}

/* Expected results:
   vec_or              xxlor    */

/* { dg-final { scan-assembler-times "xxlor" 6 } } */