; RUN: llc < %s -march=avr | FileCheck %s
; CHECK-LABEL: ret_struct_i8_i16_i8
define { i8, i16, i8 } @ret_struct_i8_i16_i8() {
start:
; for some reason the i16 is loaded to r24:r25
; and then moved to r23:r24
; CHECK: ldi r22, 64
; CHECK-NEXT: r23,
; CHECK-NEXT: r24,
; CHECK-NEXT: r25, 11
%0 = insertvalue {i8, i16, i8} undef, i8 64, 0
%1 = insertvalue {i8, i16, i8} %0, i16 1024, 1
%2 = insertvalue {i8, i16, i8} %1, i8 11, 2
ret {i8, i16, i8} %2
}
; CHECK-LABEL: ret_struct_i32_i16
define { i32, i16 } @ret_struct_i32_i16() {
start:
; CHECK: ldi r18, 4
; CHECK-NEXT: ldi r19, 3
; CHECK-NEXT: ldi r20, 2
; CHECK-NEXT: ldi r21, 1
; CHECK-NEXT: ldi r22, 0
; CHECK-NEXT: ldi r23, 8
%0 = insertvalue { i32, i16 } undef, i32 16909060, 0
%1 = insertvalue { i32, i16 } %0, i16 2048, 1
ret { i32, i16} %1
}