summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/builtin-assume.c
diff options
context:
space:
mode:
authorMichael Kuperstein <michael.m.kuperstein@intel.com>2015-04-06 13:22:01 +0000
committerMichael Kuperstein <michael.m.kuperstein@intel.com>2015-04-06 13:22:01 +0000
commitaed5ccdeed778342b9ff0a5e7d089067e4ffdef0 (patch)
treed7fdc2945b0579a6fb18d4d01dbcfdc5e407a002 /clang/test/CodeGen/builtin-assume.c
parent1931b6263215f84f1096eb338ad56e564b21cb37 (diff)
downloadbcm5719-llvm-aed5ccdeed778342b9ff0a5e7d089067e4ffdef0.tar.gz
bcm5719-llvm-aed5ccdeed778342b9ff0a5e7d089067e4ffdef0.zip
HasSideEffects() should return false for calls to pure and const functions.
Differential Revision: http://reviews.llvm.org/D8548 llvm-svn: 234152
Diffstat (limited to 'clang/test/CodeGen/builtin-assume.c')
-rw-r--r--clang/test/CodeGen/builtin-assume.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/test/CodeGen/builtin-assume.c b/clang/test/CodeGen/builtin-assume.c
index 8f83f17377a..19afec69e78 100644
--- a/clang/test/CodeGen/builtin-assume.c
+++ b/clang/test/CodeGen/builtin-assume.c
@@ -1,25 +1,44 @@
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -triple i386-mingw32 -fms-extensions -emit-llvm -o - %s | FileCheck %s
+int nonconst(void);
+int isconst(void) __attribute__((const));
+int ispure(void) __attribute__((pure));
+
// CHECK-LABEL: @test1
int test1(int *a, int i) {
// CHECK: store i32* %a, i32** [[A_ADDR:%.+]], align
// CHECK: [[A:%.+]] = load i32*, i32** [[A_ADDR]]
// CHECK: [[CMP:%.+]] = icmp ne i32* [[A]], null
// CHECK: call void @llvm.assume(i1 [[CMP]])
+
+// CHECK: [[CALL:%.+]] = call i32 @isconst()
+// CHECK: [[BOOL:%.+]] = icmp ne i32 [[CALL]], 0
+// CHECK: call void @llvm.assume(i1 [[BOOL]])
+
+// CHECK: [[CALLPURE:%.+]] = call i32 @ispure()
+// CHECK: [[BOOLPURE:%.+]] = icmp ne i32 [[CALLPURE]], 0
+// CHECK: call void @llvm.assume(i1 [[BOOLPURE]])
#ifdef _MSC_VER
__assume(a != 0)
+ __assume(isconst());
+ __assume(ispure());
#else
__builtin_assume(a != 0);
+ __builtin_assume(isconst());
+ __builtin_assume(ispure());
#endif
// Nothing is generated for an assume with side effects...
// CHECK-NOT: load i32*, i32** %i.addr
// CHECK-NOT: call void @llvm.assume
+// CHECK-NOT: call i32 @nonconst()
#ifdef _MSC_VER
__assume(++i != 0)
+ __assume(nonconst());
#else
__builtin_assume(++i != 0);
+ __builtin_assume(nonconst());
#endif
return a[0];
OpenPOWER on IntegriCloud