summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorKit Barton <kbarton@ca.ibm.com>2015-03-30 19:40:59 +0000
committerKit Barton <kbarton@ca.ibm.com>2015-03-30 19:40:59 +0000
commite50adcb6b1b7e8317cca7ed5f8860a40ca6b7196 (patch)
treed80aa7535947dc39e56bcbccf92a65681893f89d /clang/test
parentab659fb3d03005114e176cb86449636e0635f16a (diff)
downloadbcm5719-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.c47
-rw-r--r--clang/test/Sema/builtins-ppc.c51
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
+
OpenPOWER on IntegriCloud