1; RUN: llc %s -o - -mtriple=thumbv7-apple-darwin10 2; RUN: llc %s -o - 3 4; REQUIRES: arm-registered-target 5 6; NVPTX cannot select BlockAddress 7; XFAIL: nvptx 8 9;; Reference to a label that gets deleted. 10define i8* @test1() nounwind { 11entry: 12 ret i8* blockaddress(@test1b, %test_label) 13} 14 15define i32 @test1b() nounwind { 16entry: 17 ret i32 -1 18test_label: 19 br label %ret 20ret: 21 ret i32 -1 22} 23 24 25; Issues with referring to a label that gets RAUW'd later. 26define i32 @test2a() nounwind { 27entry: 28 %target = bitcast i8* blockaddress(@test2b, %test_label) to i8* 29 30 call i32 @test2b(i8* %target) 31 32 ret i32 0 33} 34 35define i32 @test2b(i8* %target) nounwind { 36entry: 37 indirectbr i8* %target, [label %test_label] 38 39test_label: 40; assume some code here... 41 br label %ret 42 43ret: 44 ret i32 -1 45} 46 47; Issues with a BB that gets RAUW'd to another one after references are 48; generated. 49define void @test3(i8** %P, i8** %Q) nounwind { 50entry: 51 store i8* blockaddress(@test3b, %test_label), i8** %P 52 store i8* blockaddress(@test3b, %ret), i8** %Q 53 ret void 54} 55 56define i32 @test3b() nounwind { 57entry: 58 br label %test_label 59test_label: 60 br label %ret 61ret: 62 ret i32 -1 63} 64 65 66; PR6673 67 68define i64 @test4a() { 69 %target = bitcast i8* blockaddress(@test4b, %usermain) to i8* 70 %ret = call i64 @test4b(i8* %target) 71 72 ret i64 %ret 73} 74 75define i64 @test4b(i8* %Code) { 76entry: 77 indirectbr i8* %Code, [label %usermain] 78usermain: 79 br label %label_line_0 80 81label_line_0: 82 br label %label_line_1 83 84label_line_1: 85 %target = ptrtoint i8* blockaddress(@test4b, %label_line_0) to i64 86 ret i64 %target 87} 88