1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=x86_64-unknown-unknown -mattr=+amx-tile,+amx-bf16,+avx512f, \
3 # RUN: -mattr=+amx-transpose -run-pass=fasttileconfig -o - %s | FileCheck %s
6 name: test_tile_2rpntlvwz0
8 exposesReturnsTwice: false
10 regBankSelected: false
13 tracksRegLiveness: true
16 callsUnwindInit: false
20 failsVerification: false
21 tracksDebugUserValues: false
24 - { reg: '$edi', virtual-reg: '' }
25 - { reg: '$esi', virtual-reg: '' }
26 - { reg: '$edx', virtual-reg: '' }
28 isFrameAddressTaken: false
29 isReturnAddressTaken: false
39 maxCallFrameSize: 4294967295
40 cvBytesOfCalleeSavedRegisters: 0
41 hasOpaqueSPAdjustment: false
43 hasMustTailInVarArgFunc: false
50 - { id: 0, name: '', type: default, offset: 0, size: 8, alignment: 8,
51 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
52 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
53 - { id: 1, name: '', type: default, offset: 0, size: 8, alignment: 8,
54 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
55 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
56 - { id: 2, name: '', type: default, offset: 0, size: 8, alignment: 8,
57 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
58 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
59 - { id: 3, name: '', type: default, offset: 0, size: 8, alignment: 8,
60 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
61 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
62 - { id: 4, name: '', type: default, offset: 0, size: 64, alignment: 4,
63 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
64 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
65 - { id: 5, name: '', type: spill-slot, offset: 0, size: 2, alignment: 2,
66 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
67 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
68 - { id: 6, name: '', type: spill-slot, offset: 0, size: 2, alignment: 2,
69 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
70 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
71 - { id: 7, name: '', type: spill-slot, offset: 0, size: 8, alignment: 8,
72 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
73 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
75 debugValueSubstitutions: []
78 amxProgModel: ManagedRA
81 liveins: $rdi, $rsi, $rdx, $rax
83 ; CHECK-LABEL: name: test_tile_2rpntlvwz0
84 ; CHECK: liveins: $rdi, $rsi, $rdx, $rax
86 ; CHECK-NEXT: renamable $zmm0 = AVX512_512_SET0
87 ; CHECK-NEXT: VMOVUPSZmr %stack.4, 1, $noreg, 0, $noreg, killed renamable $zmm0 :: (store (s512) into %stack.4, align 4)
88 ; CHECK-NEXT: MOV8mi %stack.4, 1, $noreg, 0, $noreg, 1 :: (store (s512) into %stack.4, align 4)
89 ; CHECK-NEXT: renamable $rcx = MOV32ri64 64
90 ; CHECK-NEXT: MOV64mr %stack.7, 1, $noreg, 0, $noreg, $rcx :: (store (s64) into %stack.7)
91 ; CHECK-NEXT: renamable $cx = MOV16ri 64
92 ; CHECK-NEXT: MOV16mr %stack.5, 1, $noreg, 0, $noreg, $cx :: (store (s16) into %stack.5)
93 ; CHECK-NEXT: renamable $cx = MOV16ri 16
94 ; CHECK-NEXT: renamable $r8w = MOV16ri 16
95 ; CHECK-NEXT: MOV16mr %stack.6, 1, $noreg, 0, $noreg, $r8w :: (store (s16) into %stack.6)
96 ; CHECK-NEXT: $al = IMPLICIT_DEF
97 ; CHECK-NEXT: MOV8mr %stack.4, 1, $noreg, 48, $noreg, $al :: (store (s512) into %stack.4 + 48, align 4)
98 ; CHECK-NEXT: MOV16mr %stack.4, 1, $noreg, 16, $noreg, $cx :: (store (s512) into %stack.4 + 16, align 4)
99 ; CHECK-NEXT: $al = IMPLICIT_DEF
100 ; CHECK-NEXT: MOV8mr %stack.4, 1, $noreg, 50, $noreg, $al :: (store (s512) into %stack.4 + 50, align 2, basealign 4)
101 ; CHECK-NEXT: MOV16mr %stack.4, 1, $noreg, 20, $noreg, $cx :: (store (s512) into %stack.4 + 20, align 4)
102 ; CHECK-NEXT: $al = IMPLICIT_DEF
103 ; CHECK-NEXT: MOV8mr %stack.4, 1, $noreg, 49, $noreg, $al :: (store (s512) into %stack.4 + 49, align 1, basealign 4)
104 ; CHECK-NEXT: MOV16mr %stack.4, 1, $noreg, 18, $noreg, $di :: (store (s512) into %stack.4 + 18, align 2, basealign 4)
105 ; CHECK-NEXT: $al = IMPLICIT_DEF
106 ; CHECK-NEXT: MOV8mr %stack.4, 1, $noreg, 48, $noreg, $al :: (store (s512) into %stack.4 + 48, align 4)
107 ; CHECK-NEXT: MOV16mr %stack.4, 1, $noreg, 16, $noreg, $cx :: (store (s512) into %stack.4 + 16, align 4)
108 ; CHECK-NEXT: $al = IMPLICIT_DEF
109 ; CHECK-NEXT: MOV8mr %stack.4, 1, $noreg, 48, $noreg, $al :: (store (s512) into %stack.4 + 48, align 4)
110 ; CHECK-NEXT: MOV16mr %stack.4, 1, $noreg, 16, $noreg, $cx :: (store (s512) into %stack.4 + 16, align 4)
111 ; CHECK-NEXT: $al = IMPLICIT_DEF
112 ; CHECK-NEXT: MOV8mr %stack.4, 1, $noreg, 52, $noreg, $al :: (store (s512) into %stack.4 + 52, align 4)
113 ; CHECK-NEXT: MOV16mr %stack.4, 1, $noreg, 24, $noreg, $cx :: (store (s512) into %stack.4 + 24, align 4)
114 ; CHECK-NEXT: $al = IMPLICIT_DEF
115 ; CHECK-NEXT: MOV8mr %stack.4, 1, $noreg, 53, $noreg, $al :: (store (s512) into %stack.4 + 53, align 1, basealign 4)
116 ; CHECK-NEXT: MOV16mr %stack.4, 1, $noreg, 26, $noreg, $di :: (store (s512) into %stack.4 + 26, align 2, basealign 4)
117 ; CHECK-NEXT: PLDTILECFGV %stack.4, 1, $noreg, 0, $noreg, implicit-def dead $tmm0, implicit-def dead $tmm1, implicit-def dead $tmm2, implicit-def dead $tmm3, implicit-def dead $tmm4, implicit-def dead $tmm5, implicit-def dead $tmm6, implicit-def dead $tmm7 :: (load (s512) from %stack.4, align 4)
118 ; CHECK-NEXT: renamable $r9 = COPY $rsi
119 ; CHECK-NEXT: $rsi = MOV64rm %stack.7, 1, $noreg, 0, $noreg :: (load (s64) from %stack.7)
120 ; CHECK-NEXT: renamable $r8 = COPY $rdi
121 ; CHECK-NEXT: $di = MOV16rm %stack.6, 1, $noreg, 0, $noreg :: (load (s16) from %stack.6)
122 ; CHECK-NEXT: renamable $r10 = COPY $rax
123 ; CHECK-NEXT: $ax = MOV16rm %stack.5, 1, $noreg, 0, $noreg :: (load (s16) from %stack.5)
124 ; CHECK-NEXT: renamable $tmm4_tmm5 = PT2RPNTLVWZ0V renamable $ax, renamable $cx, renamable $di, renamable $rdx, 1, killed renamable $r10, 0, $noreg
125 ; CHECK-NEXT: renamable $tmm0 = COPY renamable $tmm5
126 ; CHECK-NEXT: renamable $tmm1 = COPY renamable $tmm4, implicit killed $tmm4_tmm5
127 ; CHECK-NEXT: PTILESTOREDV renamable $ax, renamable $cx, renamable $r9, 1, renamable $rsi, 0, $noreg, killed renamable $tmm1
128 ; CHECK-NEXT: PTILESTOREDV renamable $ax, renamable $di, renamable $r8, 1, renamable $rsi, 0, $noreg, killed renamable $tmm0
129 ; CHECK-NEXT: renamable $tmm0 = PTILEZEROV renamable $ax, renamable $cx
130 ; CHECK-NEXT: PTILESTOREDV renamable $ax, renamable $cx, renamable $rdx, 1, renamable $rsi, 0, $noreg, killed renamable $tmm0
131 ; CHECK-NEXT: renamable $tmm0 = PTILELOADDV renamable $ax, renamable $cx, killed renamable $r9, 1, renamable $rsi, 0, $noreg
132 ; CHECK-NEXT: renamable $tmm1 = PTILELOADDV renamable $ax, renamable $di, killed renamable $r8, 1, renamable $rsi, 0, $noreg
133 ; CHECK-NEXT: renamable $tmm2 = PTILELOADDV renamable $ax, renamable $cx, renamable $rdx, 1, renamable $rsi, 0, $noreg
134 ; CHECK-NEXT: renamable $tmm0 = PTDPBSSDV renamable $ax, renamable $cx, killed renamable $di, renamable $tmm0, killed renamable $tmm1, killed renamable $tmm2
135 ; CHECK-NEXT: PTILESTOREDV killed renamable $ax, killed renamable $cx, killed renamable $rdx, 1, killed renamable $rsi, 0, $noreg, killed renamable $tmm0
136 renamable $zmm0 = AVX512_512_SET0
137 VMOVUPSZmr %stack.4, 1, $noreg, 0, $noreg, killed renamable $zmm0 :: (store (s512) into %stack.4, align 4)
138 MOV8mi %stack.4, 1, $noreg, 0, $noreg, 1 :: (store (s512) into %stack.4, align 4)
139 renamable $rcx = MOV32ri64 64
140 MOV64mr %stack.7, 1, $noreg, 0, $noreg, $rcx :: (store (s64) into %stack.7)
141 renamable $cx = MOV16ri 64
142 MOV16mr %stack.5, 1, $noreg, 0, $noreg, $cx :: (store (s16) into %stack.5)
143 renamable $cx = MOV16ri 16
144 renamable $r8w = MOV16ri 16
145 MOV16mr %stack.6, 1, $noreg, 0, $noreg, $r8w :: (store (s16) into %stack.6)
146 PLDTILECFGV %stack.4, 1, $noreg, 0, $noreg, implicit-def dead $tmm0, implicit-def dead $tmm1, implicit-def dead $tmm2, implicit-def dead $tmm3, implicit-def dead $tmm4, implicit-def dead $tmm5, implicit-def dead $tmm6, implicit-def dead $tmm7 :: (load (s512) from %stack.4, align 4)
147 renamable $r9 = COPY $rsi
148 $rsi = MOV64rm %stack.7, 1, $noreg, 0, $noreg :: (load (s64) from %stack.7)
149 renamable $r8 = COPY $rdi
150 $di = MOV16rm %stack.6, 1, $noreg, 0, $noreg :: (load (s16) from %stack.6)
151 renamable $r10 = COPY $rax
152 $ax = MOV16rm %stack.5, 1, $noreg, 0, $noreg :: (load (s16) from %stack.5)
153 renamable $tmm4_tmm5 = PT2RPNTLVWZ0V renamable $ax, renamable $cx, renamable $di, renamable $rdx, 1, killed renamable $r10, 0, $noreg
154 renamable $tmm0 = COPY renamable $tmm5
155 renamable $tmm1 = COPY renamable $tmm4, implicit killed $tmm4_tmm5
156 PTILESTOREDV renamable $ax, renamable $cx, renamable $r9, 1, renamable $rsi, 0, $noreg, killed renamable $tmm1
157 PTILESTOREDV renamable $ax, renamable $di, renamable $r8, 1, renamable $rsi, 0, $noreg, killed renamable $tmm0
158 renamable $tmm0 = PTILEZEROV renamable $ax, renamable $cx
159 PTILESTOREDV renamable $ax, renamable $cx, renamable $rdx, 1, renamable $rsi, 0, $noreg, killed renamable $tmm0
160 renamable $tmm0 = PTILELOADDV renamable $ax, renamable $cx, killed renamable $r9, 1, renamable $rsi, 0, $noreg
161 renamable $tmm1 = PTILELOADDV renamable $ax, renamable $di, killed renamable $r8, 1, renamable $rsi, 0, $noreg
162 renamable $tmm2 = PTILELOADDV renamable $ax, renamable $cx, renamable $rdx, 1, renamable $rsi, 0, $noreg
163 renamable $tmm0 = PTDPBSSDV renamable $ax, renamable $cx, killed renamable $di, renamable $tmm0, killed renamable $tmm1, killed renamable $tmm2
164 PTILESTOREDV killed renamable $ax, killed renamable $cx, killed renamable $rdx, 1, killed renamable $rsi, 0, $noreg, killed renamable $tmm0