| ; RUN: llvm-as < %s | llvm-dis | FileCheck %s | |
| ; RUN: verify-uselistorder < %s | |
| ; PR9857 | |
| define void @f(i8** nocapture %ptr1) { | |
| ; CHECK: define void @f | |
| entry: | |
| br label %here.i | |
| here.i: | |
| store i8* blockaddress(@doit, %here), i8** %ptr1, align 8 | |
| ; CHECK: blockaddress(@doit, %here) | |
| br label %doit.exit | |
| doit.exit: | |
| ret void | |
| } | |
| define void @doit(i8** nocapture %pptr) { | |
| ; CHECK: define void @doit | |
| entry: | |
| br label %here | |
| here: | |
| store i8* blockaddress(@doit, %here), i8** %pptr, align 8 | |
| ; CHECK: blockaddress(@doit, %here) | |
| br label %end | |
| end: | |
| ret void | |
| } | |
| ; PR13895 | |
| define void @doitagain(i8** nocapture %pptr) { | |
| ; CHECK: define void @doitagain | |
| entry: | |
| br label %here | |
| here: | |
| store i8* blockaddress(@doit, %here), i8** %pptr, align 8 | |
| ; CHECK: blockaddress(@doit, %here) | |
| br label %end | |
| end: | |
| ret void | |
| } | |
| ; Check a blockaddress taken in two separate functions before the referenced | |
| ; function. | |
| define i8* @take1() { | |
| ret i8* blockaddress(@taken, %bb) | |
| } | |
| define i8* @take2() { | |
| ret i8* blockaddress(@taken, %bb) | |
| } | |
| define void @taken() { | |
| unreachable | |
| bb: | |
| unreachable | |
| } |