Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / AMX / amx-fastconfig-spill.mir
blob98744bbe8e1473144aadc7976c0c3ed9d260f46c
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-- -mattr=+amx-int8,avx512f -run-pass=fastpretileconfig -o - %s | FileCheck %s
4 # Test spill/reload across basic block.
6 ---
7 name:            foo
8 alignment:       16
9 tracksRegLiveness: true
10 registers:
11   - { id: 0, class: gr16 }
12   - { id: 1, class: gr16 }
13   - { id: 2, class: tile }
14   - { id: 3, class: gr64_nosp }
15   - { id: 4, class: gr64 }
16   - { id: 5, class: tile }
17   - { id: 6, class: tile }
18   - { id: 7, class: tile }
19   - { id: 8, class: gr32 }
20   - { id: 9, class: vr512 }
21 frameInfo:
22   maxAlignment:    16
23 stack:
24   - { id: 0, size: 1024, alignment: 16 }
25   - { id: 1, size: 64, alignment: 4 }
26 machineFunctionInfo: {}
27 body:             |
28   ; CHECK-LABEL: name: foo
29   ; CHECK: bb.0.entry:
30   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
31   ; CHECK-NEXT: {{  $}}
32   ; CHECK-NEXT:   [[AVX512_512_SET0_:%[0-9]+]]:vr512 = AVX512_512_SET0
33   ; CHECK-NEXT:   VMOVUPSZmr %stack.4, 1, $noreg, 0, $noreg, [[AVX512_512_SET0_]] :: (store (s512) into %stack.4, align 4)
34   ; CHECK-NEXT:   MOV8mi %stack.4, 1, $noreg, 0, $noreg, 1 :: (store (s512) into %stack.4, align 4)
35   ; CHECK-NEXT:   [[MOV16ri:%[0-9]+]]:gr16 = MOV16ri 32
36   ; CHECK-NEXT:   [[MOV16ri1:%[0-9]+]]:gr16 = MOV16ri 8
37   ; CHECK-NEXT:   PLDTILECFGV %stack.4, 1, $noreg, 0, $noreg, implicit-def $tmm0, implicit-def $tmm1, implicit-def $tmm2, implicit-def $tmm3, implicit-def $tmm4, implicit-def $tmm5, implicit-def $tmm6, implicit-def $tmm7 :: (load (s512) from %stack.4, align 4)
38   ; CHECK-NEXT:   [[PTILEZEROV:%[0-9]+]]:tile = PTILEZEROV [[MOV16ri1]], [[MOV16ri]]
39   ; CHECK-NEXT:   [[MOV64ri:%[0-9]+]]:gr64_nosp = MOV64ri 64
40   ; CHECK-NEXT:   TILESTORED %stack.3, 1, killed [[MOV64ri]], 0, $noreg, [[PTILEZEROV]] :: (store (s8192) into %stack.3)
41   ; CHECK-NEXT:   [[MOV32ri64_:%[0-9]+]]:gr64_nosp = MOV32ri64 32
42   ; CHECK-NEXT:   [[LEA64r:%[0-9]+]]:gr64 = LEA64r %stack.0, 1, $noreg, 0, $noreg
43   ; CHECK-NEXT:   [[PTILELOADDV:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], [[LEA64r]], 1, [[MOV32ri64_]], 0, $noreg
44   ; CHECK-NEXT:   [[MOV64ri1:%[0-9]+]]:gr64_nosp = MOV64ri 64
45   ; CHECK-NEXT:   TILESTORED %stack.2, 1, killed [[MOV64ri1]], 0, $noreg, [[PTILELOADDV]] :: (store (s8192) into %stack.2)
46   ; CHECK-NEXT:   %row:gr16 = MOV16ri 32
47   ; CHECK-NEXT:   %col:gr16 = MOV16ri 8
48   ; CHECK-NEXT:   JMP_1 %bb.1
49   ; CHECK-NEXT: {{  $}}
50   ; CHECK-NEXT: bb.1:
51   ; CHECK-NEXT:   PLDTILECFGV %stack.4, 1, $noreg, 0, $noreg, implicit-def $tmm0, implicit-def $tmm1, implicit-def $tmm2, implicit-def $tmm3, implicit-def $tmm4, implicit-def $tmm5, implicit-def $tmm6, implicit-def $tmm7 :: (load (s512) from %stack.4, align 4)
52   ; CHECK-NEXT:   [[PTILELOADDV1:%[0-9]+]]:tile = PTILELOADDV %row, %col, [[LEA64r]], 1, [[MOV32ri64_]], 0, $noreg
53   ; CHECK-NEXT:   [[MOV64ri2:%[0-9]+]]:gr64_nosp = MOV64ri 64
54   ; CHECK-NEXT:   [[PTILELOADDV2:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], %stack.2, 1, killed [[MOV64ri2]], 0, $noreg :: (load (s8192) from %stack.2)
55   ; CHECK-NEXT:   [[MOV64ri3:%[0-9]+]]:gr64_nosp = MOV64ri 64
56   ; CHECK-NEXT:   [[PTILELOADDV3:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], %stack.3, 1, killed [[MOV64ri3]], 0, $noreg :: (load (s8192) from %stack.3)
57   ; CHECK-NEXT:   [[PTDPBSSDV:%[0-9]+]]:tile = PTDPBSSDV [[MOV16ri1]], [[MOV16ri]], [[MOV16ri]], killed [[PTILELOADDV1]], killed [[PTILELOADDV3]], killed [[PTILELOADDV2]]
58   ; CHECK-NEXT:   PTILESTOREDV killed [[MOV16ri1]], killed [[MOV16ri]], killed [[LEA64r]], 1, killed [[MOV32ri64_]], 0, $noreg, killed [[PTDPBSSDV]]
59   ; CHECK-NEXT:   [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
60   ; CHECK-NEXT:   $eax = COPY killed [[MOV32r0_]]
61   ; CHECK-NEXT:   RET 0, killed $eax
62   bb.0.entry:
63     %0:gr16 = MOV16ri 32
64     %1:gr16 = MOV16ri 8
65     %2:tile = PTILEZEROV %1, %0
66     %3:gr64_nosp = MOV32ri64 32
67     %4:gr64 = LEA64r %stack.0, 1, $noreg, 0, $noreg
68     %5:tile = PTILELOADDV %1, %0, %4, 1, %3, 0, $noreg
69     %row:gr16 = MOV16ri 32
70     %col:gr16 = MOV16ri 8
71     JMP_1 %bb.1
72   bb.1:
73     %6:tile = PTILELOADDV %row, %col, %4, 1, %3, 0, $noreg
74     %7:tile = PTDPBSSDV %1, %0, %0, killed %6, killed %2, killed %5
75     PTILESTOREDV killed %1, killed %0, killed %4, 1, killed %3, 0, $noreg, killed %7
76     %8:gr32 = MOV32r0 implicit-def dead $eflags
77     $eax = COPY killed %8
78     RET 0, killed $eax
80 ...
82 # Test tile copy fold
83 ---
84 name:            copy
85 alignment:       16
86 tracksRegLiveness: true
87 registers:
88   - { id: 0, class: gr16 }
89   - { id: 1, class: gr16 }
90   - { id: 2, class: tile }
91   - { id: 3, class: gr64_nosp }
92   - { id: 4, class: gr64 }
93   - { id: 5, class: tile }
94   - { id: 6, class: tile }
95   - { id: 7, class: tile }
96   - { id: 8, class: gr32 }
97   - { id: 9, class: vr512 }
98 frameInfo:
99   maxAlignment:    16
100 stack:
101   - { id: 0, size: 1024, alignment: 16 }
102   - { id: 1, size: 64, alignment: 4 }
103 machineFunctionInfo: {}
104 body:             |
105   ; CHECK-LABEL: name: copy
106   ; CHECK: bb.0.entry:
107   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
108   ; CHECK-NEXT: {{  $}}
109   ; CHECK-NEXT:   [[AVX512_512_SET0_:%[0-9]+]]:vr512 = AVX512_512_SET0
110   ; CHECK-NEXT:   VMOVUPSZmr %stack.4, 1, $noreg, 0, $noreg, [[AVX512_512_SET0_]] :: (store (s512) into %stack.4, align 4)
111   ; CHECK-NEXT:   MOV8mi %stack.4, 1, $noreg, 0, $noreg, 1 :: (store (s512) into %stack.4, align 4)
112   ; CHECK-NEXT:   [[MOV16ri:%[0-9]+]]:gr16 = MOV16ri 32
113   ; CHECK-NEXT:   [[MOV16ri1:%[0-9]+]]:gr16 = MOV16ri 8
114   ; CHECK-NEXT:   PLDTILECFGV %stack.4, 1, $noreg, 0, $noreg, implicit-def $tmm0, implicit-def $tmm1, implicit-def $tmm2, implicit-def $tmm3, implicit-def $tmm4, implicit-def $tmm5, implicit-def $tmm6, implicit-def $tmm7 :: (load (s512) from %stack.4, align 4)
115   ; CHECK-NEXT:   [[PTILEZEROV:%[0-9]+]]:tile = PTILEZEROV [[MOV16ri1]], [[MOV16ri]]
116   ; CHECK-NEXT:   [[MOV64ri:%[0-9]+]]:gr64_nosp = MOV64ri 64
117   ; CHECK-NEXT:   TILESTORED %stack.3, 1, killed [[MOV64ri]], 0, $noreg, [[PTILEZEROV]] :: (store (s8192) into %stack.3)
118   ; CHECK-NEXT:   [[MOV32ri64_:%[0-9]+]]:gr64_nosp = MOV32ri64 32
119   ; CHECK-NEXT:   [[LEA64r:%[0-9]+]]:gr64 = LEA64r %stack.0, 1, $noreg, 0, $noreg
120   ; CHECK-NEXT:   [[PTILELOADDV:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], [[LEA64r]], 1, [[MOV32ri64_]], 0, $noreg
121   ; CHECK-NEXT:   [[MOV64ri1:%[0-9]+]]:gr64_nosp = MOV64ri 64
122   ; CHECK-NEXT:   TILESTORED %stack.2, 1, killed [[MOV64ri1]], 0, $noreg, [[PTILELOADDV]] :: (store (s8192) into %stack.2)
123   ; CHECK-NEXT:   JMP_1 %bb.1
124   ; CHECK-NEXT: {{  $}}
125   ; CHECK-NEXT: bb.1:
126   ; CHECK-NEXT:   PLDTILECFGV %stack.4, 1, $noreg, 0, $noreg, implicit-def $tmm0, implicit-def $tmm1, implicit-def $tmm2, implicit-def $tmm3, implicit-def $tmm4, implicit-def $tmm5, implicit-def $tmm6, implicit-def $tmm7 :: (load (s512) from %stack.4, align 4)
127   ; CHECK-NEXT:   [[PTILELOADDV1:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], [[LEA64r]], 1, [[MOV32ri64_]], 0, $noreg
128   ; CHECK-NEXT:   [[MOV64ri2:%[0-9]+]]:gr64_nosp = MOV64ri 64
129   ; CHECK-NEXT:   %t:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], %stack.2, 1, killed [[MOV64ri2]], 0, $noreg :: (load (s8192) from %stack.2)
130   ; CHECK-NEXT:   [[MOV64ri3:%[0-9]+]]:gr64_nosp = MOV64ri 64
131   ; CHECK-NEXT:   [[PTILELOADDV2:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], %stack.3, 1, killed [[MOV64ri3]], 0, $noreg :: (load (s8192) from %stack.3)
132   ; CHECK-NEXT:   [[PTDPBSSDV:%[0-9]+]]:tile = PTDPBSSDV [[MOV16ri1]], [[MOV16ri]], [[MOV16ri]], killed [[PTILELOADDV1]], killed [[PTILELOADDV2]], killed %t
133   ; CHECK-NEXT:   PTILESTOREDV killed [[MOV16ri1]], killed [[MOV16ri]], killed [[LEA64r]], 1, killed [[MOV32ri64_]], 0, $noreg, killed [[PTDPBSSDV]]
134   ; CHECK-NEXT:   [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
135   ; CHECK-NEXT:   $eax = COPY killed [[MOV32r0_]]
136   ; CHECK-NEXT:   RET 0, killed $eax
137   bb.0.entry:
138     %0:gr16 = MOV16ri 32
139     %1:gr16 = MOV16ri 8
140     %2:tile = PTILEZEROV %1, %0
141     %3:gr64_nosp = MOV32ri64 32
142     %4:gr64 = LEA64r %stack.0, 1, $noreg, 0, $noreg
143     %5:tile = PTILELOADDV %1, %0, %4, 1, %3, 0, $noreg
144     JMP_1 %bb.1
145   bb.1:
146     %6:tile = PTILELOADDV %1, %0, %4, 1, %3, 0, $noreg
147     %t:tile = COPY %5
148     %7:tile = PTDPBSSDV %1, %0, %0, killed %6, killed %2, killed %t
149     PTILESTOREDV killed %1, killed %0, killed %4, 1, killed %3, 0, $noreg, killed %7
150     %8:gr32 = MOV32r0 implicit-def dead $eflags
151     $eax = COPY killed %8
152     RET 0, killed $eax