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