diff options
| author | Kit Barton <kbarton@ca.ibm.com> | 2015-03-30 19:40:59 +0000 |
|---|---|---|
| committer | Kit Barton <kbarton@ca.ibm.com> | 2015-03-30 19:40:59 +0000 |
| commit | e50adcb6b1b7e8317cca7ed5f8860a40ca6b7196 (patch) | |
| tree | d80aa7535947dc39e56bcbccf92a65681893f89d /clang/test | |
| parent | ab659fb3d03005114e176cb86449636e0635f16a (diff) | |
| download | bcm5719-llvm-e50adcb6b1b7e8317cca7ed5f8860a40ca6b7196.tar.gz bcm5719-llvm-e50adcb6b1b7e8317cca7ed5f8860a40ca6b7196.zip | |
[PPC] Move argument range checks for HTM and crypto builtins to Sema
The argument range checks for the HTM and Crypto builtins were implemented in
CGBuiltin.cpp, not in Sema. This change moves them to the appropriate location
in SemaChecking.cpp. It requires the creation of a new method in the Sema class
to do checks for PPC-specific builtins.
http://reviews.llvm.org/D8672
llvm-svn: 233586
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/builtins-ppc-crypto-diag.c | 47 | ||||
| -rw-r--r-- | clang/test/Sema/builtins-ppc.c | 51 |
2 files changed, 51 insertions, 47 deletions
diff --git a/clang/test/CodeGen/builtins-ppc-crypto-diag.c b/clang/test/CodeGen/builtins-ppc-crypto-diag.c deleted file mode 100644 index 4408ab48a11..00000000000 --- a/clang/test/CodeGen/builtins-ppc-crypto-diag.c +++ /dev/null @@ -1,47 +0,0 @@ -// REQUIRES: powerpc-registered-target -// RUN: not %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown -D_T1LW -target-feature +crypto -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-T1 -// RUN: not %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown -D_T1MW -target-feature +crypto -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-T1 -// RUN: not %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown -D_T2LW -target-feature +crypto -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-T2 -// RUN: not %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown -D_T2MW -target-feature +crypto -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-T2 -// RUN: not %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown -D_T1LD -target-feature +crypto -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-T1 -// RUN: not %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown -D_T1MD -target-feature +crypto -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-T1 -// RUN: not %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown -D_T2LD -target-feature +crypto -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-T2 -// RUN: not %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown -D_T2MD -target-feature +crypto -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-T2 -#include <altivec.h> - -#define W_INIT { 0x01020304, 0x05060708, \ - 0x090A0B0C, 0x0D0E0F10 }; -#define D_INIT { 0x0102030405060708, \ - 0x090A0B0C0D0E0F10 }; -vector unsigned int test_vshasigmaw_or(void) -{ - vector unsigned int a = W_INIT -#ifdef _T1LW // Arg1 too large - vector unsigned int b = __builtin_crypto_vshasigmaw(a, 2, 15); -#elif defined(_T1MW) // Arg1 negative - vector unsigned int c = __builtin_crypto_vshasigmaw(a, -1, 15); -#elif defined(_T2LW) // Arg2 too large - vector unsigned int d = __builtin_crypto_vshasigmaw(a, 0, 85); -#elif defined(_T2MW) // Arg1 negative - vector unsigned int e = __builtin_crypto_vshasigmaw(a, 1, -15); -#endif - return __builtin_crypto_vshasigmaw(a, 1, 15); -} - -vector unsigned long long test_vshasigmad_or(void) -{ - vector unsigned long long a = D_INIT -#ifdef _T1LD // Arg1 too large - vector unsigned long long b = __builtin_crypto_vshasigmad(a, 2, 15); -#elif defined(_T1MD) // Arg1 negative - vector unsigned long long c = __builtin_crypto_vshasigmad(a, -1, 15); -#elif defined(_T2LD) // Arg2 too large - vector unsigned long long d = __builtin_crypto_vshasigmad(a, 0, 85); -#elif defined(_T2MD) // Arg1 negative - vector unsigned long long e = __builtin_crypto_vshasigmad(a, 1, -15); -#endif - return __builtin_crypto_vshasigmad(a, 0, 15); -} - -// CHECK-T1: error: argument out of range (should be 0-1). -// CHECK-T2: error: argument out of range (should be 0-15). diff --git a/clang/test/Sema/builtins-ppc.c b/clang/test/Sema/builtins-ppc.c new file mode 100644 index 00000000000..60872a614e4 --- /dev/null +++ b/clang/test/Sema/builtins-ppc.c @@ -0,0 +1,51 @@ +// REQUIRES: powerpc-registered-target +// RUN: %clang_cc1 -faltivec -target-feature +htm \ +// RUN: -triple powerpc64-unknown-unknown -DTEST_HTM -fsyntax-only \ +// RUN: -verify %s + +// RUN: %clang_cc1 -faltivec -target-feature +crypto \ +// RUN: -triple powerpc64le-unknown-unknown -DTEST_CRYPTO -fsyntax-only \ +// RUN: -verify %s + +#ifdef TEST_HTM +void test_htm() { + __builtin_tbegin(4); // expected-error {{argument should be a value from 0 to 1}} + __builtin_tend(-1); // expected-error {{argument should be a value from 0 to 1}} + __builtin_tsr(55); // expected-error {{argument should be a value from 0 to 7}} + __builtin_tabortwc(-5, 2, 3); // expected-error {{argument should be a value from 0 to 31}} + __builtin_tabortdc(55, 2, 3); // expected-error {{argument should be a value from 0 to 31}} + __builtin_tabortwci(-5, 2, 5); // expected-error {{argument should be a value from 0 to 31}} + __builtin_tabortwci(5, 2, 55); // expected-error {{argument should be a value from 0 to 31}} + __builtin_tabortdci(-5, 2, 5); // expected-error {{argument should be a value from 0 to 31}} + __builtin_tabortdci(5, 2, 55); // expected-error {{argument should be a value from 0 to 31}} +} +#endif + + +#ifdef TEST_CRYPTO +#include <altivec.h> + +#define W_INIT { 0x01020304, 0x05060708, 0x090A0B0C, 0x0D0E0F10 }; +#define D_INIT { 0x0102030405060708, 0x090A0B0C0D0E0F10 }; +vector unsigned int test_vshasigmaw_or(void) +{ + vector unsigned int a = W_INIT + vector unsigned int b = __builtin_crypto_vshasigmaw(a, 2, 15); // expected-error {{argument should be a value from 0 to 1}} + vector unsigned int c = __builtin_crypto_vshasigmaw(a, -1, 15); // expected-error {{argument should be a value from 0 to 1}} + vector unsigned int d = __builtin_crypto_vshasigmaw(a, 0, 85); // expected-error {{argument should be a value from 0 to 15}} + vector unsigned int e = __builtin_crypto_vshasigmaw(a, 1, -15); // expected-error {{argument should be a value from 0 to 15}} + return __builtin_crypto_vshasigmaw(a, 1, 15); +} + +vector unsigned long long test_vshasigmad_or(void) +{ + vector unsigned long long a = D_INIT + vector unsigned long long b = __builtin_crypto_vshasigmad(a, 2, 15); // expected-error {{argument should be a value from 0 to 1}} + vector unsigned long long c = __builtin_crypto_vshasigmad(a, -1, 15); // expected-error {{argument should be a value from 0 to 1}} + vector unsigned long long d = __builtin_crypto_vshasigmad(a, 0, 85); // expected-error {{argument should be a value from 0 to 1}} + vector unsigned long long e = __builtin_crypto_vshasigmad(a, 1, -15); // expected-error {{argument should be a value from 0 to 1}} + return __builtin_crypto_vshasigmad(a, 0, 15); +} + +#endif + |

