aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/Generic
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-03-16 00:29:39 +0000
committerChris Lattner <sabre@nondot.org>2010-03-16 00:29:39 +0000
commit999aee24c7b7511575146b9950bb85830fab0378 (patch)
tree56d7c9f3f6bf51422f9c4f96c0803f39db59102a /test/CodeGen/Generic
parent4e815f8a8cae6c846cdca52420046cab902865de (diff)
downloadexternal_llvm-999aee24c7b7511575146b9950bb85830fab0378.zip
external_llvm-999aee24c7b7511575146b9950bb85830fab0378.tar.gz
external_llvm-999aee24c7b7511575146b9950bb85830fab0378.tar.bz2
Fix the third (and last known) case of code update problems due
to LLVM IR changes with addr label weirdness. In the testcase, we generate references to the two bb's when codegen'ing the first function: _test1: ## @test1 leaq Ltmp0(%rip), %rax .. leaq Ltmp1(%rip), %rax Then continue to codegen the second function where the blocks get merged. We're now smart enough to emit both labels, producing this code: _test_fun: ## @test_fun ## BB#0: ## %entry Ltmp1: ## Block address taken Ltmp0: ## BB#1: ## %ret movl $-1, %eax ret Rejoice. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98595 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Generic')
-rw-r--r--test/CodeGen/Generic/addr-label.ll19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/CodeGen/Generic/addr-label.ll b/test/CodeGen/Generic/addr-label.ll
index 49f3cbf..51741110 100644
--- a/test/CodeGen/Generic/addr-label.ll
+++ b/test/CodeGen/Generic/addr-label.ll
@@ -37,3 +37,22 @@ test_label:
ret:
ret i32 -1
}
+
+; Issues with a BB that gets RAUW'd to another one after references are
+; generated.
+define void @test3(i8** %P, i8** %Q) nounwind {
+entry:
+ store i8* blockaddress(@test3b, %test_label), i8** %P
+ store i8* blockaddress(@test3b, %ret), i8** %Q
+ ret void
+}
+
+define i32 @test3b() nounwind {
+entry:
+ br label %test_label
+test_label:
+ br label %ret
+ret:
+ ret i32 -1
+}
+