summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/cache-intrinsic.ll
diff options
context:
space:
mode:
authorRenato Golin <renato.golin@linaro.org>2014-03-26 12:52:28 +0000
committerRenato Golin <renato.golin@linaro.org>2014-03-26 12:52:28 +0000
commitc0a3c1d66b479b4e1e72e70d65bbfb2ee66c16f6 (patch)
tree5af7c84d2f3007ac25b226f0c18503db70f08cf3 /llvm/test/CodeGen/X86/cache-intrinsic.ll
parent732f0f73a732a6dbde036003cbaed24ce58c66a5 (diff)
downloadbcm5719-llvm-c0a3c1d66b479b4e1e72e70d65bbfb2ee66c16f6.tar.gz
bcm5719-llvm-c0a3c1d66b479b4e1e72e70d65bbfb2ee66c16f6.zip
Add @llvm.clear_cache builtin
Implementing the LLVM part of the call to __builtin___clear_cache which translates into an intrinsic @llvm.clear_cache and is lowered by each target, either to a call to __clear_cache or nothing at all incase the caches are unified. Updating LangRef and adding some tests for the implemented architectures. Other archs will have to implement the method in case this builtin has to be compiled for it, since the default behaviour is to bail unimplemented. A Clang patch is required for the builtin to be lowered into the llvm intrinsic. This will be done next. llvm-svn: 204802
Diffstat (limited to 'llvm/test/CodeGen/X86/cache-intrinsic.ll')
-rw-r--r--llvm/test/CodeGen/X86/cache-intrinsic.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/cache-intrinsic.ll b/llvm/test/CodeGen/X86/cache-intrinsic.ll
new file mode 100644
index 00000000000..3091b5ff311
--- /dev/null
+++ b/llvm/test/CodeGen/X86/cache-intrinsic.ll
@@ -0,0 +1,26 @@
+; RUN: llc %s -o - | FileCheck %s
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+@buffer = global [32 x i8] c"This is a largely unused buffer\00", align 16
+@.str = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
+@.str1 = private unnamed_addr constant [25 x i8] c"Still, largely unused...\00", align 1
+
+define i32 @main() {
+entry:
+ %retval = alloca i32, align 4
+ store i32 0, i32* %retval
+ %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8]* @buffer, i32 0, i32 0))
+ %call1 = call i8* @strcpy(i8* getelementptr inbounds ([32 x i8]* @buffer, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8]* @.str1, i32 0, i32 0)) #3
+ call void @llvm.clear_cache(i8* getelementptr inbounds ([32 x i8]* @buffer, i32 0, i32 0), i8* getelementptr inbounds (i8* getelementptr inbounds ([32 x i8]* @buffer, i32 0, i32 0), i32 32)) #3
+ %call3 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8]* @buffer, i32 0, i32 0))
+ ret i32 0
+}
+
+; CHECK-NOT: __clear_cache
+
+declare i32 @printf(i8*, ...)
+
+declare i8* @strcpy(i8*, i8*)
+
+declare void @llvm.clear_cache(i8*, i8*)
OpenPOWER on IntegriCloud