1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=avr < %s | FileCheck %s --check-prefix=CHECKA 3; RUN: llc -mtriple=avr -mattr=+movw < %s | FileCheck %s --check-prefix=CHECKB 4 5%struct.s10 = type { i16, i16, i16, i16, i16 } 6%struct.s06 = type { i16, i16, i16 } 7%struct.s04 = type { i16, i16 } 8 9define void @foo10(ptr sret(%struct.s10) %0, i16 %1, i16 %2, i16 %3) addrspace(1) { 10; CHECKA-LABEL: foo10: 11; CHECKA: ; %bb.0: 12; CHECKA-NEXT: mov r30, r24 13; CHECKA-NEXT: mov r31, r25 14; CHECKA-NEXT: std Z+5, r23 15; CHECKA-NEXT: std Z+4, r22 16; CHECKA-NEXT: std Z+3, r21 17; CHECKA-NEXT: std Z+2, r20 18; CHECKA-NEXT: std Z+1, r19 19; CHECKA-NEXT: st Z, r18 20; CHECKA-NEXT: ret 21; 22; CHECKB-LABEL: foo10: 23; CHECKB: ; %bb.0: 24; CHECKB-NEXT: movw r30, r24 25; CHECKB-NEXT: std Z+5, r23 26; CHECKB-NEXT: std Z+4, r22 27; CHECKB-NEXT: std Z+3, r21 28; CHECKB-NEXT: std Z+2, r20 29; CHECKB-NEXT: std Z+1, r19 30; CHECKB-NEXT: st Z, r18 31; CHECKB-NEXT: ret 32 %5 = getelementptr inbounds %struct.s10, ptr %0, i16 0, i32 0 33 store i16 %3, ptr %5 34 %6 = getelementptr inbounds %struct.s10, ptr %0, i16 0, i32 1 35 store i16 %2, ptr %6 36 %7 = getelementptr inbounds %struct.s10, ptr %0, i16 0, i32 2 37 store i16 %1, ptr %7 38 ret void 39} 40 41define %struct.s06 @foo06(i16 %0, i16 %1, i16 %2) addrspace(1) { 42; CHECKA-LABEL: foo06: 43; CHECKA: ; %bb.0: 44; CHECKA-NEXT: mov r30, r20 45; CHECKA-NEXT: mov r31, r21 46; CHECKA-NEXT: mov r20, r22 47; CHECKA-NEXT: mov r21, r23 48; CHECKA-NEXT: mov r18, r24 49; CHECKA-NEXT: mov r19, r25 50; CHECKA-NEXT: mov r22, r30 51; CHECKA-NEXT: mov r23, r31 52; CHECKA-NEXT: ret 53; 54; CHECKB-LABEL: foo06: 55; CHECKB: ; %bb.0: 56; CHECKB-NEXT: movw r30, r20 57; CHECKB-NEXT: movw r20, r22 58; CHECKB-NEXT: movw r18, r24 59; CHECKB-NEXT: movw r22, r30 60; CHECKB-NEXT: ret 61 %4 = insertvalue %struct.s06 undef, i16 %0, 0 62 %5 = insertvalue %struct.s06 %4, i16 %1, 1 63 %6 = insertvalue %struct.s06 %5, i16 %2, 2 64 ret %struct.s06 %6 65} 66 67define %struct.s04 @foo04(i16 %0, i16 %1) addrspace(1) { 68; CHECKA-LABEL: foo04: 69; CHECKA: ; %bb.0: 70; CHECKA-NEXT: mov r18, r22 71; CHECKA-NEXT: mov r19, r23 72; CHECKA-NEXT: mov r22, r24 73; CHECKA-NEXT: mov r23, r25 74; CHECKA-NEXT: mov r24, r18 75; CHECKA-NEXT: mov r25, r19 76; CHECKA-NEXT: ret 77; 78; CHECKB-LABEL: foo04: 79; CHECKB: ; %bb.0: 80; CHECKB-NEXT: movw r18, r22 81; CHECKB-NEXT: movw r22, r24 82; CHECKB-NEXT: movw r24, r18 83; CHECKB-NEXT: ret 84 %3 = insertvalue %struct.s04 undef, i16 %0, 0 85 %4 = insertvalue %struct.s04 %3, i16 %1, 1 86 ret %struct.s04 %4 87} 88