1# RUN: llc -O0 -run-pass=avr-expand-pseudo -verify-machineinstrs %s -o - | FileCheck %s 2# RUN: llc -O0 -run-pass=avr-expand-pseudo -verify-machineinstrs -mattr=avrtiny %s -o - \ 3# RUN: | FileCheck %s --check-prefix=CHECK-TINY 4# RUN: llc -O0 -run-pass=avr-expand-pseudo -verify-machineinstrs -mattr=lowbytefirst %s -o - \ 5# RUN: | FileCheck %s --check-prefix=CHECK-XMEGA 6 7--- | 8 target triple = "avr--" 9 define void @test() { 10 entry: 11 ret void 12 } 13... 14 15--- 16name: test 17body: | 18 bb.0.entry: 19 20 ; CHECK-LABEL: test 21 22 ; Small displacement (<63): 23 ; CHECK: STDPtrQRr $r29r28, 4, $r1 24 ; CHECK-NEXT: STDPtrQRr $r29r28, 3, $r0 25 ; CHECK-XMEGA: STDPtrQRr $r29r28, 3, $r0 26 ; CHECK-XMEGA-NEXT: STDPtrQRr $r29r28, 4, $r1 27 ; CHECK-TINY: $r28 = SUBIRdK killed $r28, 253, implicit-def $sreg 28 ; CHECK-TINY-NEXT: $r29 = SBCIRdK killed $r29, 255, implicit-def $sreg, implicit killed $sreg 29 ; CHECK-TINY-NEXT: early-clobber $r29r28 = STPtrPiRr killed $r29r28, $r0, 0 30 ; CHECK-TINY-NEXT: early-clobber $r29r28 = STPtrPiRr killed $r29r28, $r1, 0 31 ; CHECK-TINY-NEXT: $r28 = SUBIRdK killed $r28, 5, implicit-def $sreg 32 ; CHECK-TINY-NEXT: $r29 = SBCIRdK killed $r29, 0, implicit-def $sreg, implicit killed $sreg 33 STDWPtrQRr $r29r28, 3, $r1r0 34 35 ; Small displacement where the destination register is killed: 36 ; CHECK-NEXT: STDPtrQRr $r29r28, 4, $r1 37 ; CHECK-NEXT: STDPtrQRr killed $r29r28, 3, $r0 38 ; CHECK-XMEGA-NEXT: STDPtrQRr $r29r28, 3, $r0 39 ; CHECK-XMEGA-NEXT: STDPtrQRr killed $r29r28, 4, $r1 40 STDWPtrQRr killed $r29r28, 3, $r1r0 41 42 ; Small displacement where the source register is killed: 43 ; CHECK: STDPtrQRr $r29r28, 4, killed $r1 44 ; CHECK-NEXT: STDPtrQRr $r29r28, 3, killed $r0 45 ; CHECK-XMEGA: STDPtrQRr $r29r28, 3, killed $r0 46 ; CHECK-XMEGA-NEXT: STDPtrQRr $r29r28, 4, killed $r1 47 STDWPtrQRr $r29r28, 3, killed $r1r0 48 49 ; Small displacement, near the limit (=62): 50 ; CHECK: STDPtrQRr $r29r28, 63, $r1 51 ; CHECK-NEXT: STDPtrQRr $r29r28, 62, $r0 52 ; CHECK-XMEGA: STDPtrQRr $r29r28, 62, $r0 53 ; CHECK-XMEGA-NEXT: STDPtrQRr $r29r28, 63, $r1 54 STDWPtrQRr $r29r28, 62, $r1r0 55 56 ; Large displacement (>=63): 57 ; CHECK: $r28 = SUBIRdK killed $r28, 193, implicit-def $sreg 58 ; CHECK-NEXT: $r29 = SBCIRdK killed $r29, 255, implicit-def $sreg, implicit killed $sreg 59 ; CHECK-NEXT: $r29r28 = STPtrPiRr killed $r29r28, $r0, 0 60 ; CHECK-NEXT: $r29r28 = STPtrPiRr killed $r29r28, $r1, 0 61 ; CHECK-NEXT: $r28 = SUBIRdK killed $r28, 65, implicit-def $sreg 62 ; CHECK-NEXT: $r29 = SBCIRdK killed $r29, 0, implicit-def $sreg, implicit killed $sreg 63 ; CHECK-TINY: $r28 = SUBIRdK killed $r28, 193, implicit-def $sreg 64 ; CHECK-TINY-NEXT: $r29 = SBCIRdK killed $r29, 255, implicit-def $sreg, implicit killed $sreg 65 ; CHECK-TINY-NEXT: $r29r28 = STPtrPiRr killed $r29r28, $r0, 0 66 ; CHECK-TINY-NEXT: $r29r28 = STPtrPiRr killed $r29r28, $r1, 0 67 ; CHECK-TINY-NEXT: $r28 = SUBIRdK killed $r28, 65, implicit-def $sreg 68 ; CHECK-TINY-NEXT: $r29 = SBCIRdK killed $r29, 0, implicit-def $sreg, implicit killed $sreg 69 STDWPtrQRr $r29r28, 63, $r1r0 70 71 ; Large displacement where the destination register is killed: 72 ; CHECK: $r28 = SUBIRdK killed $r28, 193, implicit-def $sreg 73 ; CHECK-NEXT: $r29 = SBCIRdK killed $r29, 255, implicit-def $sreg, implicit killed $sreg 74 ; CHECK-NEXT: $r29r28 = STPtrPiRr killed $r29r28, $r0 75 ; CHECK-NEXT: $r29r28 = STPtrPiRr killed $r29r28, $r1 76 STDWPtrQRr killed $r29r28, 63, $r1r0 77 78 ; Large displacement where the source register is killed: 79 ; CHECK: $r28 = SUBIRdK killed $r28, 193, implicit-def $sreg 80 ; CHECK-NEXT: $r29 = SBCIRdK killed $r29, 255, implicit-def $sreg, implicit killed $sreg 81 ; CHECK-NEXT: STPtrPiRr killed $r29r28, killed $r0, 0 82 ; CHECK-NEXT: STPtrPiRr killed $r29r28, killed $r1, 0 83 ; CHECK-NEXT: $r28 = SUBIRdK killed $r28, 65, implicit-def $sreg 84 ; CHECK-NEXT: $r29 = SBCIRdK killed $r29, 0, implicit-def $sreg, implicit killed $sreg 85 STDWPtrQRr $r29r28, 63, killed $r1r0 86... 87