xref: /llvm-project/llvm/test/CodeGen/AVR/pseudo/STDWPtrQRr.mir (revision 2a528760bf20004066effcf8f91fedaabd261903)
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