1/* { dg-do compile } */ 2/* { dg-options "-O -mcpu=ultrasparc -mvis" } */ 3typedef char vec8 __attribute__((vector_size(8))); 4typedef short vec16 __attribute__((vector_size(8))); 5typedef int vec32 __attribute__((vector_size(8))); 6 7extern vec8 foo1_8(void); 8extern vec8 foo2_8(void); 9 10vec8 fun8(void) 11{ 12 return ~(foo1_8 () ^ foo2_8 ()); 13} 14 15#ifndef __LP64__ 16/* Test the 32-bit splitter. */ 17vec8 fun8_2(vec8 a, vec8 b) 18{ 19 return ~(a ^ b); 20} 21#endif 22 23extern vec16 foo1_16(void); 24extern vec16 foo2_16(void); 25 26vec16 fun16(void) 27{ 28 return ~(foo1_16 () ^ foo2_16 ()); 29} 30 31#ifndef __LP64__ 32/* Test the 32-bit splitter. */ 33vec16 fun16_2(vec16 a, vec16 b) 34{ 35 return ~(a ^ b); 36} 37#endif 38 39extern vec32 foo1_32(void); 40extern vec32 foo2_32(void); 41 42vec32 fun32(void) 43{ 44 return ~(foo1_32 () ^ foo2_32 ()); 45} 46 47#ifndef __LP64__ 48/* Test the 32-bit splitter. */ 49vec32 fun32_2(vec32 a, vec32 b) 50{ 51 return ~(a ^ b); 52} 53#endif 54 55 56/* This should be transformed into ~(b ^ a). */ 57vec8 fun8b(void) 58{ 59 return foo1_8 () ^ ~foo2_8 (); 60} 61 62#ifndef __LP64__ 63/* Test the 32-bit splitter. */ 64vec8 fun8_2b(vec8 a, vec8 b) 65{ 66 return a ^ ~b; 67} 68#endif 69 70vec16 fun16b(void) 71{ 72 return foo1_16 () ^ ~foo2_16 (); 73} 74 75#ifndef __LP64__ 76/* Test the 32-bit splitter. */ 77vec16 fun16_2b(vec16 a, vec16 b) 78{ 79 return a ^ ~b; 80} 81#endif 82 83vec32 fun32b(void) 84{ 85 return foo1_32 () ^ ~foo2_32 (); 86} 87 88#ifndef __LP64__ 89/* Test the 32-bit splitter. */ 90vec32 fun32_2b(vec32 a, vec32 b) 91{ 92 return a ^ ~b; 93} 94#endif 95 96/* { dg-final { scan-assembler-times "fxnor\t%" 6 } } */ 97