[OptTable] Fix typo VALUE => VALUES (NFCI) (#121523)
[llvm-project.git] / llvm / test / CodeGen / X86 / AMX / amx-fastconfig-spill.mir
blob1ed4328bf132a1f05b95accc6833e8a0671b580a
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   amxProgModel: ManagedRA
28 body:             |
29   ; CHECK-LABEL: name: foo
30   ; CHECK: bb.0.entry:
31   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
32   ; CHECK-NEXT: {{  $}}
33   ; CHECK-NEXT:   [[AVX512_512_SET0_:%[0-9]+]]:vr512 = AVX512_512_SET0
34   ; CHECK-NEXT:   VMOVUPSZmr %stack.4, 1, $noreg, 0, $noreg, [[AVX512_512_SET0_]] :: (store (s512) into %stack.4, align 4)
35   ; CHECK-NEXT:   MOV8mi %stack.4, 1, $noreg, 0, $noreg, 1 :: (store (s512) into %stack.4, align 4)
36   ; CHECK-NEXT:   [[MOV16ri:%[0-9]+]]:gr16 = MOV16ri 32
37   ; CHECK-NEXT:   [[MOV16ri1:%[0-9]+]]:gr16 = MOV16ri 8
38   ; 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)
39   ; CHECK-NEXT:   [[PTILEZEROV:%[0-9]+]]:tile = PTILEZEROV [[MOV16ri1]], [[MOV16ri]]
40   ; CHECK-NEXT:   [[MOV64ri:%[0-9]+]]:gr64_nosp = MOV64ri 64
41   ; CHECK-NEXT:   TILESTORED %stack.3, 1, killed [[MOV64ri]], 0, $noreg, [[PTILEZEROV]] :: (store (s8192) into %stack.3)
42   ; CHECK-NEXT:   [[MOV32ri64_:%[0-9]+]]:gr64_nosp = MOV32ri64 32
43   ; CHECK-NEXT:   [[LEA64r:%[0-9]+]]:gr64 = LEA64r %stack.0, 1, $noreg, 0, $noreg
44   ; CHECK-NEXT:   [[PTILELOADDV:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], [[LEA64r]], 1, [[MOV32ri64_]], 0, $noreg
45   ; CHECK-NEXT:   [[MOV64ri1:%[0-9]+]]:gr64_nosp = MOV64ri 64
46   ; CHECK-NEXT:   TILESTORED %stack.2, 1, killed [[MOV64ri1]], 0, $noreg, [[PTILELOADDV]] :: (store (s8192) into %stack.2)
47   ; CHECK-NEXT:   %row:gr16 = MOV16ri 32
48   ; CHECK-NEXT:   %col:gr16 = MOV16ri 8
49   ; CHECK-NEXT:   JMP_1 %bb.1
50   ; CHECK-NEXT: {{  $}}
51   ; CHECK-NEXT: bb.1:
52   ; 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)
53   ; CHECK-NEXT:   [[PTILELOADDV1:%[0-9]+]]:tile = PTILELOADDV %row, %col, [[LEA64r]], 1, [[MOV32ri64_]], 0, $noreg
54   ; CHECK-NEXT:   [[MOV64ri2:%[0-9]+]]:gr64_nosp = MOV64ri 64
55   ; CHECK-NEXT:   [[PTILELOADDV2:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], %stack.2, 1, killed [[MOV64ri2]], 0, $noreg :: (load (s8192) from %stack.2)
56   ; CHECK-NEXT:   [[MOV64ri3:%[0-9]+]]:gr64_nosp = MOV64ri 64
57   ; CHECK-NEXT:   [[PTILELOADDV3:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], %stack.3, 1, killed [[MOV64ri3]], 0, $noreg :: (load (s8192) from %stack.3)
58   ; CHECK-NEXT:   [[PTDPBSSDV:%[0-9]+]]:tile = PTDPBSSDV [[MOV16ri1]], [[MOV16ri]], [[MOV16ri]], killed [[PTILELOADDV1]], killed [[PTILELOADDV3]], killed [[PTILELOADDV2]]
59   ; CHECK-NEXT:   PTILESTOREDV killed [[MOV16ri1]], killed [[MOV16ri]], killed [[LEA64r]], 1, killed [[MOV32ri64_]], 0, $noreg, killed [[PTDPBSSDV]]
60   ; CHECK-NEXT:   [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
61   ; CHECK-NEXT:   $eax = COPY killed [[MOV32r0_]]
62   ; CHECK-NEXT:   RET 0, killed $eax
63   bb.0.entry:
64     %0:gr16 = MOV16ri 32
65     %1:gr16 = MOV16ri 8
66     %2:tile = PTILEZEROV %1, %0
67     %3:gr64_nosp = MOV32ri64 32
68     %4:gr64 = LEA64r %stack.0, 1, $noreg, 0, $noreg
69     %5:tile = PTILELOADDV %1, %0, %4, 1, %3, 0, $noreg
70     %row:gr16 = MOV16ri 32
71     %col:gr16 = MOV16ri 8
72     JMP_1 %bb.1
73   bb.1:
74     %6:tile = PTILELOADDV %row, %col, %4, 1, %3, 0, $noreg
75     %7:tile = PTDPBSSDV %1, %0, %0, killed %6, killed %2, killed %5
76     PTILESTOREDV killed %1, killed %0, killed %4, 1, killed %3, 0, $noreg, killed %7
77     %8:gr32 = MOV32r0 implicit-def dead $eflags
78     $eax = COPY killed %8
79     RET 0, killed $eax
81 ...
83 # Test tile copy fold
84 ---
85 name:            copy
86 alignment:       16
87 tracksRegLiveness: true
88 registers:
89   - { id: 0, class: gr16 }
90   - { id: 1, class: gr16 }
91   - { id: 2, class: tile }
92   - { id: 3, class: gr64_nosp }
93   - { id: 4, class: gr64 }
94   - { id: 5, class: tile }
95   - { id: 6, class: tile }
96   - { id: 7, class: tile }
97   - { id: 8, class: gr32 }
98   - { id: 9, class: vr512 }
99 frameInfo:
100   maxAlignment:    16
101 stack:
102   - { id: 0, size: 1024, alignment: 16 }
103   - { id: 1, size: 64, alignment: 4 }
104 machineFunctionInfo:
105   amxProgModel: ManagedRA
106 body:             |
107   ; CHECK-LABEL: name: copy
108   ; CHECK: bb.0.entry:
109   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
110   ; CHECK-NEXT: {{  $}}
111   ; CHECK-NEXT:   [[AVX512_512_SET0_:%[0-9]+]]:vr512 = AVX512_512_SET0
112   ; CHECK-NEXT:   VMOVUPSZmr %stack.4, 1, $noreg, 0, $noreg, [[AVX512_512_SET0_]] :: (store (s512) into %stack.4, align 4)
113   ; CHECK-NEXT:   MOV8mi %stack.4, 1, $noreg, 0, $noreg, 1 :: (store (s512) into %stack.4, align 4)
114   ; CHECK-NEXT:   [[MOV16ri:%[0-9]+]]:gr16 = MOV16ri 32
115   ; CHECK-NEXT:   [[MOV16ri1:%[0-9]+]]:gr16 = MOV16ri 8
116   ; 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)
117   ; CHECK-NEXT:   [[PTILEZEROV:%[0-9]+]]:tile = PTILEZEROV [[MOV16ri1]], [[MOV16ri]]
118   ; CHECK-NEXT:   [[MOV64ri:%[0-9]+]]:gr64_nosp = MOV64ri 64
119   ; CHECK-NEXT:   TILESTORED %stack.3, 1, killed [[MOV64ri]], 0, $noreg, [[PTILEZEROV]] :: (store (s8192) into %stack.3)
120   ; CHECK-NEXT:   [[MOV32ri64_:%[0-9]+]]:gr64_nosp = MOV32ri64 32
121   ; CHECK-NEXT:   [[LEA64r:%[0-9]+]]:gr64 = LEA64r %stack.0, 1, $noreg, 0, $noreg
122   ; CHECK-NEXT:   [[PTILELOADDV:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], [[LEA64r]], 1, [[MOV32ri64_]], 0, $noreg
123   ; CHECK-NEXT:   [[MOV64ri1:%[0-9]+]]:gr64_nosp = MOV64ri 64
124   ; CHECK-NEXT:   TILESTORED %stack.2, 1, killed [[MOV64ri1]], 0, $noreg, [[PTILELOADDV]] :: (store (s8192) into %stack.2)
125   ; CHECK-NEXT:   JMP_1 %bb.1
126   ; CHECK-NEXT: {{  $}}
127   ; CHECK-NEXT: bb.1:
128   ; 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)
129   ; CHECK-NEXT:   [[PTILELOADDV1:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], [[LEA64r]], 1, [[MOV32ri64_]], 0, $noreg
130   ; CHECK-NEXT:   [[MOV64ri2:%[0-9]+]]:gr64_nosp = MOV64ri 64
131   ; CHECK-NEXT:   %t:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], %stack.2, 1, killed [[MOV64ri2]], 0, $noreg :: (load (s8192) from %stack.2)
132   ; CHECK-NEXT:   [[MOV64ri3:%[0-9]+]]:gr64_nosp = MOV64ri 64
133   ; CHECK-NEXT:   [[PTILELOADDV2:%[0-9]+]]:tile = PTILELOADDV [[MOV16ri1]], [[MOV16ri]], %stack.3, 1, killed [[MOV64ri3]], 0, $noreg :: (load (s8192) from %stack.3)
134   ; CHECK-NEXT:   [[PTDPBSSDV:%[0-9]+]]:tile = PTDPBSSDV [[MOV16ri1]], [[MOV16ri]], [[MOV16ri]], killed [[PTILELOADDV1]], killed [[PTILELOADDV2]], killed %t
135   ; CHECK-NEXT:   PTILESTOREDV killed [[MOV16ri1]], killed [[MOV16ri]], killed [[LEA64r]], 1, killed [[MOV32ri64_]], 0, $noreg, killed [[PTDPBSSDV]]
136   ; CHECK-NEXT:   [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags
137   ; CHECK-NEXT:   $eax = COPY killed [[MOV32r0_]]
138   ; CHECK-NEXT:   RET 0, killed $eax
139   bb.0.entry:
140     %0:gr16 = MOV16ri 32
141     %1:gr16 = MOV16ri 8
142     %2:tile = PTILEZEROV %1, %0
143     %3:gr64_nosp = MOV32ri64 32
144     %4:gr64 = LEA64r %stack.0, 1, $noreg, 0, $noreg
145     %5:tile = PTILELOADDV %1, %0, %4, 1, %3, 0, $noreg
146     JMP_1 %bb.1
147   bb.1:
148     %6:tile = PTILELOADDV %1, %0, %4, 1, %3, 0, $noreg
149     %t:tile = COPY %5
150     %7:tile = PTDPBSSDV %1, %0, %0, killed %6, killed %2, killed %t
151     PTILESTOREDV killed %1, killed %0, killed %4, 1, killed %3, 0, $noreg, killed %7
152     %8:gr32 = MOV32r0 implicit-def dead $eflags
153     $eax = COPY killed %8
154     RET 0, killed $eax