1; RUN: llc < %s 2; PR9900 3 4%zero = type [0 x i8] 5%foobar = type { i32, %zero } 6 7define void @f(%foobar %arg) { 8 %arg1 = extractvalue %foobar %arg, 0 9 %arg2 = extractvalue %foobar %arg, 1 10 call i32 @f2(%zero %arg2, i32 5, i32 42) 11 ret void 12} 13 14define i32 @f2(%zero %x, i32 %y, i32 %z) { 15 ret i32 %y 16} 17 18define void @f3(%zero %x, i32 %y) { 19 call i32 @f2(%zero %x, i32 5, i32 %y) 20 ret void 21} 22 23define void @f4(%zero %z) { 24 insertvalue %foobar undef, %zero %z, 1 25 ret void 26} 27 28define void @f5(%foobar %x) { 29allocas: 30 %y = extractvalue %foobar %x, 1 31 br label %b1 32 33b1: 34 %insert120 = insertvalue %foobar undef, %zero %y, 1 35 ret void 36} 37 38define void @f6(%zero %x, %zero %y) { 39b1: 40 br i1 undef, label %end, label %b2 41 42b2: 43 br label %end 44 45end: 46 %z = phi %zero [ %y, %b1 ], [ %x, %b2 ] 47 call void @f4(%zero %z) 48 ret void 49} 50 51%zero2 = type {} 52 53define i32 @g1(%zero2 %x, i32 %y, i32 %z) { 54 ret i32 %y 55} 56 57define void @g2(%zero2 %x, i32 %y) { 58 call i32 @g1(%zero2 %x, i32 5, i32 %y) 59 ret void 60} 61 62%zero2r = type {%zero2} 63 64define i32 @h1(%zero2r %x, i32 %y, i32 %z) { 65 ret i32 %y 66} 67 68define void @h2(%zero2r %x, i32 %y) { 69 call i32 @h1(%zero2r %x, i32 5, i32 %y) 70 ret void 71} 72 73%foobar2 = type { i32, %zero2r } 74 75define void @h3(%foobar2 %arg) { 76 %arg1 = extractvalue %foobar2 %arg, 0 77 %arg2 = extractvalue %foobar2 %arg, 1 78 %arg21 = extractvalue %zero2r %arg2, 0 79 call void @g2(%zero2 %arg21, i32 5) 80 ret void 81} 82