164c92844SNick Lewycky; RUN: llvm-as < %s | llvm-dis | FileCheck %s
26e1009b6SDuncan P. N. Exon Smith; RUN: verify-uselistorder < %s -preserve-bc-use-list-order
364c92844SNick Lewycky; PR9857
464c92844SNick Lewycky
564c92844SNick Lewyckydefine void @f(i8** nocapture %ptr1) {
664c92844SNick Lewycky; CHECK: define void @f
764c92844SNick Lewyckyentry:
864c92844SNick Lewycky  br label %here.i
964c92844SNick Lewycky
1064c92844SNick Lewyckyhere.i:
1164c92844SNick Lewycky  store i8* blockaddress(@doit, %here), i8** %ptr1, align 8
1264c92844SNick Lewycky; CHECK: blockaddress(@doit, %here)
1364c92844SNick Lewycky  br label %doit.exit
1464c92844SNick Lewycky
1564c92844SNick Lewyckydoit.exit:
1664c92844SNick Lewycky  ret void
1764c92844SNick Lewycky}
1864c92844SNick Lewycky
1964c92844SNick Lewyckydefine void @doit(i8** nocapture %pptr) {
2064c92844SNick Lewycky; CHECK: define void @doit
2164c92844SNick Lewyckyentry:
2264c92844SNick Lewycky  br label %here
2364c92844SNick Lewycky
2464c92844SNick Lewyckyhere:
2564c92844SNick Lewycky  store i8* blockaddress(@doit, %here), i8** %pptr, align 8
2664c92844SNick Lewycky; CHECK: blockaddress(@doit, %here)
2764c92844SNick Lewycky  br label %end
2864c92844SNick Lewycky
2964c92844SNick Lewyckyend:
3064c92844SNick Lewycky  ret void
3164c92844SNick Lewycky}
32736a4fc4SBenjamin Kramer
33736a4fc4SBenjamin Kramer; PR13895
34736a4fc4SBenjamin Kramerdefine void @doitagain(i8** nocapture %pptr) {
35736a4fc4SBenjamin Kramer; CHECK: define void @doitagain
36736a4fc4SBenjamin Kramerentry:
37736a4fc4SBenjamin Kramer  br label %here
38736a4fc4SBenjamin Kramer
39736a4fc4SBenjamin Kramerhere:
40736a4fc4SBenjamin Kramer  store i8* blockaddress(@doit, %here), i8** %pptr, align 8
41736a4fc4SBenjamin Kramer; CHECK: blockaddress(@doit, %here)
42736a4fc4SBenjamin Kramer  br label %end
43736a4fc4SBenjamin Kramer
44736a4fc4SBenjamin Kramerend:
45736a4fc4SBenjamin Kramer  ret void
46736a4fc4SBenjamin Kramer}
47*5a5fd7b1SDuncan P. N. Exon Smith
48*5a5fd7b1SDuncan P. N. Exon Smith; Check a blockaddress taken in two separate functions before the referenced
49*5a5fd7b1SDuncan P. N. Exon Smith; function.
50*5a5fd7b1SDuncan P. N. Exon Smithdefine i8* @take1() {
51*5a5fd7b1SDuncan P. N. Exon Smith  ret i8* blockaddress(@taken, %bb)
52*5a5fd7b1SDuncan P. N. Exon Smith}
53*5a5fd7b1SDuncan P. N. Exon Smithdefine i8* @take2() {
54*5a5fd7b1SDuncan P. N. Exon Smith  ret i8* blockaddress(@taken, %bb)
55*5a5fd7b1SDuncan P. N. Exon Smith}
56*5a5fd7b1SDuncan P. N. Exon Smithdefine void @taken() {
57*5a5fd7b1SDuncan P. N. Exon Smith  unreachable
58*5a5fd7b1SDuncan P. N. Exon Smithbb:
59*5a5fd7b1SDuncan P. N. Exon Smith  unreachable
60*5a5fd7b1SDuncan P. N. Exon Smith}
61