Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / SystemZ / frame-26.mir
blob1831253becf6409b1a3607d271f92b36627b54ef
1 # RUN: llc -mtriple=s390x-linux-gnu -start-before=prologepilog %s -o - -print-after=prologepilog \
2 # RUN:  -verify-machineinstrs 2>&1 | FileCheck %s
3 # REQUIRES: asserts
5 # Test that R6 when used for an argument is modelled as being live throughout
6 # the function when not saved in the prologue..
8 # CHECK:      # *** IR Dump After Prologue/Epilogue Insertion & Frame Finalization (prologepilog) ***:
9 # CHECK-NEXT: # Machine code for function fun0:
10 # CHECK-LABEL: bb.0:
11 # CHECK: liveins:{{.*}} $r6d
12 # CHECK: STMG killed $r7d, killed $r15d
13 # CHECK: STG renamable $r6d
14 # CHECK: End machine code for function fun0.
17 --- |
18   
19   @g_181 = external dso_local global i32, align 4
20   @g_1390 = external dso_local constant i64*, align 8
21   
22   define internal i8 @fun0(i8 %arg, i8 %arg1, i32 %arg2, i8 %arg3, i32* %arg4, float %F0, float %F1) #0 {
23     ret i8 0
24   }
25   
26   ; Same function but in a single block which will make the verifier complain
27   ; if R6 is killed by the original store before the point where the
28   ; RegScavenger inserts its (killing) store of R6.
29   define internal i8 @fun1(i8 %arg, i8 %arg1, i32 %arg2, i8 %arg3, i32* %arg4) #0 {
30     ret i8 0
31   }
32   
33   attributes #0 = { "frame-pointer"="all" }
35 ...
36 ---
37 name:            fun0
38 alignment:       16
39 tracksRegLiveness: true
40 liveins:
41   - { reg: '$r6d' }
42   - { reg: '$f0s' }
43   - { reg: '$f2s' }
44 frameInfo:
45   maxAlignment:    8
46 stack:
47   - { id: 0, size: 96, alignment: 8 }
48   - { id: 1, size: 1960, alignment: 8 }
49   - { id: 2, size: 8, alignment: 8 }
50   - { id: 3, size: 320, alignment: 8 }
51   - { id: 4, size: 4, alignment: 4 }
52   - { id: 5, size: 8, alignment: 8 }
53   - { id: 6, size: 8, alignment: 8 }
54   - { id: 7, size: 4, alignment: 4 }
55   - { id: 8, size: 8, alignment: 8 }
56   - { id: 9, size: 4, alignment: 4 }
57   - { id: 10, size: 8, alignment: 8 }
58   - { id: 11, size: 8, alignment: 8 }
59   - { id: 12, size: 8, alignment: 8 }
60   - { id: 13, size: 8, alignment: 8 }
61   - { id: 14, size: 24, alignment: 4 }
62   - { id: 15, size: 4, alignment: 4 }
63   - { id: 16, size: 1792, alignment: 8 }
64   - { id: 17, size: 8, alignment: 8 }
65   - { id: 18, size: 8, alignment: 8 }
66   - { id: 19, size: 8, alignment: 8 }
67   - { id: 20, size: 1, alignment: 2 }
68   - { id: 21, size: 672, alignment: 8 }
69   - { id: 22, size: 4, alignment: 4 }
70   - { id: 23, size: 4, alignment: 4 }
71   - { id: 24, size: 4, alignment: 4 }
72   - { id: 25, size: 64, alignment: 8 }
73 machineFunctionInfo: {}
74 body:             |
75   bb.0:
76     liveins: $f0s, $f2s, $r6d
77   
78     STG killed renamable $r6d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i32** undef`)
79     renamable $r0d = LARL @g_181
80     nofpexcept CEBR renamable $f0s, renamable $f2s, implicit-def $cc, implicit $fpc
81     STG renamable $r0d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i32** undef`)
82     BRC 15, 4, %bb.2, implicit killed $cc
83   
84   bb.1:
85     liveins: $f2s, $r0d
86   
87     renamable $f0s = COPY killed renamable $f2s
88   
89   bb.2:
90     liveins: $f0s, $r0d
91   
92     STE killed renamable $f0s, undef renamable $r1d, 0, $noreg :: (volatile store (s32) into `float* undef`)
93     renamable $r1d = nuw LA %stack.0, 16, $noreg
94     renamable $r2d = nuw LA %stack.0, 24, $noreg
95     renamable $r3d = LA %stack.0, 40, $noreg
96     renamable $r4d = LARL @g_1390
97     STG renamable $r4d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
98     renamable $r5d = nuw LA %stack.0, 48, $noreg
99     renamable $r14d = LA %stack.0, 72, $noreg
100     renamable $r13d = LA %stack.0, 80, $noreg
101     renamable $r12d = LA %stack.0, 56, $noreg
102     renamable $r10d = LA %stack.0, 0, $noreg
103     STG renamable $r10d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
104     renamable $r9d = LA %stack.0, 64, $noreg
105     renamable $r8d = LA %stack.0, 88, $noreg
106     renamable $r7d = nuw LA %stack.0, 8, $noreg
107     MVGHI %stack.1, 904, 0
108     STG killed renamable $r9d, $noreg, 0, $noreg :: (store (s64) into `i64*** null`)
109     STG killed renamable $r3d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
110     STG killed renamable $r14d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
111     STG killed renamable $r7d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
112     STG killed renamable $r1d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
113     STG killed renamable $r4d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
114     STG killed renamable $r2d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
115     STG killed renamable $r5d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
116     STG killed renamable $r8d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
117     STG killed renamable $r12d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
118     STG killed renamable $r13d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
119     STG killed renamable $r10d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
120     $r2l = LHI 0
121     STG killed renamable $r0d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i32** undef`)
122     Return implicit $r2l
126 name:            fun1
127 alignment:       16
128 tracksRegLiveness: true
129 liveins:
130   - { reg: '$r6d' }
131 frameInfo:
132   maxAlignment:    8
133 stack:
134   - { id: 0, size: 96, alignment: 8 }
135   - { id: 1, size: 1960, alignment: 8 }
136   - { id: 2, size: 8, alignment: 8 }
137   - { id: 3, size: 320, alignment: 8 }
138   - { id: 4, size: 4, alignment: 4 }
139   - { id: 5, size: 8, alignment: 8 }
140   - { id: 6, size: 8, alignment: 8 }
141   - { id: 7, size: 4, alignment: 4 }
142   - { id: 8, size: 8, alignment: 8 }
143   - { id: 9, size: 4, alignment: 4 }
144   - { id: 10, size: 8, alignment: 8 }
145   - { id: 11, size: 8, alignment: 8 }
146   - { id: 12, size: 8, alignment: 8 }
147   - { id: 13, size: 8, alignment: 8 }
148   - { id: 14, size: 24, alignment: 4 }
149   - { id: 15, size: 4, alignment: 4 }
150   - { id: 16, size: 1792, alignment: 8 }
151   - { id: 17, size: 8, alignment: 8 }
152   - { id: 18, size: 8, alignment: 8 }
153   - { id: 19, size: 8, alignment: 8 }
154   - { id: 20, size: 1, alignment: 2 }
155   - { id: 21, size: 672, alignment: 8 }
156   - { id: 22, size: 4, alignment: 4 }
157   - { id: 23, size: 4, alignment: 4 }
158   - { id: 24, size: 4, alignment: 4 }
159   - { id: 25, size: 64, alignment: 8 }
160 machineFunctionInfo: {}
161 body:             |
162   bb.0:
163     liveins: $r6d
164   
165     STG killed renamable $r6d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i32** undef`)
166     renamable $r0d = LARL @g_181
167     STG renamable $r0d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i32** undef`)
168     renamable $r1d = nuw LA %stack.0, 16, $noreg
169     renamable $r2d = nuw LA %stack.0, 24, $noreg
170     renamable $r3d = LA %stack.0, 40, $noreg
171     renamable $r4d = LARL @g_1390
172     STG renamable $r4d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
173     renamable $r5d = nuw LA %stack.0, 48, $noreg
174     renamable $r14d = LA %stack.0, 72, $noreg
175     renamable $r13d = LA %stack.0, 80, $noreg
176     renamable $r12d = LA %stack.0, 56, $noreg
177     renamable $r10d = LA %stack.0, 0, $noreg
178     STG renamable $r10d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
179     renamable $r9d = LA %stack.0, 64, $noreg
180     renamable $r8d = LA %stack.0, 88, $noreg
181     renamable $r7d = nuw LA %stack.0, 8, $noreg
182     MVGHI %stack.1, 904, 0
183     STG killed renamable $r9d, $noreg, 0, $noreg :: (store (s64) into `i64*** null`)
184     STG killed renamable $r3d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
185     STG killed renamable $r14d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
186     STG killed renamable $r7d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
187     STG killed renamable $r1d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
188     STG killed renamable $r4d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
189     STG killed renamable $r2d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
190     STG killed renamable $r5d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
191     STG killed renamable $r8d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
192     STG killed renamable $r12d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
193     STG killed renamable $r13d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
194     STG killed renamable $r10d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i64*** undef`)
195     $r2l = LHI 0
196     STG killed renamable $r0d, undef renamable $r1d, 0, $noreg :: (store (s64) into `i32** undef`)
197     Return implicit $r2l