aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/X86/code_placement_eh.ll
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-02-18 21:25:53 +0000
committerDan Gohman <gohman@apple.com>2010-02-18 21:25:53 +0000
commit49d7f8d341a7b4137c674ce0f08f5b18e8195f4a (patch)
tree267e9a0cd03db18189b5212e93b787b5df0c04a4 /test/CodeGen/X86/code_placement_eh.ll
parent0ce7b1255c86dcfdfdd4dfad9ea625de12657944 (diff)
downloadexternal_llvm-49d7f8d341a7b4137c674ce0f08f5b18e8195f4a.zip
external_llvm-49d7f8d341a7b4137c674ce0f08f5b18e8195f4a.tar.gz
external_llvm-49d7f8d341a7b4137c674ce0f08f5b18e8195f4a.tar.bz2
Make CodePlacementOpt detect special EH control flow by
checking whether AnalyzeBranch disagrees with the CFG directly, rather than looking for EH_LABEL instructions. EH_LABEL instructions aren't always at the end of the block, due to FP_REG_KILL and other things. This fixes an infinite loop compiling MultiSource/Benchmarks/Bullet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96611 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/code_placement_eh.ll')
-rw-r--r--test/CodeGen/X86/code_placement_eh.ll45
1 files changed, 45 insertions, 0 deletions
diff --git a/test/CodeGen/X86/code_placement_eh.ll b/test/CodeGen/X86/code_placement_eh.ll
new file mode 100644
index 0000000..172d591
--- /dev/null
+++ b/test/CodeGen/X86/code_placement_eh.ll
@@ -0,0 +1,45 @@
+; RUN: llc < %s
+
+; CodePlacementOpt shouldn't try to modify this loop because
+; it involves EH edges.
+
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32"
+target triple = "i386-apple-darwin10.0"
+
+define void @foo() {
+invcont5:
+ br label %bb15
+
+.noexc3: ; preds = %bb15
+ br i1 undef, label %bb18.i5.i, label %bb15
+
+.noexc6.i.i: ; preds = %bb18.i5.i
+ %tmp2021 = invoke float @cosf(float 0.000000e+00) readonly
+ to label %bb18.i5.i unwind label %lpad.i.i ; <float> [#uses=0]
+
+bb18.i5.i: ; preds = %.noexc6.i.i, %bb51.i
+ %tmp2019 = invoke float @sinf(float 0.000000e+00) readonly
+ to label %.noexc6.i.i unwind label %lpad.i.i ; <float> [#uses=0]
+
+lpad.i.i: ; preds = %bb18.i5.i, %.noexc6.i.i
+ %eh_ptr.i.i = call i8* @llvm.eh.exception() ; <i8*> [#uses=1]
+ unreachable
+
+lpad59.i: ; preds = %bb15
+ %eh_ptr60.i = call i8* @llvm.eh.exception() ; <i8*> [#uses=1]
+ unreachable
+
+bb15: ; preds = %.noexc3, %invcont5
+ invoke fastcc void @_ZN28btHashedOverlappingPairCacheC2Ev()
+ to label %.noexc3 unwind label %lpad59.i
+}
+
+declare i8* @llvm.eh.exception() nounwind readonly
+
+declare i32 @llvm.eh.selector(i8*, i8*, ...) nounwind
+
+declare float @sinf(float) readonly
+
+declare float @cosf(float) readonly
+
+declare fastcc void @_ZN28btHashedOverlappingPairCacheC2Ev() align 2