1 ; RUN: llc < %s 2 ; PR9900 3 4 %zero = type [0 x i8] 5 %foobar = type { i32, %zero } 6 7 define 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 14 define i32 @f2(%zero %x, i32 %y, i32 %z) { 15 ret i32 %y 16 } 17 18 define void @f3(%zero %x, i32 %y) { 19 call i32 @f2(%zero %x, i32 5, i32 %y) 20 ret void 21 } 22 23 define void @f4(%zero %z) { 24 insertvalue %foobar undef, %zero %z, 1 25 ret void 26 } 27 28 define void @f5(%foobar %x) { 29 allocas: 30 %y = extractvalue %foobar %x, 1 31 br label %b1 32 33 b1: 34 %insert120 = insertvalue %foobar undef, %zero %y, 1 35 ret void 36 } 37 38 define void @f6(%zero %x, %zero %y) { 39 b1: 40 br i1 undef, label %end, label %b2 41 42 b2: 43 br label %end 44 45 end: 46 %z = phi %zero [ %y, %b1 ], [ %x, %b2 ] 47 call void @f4(%zero %z) 48 ret void 49 } 50 51 %zero2 = type {} 52 53 define i32 @g1(%zero2 %x, i32 %y, i32 %z) { 54 ret i32 %y 55 } 56 57 define 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 64 define i32 @h1(%zero2r %x, i32 %y, i32 %z) { 65 ret i32 %y 66 } 67 68 define 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 75 define 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