[LLVM][Alignment] Make functions using log of alignment explicit
[llvm-complete.git] / test / CodeGen / PowerPC / scavenging.mir
blobe9cf4c67c15af9687247cbdfdb6729a695f0d6c9
1 # RUN: llc -mtriple=ppc64-- -run-pass scavenger-test -verify-machineinstrs -o - %s | FileCheck %s
2 ---
3 # CHECK-LABEL: name: noscav0
4 name: noscav0
5 tracksRegLiveness: true
6 body: |
7   bb.0:
8     ; CHECK: [[REG0:\$r[0-9]+]] = LI 42
9     ; CHECK-NEXT: NOP implicit killed [[REG0]]
10     %0 : gprc = LI 42
11     NOP implicit %0
13     ; CHECK: [[REG1:\$r[0-9]+]] = LI 42
14     ; CHECK-NEXT: NOP
15     ; CHECK-NEXT: NOP implicit [[REG1]]
16     ; CHECK-NEXT: NOP
17     ; CHECK-NEXT: NOP implicit killed [[REG1]]
18     %1 : gprc = LI 42
19     NOP
20     NOP implicit %1
21     NOP
22     NOP implicit %1
24     ; CHECK: [[REG2:\$r[0-9]+]] = LI 42
25     ; CHECK-NEXT: NOP implicit [[REG2]]
26     %2 : gprc = LI 42
27     NOP implicit %2
29     $x0 = IMPLICIT_DEF
30     $x1 = IMPLICIT_DEF
31     $x2 = IMPLICIT_DEF
32     $x3 = IMPLICIT_DEF
33     $x4 = IMPLICIT_DEF
34     $x27 = IMPLICIT_DEF
35     $x28 = IMPLICIT_DEF
36     $x29 = IMPLICIT_DEF
37     $x30 = IMPLICIT_DEF
39     ; CHECK-NOT: $x0 = LI 42
40     ; CHECK-NOT: $x1 = LI 42
41     ; CHECK-NOT: $x2 = LI 42
42     ; CHECK-NOT: $x3 = LI 42
43     ; CHECK-NOT: $x4 = LI 42
44     ; CHECK-NOT: $x5 = LI 42
45     ; CHECK-NOT: $x27 = LI 42
46     ; CHECK-NOT: $x28 = LI 42
47     ; CHECK-NOT: $x29 = LI 42
48     ; CHECK-NOT: $x30 = LI 42
49     ; CHECK: [[REG3:\$r[0-9]+]] = LI 42
50     ; CHECK-NEXT: $x5 = IMPLICIT_DEF
51     ; CHECK-NEXT: NOP implicit killed [[REG2]]
52     ; CHECK-NEXT: NOP implicit killed [[REG3]]
53     %3 : gprc = LI 42
54     $x5 = IMPLICIT_DEF
55     NOP implicit %2
56     NOP implicit %3
58     NOP implicit $x0
59     NOP implicit $x1
60     NOP implicit $x2
61     NOP implicit $x3
62     NOP implicit $x4
63     NOP implicit $x5
64     NOP implicit $x27
65     NOP implicit $x28
66     NOP implicit $x29
67     NOP implicit $x30
68 ...
69 ---
70 # CHECK-LABEL: name: scav0
71 name: scav0
72 tracksRegLiveness: true
73 stack:
74   # variable-sized object should be a reason to reserve an emergency spillslot
75   # in the RegScavenger
76   - { id: 0, type: variable-sized, offset: -32, alignment: 1 }
77 body: |
78   bb.0:
79     $x0 = IMPLICIT_DEF
80     $x1 = IMPLICIT_DEF
81     $x2 = IMPLICIT_DEF
82     $x3 = IMPLICIT_DEF
83     $x4 = IMPLICIT_DEF
84     $x5 = IMPLICIT_DEF
85     $x6 = IMPLICIT_DEF
86     $x7 = IMPLICIT_DEF
87     $x8 = IMPLICIT_DEF
88     $x9 = IMPLICIT_DEF
89     $x10 = IMPLICIT_DEF
90     $x11 = IMPLICIT_DEF
91     $x12 = IMPLICIT_DEF
92     $x13 = IMPLICIT_DEF
93     $x14 = IMPLICIT_DEF
94     $x15 = IMPLICIT_DEF
95     $x16 = IMPLICIT_DEF
96     $x17 = IMPLICIT_DEF
97     $x18 = IMPLICIT_DEF
98     $x19 = IMPLICIT_DEF
99     $x20 = IMPLICIT_DEF
100     $x21 = IMPLICIT_DEF
101     $x22 = IMPLICIT_DEF
102     $x23 = IMPLICIT_DEF
103     $x24 = IMPLICIT_DEF
104     $x25 = IMPLICIT_DEF
105     $x26 = IMPLICIT_DEF
106     $x27 = IMPLICIT_DEF
107     $x28 = IMPLICIT_DEF
108     $x29 = IMPLICIT_DEF
109     $x30 = IMPLICIT_DEF
111     ; CHECK: STD killed [[SPILLEDREG:\$x[0-9]+]]
112     ; CHECK: [[SPILLEDREG]] = LI8 42
113     ; CHECK: NOP implicit killed [[SPILLEDREG]]
114     ; CHECK: [[SPILLEDREG]] = LD
115     %0 : g8rc = LI8 42
116     NOP implicit %0
118     NOP implicit $x0
119     NOP implicit $x1
120     NOP implicit $x2
121     NOP implicit $x3
122     NOP implicit $x4
123     NOP implicit $x5
124     NOP implicit $x6
125     NOP implicit $x7
126     NOP implicit $x8
127     NOP implicit $x9
128     NOP implicit $x10
129     NOP implicit $x11
130     NOP implicit $x12
131     NOP implicit $x13
132     NOP implicit $x14
133     NOP implicit $x15
134     NOP implicit $x16
135     NOP implicit $x17
136     NOP implicit $x18
137     NOP implicit $x19
138     NOP implicit $x20
139     NOP implicit $x21
140     NOP implicit $x22
141     NOP implicit $x23
142     NOP implicit $x24
143     NOP implicit $x25
144     NOP implicit $x26
145     NOP implicit $x27
146     NOP implicit $x28
147     NOP implicit $x29
148     NOP implicit $x30
151 # Check for bug where we would refuse to spill before the first instruction in a
152 # block.
153 # CHECK-LABEL: name: spill_at_begin
154 # CHECK: bb.0:
155 # CHECK: liveins:
156 # CHECK: STD killed [[REG:\$x[0-9]+]]{{.*}}(store 8 into %stack.{{[0-9]+}})
157 # CHECK: [[REG]] = LIS8 0
158 # CHECK: [[REG]] = ORI8 killed [[REG]], 48
159 # CHECK: NOP implicit killed [[REG]]
160 # CHECK: [[REG]] = LD{{.*}}(load 8 from %stack.{{[0-9]+}})
161 name: spill_at_begin
162 tracksRegLiveness: true
163 stack:
164   # variable-sized object should be a reason to reserve an emergency spillslot
165   # in the RegScavenger
166   - { id: 0, type: variable-sized, offset: -32, alignment: 1 }
167 body: |
168   bb.0:
169     liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $x18, $x19, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $x29, $x30, $x31
170     %0 : g8rc = LIS8 0
171     %1 : g8rc = ORI8 %0, 48
172     NOP implicit %1
174     NOP implicit $x0
175     NOP implicit $x1
176     NOP implicit $x2
177     NOP implicit $x3
178     NOP implicit $x4
179     NOP implicit $x5
180     NOP implicit $x6
181     NOP implicit $x7
182     NOP implicit $x8
183     NOP implicit $x9
184     NOP implicit $x10
185     NOP implicit $x11
186     NOP implicit $x12
187     NOP implicit $x13
188     NOP implicit $x14
189     NOP implicit $x15
190     NOP implicit $x16
191     NOP implicit $x17
192     NOP implicit $x18
193     NOP implicit $x19
194     NOP implicit $x20
195     NOP implicit $x21
196     NOP implicit $x22
197     NOP implicit $x23
198     NOP implicit $x24
199     NOP implicit $x25
200     NOP implicit $x26
201     NOP implicit $x27
202     NOP implicit $x28
203     NOP implicit $x29
204     NOP implicit $x30
205     NOP implicit $x31