1; RUN: llc < %s -march=avr | FileCheck %s 2 3; CHECK-LABEL: ret_void_args_struct_i8_i32 4define void @ret_void_args_struct_i8_i32({ i8, i32 } %a) { 5start: 6 ; CHECK: sts 4, r20 7 %0 = extractvalue { i8, i32 } %a, 0 8 store volatile i8 %0, i8* inttoptr (i64 4 to i8*) 9 10 ; CHECK-NEXT: sts 8, r24 11 ; CHECK-NEXT: sts 7, r23 12 ; CHECK-NEXT: sts 6, r22 13 ; CHECK-NEXT: sts 5, r21 14 %1 = extractvalue { i8, i32 } %a, 1 15 store volatile i32 %1, i32* inttoptr (i64 5 to i32*) 16 ret void 17} 18 19; CHECK-LABEL: ret_void_args_struct_i8_i8_i8_i8 20define void @ret_void_args_struct_i8_i8_i8_i8({ i8, i8, i8, i8 } %a) { 21start: 22 ; CHECK: sts 4, r22 23 %0 = extractvalue { i8, i8, i8, i8 } %a, 0 24 store volatile i8 %0, i8* inttoptr (i64 4 to i8*) 25 ; CHECK-NEXT: sts 5, r23 26 %1 = extractvalue { i8, i8, i8, i8 } %a, 1 27 store volatile i8 %1, i8* inttoptr (i64 5 to i8*) 28 ; CHECK-NEXT: sts 6, r24 29 %2 = extractvalue { i8, i8, i8, i8 } %a, 2 30 store volatile i8 %2, i8* inttoptr (i64 6 to i8*) 31 ; CHECK-NEXT: sts 7, r25 32 %3 = extractvalue { i8, i8, i8, i8 } %a, 3 33 store volatile i8 %3, i8* inttoptr (i64 7 to i8*) 34 ret void 35} 36 37; CHECK-LABEL: ret_void_args_struct_i32_16_i8 38define void @ret_void_args_struct_i32_16_i8({ i32, i16, i8} %a) { 39start: 40 ; CHECK: sts 7, r21 41 ; CHECK-NEXT: sts 6, r20 42 ; CHECK-NEXT: sts 5, r19 43 ; CHECK-NEXT: sts 4, r18 44 %0 = extractvalue { i32, i16, i8 } %a, 0 45 store volatile i32 %0, i32* inttoptr (i64 4 to i32*) 46 47 ; CHECK-NEXT: sts 5, r23 48 ; CHECK-NEXT: sts 4, r22 49 %1 = extractvalue { i32, i16, i8 } %a, 1 50 store volatile i16 %1, i16* inttoptr (i64 4 to i16*) 51 52 ; CHECK-NEXT: sts 4, r24 53 %2 = extractvalue { i32, i16, i8 } %a, 2 54 store volatile i8 %2, i8* inttoptr (i64 4 to i8*) 55 ret void 56} 57 58; CHECK-LABEL: ret_void_args_struct_i8_i32_struct_i32_i8 59define void @ret_void_args_struct_i8_i32_struct_i32_i8({ i8, i32 } %a, { i32, i8 } %b) { 60start: 61 ; CHECK: sts 4, r20 62 %0 = extractvalue { i8, i32 } %a, 0 63 store volatile i8 %0, i8* inttoptr (i64 4 to i8*) 64 65 ; CHECK-NEXT: sts 8, r24 66 ; CHECK-NEXT: sts 7, r23 67 ; CHECK-NEXT: sts 6, r22 68 ; CHECK-NEXT: sts 5, r21 69 %1 = extractvalue { i8, i32 } %a, 1 70 store volatile i32 %1, i32* inttoptr (i64 5 to i32*) 71 72 ; CHECK-NEXT: sts 9, r17 73 ; CHECK-NEXT: sts 8, r16 74 ; CHECK-NEXT: sts 7, r15 75 ; CHECK-NEXT: sts 6, r14 76 %2 = extractvalue { i32, i8 } %b, 0 77 store volatile i32 %2, i32* inttoptr (i64 6 to i32*) 78 79 ; CHECK-NEXT: sts 7, r18 80 %3 = extractvalue { i32, i8 } %b, 1 81 store volatile i8 %3, i8* inttoptr (i64 7 to i8*) 82 ret void 83} 84 85