brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.4 KiB · 93dfa25 Raw
481 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=avr6,sram -mtriple=avr < %s | FileCheck %s --check-prefix=AVR3; RUN: llc -mcpu=attiny10 -mtriple=avr < %s | FileCheck %s --check-prefix=TINY4 5;TODO: test returning byval structs6; TODO: test naked functions7 8define void @return_void() {9; AVR-LABEL: return_void:10; AVR:       ; %bb.0:11; AVR-NEXT:    ret12;13; TINY-LABEL: return_void:14; TINY:       ; %bb.0:15; TINY-NEXT:    ret16    ret void17}18 19define i8 @return8_imm() {20; AVR-LABEL: return8_imm:21; AVR:       ; %bb.0:22; AVR-NEXT:    ldi r24, 523; AVR-NEXT:    ret24;25; TINY-LABEL: return8_imm:26; TINY:       ; %bb.0:27; TINY-NEXT:    ldi r24, 528; TINY-NEXT:    ret29    ret i8 530}31 32define i8 @return8_arg(i8 %x) {33; AVR-LABEL: return8_arg:34; AVR:       ; %bb.0:35; AVR-NEXT:    ret36;37; TINY-LABEL: return8_arg:38; TINY:       ; %bb.0:39; TINY-NEXT:    ret40    ret i8 %x41}42 43define i8 @return8_arg2(i8 %x, i8 %y, i8 %z) {44; AVR-LABEL: return8_arg2:45; AVR:       ; %bb.0:46; AVR-NEXT:    mov r24, r2047; AVR-NEXT:    ret48;49; TINY-LABEL: return8_arg2:50; TINY:       ; %bb.0:51; TINY-NEXT:    mov r24, r2052; TINY-NEXT:    ret53    ret i8 %z54}55 56define i16 @return16_imm() {57; AVR-LABEL: return16_imm:58; AVR:       ; %bb.0:59; AVR-NEXT:    ldi r24, 5760; AVR-NEXT:    ldi r25, 4861; AVR-NEXT:    ret62;63; TINY-LABEL: return16_imm:64; TINY:       ; %bb.0:65; TINY-NEXT:    ldi r24, 5766; TINY-NEXT:    ldi r25, 4867; TINY-NEXT:    ret68    ret i16 1234569}70 71define i16 @return16_arg(i16 %x) {72; AVR-LABEL: return16_arg:73; AVR:       ; %bb.0:74; AVR-NEXT:    ret75;76; TINY-LABEL: return16_arg:77; TINY:       ; %bb.0:78; TINY-NEXT:    ret79    ret i16 %x80}81 82define i16 @return16_arg2(i16 %x, i16 %y, i16 %z) {83; AVR-LABEL: return16_arg2:84; AVR:       ; %bb.0:85; AVR-NEXT:    movw r24, r2086; AVR-NEXT:    ret87;88; TINY-LABEL: return16_arg2:89; TINY:       ; %bb.0:90; TINY-NEXT:    mov r24, r2091; TINY-NEXT:    mov r25, r2192; TINY-NEXT:    ret93    ret i16 %z94}95 96define i32 @return32_imm() {97; AVR-LABEL: return32_imm:98; AVR:       ; %bb.0:99; AVR-NEXT:    ldi r22, 21100; AVR-NEXT:    ldi r23, 205101; AVR-NEXT:    ldi r24, 91102; AVR-NEXT:    ldi r25, 7103; AVR-NEXT:    ret104;105; TINY-LABEL: return32_imm:106; TINY:       ; %bb.0:107; TINY-NEXT:    ldi r22, 21108; TINY-NEXT:    ldi r23, 205109; TINY-NEXT:    ldi r24, 91110; TINY-NEXT:    ldi r25, 7111; TINY-NEXT:    ret112    ret i32 123456789113}114 115define i32 @return32_arg(i32 %x) {116; AVR-LABEL: return32_arg:117; AVR:       ; %bb.0:118; AVR-NEXT:    ret119;120; TINY-LABEL: return32_arg:121; TINY:       ; %bb.0:122; TINY-NEXT:    ret123    ret i32 %x124}125 126define i32 @return32_arg2(i32 %x, i32 %y, i32 %z) {127; AVR-LABEL: return32_arg2:128; AVR:       ; %bb.0:129; AVR-NEXT:    movw r24, r16130; AVR-NEXT:    movw r22, r14131; AVR-NEXT:    ret132;133; TINY-LABEL: return32_arg2:134; TINY:       ; %bb.0:135; TINY-NEXT:    push r28136; TINY-NEXT:    push r29137; TINY-NEXT:    in r28, 61138; TINY-NEXT:    in r29, 62139; TINY-NEXT:    in r16, 63140; TINY-NEXT:    subi r28, 247141; TINY-NEXT:    sbci r29, 255142; TINY-NEXT:    ld r22, Y+143; TINY-NEXT:    ld r23, Y+144; TINY-NEXT:    subi r28, 2145; TINY-NEXT:    sbci r29, 0146; TINY-NEXT:    subi r28, 9147; TINY-NEXT:    sbci r29, 0148; TINY-NEXT:    out 63, r16149; TINY-NEXT:    in r16, 63150; TINY-NEXT:    subi r28, 245151; TINY-NEXT:    sbci r29, 255152; TINY-NEXT:    ld r24, Y+153; TINY-NEXT:    ld r25, Y+154; TINY-NEXT:    subi r28, 2155; TINY-NEXT:    sbci r29, 0156; TINY-NEXT:    subi r28, 11157; TINY-NEXT:    sbci r29, 0158; TINY-NEXT:    out 63, r16159; TINY-NEXT:    pop r29160; TINY-NEXT:    pop r28161; TINY-NEXT:    ret162    ret i32 %z163}164 165define i64 @return64_imm() {166; AVR-LABEL: return64_imm:167; AVR:       ; %bb.0:168; AVR-NEXT:    ldi r18, 204169; AVR-NEXT:    ldi r19, 204170; AVR-NEXT:    ldi r20, 104171; AVR-NEXT:    ldi r21, 37172; AVR-NEXT:    ldi r22, 25173; AVR-NEXT:    ldi r23, 22174; AVR-NEXT:    ldi r24, 236175; AVR-NEXT:    ldi r25, 190176; AVR-NEXT:    ret177;178; TINY-LABEL: return64_imm:179; TINY:       ; %bb.0:180; TINY-NEXT:    ldi r20, 236181; TINY-NEXT:    ldi r21, 190182; TINY-NEXT:    mov r30, r24183; TINY-NEXT:    mov r31, r25184; TINY-NEXT:    subi r30, 250185; TINY-NEXT:    sbci r31, 255186; TINY-NEXT:    st Z+, r20187; TINY-NEXT:    st Z+, r21188; TINY-NEXT:    subi r30, 8189; TINY-NEXT:    sbci r31, 0190; TINY-NEXT:    ldi r20, 25191; TINY-NEXT:    ldi r21, 22192; TINY-NEXT:    subi r30, 252193; TINY-NEXT:    sbci r31, 255194; TINY-NEXT:    st Z+, r20195; TINY-NEXT:    st Z+, r21196; TINY-NEXT:    subi r30, 6197; TINY-NEXT:    sbci r31, 0198; TINY-NEXT:    ldi r20, 104199; TINY-NEXT:    ldi r21, 37200; TINY-NEXT:    subi r30, 254201; TINY-NEXT:    sbci r31, 255202; TINY-NEXT:    st Z+, r20203; TINY-NEXT:    st Z+, r21204; TINY-NEXT:    subi r30, 4205; TINY-NEXT:    sbci r31, 0206; TINY-NEXT:    ldi r20, 204207; TINY-NEXT:    ldi r21, 204208; TINY-NEXT:    st Z+, r20209; TINY-NEXT:    st Z+, r21210; TINY-NEXT:    ret211    ret i64 13757395258967641292212}213 214define i64 @return64_arg(i64 %x) {215; AVR-LABEL: return64_arg:216; AVR:       ; %bb.0:217; AVR-NEXT:    ret218;219; TINY-LABEL: return64_arg:220; TINY:       ; %bb.0:221; TINY-NEXT:    push r28222; TINY-NEXT:    push r29223; TINY-NEXT:    in r28, 61224; TINY-NEXT:    in r29, 62225; TINY-NEXT:    in r16, 63226; TINY-NEXT:    subi r28, 245227; TINY-NEXT:    sbci r29, 255228; TINY-NEXT:    ld r20, Y+229; TINY-NEXT:    ld r21, Y+230; TINY-NEXT:    subi r28, 2231; TINY-NEXT:    sbci r29, 0232; TINY-NEXT:    subi r28, 11233; TINY-NEXT:    sbci r29, 0234; TINY-NEXT:    out 63, r16235; TINY-NEXT:    mov r30, r24236; TINY-NEXT:    mov r31, r25237; TINY-NEXT:    subi r30, 250238; TINY-NEXT:    sbci r31, 255239; TINY-NEXT:    st Z+, r20240; TINY-NEXT:    st Z+, r21241; TINY-NEXT:    subi r30, 8242; TINY-NEXT:    sbci r31, 0243; TINY-NEXT:    in r16, 63244; TINY-NEXT:    subi r28, 247245; TINY-NEXT:    sbci r29, 255246; TINY-NEXT:    ld r20, Y+247; TINY-NEXT:    ld r21, Y+248; TINY-NEXT:    subi r28, 2249; TINY-NEXT:    sbci r29, 0250; TINY-NEXT:    subi r28, 9251; TINY-NEXT:    sbci r29, 0252; TINY-NEXT:    out 63, r16253; TINY-NEXT:    subi r30, 252254; TINY-NEXT:    sbci r31, 255255; TINY-NEXT:    st Z+, r20256; TINY-NEXT:    st Z+, r21257; TINY-NEXT:    subi r30, 6258; TINY-NEXT:    sbci r31, 0259; TINY-NEXT:    in r16, 63260; TINY-NEXT:    subi r28, 249261; TINY-NEXT:    sbci r29, 255262; TINY-NEXT:    ld r20, Y+263; TINY-NEXT:    ld r21, Y+264; TINY-NEXT:    subi r28, 2265; TINY-NEXT:    sbci r29, 0266; TINY-NEXT:    subi r28, 7267; TINY-NEXT:    sbci r29, 0268; TINY-NEXT:    out 63, r16269; TINY-NEXT:    subi r30, 254270; TINY-NEXT:    sbci r31, 255271; TINY-NEXT:    st Z+, r20272; TINY-NEXT:    st Z+, r21273; TINY-NEXT:    subi r30, 4274; TINY-NEXT:    sbci r31, 0275; TINY-NEXT:    in r16, 63276; TINY-NEXT:    subi r28, 251277; TINY-NEXT:    sbci r29, 255278; TINY-NEXT:    ld r20, Y+279; TINY-NEXT:    ld r21, Y+280; TINY-NEXT:    subi r28, 2281; TINY-NEXT:    sbci r29, 0282; TINY-NEXT:    subi r28, 5283; TINY-NEXT:    sbci r29, 0284; TINY-NEXT:    out 63, r16285; TINY-NEXT:    st Z+, r20286; TINY-NEXT:    st Z+, r21287; TINY-NEXT:    pop r29288; TINY-NEXT:    pop r28289; TINY-NEXT:    ret290    ret i64 %x291}292 293define i64 @return64_arg2(i64 %x, i64 %y, i64 %z) {294; AVR-LABEL: return64_arg2:295; AVR:       ; %bb.0:296; AVR-NEXT:    push r28297; AVR-NEXT:    push r29298; AVR-NEXT:    in r28, 61299; AVR-NEXT:    in r29, 62300; AVR-NEXT:    ldd r18, Y+5301; AVR-NEXT:    ldd r19, Y+6302; AVR-NEXT:    ldd r20, Y+7303; AVR-NEXT:    ldd r21, Y+8304; AVR-NEXT:    ldd r22, Y+9305; AVR-NEXT:    ldd r23, Y+10306; AVR-NEXT:    ldd r24, Y+11307; AVR-NEXT:    ldd r25, Y+12308; AVR-NEXT:    pop r29309; AVR-NEXT:    pop r28310; AVR-NEXT:    ret311;312; TINY-LABEL: return64_arg2:313; TINY:       ; %bb.0:314; TINY-NEXT:    push r28315; TINY-NEXT:    push r29316; TINY-NEXT:    in r28, 61317; TINY-NEXT:    in r29, 62318; TINY-NEXT:    in r16, 63319; TINY-NEXT:    subi r28, 229320; TINY-NEXT:    sbci r29, 255321; TINY-NEXT:    ld r20, Y+322; TINY-NEXT:    ld r21, Y+323; TINY-NEXT:    subi r28, 2324; TINY-NEXT:    sbci r29, 0325; TINY-NEXT:    subi r28, 27326; TINY-NEXT:    sbci r29, 0327; TINY-NEXT:    out 63, r16328; TINY-NEXT:    mov r30, r24329; TINY-NEXT:    mov r31, r25330; TINY-NEXT:    subi r30, 250331; TINY-NEXT:    sbci r31, 255332; TINY-NEXT:    st Z+, r20333; TINY-NEXT:    st Z+, r21334; TINY-NEXT:    subi r30, 8335; TINY-NEXT:    sbci r31, 0336; TINY-NEXT:    in r16, 63337; TINY-NEXT:    subi r28, 231338; TINY-NEXT:    sbci r29, 255339; TINY-NEXT:    ld r20, Y+340; TINY-NEXT:    ld r21, Y+341; TINY-NEXT:    subi r28, 2342; TINY-NEXT:    sbci r29, 0343; TINY-NEXT:    subi r28, 25344; TINY-NEXT:    sbci r29, 0345; TINY-NEXT:    out 63, r16346; TINY-NEXT:    subi r30, 252347; TINY-NEXT:    sbci r31, 255348; TINY-NEXT:    st Z+, r20349; TINY-NEXT:    st Z+, r21350; TINY-NEXT:    subi r30, 6351; TINY-NEXT:    sbci r31, 0352; TINY-NEXT:    in r16, 63353; TINY-NEXT:    subi r28, 233354; TINY-NEXT:    sbci r29, 255355; TINY-NEXT:    ld r20, Y+356; TINY-NEXT:    ld r21, Y+357; TINY-NEXT:    subi r28, 2358; TINY-NEXT:    sbci r29, 0359; TINY-NEXT:    subi r28, 23360; TINY-NEXT:    sbci r29, 0361; TINY-NEXT:    out 63, r16362; TINY-NEXT:    subi r30, 254363; TINY-NEXT:    sbci r31, 255364; TINY-NEXT:    st Z+, r20365; TINY-NEXT:    st Z+, r21366; TINY-NEXT:    subi r30, 4367; TINY-NEXT:    sbci r31, 0368; TINY-NEXT:    in r16, 63369; TINY-NEXT:    subi r28, 235370; TINY-NEXT:    sbci r29, 255371; TINY-NEXT:    ld r20, Y+372; TINY-NEXT:    ld r21, Y+373; TINY-NEXT:    subi r28, 2374; TINY-NEXT:    sbci r29, 0375; TINY-NEXT:    subi r28, 21376; TINY-NEXT:    sbci r29, 0377; TINY-NEXT:    out 63, r16378; TINY-NEXT:    st Z+, r20379; TINY-NEXT:    st Z+, r21380; TINY-NEXT:    pop r29381; TINY-NEXT:    pop r28382; TINY-NEXT:    ret383    ret i64 %z384}385 386define i32 @return64_trunc(i32 %a, i32 %b, i32 %c, i64 %d) {387; AVR-LABEL: return64_trunc:388; AVR:       ; %bb.0:389; AVR-NEXT:    push r28390; AVR-NEXT:    push r29391; AVR-NEXT:    in r28, 61392; AVR-NEXT:    in r29, 62393; AVR-NEXT:    ldd r22, Y+5394; AVR-NEXT:    ldd r23, Y+6395; AVR-NEXT:    ldd r24, Y+7396; AVR-NEXT:    ldd r25, Y+8397; AVR-NEXT:    pop r29398; AVR-NEXT:    pop r28399; AVR-NEXT:    ret400;401; TINY-LABEL: return64_trunc:402; TINY:       ; %bb.0:403; TINY-NEXT:    push r28404; TINY-NEXT:    push r29405; TINY-NEXT:    in r28, 61406; TINY-NEXT:    in r29, 62407; TINY-NEXT:    in r16, 63408; TINY-NEXT:    subi r28, 243409; TINY-NEXT:    sbci r29, 255410; TINY-NEXT:    ld r22, Y+411; TINY-NEXT:    ld r23, Y+412; TINY-NEXT:    subi r28, 2413; TINY-NEXT:    sbci r29, 0414; TINY-NEXT:    subi r28, 13415; TINY-NEXT:    sbci r29, 0416; TINY-NEXT:    out 63, r16417; TINY-NEXT:    in r16, 63418; TINY-NEXT:    subi r28, 241419; TINY-NEXT:    sbci r29, 255420; TINY-NEXT:    ld r24, Y+421; TINY-NEXT:    ld r25, Y+422; TINY-NEXT:    subi r28, 2423; TINY-NEXT:    sbci r29, 0424; TINY-NEXT:    subi r28, 15425; TINY-NEXT:    sbci r29, 0426; TINY-NEXT:    out 63, r16427; TINY-NEXT:    pop r29428; TINY-NEXT:    pop r28429; TINY-NEXT:    ret430  %result = trunc i64 %d to i32431  ret i32 %result432}433 434define avr_intrcc void @interrupt_handler() {435; AVR-LABEL: interrupt_handler:436; AVR:       ; %bb.0:437; AVR-NEXT:    sei438; AVR-NEXT:    push r0439; AVR-NEXT:    in r0, 63440; AVR-NEXT:    push r0441; AVR-NEXT:    pop r0442; AVR-NEXT:    out 63, r0443; AVR-NEXT:    pop r0444; AVR-NEXT:    reti445;446; TINY-LABEL: interrupt_handler:447; TINY:       ; %bb.0:448; TINY-NEXT:    sei449; TINY-NEXT:    push r16450; TINY-NEXT:    in r16, 63451; TINY-NEXT:    push r16452; TINY-NEXT:    pop r16453; TINY-NEXT:    out 63, r16454; TINY-NEXT:    pop r16455; TINY-NEXT:    reti456  ret void457}458 459define avr_signalcc void @signal_handler() {460; AVR-LABEL: signal_handler:461; AVR:       ; %bb.0:462; AVR-NEXT:    push r0463; AVR-NEXT:    in r0, 63464; AVR-NEXT:    push r0465; AVR-NEXT:    pop r0466; AVR-NEXT:    out 63, r0467; AVR-NEXT:    pop r0468; AVR-NEXT:    reti469;470; TINY-LABEL: signal_handler:471; TINY:       ; %bb.0:472; TINY-NEXT:    push r16473; TINY-NEXT:    in r16, 63474; TINY-NEXT:    push r16475; TINY-NEXT:    pop r16476; TINY-NEXT:    out 63, r16477; TINY-NEXT:    pop r16478; TINY-NEXT:    reti479  ret void480}481