164 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2# RUN: llc %s -mtriple=m68k -start-after=prologepilog -O0 -filetype=asm -o - \3# RUN: | FileCheck %s4 5#------------------------------------------------------------------------------6# CollapseMOVEM pass finds sequences of MOVEM instructions and collapse them7# into a single instruciton with merged masks. This only works with stack data8#------------------------------------------------------------------------------9 10--- # CollapseMOVEM_RM11#12# CHECK-LABEL: CollapseMOVEM_RM13# CHECK: movem.l (0,%sp), %d0-%d2/%d7/%a1-%a3/%a514name: CollapseMOVEM_RM15body: |16 bb.0:17 MOVM32mp 1, 0, $sp18 MOVM32mp 2, 4, $sp19 MOVM32mp 4, 8, $sp20 MOVM32mp 128, 12, $sp21 MOVM32mp 512, 16, $sp22 MOVM32mp 1024, 20, $sp23 MOVM32mp 2048, 24, $sp24 MOVM32mp 8192, 28, $sp25 26...27#28# CHECK-LABEL: CollapseMOVEM_RM_Reversed29# CHECK: movem.l (0,%sp), %d0-%d2/%d7/%a1-%a3/%a530name: CollapseMOVEM_RM_Reversed31body: |32 bb.0:33 MOVM32mp 8192, 28, $sp34 MOVM32mp 2048, 24, $sp35 MOVM32mp 1024, 20, $sp36 MOVM32mp 512, 16, $sp37 MOVM32mp 128, 12, $sp38 MOVM32mp 4, 8, $sp39 MOVM32mp 2, 4, $sp40 MOVM32mp 1, 0, $sp41 42...43# This async reg/mem order is impossible to store with MOVEM44# CHECK-LABEL: CollapseMOVEM_RM_ReversedStoreOrder45# CHECK: movem.l (0,%sp), %a546# CHECK: movem.l (4,%sp), %a347# CHECK: movem.l (8,%sp), %a248# CHECK: movem.l (12,%sp), %a149# CHECK: movem.l (16,%sp), %d750# CHECK: movem.l (20,%sp), %d251# CHECK: movem.l (24,%sp), %d152# CHECK: movem.l (28,%sp), %d053name: CollapseMOVEM_RM_ReversedStoreOrder54body: |55 bb.0:56 MOVM32mp 8192, 0, $sp57 MOVM32mp 2048, 4, $sp58 MOVM32mp 1024, 8, $sp59 MOVM32mp 512, 12, $sp60 MOVM32mp 128, 16, $sp61 MOVM32mp 4, 20, $sp62 MOVM32mp 2, 24, $sp63 MOVM32mp 1, 28, $sp64 65...66--- # CollapseMOVEM_MR67#68# CHECK-LABEL: CollapseMOVEM_MR69# CHECK: movem.l %d0-%d2/%d7/%a1-%a3/%a5, (0,%sp)70name: CollapseMOVEM_MR71body: |72 bb.0:73 MOVM32pm 0, $sp, 174 MOVM32pm 4, $sp, 275 MOVM32pm 8, $sp, 476 MOVM32pm 12, $sp, 12877 MOVM32pm 16, $sp, 51278 MOVM32pm 20, $sp, 102479 MOVM32pm 24, $sp, 204880 MOVM32pm 28, $sp, 819281 82...83--- # CollapseMOVEM_Mixed84#85# CHECK-LABEL: CollapseMOVEM_Mixed86# CHECK: movem.l %d0-%d1, (0,%sp)87# CHECK: movem.l (8,%sp), %d2/%d788# CHECK: movem.l %a1-%a2, (16,%sp)89# CHECK: movem.l (24,%sp), %a390# CHECK: movem.l %a5, (28,%sp)91name: CollapseMOVEM_Mixed92body: |93 bb.0:94 MOVM32pm 0, $sp, 195 MOVM32pm 4, $sp, 296 MOVM32mp 4, 8, $sp97 MOVM32mp 128, 12, $sp98 MOVM32pm 16, $sp, 51299 MOVM32pm 20, $sp, 1024100 MOVM32mp 2048, 24, $sp101 MOVM32pm 28, $sp, 8192102 103...104--- # CollapseMOVEM_Zero105#106# CHECK-LABEL: CollapseMOVEM_Zero107# CHECK: movem.l %d0-%d4, (-8,%sp)108name: CollapseMOVEM_Zero109body: |110 bb.0:111 MOVM32pm -8, $sp, 1112 MOVM32pm -4, $sp, 2113 MOVM32pm 0, $sp, 4114 MOVM32pm 4, $sp, 8115 MOVM32pm 8, $sp, 16116 117...118#119# CHECK-LABEL: CollapseMOVEM_Zero_Mixed120# CHECK: movem.l %d3, (4,%sp)121# CHECK: movem.l %d0-%d2, (-8,%sp)122# CHECK: movem.l %d4, (8,%sp)123name: CollapseMOVEM_Zero_Mixed124body: |125 bb.0:126 MOVM32pm 4, $sp, 8127 MOVM32pm -4, $sp, 2128 MOVM32pm -8, $sp, 1129 MOVM32pm 0, $sp, 4130 MOVM32pm 8, $sp, 16131 132...133--- # CollapseMOVEM_Zero_Reversed134#135# CHECK-LABEL: CollapseMOVEM_Zero_Reversed136# CHECK: movem.l %d0-%d4, (-8,%sp)137name: CollapseMOVEM_Zero_Reversed138body: |139 bb.0:140 MOVM32pm 8, $sp, 16141 MOVM32pm 4, $sp, 8142 MOVM32pm 0, $sp, 4143 MOVM32pm -4, $sp, 2144 MOVM32pm -8, $sp, 1145 146...147#148# CHECK-LABEL: CollapseMOVEM_Zero_ReversedStoreOrder149# 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_ReversedStoreOrder155body: |156 bb.0:157 MOVM32pm 8, $sp, 1158 MOVM32pm 4, $sp, 2159 MOVM32pm 0, $sp, 4160 MOVM32pm -4, $sp, 8161 MOVM32pm -8, $sp, 16162 163...164