xref: /llvm-project/llvm/test/CodeGen/M68k/CollapseMOVEM.mir (revision 47f52f989b06192d3eef9891250e1db7533c8410)
1# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2# RUN: llc %s -mtriple=m68k -start-after=prologepilog -O0 -filetype=asm -o - \
3# RUN:   | FileCheck %s
4
5#------------------------------------------------------------------------------
6# CollapseMOVEM pass finds sequences of MOVEM instructions and collapse them
7# into a single instruciton with merged masks. This only works with stack data
8#------------------------------------------------------------------------------
9
10--- # CollapseMOVEM_RM
11#
12# CHECK-LABEL: CollapseMOVEM_RM
13# CHECK:       movem.l (0,%sp), %d0-%d2/%d7/%a1-%a3/%a5
14name: CollapseMOVEM_RM
15body: |
16  bb.0:
17    MOVM32mp 1,     0, $sp
18    MOVM32mp 2,     4, $sp
19    MOVM32mp 4,     8, $sp
20    MOVM32mp 128,  12, $sp
21    MOVM32mp 512,  16, $sp
22    MOVM32mp 1024, 20, $sp
23    MOVM32mp 2048, 24, $sp
24    MOVM32mp 8192, 28, $sp
25
26...
27#
28# CHECK-LABEL: CollapseMOVEM_RM_Reversed
29# CHECK:       movem.l (0,%sp), %d0-%d2/%d7/%a1-%a3/%a5
30name: CollapseMOVEM_RM_Reversed
31body: |
32  bb.0:
33    MOVM32mp 8192, 28, $sp
34    MOVM32mp 2048, 24, $sp
35    MOVM32mp 1024, 20, $sp
36    MOVM32mp 512,  16, $sp
37    MOVM32mp 128,  12, $sp
38    MOVM32mp 4,     8, $sp
39    MOVM32mp 2,     4, $sp
40    MOVM32mp 1,     0, $sp
41
42...
43# This async reg/mem order is impossible to store with MOVEM
44# CHECK-LABEL: CollapseMOVEM_RM_ReversedStoreOrder
45# CHECK:       movem.l (0,%sp), %a5
46# CHECK:       movem.l (4,%sp), %a3
47# CHECK:       movem.l (8,%sp), %a2
48# CHECK:       movem.l (12,%sp), %a1
49# CHECK:       movem.l (16,%sp), %d7
50# CHECK:       movem.l (20,%sp), %d2
51# CHECK:       movem.l (24,%sp), %d1
52# CHECK:       movem.l (28,%sp), %d0
53name: CollapseMOVEM_RM_ReversedStoreOrder
54body: |
55  bb.0:
56    MOVM32mp 8192,  0, $sp
57    MOVM32mp 2048,  4, $sp
58    MOVM32mp 1024,  8, $sp
59    MOVM32mp 512,  12, $sp
60    MOVM32mp 128,  16, $sp
61    MOVM32mp 4,    20, $sp
62    MOVM32mp 2,    24, $sp
63    MOVM32mp 1,    28, $sp
64
65...
66--- # CollapseMOVEM_MR
67#
68# CHECK-LABEL: CollapseMOVEM_MR
69# CHECK:       movem.l %d0-%d2/%d7/%a1-%a3/%a5, (0,%sp)
70name: CollapseMOVEM_MR
71body: |
72  bb.0:
73    MOVM32pm   0, $sp, 1
74    MOVM32pm   4, $sp, 2
75    MOVM32pm   8, $sp, 4
76    MOVM32pm  12, $sp, 128
77    MOVM32pm  16, $sp, 512
78    MOVM32pm  20, $sp, 1024
79    MOVM32pm  24, $sp, 2048
80    MOVM32pm  28, $sp, 8192
81
82...
83--- # CollapseMOVEM_Mixed
84#
85# CHECK-LABEL: CollapseMOVEM_Mixed
86# CHECK:       movem.l %d0-%d1, (0,%sp)
87# CHECK:       movem.l (8,%sp), %d2/%d7
88# CHECK:       movem.l %a1-%a2, (16,%sp)
89# CHECK:       movem.l (24,%sp), %a3
90# CHECK:       movem.l %a5, (28,%sp)
91name: CollapseMOVEM_Mixed
92body: |
93  bb.0:
94    MOVM32pm  0, $sp, 1
95    MOVM32pm  4, $sp, 2
96    MOVM32mp  4, 8, $sp
97    MOVM32mp  128, 12, $sp
98    MOVM32pm  16, $sp, 512
99    MOVM32pm  20, $sp, 1024
100    MOVM32mp  2048, 24, $sp
101    MOVM32pm  28, $sp, 8192
102
103...
104--- # CollapseMOVEM_Zero
105#
106# CHECK-LABEL: CollapseMOVEM_Zero
107# CHECK:       movem.l %d0-%d4, (-8,%sp)
108name: CollapseMOVEM_Zero
109body: |
110  bb.0:
111    MOVM32pm -8, $sp,  1
112    MOVM32pm -4, $sp,  2
113    MOVM32pm  0, $sp,  4
114    MOVM32pm  4, $sp,  8
115    MOVM32pm  8, $sp, 16
116
117...
118#
119# CHECK-LABEL: CollapseMOVEM_Zero_Mixed
120# CHECK:       movem.l %d3, (4,%sp)
121# CHECK:       movem.l %d0-%d2, (-8,%sp)
122# CHECK:       movem.l %d4, (8,%sp)
123name: CollapseMOVEM_Zero_Mixed
124body: |
125  bb.0:
126    MOVM32pm  4, $sp,  8
127    MOVM32pm -4, $sp,  2
128    MOVM32pm -8, $sp,  1
129    MOVM32pm  0, $sp,  4
130    MOVM32pm  8, $sp, 16
131
132...
133--- # CollapseMOVEM_Zero_Reversed
134#
135# CHECK-LABEL: CollapseMOVEM_Zero_Reversed
136# CHECK:       movem.l %d0-%d4, (-8,%sp)
137name: CollapseMOVEM_Zero_Reversed
138body: |
139  bb.0:
140    MOVM32pm  8, $sp, 16
141    MOVM32pm  4, $sp,  8
142    MOVM32pm  0, $sp,  4
143    MOVM32pm -4, $sp,  2
144    MOVM32pm -8, $sp,  1
145
146...
147#
148# CHECK-LABEL: CollapseMOVEM_Zero_ReversedStoreOrder
149# CHECK:       movem.l %d0, (8,%sp)
150# CHECK:       movem.l %d1, (4,%sp)
151# CHECK:       movem.l %d2, (0,%sp)
152# CHECK:       movem.l %d3, (-4,%sp)
153# CHECK:       movem.l %d4, (-8,%sp)
154name: CollapseMOVEM_Zero_ReversedStoreOrder
155body: |
156  bb.0:
157    MOVM32pm  8, $sp,  1
158    MOVM32pm  4, $sp,  2
159    MOVM32pm  0, $sp,  4
160    MOVM32pm -4, $sp,  8
161    MOVM32pm -8, $sp, 16
162
163...
164