11dd2d15bSBen Shi; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 21dd2d15bSBen Shi; RUN: llc -mtriple=avr < %s | FileCheck %s --check-prefix=CHECKA 31dd2d15bSBen Shi; RUN: llc -mtriple=avr -mattr=+movw < %s | FileCheck %s --check-prefix=CHECKB 41dd2d15bSBen Shi 51dd2d15bSBen Shi%struct.s10 = type { i16, i16, i16, i16, i16 } 61dd2d15bSBen Shi%struct.s06 = type { i16, i16, i16 } 71dd2d15bSBen Shi%struct.s04 = type { i16, i16 } 81dd2d15bSBen Shi 9*7bdc80f3SNikita Popovdefine void @foo10(ptr sret(%struct.s10) %0, i16 %1, i16 %2, i16 %3) addrspace(1) { 101dd2d15bSBen Shi; CHECKA-LABEL: foo10: 111dd2d15bSBen Shi; CHECKA: ; %bb.0: 121dd2d15bSBen Shi; CHECKA-NEXT: mov r30, r24 131dd2d15bSBen Shi; CHECKA-NEXT: mov r31, r25 141dd2d15bSBen Shi; CHECKA-NEXT: std Z+5, r23 152a528760SBen Shi; CHECKA-NEXT: std Z+4, r22 161dd2d15bSBen Shi; CHECKA-NEXT: std Z+3, r21 172a528760SBen Shi; CHECKA-NEXT: std Z+2, r20 181dd2d15bSBen Shi; CHECKA-NEXT: std Z+1, r19 192a528760SBen Shi; CHECKA-NEXT: st Z, r18 201dd2d15bSBen Shi; CHECKA-NEXT: ret 211dd2d15bSBen Shi; 221dd2d15bSBen Shi; CHECKB-LABEL: foo10: 231dd2d15bSBen Shi; CHECKB: ; %bb.0: 241dd2d15bSBen Shi; CHECKB-NEXT: movw r30, r24 251dd2d15bSBen Shi; CHECKB-NEXT: std Z+5, r23 262a528760SBen Shi; CHECKB-NEXT: std Z+4, r22 271dd2d15bSBen Shi; CHECKB-NEXT: std Z+3, r21 282a528760SBen Shi; CHECKB-NEXT: std Z+2, r20 291dd2d15bSBen Shi; CHECKB-NEXT: std Z+1, r19 302a528760SBen Shi; CHECKB-NEXT: st Z, r18 311dd2d15bSBen Shi; CHECKB-NEXT: ret 32*7bdc80f3SNikita Popov %5 = getelementptr inbounds %struct.s10, ptr %0, i16 0, i32 0 33*7bdc80f3SNikita Popov store i16 %3, ptr %5 34*7bdc80f3SNikita Popov %6 = getelementptr inbounds %struct.s10, ptr %0, i16 0, i32 1 35*7bdc80f3SNikita Popov store i16 %2, ptr %6 36*7bdc80f3SNikita Popov %7 = getelementptr inbounds %struct.s10, ptr %0, i16 0, i32 2 37*7bdc80f3SNikita Popov store i16 %1, ptr %7 381dd2d15bSBen Shi ret void 391dd2d15bSBen Shi} 401dd2d15bSBen Shi 411dd2d15bSBen Shidefine %struct.s06 @foo06(i16 %0, i16 %1, i16 %2) addrspace(1) { 421dd2d15bSBen Shi; CHECKA-LABEL: foo06: 431dd2d15bSBen Shi; CHECKA: ; %bb.0: 441dd2d15bSBen Shi; CHECKA-NEXT: mov r30, r20 451dd2d15bSBen Shi; CHECKA-NEXT: mov r31, r21 461dd2d15bSBen Shi; CHECKA-NEXT: mov r20, r22 471dd2d15bSBen Shi; CHECKA-NEXT: mov r21, r23 481dd2d15bSBen Shi; CHECKA-NEXT: mov r18, r24 491dd2d15bSBen Shi; CHECKA-NEXT: mov r19, r25 501dd2d15bSBen Shi; CHECKA-NEXT: mov r22, r30 511dd2d15bSBen Shi; CHECKA-NEXT: mov r23, r31 521dd2d15bSBen Shi; CHECKA-NEXT: ret 531dd2d15bSBen Shi; 541dd2d15bSBen Shi; CHECKB-LABEL: foo06: 551dd2d15bSBen Shi; CHECKB: ; %bb.0: 561dd2d15bSBen Shi; CHECKB-NEXT: movw r30, r20 571dd2d15bSBen Shi; CHECKB-NEXT: movw r20, r22 581dd2d15bSBen Shi; CHECKB-NEXT: movw r18, r24 591dd2d15bSBen Shi; CHECKB-NEXT: movw r22, r30 601dd2d15bSBen Shi; CHECKB-NEXT: ret 611dd2d15bSBen Shi %4 = insertvalue %struct.s06 undef, i16 %0, 0 621dd2d15bSBen Shi %5 = insertvalue %struct.s06 %4, i16 %1, 1 631dd2d15bSBen Shi %6 = insertvalue %struct.s06 %5, i16 %2, 2 641dd2d15bSBen Shi ret %struct.s06 %6 651dd2d15bSBen Shi} 661dd2d15bSBen Shi 671dd2d15bSBen Shidefine %struct.s04 @foo04(i16 %0, i16 %1) addrspace(1) { 681dd2d15bSBen Shi; CHECKA-LABEL: foo04: 691dd2d15bSBen Shi; CHECKA: ; %bb.0: 701dd2d15bSBen Shi; CHECKA-NEXT: mov r18, r22 711dd2d15bSBen Shi; CHECKA-NEXT: mov r19, r23 721dd2d15bSBen Shi; CHECKA-NEXT: mov r22, r24 731dd2d15bSBen Shi; CHECKA-NEXT: mov r23, r25 741dd2d15bSBen Shi; CHECKA-NEXT: mov r24, r18 751dd2d15bSBen Shi; CHECKA-NEXT: mov r25, r19 761dd2d15bSBen Shi; CHECKA-NEXT: ret 771dd2d15bSBen Shi; 781dd2d15bSBen Shi; CHECKB-LABEL: foo04: 791dd2d15bSBen Shi; CHECKB: ; %bb.0: 801dd2d15bSBen Shi; CHECKB-NEXT: movw r18, r22 811dd2d15bSBen Shi; CHECKB-NEXT: movw r22, r24 821dd2d15bSBen Shi; CHECKB-NEXT: movw r24, r18 831dd2d15bSBen Shi; CHECKB-NEXT: ret 841dd2d15bSBen Shi %3 = insertvalue %struct.s04 undef, i16 %0, 0 851dd2d15bSBen Shi %4 = insertvalue %struct.s04 %3, i16 %1, 1 861dd2d15bSBen Shi ret %struct.s04 %4 871dd2d15bSBen Shi} 88