xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix32-crsave.mir (revision 9a28814f59e8f52cc63ae3d17023cee8348d9b53)
1# RUN: llc -mtriple powerpc-unknown-aix-xcoff -x mir -mcpu=pwr4 -mattr=-altivec \
2# RUN: -run-pass=prologepilog --verify-machineinstrs < %s | \
3# RUN: FileCheck %s --check-prefixes=CHECK
4
5---
6name:            CRMultiSave
7alignment:       16
8tracksRegLiveness: true
9liveins:
10  - { reg: '$r3', virtual-reg: '' }
11body:             |
12  bb.0.entry:
13    liveins: $r3
14    renamable $r29 = ANDI_rec killed renamable $r3, 1, implicit-def dead $cr0, implicit-def $cr0gt
15    renamable $cr2lt = COPY $cr0gt
16    renamable $cr4lt = COPY $cr0gt
17    renamable $r3 = COPY $r29
18    BLR implicit $lr, implicit $rm, implicit $r3
19
20    ; CHECK-LABEL:  fixedStack:
21    ; CHECK-NEXT:   - { id: 0, type: spill-slot, offset: -4, size: 4, alignment: 4, stack-id: default,
22    ; CHECK-NEXT:       callee-saved-register: '$r31', callee-saved-restored: true, debug-info-variable: '',
23    ; CHECK-NEXT:       debug-info-expression: '', debug-info-location: '' }
24    ; CHECK-NEXT:   - { id: 1, type: spill-slot, offset: -8, size: 4, alignment: 8, stack-id: default,
25    ; CHECK-NEXT:       callee-saved-register: '$r30', callee-saved-restored: true, debug-info-variable: '',
26    ; CHECK-NEXT:       debug-info-expression: '', debug-info-location: '' }
27    ; CHECK-NEXT:   - { id: 2, type: spill-slot, offset: -12, size: 4, alignment: 4, stack-id: default,
28    ; CHECK-NEXT:       callee-saved-register: '$r29', callee-saved-restored: true, debug-info-variable: '',
29    ; CHECK-NEXT:       debug-info-expression: '', debug-info-location: '' }
30    ; CHECK-NEXT:   - { id: 3, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
31    ; CHECK-NEXT:       isImmutable: true, isAliased: false, callee-saved-register: '$cr4',
32    ; CHECK-NEXT:       callee-saved-restored: true, debug-info-variable: '', debug-info-expression: '',
33    ; CHECK-NEXT:       debug-info-location: '' }
34    ; CHECK-LABEL:  stack:
35
36    ; CHECK:      bb.0.entry:
37    ; CHECK-NEXT:  liveins: $r3, $r29, $r30, $r31, $cr2, $cr4
38
39    ; CHECK:      $r12 = MFCR implicit killed $cr2, implicit killed $cr4
40    ; CHECK-NEXT: STW killed $r12, 4, $r1
41    ; CHECK-NEXT: STW killed $r29, -12, $r1 :: (store (s32) into %fixed-stack.2)
42    ; CHECK-NEXT: STW killed $r30, -8, $r1 :: (store (s32) into %fixed-stack.1, align 8)
43    ; CHECK-NEXT: STW killed $r31, -4, $r1 :: (store (s32) into %fixed-stack.0)
44
45    ; CHECK:      $r31 = LWZ -4, $r1 :: (load (s32) from %fixed-stack.0)
46    ; CHECK-NEXT: $r30 = LWZ -8, $r1 :: (load (s32) from %fixed-stack.1, align 8)
47    ; CHECK-NEXT: $r29 = LWZ -12, $r1 :: (load (s32) from %fixed-stack.2)
48    ; CHECK-NEXT: $r12 = LWZ 4, $r1
49    ; CHECK-NEXT: $cr2 = MTOCRF $r12
50    ; CHECK-NEXT: $cr4 = MTOCRF killed $r12
51
52...
53---
54name:            CR3Save
55alignment:       16
56tracksRegLiveness: true
57liveins:
58  - { reg: '$r3', virtual-reg: '' }
59body:             |
60  bb.0.entry:
61    liveins: $r3
62    renamable $r31 = ANDI_rec killed renamable $r3, 1, implicit-def dead $cr0, implicit-def $cr0gt
63    renamable $cr3lt = COPY $cr0gt
64    renamable $r3 = COPY $r31
65    BLR implicit $lr, implicit $rm, implicit $r3
66
67    ; CHECK-LABEL: fixedStack:
68    ; CHECK-NEXT:  - { id: 0, type: spill-slot, offset: -4, size: 4, alignment: 4, stack-id: default,
69    ; CHECK-NEXT:      callee-saved-register: '$r31', callee-saved-restored: true, debug-info-variable: '',
70    ; CHECK-NEXT:      debug-info-expression: '', debug-info-location: '' }
71    ; CHECK-NEXT:  - { id: 1, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
72    ; CHECK-NEXT:      isImmutable: true, isAliased: false, callee-saved-register: '$cr3',
73    ; CHECK-NEXT:      callee-saved-restored: true, debug-info-variable: '', debug-info-expression: '',
74    ; CHECK-NEXT:      debug-info-location: '' }
75    ; CHECK-LABEL: stack:
76
77    ; CHECK:      bb.0.entry:
78    ; CHECK-NEXT:   liveins: $r3, $r31, $cr3
79
80    ; CHECK:      $r12 = MFCR implicit killed $cr3
81    ; CHECK-NEXT: STW killed $r12, 4, $r1
82    ; CHECK-NEXT: STW killed $r31, -4, $r1 :: (store (s32) into %fixed-stack.0)
83
84    ; CHECK:      $r31 = LWZ -4, $r1 :: (load (s32) from %fixed-stack.0)
85    ; CHECK-NEXT: $r12 = LWZ 4, $r1
86    ; CHECK-NEXT: $cr3 = MTOCRF killed $r12
87