aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2010-09-18 04:45:14 +0000
committerOwen Anderson <resistor@mac.com>2010-09-18 04:45:14 +0000
commit14ac1dd2be4f72ae1e48a1fd1c2f9bedc7f980e2 (patch)
tree01a64e0cf949843d00bcdc8d16dfd47384a49c30 /test
parentc109556a0a7f0dca78f60967c3560fcaa27097a0 (diff)
downloadexternal_llvm-14ac1dd2be4f72ae1e48a1fd1c2f9bedc7f980e2.zip
external_llvm-14ac1dd2be4f72ae1e48a1fd1c2f9bedc7f980e2.tar.gz
external_llvm-14ac1dd2be4f72ae1e48a1fd1c2f9bedc7f980e2.tar.bz2
Invert the logic of reachesChainWithoutSideEffects(). What we want to check is that there is
NO path to the destination containing side effects, not that SOME path contains no side effects. In practice, this only manifests with CombinerAA enabled, because otherwise the chain has little to no branching, so "any" is effectively equivalent to "all". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114268 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/X86/2010-09-17-SideEffectsInChain.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/CodeGen/X86/2010-09-17-SideEffectsInChain.ll b/test/CodeGen/X86/2010-09-17-SideEffectsInChain.ll
new file mode 100644
index 0000000..35434ff
--- /dev/null
+++ b/test/CodeGen/X86/2010-09-17-SideEffectsInChain.ll
@@ -0,0 +1,26 @@
+; RUN: llc < %s -combiner-alias-analysis -march=x86-64 | FileCheck %s
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-apple-darwin10.4"
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
+
+define fastcc i32 @cli_magic_scandesc(i8* %in) nounwind ssp {
+entry:
+ %a = alloca [64 x i8]
+ %b = getelementptr inbounds [64 x i8]* %a, i64 0, i32 0
+ %c = getelementptr inbounds [64 x i8]* %a, i64 0, i32 30
+ %d = load i8* %b, align 8
+ %e = load i8* %c, align 8
+ %f = bitcast [64 x i8]* %a to i8*
+ call void @llvm.memcpy.p0i8.p0i8.i64(i8* %f, i8* %in, i64 64, i32 8, i1 false) nounwind
+ store i8 %d, i8* %b, align 8
+ store i8 %e, i8* %c, align 8
+ ret i32 0
+}
+
+; CHECK: movq ___stack_chk_guard@GOTPCREL(%rip), %rax
+; CHECK: movb (%rsp), %dl
+; CHECK-NEXT: movb 30(%rsp), %sil
+; CHECK: movb %dl, (%rsp)
+; CHECK-NEXT: movb %sil, 30(%rsp)
+; CHECK: callq ___stack_chk_fail