summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/ms-intrinsics.c
diff options
context:
space:
mode:
authorAlbert Gutowski <agutowski@google.com>2016-10-13 16:03:42 +0000
committerAlbert Gutowski <agutowski@google.com>2016-10-13 16:03:42 +0000
commit397d81bb9ad910dae98eeef7c33aecba7f816677 (patch)
treeaedd810ec242c9b40487772ebc24999e67083afe /clang/test/CodeGen/ms-intrinsics.c
parent468e793fea6b001b19c2fe972a4b1cf697a0554f (diff)
downloadbcm5719-llvm-397d81bb9ad910dae98eeef7c33aecba7f816677.tar.gz
bcm5719-llvm-397d81bb9ad910dae98eeef7c33aecba7f816677.zip
Implement MS _ReturnAddress and _AddressOfReturnAddress intrinsics
Reviewers: rnk, thakis, majnemer, hans Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25540 llvm-svn: 284131
Diffstat (limited to 'clang/test/CodeGen/ms-intrinsics.c')
-rw-r--r--clang/test/CodeGen/ms-intrinsics.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/clang/test/CodeGen/ms-intrinsics.c b/clang/test/CodeGen/ms-intrinsics.c
index 01cbc443b8e..7d5f8b198d0 100644
--- a/clang/test/CodeGen/ms-intrinsics.c
+++ b/clang/test/CodeGen/ms-intrinsics.c
@@ -1,12 +1,12 @@
// RUN: %clang_cc1 -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \
// RUN: -triple i686--windows -Oz -emit-llvm %s -o - \
-// RUN: | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-I386
+// RUN: | FileCheck %s -check-prefixes CHECK,CHECK-I386,CHECK-INTEL
// RUN: %clang_cc1 -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \
// RUN: -triple thumbv7--windows -Oz -emit-llvm %s -o - \
-// RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ARM-X64
+// RUN: | FileCheck %s --check-prefixes CHECK,CHECK-ARM-X64
// RUN: %clang_cc1 -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \
// RUN: -triple x86_64--windows -Oz -emit-llvm %s -o - \
-// RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-X64 --check-prefix=CHECK-ARM-X64
+// RUN: | FileCheck %s --check-prefixes CHECK,CHECK-X64,CHECK-ARM-X64,CHECK-INTEL
// intrin.h needs size_t, but -ffreestanding prevents us from getting it from
// stddef.h. Work around it with this typedef.
@@ -14,6 +14,22 @@ typedef __SIZE_TYPE__ size_t;
#include <intrin.h>
+void *test_ReturnAddress() {
+ return _ReturnAddress();
+}
+// CHECK-LABEL: define{{.*}}i8* @test_ReturnAddress()
+// CHECK: = tail call i8* @llvm.returnaddress(i32 0)
+// CHECK: ret i8*
+
+#if defined(__i386__) || defined(__x86_64__)
+void *test_AddressOfReturnAddress() {
+ return _AddressOfReturnAddress();
+}
+// CHECK-INTEL-LABEL: define i8* @test_AddressOfReturnAddress()
+// CHECK-INTEL: = tail call i8* @llvm.addressofreturnaddress()
+// CHECK-INTEL: ret i8*
+#endif
+
unsigned char test_BitScanForward(unsigned long *Index, unsigned long Mask) {
return _BitScanForward(Index, Mask);
}
OpenPOWER on IntegriCloud