| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 | 
 | ; RUN: llc < %s -mtriple=avr -mcpu=atmega328 -O1 -verify-machineinstrs | FileCheck %s | 
 |  | 
 | define internal i8 @main() { | 
 | ; CHECK-LABEL: main: | 
 | ; CHECK:       ; %bb.0: ; %bb0 | 
 | ; CHECK-NEXT:    push r2 | 
 | ; CHECK-NEXT:    push r3 | 
 | ; CHECK-NEXT:    push r4 | 
 | ; CHECK-NEXT:    push r5 | 
 | ; CHECK-NEXT:    push r6 | 
 | ; CHECK-NEXT:    push r7 | 
 | ; CHECK-NEXT:    push r8 | 
 | ; CHECK-NEXT:    push r9 | 
 | ; CHECK-NEXT:    push r10 | 
 | ; CHECK-NEXT:    push r11 | 
 | ; CHECK-NEXT:    push r12 | 
 | ; CHECK-NEXT:    push r13 | 
 | ; CHECK-NEXT:    push r14 | 
 | ; CHECK-NEXT:    push r15 | 
 | ; CHECK-NEXT:    push r16 | 
 | ; CHECK-NEXT:    push r17 | 
 | ; CHECK-NEXT:    push r28 | 
 | ; CHECK-NEXT:    push r29 | 
 | ; CHECK-NEXT:    in r28, 61 | 
 | ; CHECK-NEXT:    in r29, 62 | 
 | ; CHECK-NEXT:    sbiw r28, 13 | 
 | ; CHECK-NEXT:    in r0, 63 | 
 | ; CHECK-NEXT:    cli | 
 | ; CHECK-NEXT:    out 62, r29 | 
 | ; CHECK-NEXT:    out 63, r0 | 
 | ; CHECK-NEXT:    out 61, r28 | 
 | ; CHECK-NEXT:    ldi r16, 0 | 
 | ; CHECK-NEXT:    ldi r17, 0 | 
 | ; CHECK-NEXT:    ldi r18, -1 | 
 | ; CHECK-NEXT:    ;APP | 
 | ; CHECK-NEXT:    ldi r24, 123 | 
 | ; CHECK-NEXT:    ;NO_APP | 
 | ; CHECK-NEXT:    std Y+1, r24 ; 1-byte Folded Spill | 
 | ; CHECK-NEXT:    movw r24, r28 | 
 | ; CHECK-NEXT:    adiw r24, 6 | 
 | ; CHECK-NEXT:    std Y+3, r25 ; 2-byte Folded Spill | 
 | ; CHECK-NEXT:    std Y+2, r24 ; 2-byte Folded Spill | 
 | ; CHECK-NEXT:    movw r8, r16 | 
 | ; CHECK-NEXT:    movw r6, r16 | 
 | ; CHECK-NEXT:    movw r4, r16 | 
 | ; CHECK-NEXT:    movw r2, r16 | 
 | ; CHECK-NEXT:    rjmp .LBB0_2 | 
 | ; CHECK-NEXT:  .LBB0_1: ; %bb1 | 
 | ; CHECK-NEXT:    ; in Loop: Header=BB0_2 Depth=1 | 
 | ; CHECK-NEXT:    andi r30, 1 | 
 | ; CHECK-NEXT:    ldd r31, Y+4 ; 1-byte Folded Reload | 
 | ; CHECK-NEXT:    dec r31 | 
 | ; CHECK-NEXT:    cpi r30, 0 | 
 | ; CHECK-NEXT:    movw r8, r18 | 
 | ; CHECK-NEXT:    movw r6, r20 | 
 | ; CHECK-NEXT:    movw r4, r22 | 
 | ; CHECK-NEXT:    movw r2, r24 | 
 | ; CHECK-NEXT:    mov r18, r31 | 
 | ; CHECK-NEXT:    brne .LBB0_2 | 
 | ; CHECK-NEXT:    rjmp .LBB0_4 | 
 | ; CHECK-NEXT:  .LBB0_2: ; %bb1 | 
 | ; CHECK-NEXT:    ; =>This Inner Loop Header: Depth=1 | 
 | ; CHECK-NEXT:    std Y+4, r18 ; 1-byte Folded Spill | 
 | ; CHECK-NEXT:    movw r18, r8 | 
 | ; CHECK-NEXT:    movw r20, r6 | 
 | ; CHECK-NEXT:    movw r22, r4 | 
 | ; CHECK-NEXT:    movw r24, r2 | 
 | ; CHECK-NEXT:    ldi r26, 10 | 
 | ; CHECK-NEXT:    ldi r27, 0 | 
 | ; CHECK-NEXT:    movw r10, r26 | 
 | ; CHECK-NEXT:    movw r12, r16 | 
 | ; CHECK-NEXT:    movw r14, r16 | 
 | ; CHECK-NEXT:    call __udivdi3 | 
 | ; CHECK-NEXT:    std Y+13, r25 | 
 | ; CHECK-NEXT:    std Y+12, r24 | 
 | ; CHECK-NEXT:    std Y+11, r23 | 
 | ; CHECK-NEXT:    std Y+10, r22 | 
 | ; CHECK-NEXT:    std Y+9, r21 | 
 | ; CHECK-NEXT:    std Y+8, r20 | 
 | ; CHECK-NEXT:    std Y+7, r19 | 
 | ; CHECK-NEXT:    std Y+6, r18 | 
 | ; CHECK-NEXT:    ldd r30, Y+2 ; 2-byte Folded Reload | 
 | ; CHECK-NEXT:    ldd r31, Y+3 ; 2-byte Folded Reload | 
 | ; CHECK-NEXT:    ;APP | 
 | ; CHECK-NEXT:    ;NO_APP | 
 | ; CHECK-NEXT:    ldi r30, 1 | 
 | ; CHECK-NEXT:    cp r8, r1 | 
 | ; CHECK-NEXT:    cpc r9, r1 | 
 | ; CHECK-NEXT:    cpc r6, r16 | 
 | ; CHECK-NEXT:    cpc r7, r17 | 
 | ; CHECK-NEXT:    cpc r4, r16 | 
 | ; CHECK-NEXT:    cpc r5, r17 | 
 | ; CHECK-NEXT:    cpc r2, r16 | 
 | ; CHECK-NEXT:    cpc r3, r17 | 
 | ; CHECK-NEXT:    breq .LBB0_3 | 
 | ; CHECK-NEXT:    rjmp .LBB0_1 | 
 | ; CHECK-NEXT:  .LBB0_3: ; %bb1 | 
 | ; CHECK-NEXT:    ; in Loop: Header=BB0_2 Depth=1 | 
 | ; CHECK-NEXT:    mov r30, r1 | 
 | ; CHECK-NEXT:    rjmp .LBB0_1 | 
 | ; CHECK-NEXT:  .LBB0_4: ; %bb3 | 
 | ; CHECK-NEXT:    ldd r24, Y+1 ; 1-byte Folded Reload | 
 | ; CHECK-NEXT:    std Y+5, r24 | 
 | ; CHECK-NEXT:    movw r24, r28 | 
 | ; CHECK-NEXT:    adiw r24, 5 | 
 | ; CHECK-NEXT:    ;APP | 
 | ; CHECK-NEXT:    ;NO_APP | 
 | ; CHECK-NEXT:    ldd r24, Y+5 | 
 | ; CHECK-NEXT:    adiw r28, 13 | 
 | ; CHECK-NEXT:    in r0, 63 | 
 | ; CHECK-NEXT:    cli | 
 | ; CHECK-NEXT:    out 62, r29 | 
 | ; CHECK-NEXT:    out 63, r0 | 
 | ; CHECK-NEXT:    out 61, r28 | 
 | ; CHECK-NEXT:    pop r29 | 
 | ; CHECK-NEXT:    pop r28 | 
 | ; CHECK-NEXT:    pop r17 | 
 | ; CHECK-NEXT:    pop r16 | 
 | ; CHECK-NEXT:    pop r15 | 
 | ; CHECK-NEXT:    pop r14 | 
 | ; CHECK-NEXT:    pop r13 | 
 | ; CHECK-NEXT:    pop r12 | 
 | ; CHECK-NEXT:    pop r11 | 
 | ; CHECK-NEXT:    pop r10 | 
 | ; CHECK-NEXT:    pop r9 | 
 | ; CHECK-NEXT:    pop r8 | 
 | ; CHECK-NEXT:    pop r7 | 
 | ; CHECK-NEXT:    pop r6 | 
 | ; CHECK-NEXT:    pop r5 | 
 | ; CHECK-NEXT:    pop r4 | 
 | ; CHECK-NEXT:    pop r3 | 
 | ; CHECK-NEXT:    pop r2 | 
 | ; CHECK-NEXT:    ret | 
 | bb0: | 
 |   %0 = alloca i64 | 
 |   %1 = alloca i8 | 
 |   %2 = tail call i8 asm sideeffect "ldi ${0}, 123", "=&r,~{sreg},~{memory}"() | 
 |  | 
 |   br label %bb1 | 
 |  | 
 | bb1: | 
 |   %3 = phi i64 [ %5, %bb1 ], [ 0, %bb0 ] | 
 |   %4 = phi i8 [ %6, %bb1 ], [ 0, %bb0 ] | 
 |   %5 = udiv i64 %3, 10 | 
 |   %6 = add i8 %4, 1 | 
 |  | 
 |   store i64 %5, ptr %0 | 
 |   call void asm sideeffect "", "r,~{memory}"(ptr %0) | 
 |  | 
 |   %7 = icmp eq i64 %3, 0 | 
 |   %8 = icmp eq i8 %6, 0 | 
 |  | 
 |   br i1 %7, label %bb3, label %bb1 | 
 |  | 
 | bb3: | 
 |   store i8 %2, ptr %1 | 
 |   call void asm sideeffect "", "r,~{memory}"(ptr %1) | 
 |  | 
 |   %9 = load i8, ptr %1 | 
 |  | 
 |   ret i8 %9 | 
 | } |