174 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=atmega328p -O0 < %s -mtriple=avr | FileCheck --check-prefix=CHECK-MEGA %s3; RUN: llc -mattr=avrtiny -O0 < %s -mtriple=avr | FileCheck %s4 5define i16 @reg_copy16(i16, i16 %a) {6; CHECK-MEGA-LABEL: reg_copy16:7; CHECK-MEGA: ; %bb.0:8; CHECK-MEGA-NEXT: movw r24, r229; CHECK-MEGA-NEXT: ret10;11; CHECK-LABEL: reg_copy16:12; CHECK: ; %bb.0:13; CHECK-NEXT: mov r24, r2214; CHECK-NEXT: mov r25, r2315; CHECK-NEXT: ret16 ret i16 %a17}18 19define i8 @return_zero() {20; CHECK-MEGA-LABEL: return_zero:21; CHECK-MEGA: ; %bb.0:22; CHECK-MEGA-NEXT: mov r24, r123; CHECK-MEGA-NEXT: ret24;25; CHECK-LABEL: return_zero:26; CHECK: ; %bb.0:27; CHECK-NEXT: mov r24, r1728; CHECK-NEXT: ret29 ret i8 030}31 32define i8 @atomic_load8(ptr %foo) {33; CHECK-MEGA-LABEL: atomic_load8:34; CHECK-MEGA: ; %bb.0:35; CHECK-MEGA-NEXT: movw r26, r2436; CHECK-MEGA-NEXT: in r0, 6337; CHECK-MEGA-NEXT: cli38; CHECK-MEGA-NEXT: ld r24, X39; CHECK-MEGA-NEXT: out 63, r040; CHECK-MEGA-NEXT: ret41;42; CHECK-LABEL: atomic_load8:43; CHECK: ; %bb.0:44; CHECK-NEXT: mov r26, r2445; CHECK-NEXT: mov r27, r2546; CHECK-NEXT: in r16, 6347; CHECK-NEXT: cli48; CHECK-NEXT: ld r24, X49; CHECK-NEXT: out 63, r1650; CHECK-NEXT: ret51 %val = load atomic i8, ptr %foo unordered, align 152 ret i8 %val53}54 55define avr_signalcc void @signal_handler_with_asm() {56; CHECK-MEGA-LABEL: signal_handler_with_asm:57; CHECK-MEGA: ; %bb.0:58; CHECK-MEGA-NEXT: push r059; CHECK-MEGA-NEXT: in r0, 6360; CHECK-MEGA-NEXT: push r061; CHECK-MEGA-NEXT: push r162; CHECK-MEGA-NEXT: clr r163; CHECK-MEGA-NEXT: push r2464; CHECK-MEGA-NEXT: ldi r24, 365; CHECK-MEGA-NEXT: ;APP66; CHECK-MEGA-NEXT: mov r24, r2467; CHECK-MEGA-NEXT: ;NO_APP68; CHECK-MEGA-NEXT: pop r2469; CHECK-MEGA-NEXT: pop r170; CHECK-MEGA-NEXT: pop r071; CHECK-MEGA-NEXT: out 63, r072; CHECK-MEGA-NEXT: pop r073; CHECK-MEGA-NEXT: reti74;75; CHECK-LABEL: signal_handler_with_asm:76; CHECK: ; %bb.0:77; CHECK-NEXT: push r1678; CHECK-NEXT: in r16, 6379; CHECK-NEXT: push r1680; CHECK-NEXT: push r1781; CHECK-NEXT: clr r1782; CHECK-NEXT: push r2483; CHECK-NEXT: ldi r24, 384; CHECK-NEXT: ;APP85; CHECK-NEXT: mov r24, r2486; CHECK-NEXT: ;NO_APP87; CHECK-NEXT: pop r2488; CHECK-NEXT: pop r1789; CHECK-NEXT: pop r1690; CHECK-NEXT: out 63, r1691; CHECK-NEXT: pop r1692; CHECK-NEXT: reti93 call i8 asm sideeffect "mov $0, $1", "=r,r"(i8 3) nounwind94 ret void95}96 97declare void @foo()98 99define avr_signalcc void @signal_handler_with_call() {100; CHECK-MEGA-LABEL: signal_handler_with_call:101; CHECK-MEGA: ; %bb.0:102; CHECK-MEGA-NEXT: push r0103; CHECK-MEGA-NEXT: in r0, 63104; CHECK-MEGA-NEXT: push r0105; CHECK-MEGA-NEXT: push r1106; CHECK-MEGA-NEXT: clr r1107; CHECK-MEGA-NEXT: push r18108; CHECK-MEGA-NEXT: push r19109; CHECK-MEGA-NEXT: push r20110; CHECK-MEGA-NEXT: push r21111; CHECK-MEGA-NEXT: push r22112; CHECK-MEGA-NEXT: push r23113; CHECK-MEGA-NEXT: push r24114; CHECK-MEGA-NEXT: push r25115; CHECK-MEGA-NEXT: push r26116; CHECK-MEGA-NEXT: push r27117; CHECK-MEGA-NEXT: push r30118; CHECK-MEGA-NEXT: push r31119; CHECK-MEGA-NEXT: call foo120; CHECK-MEGA-NEXT: pop r31121; CHECK-MEGA-NEXT: pop r30122; CHECK-MEGA-NEXT: pop r27123; CHECK-MEGA-NEXT: pop r26124; CHECK-MEGA-NEXT: pop r25125; CHECK-MEGA-NEXT: pop r24126; CHECK-MEGA-NEXT: pop r23127; CHECK-MEGA-NEXT: pop r22128; CHECK-MEGA-NEXT: pop r21129; CHECK-MEGA-NEXT: pop r20130; CHECK-MEGA-NEXT: pop r19131; CHECK-MEGA-NEXT: pop r18132; CHECK-MEGA-NEXT: pop r1133; CHECK-MEGA-NEXT: pop r0134; CHECK-MEGA-NEXT: out 63, r0135; CHECK-MEGA-NEXT: pop r0136; CHECK-MEGA-NEXT: reti137;138; CHECK-LABEL: signal_handler_with_call:139; CHECK: ; %bb.0:140; CHECK-NEXT: push r16141; CHECK-NEXT: in r16, 63142; CHECK-NEXT: push r16143; CHECK-NEXT: push r17144; CHECK-NEXT: clr r17145; CHECK-NEXT: push r20146; CHECK-NEXT: push r21147; CHECK-NEXT: push r22148; CHECK-NEXT: push r23149; CHECK-NEXT: push r24150; CHECK-NEXT: push r25151; CHECK-NEXT: push r26152; CHECK-NEXT: push r27153; CHECK-NEXT: push r30154; CHECK-NEXT: push r31155; CHECK-NEXT: rcall foo156; CHECK-NEXT: pop r31157; CHECK-NEXT: pop r30158; CHECK-NEXT: pop r27159; CHECK-NEXT: pop r26160; CHECK-NEXT: pop r25161; CHECK-NEXT: pop r24162; CHECK-NEXT: pop r23163; CHECK-NEXT: pop r22164; CHECK-NEXT: pop r21165; CHECK-NEXT: pop r20166; CHECK-NEXT: pop r17167; CHECK-NEXT: pop r16168; CHECK-NEXT: out 63, r16169; CHECK-NEXT: pop r16170; CHECK-NEXT: reti171 call void @foo()172 ret void173}174