diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:49:41 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:49:41 +0000 |
commit | 45b533945f0851ec234ca846e1af5ee1e4df0b6e (patch) | |
tree | 0a5b74c0b9ca73aded34df95c91fcaf3815230d8 /test/CodeGen/Nontemporal.cpp | |
parent | 7e86edd64bfae4e324224452e4ea879b3371a4bd (diff) | |
download | src-45b533945f0851ec234ca846e1af5ee1e4df0b6e.tar.gz src-45b533945f0851ec234ca846e1af5ee1e4df0b6e.zip |
Vendor import of clang trunk r256633:vendor/clang/clang-trunk-r256633
Notes
Notes:
svn path=/vendor/clang/dist/; revision=292920
svn path=/vendor/clang/clang-trunk-r256633/; revision=292923; tag=vendor/clang/clang-trunk-r256633
Diffstat (limited to 'test/CodeGen/Nontemporal.cpp')
-rw-r--r-- | test/CodeGen/Nontemporal.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/CodeGen/Nontemporal.cpp b/test/CodeGen/Nontemporal.cpp new file mode 100644 index 000000000000..4ddb9a1cbb60 --- /dev/null +++ b/test/CodeGen/Nontemporal.cpp @@ -0,0 +1,48 @@ +// Test frontend handling of nontemporal builtins. +// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm %s -o - | FileCheck %s + +signed char sc; +unsigned char uc; +signed short ss; +unsigned short us; +signed int si; +unsigned int ui; +signed long long sll; +unsigned long long ull; +float f1, f2; +double d1, d2; +float __attribute__((vector_size(16))) vf1, vf2; +char __attribute__((vector_size(8))) vc1, vc2; +bool b1, b2; + +void test_all_sizes(void) // CHECK-LABEL: test_all_sizes +{ + __builtin_nontemporal_store(true, &b1); // CHECK: store i8 1, i8* @b1, align 1, !nontemporal + __builtin_nontemporal_store(b1, &b2); // CHECK: store i8{{.*}}, align 1, !nontemporal + __builtin_nontemporal_store(1, &uc); // CHECK: store i8{{.*}}align 1, !nontemporal + __builtin_nontemporal_store(1, &sc); // CHECK: store i8{{.*}}align 1, !nontemporal + __builtin_nontemporal_store(1, &us); // CHECK: store i16{{.*}}align 2, !nontemporal + __builtin_nontemporal_store(1, &ss); // CHECK: store i16{{.*}}align 2, !nontemporal + __builtin_nontemporal_store(1, &ui); // CHECK: store i32{{.*}}align 4, !nontemporal + __builtin_nontemporal_store(1, &si); // CHECK: store i32{{.*}}align 4, !nontemporal + __builtin_nontemporal_store(1, &ull); // CHECK: store i64{{.*}}align 8, !nontemporal + __builtin_nontemporal_store(1, &sll); // CHECK: store i64{{.*}}align 8, !nontemporal + __builtin_nontemporal_store(1.0, &f1); // CHECK: store float{{.*}}align 4, !nontemporal + __builtin_nontemporal_store(1.0, &d1); // CHECK: store double{{.*}}align 8, !nontemporal + __builtin_nontemporal_store(vf1, &vf2); // CHECK: store <4 x float>{{.*}}align 16, !nontemporal + __builtin_nontemporal_store(vc1, &vc2); // CHECK: store <8 x i8>{{.*}}align 8, !nontemporal + + b1 = __builtin_nontemporal_load(&b2); // CHECK: load i8{{.*}}align 1, !nontemporal + uc = __builtin_nontemporal_load(&sc); // CHECK: load i8{{.*}}align 1, !nontemporal + sc = __builtin_nontemporal_load(&uc); // CHECK: load i8{{.*}}align 1, !nontemporal + us = __builtin_nontemporal_load(&ss); // CHECK: load i16{{.*}}align 2, !nontemporal + ss = __builtin_nontemporal_load(&us); // CHECK: load i16{{.*}}align 2, !nontemporal + ui = __builtin_nontemporal_load(&si); // CHECK: load i32{{.*}}align 4, !nontemporal + si = __builtin_nontemporal_load(&ui); // CHECK: load i32{{.*}}align 4, !nontemporal + ull = __builtin_nontemporal_load(&sll); // CHECK: load i64{{.*}}align 8, !nontemporal + sll = __builtin_nontemporal_load(&ull); // CHECK: load i64{{.*}}align 8, !nontemporal + f1 = __builtin_nontemporal_load(&f2); // CHECK: load float{{.*}}align 4, !nontemporal + d1 = __builtin_nontemporal_load(&d2); // CHECK: load double{{.*}}align 8, !nontemporal + vf2 = __builtin_nontemporal_load(&vf1); // CHECK: load <4 x float>{{.*}}align 16, !nontemporal + vc2 = __builtin_nontemporal_load(&vc1); // CHECK: load <8 x i8>{{.*}}align 8, !nontemporal +} |