diff options
author | Chris Lattner <sabre@nondot.org> | 2010-03-16 00:29:39 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-03-16 00:29:39 +0000 |
commit | 999aee24c7b7511575146b9950bb85830fab0378 (patch) | |
tree | 56d7c9f3f6bf51422f9c4f96c0803f39db59102a /test | |
parent | 4e815f8a8cae6c846cdca52420046cab902865de (diff) | |
download | external_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')
-rw-r--r-- | test/CodeGen/Generic/addr-label.ll | 19 |
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 +} + |