• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=i686 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
3; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=atom | FileCheck %s --check-prefix=CHECK --check-prefix=ATOM
4; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
5; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
6; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
7; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
8; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
9; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
10; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
11; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2
12; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
13
14define i8 @test_aaa(i8 %a0) optsize {
15; GENERIC-LABEL: test_aaa:
16; GENERIC:       # %bb.0:
17; GENERIC-NEXT:    movb {{[0-9]+}}(%esp), %al
18; GENERIC-NEXT:    #APP
19; GENERIC-NEXT:    aaa
20; GENERIC-NEXT:    #NO_APP
21; GENERIC-NEXT:    retl
22;
23; ATOM-LABEL: test_aaa:
24; ATOM:       # %bb.0:
25; ATOM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [1:1.00]
26; ATOM-NEXT:    #APP
27; ATOM-NEXT:    aaa # sched: [13:6.50]
28; ATOM-NEXT:    #NO_APP
29; ATOM-NEXT:    retl # sched: [79:39.50]
30;
31; SLM-LABEL: test_aaa:
32; SLM:       # %bb.0:
33; SLM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [3:1.00]
34; SLM-NEXT:    #APP
35; SLM-NEXT:    aaa # sched: [100:1.00]
36; SLM-NEXT:    #NO_APP
37; SLM-NEXT:    retl # sched: [4:1.00]
38;
39; SANDY-LABEL: test_aaa:
40; SANDY:       # %bb.0:
41; SANDY-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
42; SANDY-NEXT:    #APP
43; SANDY-NEXT:    aaa # sched: [100:0.33]
44; SANDY-NEXT:    #NO_APP
45; SANDY-NEXT:    retl # sched: [6:1.00]
46;
47; HASWELL-LABEL: test_aaa:
48; HASWELL:       # %bb.0:
49; HASWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
50; HASWELL-NEXT:    #APP
51; HASWELL-NEXT:    aaa # sched: [100:0.25]
52; HASWELL-NEXT:    #NO_APP
53; HASWELL-NEXT:    retl # sched: [7:1.00]
54;
55; BROADWELL-LABEL: test_aaa:
56; BROADWELL:       # %bb.0:
57; BROADWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
58; BROADWELL-NEXT:    #APP
59; BROADWELL-NEXT:    aaa # sched: [100:0.25]
60; BROADWELL-NEXT:    #NO_APP
61; BROADWELL-NEXT:    retl # sched: [6:0.50]
62;
63; SKYLAKE-LABEL: test_aaa:
64; SKYLAKE:       # %bb.0:
65; SKYLAKE-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
66; SKYLAKE-NEXT:    #APP
67; SKYLAKE-NEXT:    aaa # sched: [100:0.25]
68; SKYLAKE-NEXT:    #NO_APP
69; SKYLAKE-NEXT:    retl # sched: [6:0.50]
70;
71; SKX-LABEL: test_aaa:
72; SKX:       # %bb.0:
73; SKX-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
74; SKX-NEXT:    #APP
75; SKX-NEXT:    aaa # sched: [100:0.25]
76; SKX-NEXT:    #NO_APP
77; SKX-NEXT:    retl # sched: [6:0.50]
78;
79; BTVER2-LABEL: test_aaa:
80; BTVER2:       # %bb.0:
81; BTVER2-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:1.00]
82; BTVER2-NEXT:    #APP
83; BTVER2-NEXT:    aaa # sched: [100:0.50]
84; BTVER2-NEXT:    #NO_APP
85; BTVER2-NEXT:    retl # sched: [4:1.00]
86;
87; ZNVER1-LABEL: test_aaa:
88; ZNVER1:       # %bb.0:
89; ZNVER1-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [8:0.50]
90; ZNVER1-NEXT:    #APP
91; ZNVER1-NEXT:    aaa # sched: [100:0.25]
92; ZNVER1-NEXT:    #NO_APP
93; ZNVER1-NEXT:    retl # sched: [1:0.50]
94  %1 = tail call i8 asm "aaa", "=r,r"(i8 %a0) nounwind
95  ret i8 %1
96}
97
98define void @test_aad(i16 %a0) optsize {
99; GENERIC-LABEL: test_aad:
100; GENERIC:       # %bb.0:
101; GENERIC-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
102; GENERIC-NEXT:    #APP
103; GENERIC-NEXT:    aad
104; GENERIC-NEXT:    aad $16
105; GENERIC-NEXT:    #NO_APP
106; GENERIC-NEXT:    retl
107;
108; ATOM-LABEL: test_aad:
109; ATOM:       # %bb.0:
110; ATOM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
111; ATOM-NEXT:    #APP
112; ATOM-NEXT:    aad # sched: [7:3.50]
113; ATOM-NEXT:    aad $16 # sched: [7:3.50]
114; ATOM-NEXT:    #NO_APP
115; ATOM-NEXT:    retl # sched: [79:39.50]
116;
117; SLM-LABEL: test_aad:
118; SLM:       # %bb.0:
119; SLM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
120; SLM-NEXT:    #APP
121; SLM-NEXT:    aad # sched: [100:1.00]
122; SLM-NEXT:    aad $16 # sched: [100:1.00]
123; SLM-NEXT:    #NO_APP
124; SLM-NEXT:    retl # sched: [4:1.00]
125;
126; SANDY-LABEL: test_aad:
127; SANDY:       # %bb.0:
128; SANDY-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
129; SANDY-NEXT:    #APP
130; SANDY-NEXT:    aad # sched: [100:0.33]
131; SANDY-NEXT:    aad $16 # sched: [100:0.33]
132; SANDY-NEXT:    #NO_APP
133; SANDY-NEXT:    retl # sched: [6:1.00]
134;
135; HASWELL-LABEL: test_aad:
136; HASWELL:       # %bb.0:
137; HASWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
138; HASWELL-NEXT:    #APP
139; HASWELL-NEXT:    aad # sched: [100:0.25]
140; HASWELL-NEXT:    aad $16 # sched: [100:0.25]
141; HASWELL-NEXT:    #NO_APP
142; HASWELL-NEXT:    retl # sched: [7:1.00]
143;
144; BROADWELL-LABEL: test_aad:
145; BROADWELL:       # %bb.0:
146; BROADWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
147; BROADWELL-NEXT:    #APP
148; BROADWELL-NEXT:    aad # sched: [100:0.25]
149; BROADWELL-NEXT:    aad $16 # sched: [100:0.25]
150; BROADWELL-NEXT:    #NO_APP
151; BROADWELL-NEXT:    retl # sched: [6:0.50]
152;
153; SKYLAKE-LABEL: test_aad:
154; SKYLAKE:       # %bb.0:
155; SKYLAKE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
156; SKYLAKE-NEXT:    #APP
157; SKYLAKE-NEXT:    aad # sched: [100:0.25]
158; SKYLAKE-NEXT:    aad $16 # sched: [100:0.25]
159; SKYLAKE-NEXT:    #NO_APP
160; SKYLAKE-NEXT:    retl # sched: [6:0.50]
161;
162; SKX-LABEL: test_aad:
163; SKX:       # %bb.0:
164; SKX-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
165; SKX-NEXT:    #APP
166; SKX-NEXT:    aad # sched: [100:0.25]
167; SKX-NEXT:    aad $16 # sched: [100:0.25]
168; SKX-NEXT:    #NO_APP
169; SKX-NEXT:    retl # sched: [6:0.50]
170;
171; BTVER2-LABEL: test_aad:
172; BTVER2:       # %bb.0:
173; BTVER2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
174; BTVER2-NEXT:    #APP
175; BTVER2-NEXT:    aad # sched: [100:0.50]
176; BTVER2-NEXT:    aad $16 # sched: [100:0.50]
177; BTVER2-NEXT:    #NO_APP
178; BTVER2-NEXT:    retl # sched: [4:1.00]
179;
180; ZNVER1-LABEL: test_aad:
181; ZNVER1:       # %bb.0:
182; ZNVER1-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
183; ZNVER1-NEXT:    #APP
184; ZNVER1-NEXT:    aad # sched: [100:0.25]
185; ZNVER1-NEXT:    aad $16 # sched: [100:0.25]
186; ZNVER1-NEXT:    #NO_APP
187; ZNVER1-NEXT:    retl # sched: [1:0.50]
188  tail call void asm "aad \0A\09 aad $1", "r,i"(i16 %a0, i16 16) nounwind
189  ret void
190}
191
192define void @test_aam(i8 %a0) optsize {
193; GENERIC-LABEL: test_aam:
194; GENERIC:       # %bb.0:
195; GENERIC-NEXT:    movb {{[0-9]+}}(%esp), %al
196; GENERIC-NEXT:    #APP
197; GENERIC-NEXT:    aam
198; GENERIC-NEXT:    aam $16
199; GENERIC-NEXT:    #NO_APP
200; GENERIC-NEXT:    retl
201;
202; ATOM-LABEL: test_aam:
203; ATOM:       # %bb.0:
204; ATOM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [1:1.00]
205; ATOM-NEXT:    #APP
206; ATOM-NEXT:    aam # sched: [21:10.50]
207; ATOM-NEXT:    aam $16 # sched: [21:10.50]
208; ATOM-NEXT:    #NO_APP
209; ATOM-NEXT:    retl # sched: [79:39.50]
210;
211; SLM-LABEL: test_aam:
212; SLM:       # %bb.0:
213; SLM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [3:1.00]
214; SLM-NEXT:    #APP
215; SLM-NEXT:    aam # sched: [100:1.00]
216; SLM-NEXT:    aam $16 # sched: [100:1.00]
217; SLM-NEXT:    #NO_APP
218; SLM-NEXT:    retl # sched: [4:1.00]
219;
220; SANDY-LABEL: test_aam:
221; SANDY:       # %bb.0:
222; SANDY-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
223; SANDY-NEXT:    #APP
224; SANDY-NEXT:    aam # sched: [100:0.33]
225; SANDY-NEXT:    aam $16 # sched: [100:0.33]
226; SANDY-NEXT:    #NO_APP
227; SANDY-NEXT:    retl # sched: [6:1.00]
228;
229; HASWELL-LABEL: test_aam:
230; HASWELL:       # %bb.0:
231; HASWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
232; HASWELL-NEXT:    #APP
233; HASWELL-NEXT:    aam # sched: [100:0.25]
234; HASWELL-NEXT:    aam $16 # sched: [100:0.25]
235; HASWELL-NEXT:    #NO_APP
236; HASWELL-NEXT:    retl # sched: [7:1.00]
237;
238; BROADWELL-LABEL: test_aam:
239; BROADWELL:       # %bb.0:
240; BROADWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
241; BROADWELL-NEXT:    #APP
242; BROADWELL-NEXT:    aam # sched: [100:0.25]
243; BROADWELL-NEXT:    aam $16 # sched: [100:0.25]
244; BROADWELL-NEXT:    #NO_APP
245; BROADWELL-NEXT:    retl # sched: [6:0.50]
246;
247; SKYLAKE-LABEL: test_aam:
248; SKYLAKE:       # %bb.0:
249; SKYLAKE-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
250; SKYLAKE-NEXT:    #APP
251; SKYLAKE-NEXT:    aam # sched: [100:0.25]
252; SKYLAKE-NEXT:    aam $16 # sched: [100:0.25]
253; SKYLAKE-NEXT:    #NO_APP
254; SKYLAKE-NEXT:    retl # sched: [6:0.50]
255;
256; SKX-LABEL: test_aam:
257; SKX:       # %bb.0:
258; SKX-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
259; SKX-NEXT:    #APP
260; SKX-NEXT:    aam # sched: [100:0.25]
261; SKX-NEXT:    aam $16 # sched: [100:0.25]
262; SKX-NEXT:    #NO_APP
263; SKX-NEXT:    retl # sched: [6:0.50]
264;
265; BTVER2-LABEL: test_aam:
266; BTVER2:       # %bb.0:
267; BTVER2-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:1.00]
268; BTVER2-NEXT:    #APP
269; BTVER2-NEXT:    aam # sched: [100:0.50]
270; BTVER2-NEXT:    aam $16 # sched: [100:0.50]
271; BTVER2-NEXT:    #NO_APP
272; BTVER2-NEXT:    retl # sched: [4:1.00]
273;
274; ZNVER1-LABEL: test_aam:
275; ZNVER1:       # %bb.0:
276; ZNVER1-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [8:0.50]
277; ZNVER1-NEXT:    #APP
278; ZNVER1-NEXT:    aam # sched: [100:0.25]
279; ZNVER1-NEXT:    aam $16 # sched: [100:0.25]
280; ZNVER1-NEXT:    #NO_APP
281; ZNVER1-NEXT:    retl # sched: [1:0.50]
282  tail call void asm "aam \0A\09 aam $1", "r,i"(i8 %a0, i8 16) nounwind
283  ret void
284}
285
286define i8 @test_aas(i8 %a0) optsize {
287; GENERIC-LABEL: test_aas:
288; GENERIC:       # %bb.0:
289; GENERIC-NEXT:    movb {{[0-9]+}}(%esp), %al
290; GENERIC-NEXT:    #APP
291; GENERIC-NEXT:    aas
292; GENERIC-NEXT:    #NO_APP
293; GENERIC-NEXT:    retl
294;
295; ATOM-LABEL: test_aas:
296; ATOM:       # %bb.0:
297; ATOM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [1:1.00]
298; ATOM-NEXT:    #APP
299; ATOM-NEXT:    aas # sched: [13:6.50]
300; ATOM-NEXT:    #NO_APP
301; ATOM-NEXT:    retl # sched: [79:39.50]
302;
303; SLM-LABEL: test_aas:
304; SLM:       # %bb.0:
305; SLM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [3:1.00]
306; SLM-NEXT:    #APP
307; SLM-NEXT:    aas # sched: [100:1.00]
308; SLM-NEXT:    #NO_APP
309; SLM-NEXT:    retl # sched: [4:1.00]
310;
311; SANDY-LABEL: test_aas:
312; SANDY:       # %bb.0:
313; SANDY-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
314; SANDY-NEXT:    #APP
315; SANDY-NEXT:    aas # sched: [100:0.33]
316; SANDY-NEXT:    #NO_APP
317; SANDY-NEXT:    retl # sched: [6:1.00]
318;
319; HASWELL-LABEL: test_aas:
320; HASWELL:       # %bb.0:
321; HASWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
322; HASWELL-NEXT:    #APP
323; HASWELL-NEXT:    aas # sched: [100:0.25]
324; HASWELL-NEXT:    #NO_APP
325; HASWELL-NEXT:    retl # sched: [7:1.00]
326;
327; BROADWELL-LABEL: test_aas:
328; BROADWELL:       # %bb.0:
329; BROADWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
330; BROADWELL-NEXT:    #APP
331; BROADWELL-NEXT:    aas # sched: [100:0.25]
332; BROADWELL-NEXT:    #NO_APP
333; BROADWELL-NEXT:    retl # sched: [6:0.50]
334;
335; SKYLAKE-LABEL: test_aas:
336; SKYLAKE:       # %bb.0:
337; SKYLAKE-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
338; SKYLAKE-NEXT:    #APP
339; SKYLAKE-NEXT:    aas # sched: [100:0.25]
340; SKYLAKE-NEXT:    #NO_APP
341; SKYLAKE-NEXT:    retl # sched: [6:0.50]
342;
343; SKX-LABEL: test_aas:
344; SKX:       # %bb.0:
345; SKX-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
346; SKX-NEXT:    #APP
347; SKX-NEXT:    aas # sched: [100:0.25]
348; SKX-NEXT:    #NO_APP
349; SKX-NEXT:    retl # sched: [6:0.50]
350;
351; BTVER2-LABEL: test_aas:
352; BTVER2:       # %bb.0:
353; BTVER2-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:1.00]
354; BTVER2-NEXT:    #APP
355; BTVER2-NEXT:    aas # sched: [100:0.50]
356; BTVER2-NEXT:    #NO_APP
357; BTVER2-NEXT:    retl # sched: [4:1.00]
358;
359; ZNVER1-LABEL: test_aas:
360; ZNVER1:       # %bb.0:
361; ZNVER1-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [8:0.50]
362; ZNVER1-NEXT:    #APP
363; ZNVER1-NEXT:    aas # sched: [100:0.25]
364; ZNVER1-NEXT:    #NO_APP
365; ZNVER1-NEXT:    retl # sched: [1:0.50]
366  %1 = tail call i8 asm "aas", "=r,r"(i8 %a0) nounwind
367  ret i8 %1
368}
369
370define void @test_arpl(i16 %a0, i16 *%a1) optsize {
371; GENERIC-LABEL: test_arpl:
372; GENERIC:       # %bb.0:
373; GENERIC-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
374; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
375; GENERIC-NEXT:    #APP
376; GENERIC-NEXT:    arpl %ax, (%ecx)
377; GENERIC-NEXT:    #NO_APP
378; GENERIC-NEXT:    retl
379;
380; ATOM-LABEL: test_arpl:
381; ATOM:       # %bb.0:
382; ATOM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
383; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
384; ATOM-NEXT:    #APP
385; ATOM-NEXT:    arpl %ax, (%ecx) # sched: [23:11.50]
386; ATOM-NEXT:    #NO_APP
387; ATOM-NEXT:    retl # sched: [79:39.50]
388;
389; SLM-LABEL: test_arpl:
390; SLM:       # %bb.0:
391; SLM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
392; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
393; SLM-NEXT:    #APP
394; SLM-NEXT:    arpl %ax, (%ecx) # sched: [100:1.00]
395; SLM-NEXT:    #NO_APP
396; SLM-NEXT:    retl # sched: [4:1.00]
397;
398; SANDY-LABEL: test_arpl:
399; SANDY:       # %bb.0:
400; SANDY-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
401; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
402; SANDY-NEXT:    #APP
403; SANDY-NEXT:    arpl %ax, (%ecx) # sched: [100:0.33]
404; SANDY-NEXT:    #NO_APP
405; SANDY-NEXT:    retl # sched: [6:1.00]
406;
407; HASWELL-LABEL: test_arpl:
408; HASWELL:       # %bb.0:
409; HASWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
410; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
411; HASWELL-NEXT:    #APP
412; HASWELL-NEXT:    arpl %ax, (%ecx) # sched: [100:0.25]
413; HASWELL-NEXT:    #NO_APP
414; HASWELL-NEXT:    retl # sched: [7:1.00]
415;
416; BROADWELL-LABEL: test_arpl:
417; BROADWELL:       # %bb.0:
418; BROADWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
419; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
420; BROADWELL-NEXT:    #APP
421; BROADWELL-NEXT:    arpl %ax, (%ecx) # sched: [100:0.25]
422; BROADWELL-NEXT:    #NO_APP
423; BROADWELL-NEXT:    retl # sched: [6:0.50]
424;
425; SKYLAKE-LABEL: test_arpl:
426; SKYLAKE:       # %bb.0:
427; SKYLAKE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
428; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
429; SKYLAKE-NEXT:    #APP
430; SKYLAKE-NEXT:    arpl %ax, (%ecx) # sched: [100:0.25]
431; SKYLAKE-NEXT:    #NO_APP
432; SKYLAKE-NEXT:    retl # sched: [6:0.50]
433;
434; SKX-LABEL: test_arpl:
435; SKX:       # %bb.0:
436; SKX-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
437; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
438; SKX-NEXT:    #APP
439; SKX-NEXT:    arpl %ax, (%ecx) # sched: [100:0.25]
440; SKX-NEXT:    #NO_APP
441; SKX-NEXT:    retl # sched: [6:0.50]
442;
443; BTVER2-LABEL: test_arpl:
444; BTVER2:       # %bb.0:
445; BTVER2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
446; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
447; BTVER2-NEXT:    #APP
448; BTVER2-NEXT:    arpl %ax, (%ecx) # sched: [100:0.50]
449; BTVER2-NEXT:    #NO_APP
450; BTVER2-NEXT:    retl # sched: [4:1.00]
451;
452; ZNVER1-LABEL: test_arpl:
453; ZNVER1:       # %bb.0:
454; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
455; ZNVER1-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
456; ZNVER1-NEXT:    #APP
457; ZNVER1-NEXT:    arpl %ax, (%ecx) # sched: [100:0.25]
458; ZNVER1-NEXT:    #NO_APP
459; ZNVER1-NEXT:    retl # sched: [1:0.50]
460  call void asm sideeffect "arpl $0, $1", "r,*m"(i16 %a0, i16 *%a1)
461  ret void
462}
463
464define void @test_bound(i16 %a0, i16 *%a1, i32 %a2, i32 *%a3) optsize {
465; GENERIC-LABEL: test_bound:
466; GENERIC:       # %bb.0:
467; GENERIC-NEXT:    pushl %esi
468; GENERIC-NEXT:    .cfi_def_cfa_offset 8
469; GENERIC-NEXT:    .cfi_offset %esi, -8
470; GENERIC-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
471; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
472; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %edx
473; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %esi
474; GENERIC-NEXT:    #APP
475; GENERIC-NEXT:    bound %ax, (%esi)
476; GENERIC-NEXT:    bound %ecx, (%edx)
477; GENERIC-NEXT:    #NO_APP
478; GENERIC-NEXT:    popl %esi
479; GENERIC-NEXT:    .cfi_def_cfa_offset 4
480; GENERIC-NEXT:    retl
481;
482; ATOM-LABEL: test_bound:
483; ATOM:       # %bb.0:
484; ATOM-NEXT:    pushl %esi # sched: [1:1.00]
485; ATOM-NEXT:    .cfi_def_cfa_offset 8
486; ATOM-NEXT:    .cfi_offset %esi, -8
487; ATOM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
488; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
489; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [1:1.00]
490; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [1:1.00]
491; ATOM-NEXT:    #APP
492; ATOM-NEXT:    bound %ax, (%esi) # sched: [11:5.50]
493; ATOM-NEXT:    bound %ecx, (%edx) # sched: [11:5.50]
494; ATOM-NEXT:    #NO_APP
495; ATOM-NEXT:    popl %esi # sched: [1:1.00]
496; ATOM-NEXT:    .cfi_def_cfa_offset 4
497; ATOM-NEXT:    retl # sched: [79:39.50]
498;
499; SLM-LABEL: test_bound:
500; SLM:       # %bb.0:
501; SLM-NEXT:    pushl %esi # sched: [1:1.00]
502; SLM-NEXT:    .cfi_def_cfa_offset 8
503; SLM-NEXT:    .cfi_offset %esi, -8
504; SLM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
505; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
506; SLM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [3:1.00]
507; SLM-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [3:1.00]
508; SLM-NEXT:    #APP
509; SLM-NEXT:    bound %ax, (%esi) # sched: [100:1.00]
510; SLM-NEXT:    bound %ecx, (%edx) # sched: [100:1.00]
511; SLM-NEXT:    #NO_APP
512; SLM-NEXT:    popl %esi # sched: [3:1.00]
513; SLM-NEXT:    .cfi_def_cfa_offset 4
514; SLM-NEXT:    retl # sched: [4:1.00]
515;
516; SANDY-LABEL: test_bound:
517; SANDY:       # %bb.0:
518; SANDY-NEXT:    pushl %esi # sched: [5:1.00]
519; SANDY-NEXT:    .cfi_def_cfa_offset 8
520; SANDY-NEXT:    .cfi_offset %esi, -8
521; SANDY-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
522; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
523; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
524; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [5:0.50]
525; SANDY-NEXT:    #APP
526; SANDY-NEXT:    bound %ax, (%esi) # sched: [100:0.33]
527; SANDY-NEXT:    bound %ecx, (%edx) # sched: [100:0.33]
528; SANDY-NEXT:    #NO_APP
529; SANDY-NEXT:    popl %esi # sched: [6:0.50]
530; SANDY-NEXT:    .cfi_def_cfa_offset 4
531; SANDY-NEXT:    retl # sched: [6:1.00]
532;
533; HASWELL-LABEL: test_bound:
534; HASWELL:       # %bb.0:
535; HASWELL-NEXT:    pushl %esi # sched: [2:1.00]
536; HASWELL-NEXT:    .cfi_def_cfa_offset 8
537; HASWELL-NEXT:    .cfi_offset %esi, -8
538; HASWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
539; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
540; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
541; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [5:0.50]
542; HASWELL-NEXT:    #APP
543; HASWELL-NEXT:    bound %ax, (%esi) # sched: [1:3.75]
544; HASWELL-NEXT:    bound %ecx, (%edx) # sched: [1:3.75]
545; HASWELL-NEXT:    #NO_APP
546; HASWELL-NEXT:    popl %esi # sched: [6:0.50]
547; HASWELL-NEXT:    .cfi_def_cfa_offset 4
548; HASWELL-NEXT:    retl # sched: [7:1.00]
549;
550; BROADWELL-LABEL: test_bound:
551; BROADWELL:       # %bb.0:
552; BROADWELL-NEXT:    pushl %esi # sched: [2:1.00]
553; BROADWELL-NEXT:    .cfi_def_cfa_offset 8
554; BROADWELL-NEXT:    .cfi_offset %esi, -8
555; BROADWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
556; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
557; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
558; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [5:0.50]
559; BROADWELL-NEXT:    #APP
560; BROADWELL-NEXT:    bound %ax, (%esi) # sched: [100:0.25]
561; BROADWELL-NEXT:    bound %ecx, (%edx) # sched: [100:0.25]
562; BROADWELL-NEXT:    #NO_APP
563; BROADWELL-NEXT:    popl %esi # sched: [6:0.50]
564; BROADWELL-NEXT:    .cfi_def_cfa_offset 4
565; BROADWELL-NEXT:    retl # sched: [6:0.50]
566;
567; SKYLAKE-LABEL: test_bound:
568; SKYLAKE:       # %bb.0:
569; SKYLAKE-NEXT:    pushl %esi # sched: [2:1.00]
570; SKYLAKE-NEXT:    .cfi_def_cfa_offset 8
571; SKYLAKE-NEXT:    .cfi_offset %esi, -8
572; SKYLAKE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
573; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
574; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
575; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [5:0.50]
576; SKYLAKE-NEXT:    #APP
577; SKYLAKE-NEXT:    bound %ax, (%esi) # sched: [100:0.25]
578; SKYLAKE-NEXT:    bound %ecx, (%edx) # sched: [100:0.25]
579; SKYLAKE-NEXT:    #NO_APP
580; SKYLAKE-NEXT:    popl %esi # sched: [6:0.50]
581; SKYLAKE-NEXT:    .cfi_def_cfa_offset 4
582; SKYLAKE-NEXT:    retl # sched: [6:0.50]
583;
584; SKX-LABEL: test_bound:
585; SKX:       # %bb.0:
586; SKX-NEXT:    pushl %esi # sched: [2:1.00]
587; SKX-NEXT:    .cfi_def_cfa_offset 8
588; SKX-NEXT:    .cfi_offset %esi, -8
589; SKX-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
590; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
591; SKX-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
592; SKX-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [5:0.50]
593; SKX-NEXT:    #APP
594; SKX-NEXT:    bound %ax, (%esi) # sched: [100:0.25]
595; SKX-NEXT:    bound %ecx, (%edx) # sched: [100:0.25]
596; SKX-NEXT:    #NO_APP
597; SKX-NEXT:    popl %esi # sched: [6:0.50]
598; SKX-NEXT:    .cfi_def_cfa_offset 4
599; SKX-NEXT:    retl # sched: [6:0.50]
600;
601; BTVER2-LABEL: test_bound:
602; BTVER2:       # %bb.0:
603; BTVER2-NEXT:    pushl %esi # sched: [1:1.00]
604; BTVER2-NEXT:    .cfi_def_cfa_offset 8
605; BTVER2-NEXT:    .cfi_offset %esi, -8
606; BTVER2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
607; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
608; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:1.00]
609; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [5:1.00]
610; BTVER2-NEXT:    #APP
611; BTVER2-NEXT:    bound %ax, (%esi) # sched: [100:0.50]
612; BTVER2-NEXT:    bound %ecx, (%edx) # sched: [100:0.50]
613; BTVER2-NEXT:    #NO_APP
614; BTVER2-NEXT:    popl %esi # sched: [5:1.00]
615; BTVER2-NEXT:    .cfi_def_cfa_offset 4
616; BTVER2-NEXT:    retl # sched: [4:1.00]
617;
618; ZNVER1-LABEL: test_bound:
619; ZNVER1:       # %bb.0:
620; ZNVER1-NEXT:    pushl %esi # sched: [1:0.50]
621; ZNVER1-NEXT:    .cfi_def_cfa_offset 8
622; ZNVER1-NEXT:    .cfi_offset %esi, -8
623; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
624; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [8:0.50]
625; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %esi # sched: [8:0.50]
626; ZNVER1-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
627; ZNVER1-NEXT:    #APP
628; ZNVER1-NEXT:    bound %ax, (%esi) # sched: [100:0.25]
629; ZNVER1-NEXT:    bound %ecx, (%edx) # sched: [100:0.25]
630; ZNVER1-NEXT:    #NO_APP
631; ZNVER1-NEXT:    popl %esi # sched: [8:0.50]
632; ZNVER1-NEXT:    .cfi_def_cfa_offset 4
633; ZNVER1-NEXT:    retl # sched: [1:0.50]
634  call void asm sideeffect "bound $0, $1 \0A\09 bound $2, $3", "r,*m,r,*m"(i16 %a0, i16 *%a1, i32 %a2, i32 *%a3)
635  ret void
636}
637
638; TODO - test_call
639
640define i8 @test_daa(i8 %a0) optsize {
641; GENERIC-LABEL: test_daa:
642; GENERIC:       # %bb.0:
643; GENERIC-NEXT:    movb {{[0-9]+}}(%esp), %al
644; GENERIC-NEXT:    #APP
645; GENERIC-NEXT:    daa
646; GENERIC-NEXT:    #NO_APP
647; GENERIC-NEXT:    retl
648;
649; ATOM-LABEL: test_daa:
650; ATOM:       # %bb.0:
651; ATOM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [1:1.00]
652; ATOM-NEXT:    #APP
653; ATOM-NEXT:    daa # sched: [18:9.00]
654; ATOM-NEXT:    #NO_APP
655; ATOM-NEXT:    retl # sched: [79:39.50]
656;
657; SLM-LABEL: test_daa:
658; SLM:       # %bb.0:
659; SLM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [3:1.00]
660; SLM-NEXT:    #APP
661; SLM-NEXT:    daa # sched: [100:1.00]
662; SLM-NEXT:    #NO_APP
663; SLM-NEXT:    retl # sched: [4:1.00]
664;
665; SANDY-LABEL: test_daa:
666; SANDY:       # %bb.0:
667; SANDY-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
668; SANDY-NEXT:    #APP
669; SANDY-NEXT:    daa # sched: [100:0.33]
670; SANDY-NEXT:    #NO_APP
671; SANDY-NEXT:    retl # sched: [6:1.00]
672;
673; HASWELL-LABEL: test_daa:
674; HASWELL:       # %bb.0:
675; HASWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
676; HASWELL-NEXT:    #APP
677; HASWELL-NEXT:    daa # sched: [100:0.25]
678; HASWELL-NEXT:    #NO_APP
679; HASWELL-NEXT:    retl # sched: [7:1.00]
680;
681; BROADWELL-LABEL: test_daa:
682; BROADWELL:       # %bb.0:
683; BROADWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
684; BROADWELL-NEXT:    #APP
685; BROADWELL-NEXT:    daa # sched: [100:0.25]
686; BROADWELL-NEXT:    #NO_APP
687; BROADWELL-NEXT:    retl # sched: [6:0.50]
688;
689; SKYLAKE-LABEL: test_daa:
690; SKYLAKE:       # %bb.0:
691; SKYLAKE-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
692; SKYLAKE-NEXT:    #APP
693; SKYLAKE-NEXT:    daa # sched: [100:0.25]
694; SKYLAKE-NEXT:    #NO_APP
695; SKYLAKE-NEXT:    retl # sched: [6:0.50]
696;
697; SKX-LABEL: test_daa:
698; SKX:       # %bb.0:
699; SKX-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
700; SKX-NEXT:    #APP
701; SKX-NEXT:    daa # sched: [100:0.25]
702; SKX-NEXT:    #NO_APP
703; SKX-NEXT:    retl # sched: [6:0.50]
704;
705; BTVER2-LABEL: test_daa:
706; BTVER2:       # %bb.0:
707; BTVER2-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:1.00]
708; BTVER2-NEXT:    #APP
709; BTVER2-NEXT:    daa # sched: [100:0.50]
710; BTVER2-NEXT:    #NO_APP
711; BTVER2-NEXT:    retl # sched: [4:1.00]
712;
713; ZNVER1-LABEL: test_daa:
714; ZNVER1:       # %bb.0:
715; ZNVER1-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [8:0.50]
716; ZNVER1-NEXT:    #APP
717; ZNVER1-NEXT:    daa # sched: [100:0.25]
718; ZNVER1-NEXT:    #NO_APP
719; ZNVER1-NEXT:    retl # sched: [1:0.50]
720  %1 = tail call i8 asm "daa", "=r,r"(i8 %a0) nounwind
721  ret i8 %1
722}
723
724define i8 @test_das(i8 %a0) optsize {
725; GENERIC-LABEL: test_das:
726; GENERIC:       # %bb.0:
727; GENERIC-NEXT:    movb {{[0-9]+}}(%esp), %al
728; GENERIC-NEXT:    #APP
729; GENERIC-NEXT:    das
730; GENERIC-NEXT:    #NO_APP
731; GENERIC-NEXT:    retl
732;
733; ATOM-LABEL: test_das:
734; ATOM:       # %bb.0:
735; ATOM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [1:1.00]
736; ATOM-NEXT:    #APP
737; ATOM-NEXT:    das # sched: [20:10.00]
738; ATOM-NEXT:    #NO_APP
739; ATOM-NEXT:    retl # sched: [79:39.50]
740;
741; SLM-LABEL: test_das:
742; SLM:       # %bb.0:
743; SLM-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [3:1.00]
744; SLM-NEXT:    #APP
745; SLM-NEXT:    das # sched: [100:1.00]
746; SLM-NEXT:    #NO_APP
747; SLM-NEXT:    retl # sched: [4:1.00]
748;
749; SANDY-LABEL: test_das:
750; SANDY:       # %bb.0:
751; SANDY-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
752; SANDY-NEXT:    #APP
753; SANDY-NEXT:    das # sched: [100:0.33]
754; SANDY-NEXT:    #NO_APP
755; SANDY-NEXT:    retl # sched: [6:1.00]
756;
757; HASWELL-LABEL: test_das:
758; HASWELL:       # %bb.0:
759; HASWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
760; HASWELL-NEXT:    #APP
761; HASWELL-NEXT:    das # sched: [100:0.25]
762; HASWELL-NEXT:    #NO_APP
763; HASWELL-NEXT:    retl # sched: [7:1.00]
764;
765; BROADWELL-LABEL: test_das:
766; BROADWELL:       # %bb.0:
767; BROADWELL-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
768; BROADWELL-NEXT:    #APP
769; BROADWELL-NEXT:    das # sched: [100:0.25]
770; BROADWELL-NEXT:    #NO_APP
771; BROADWELL-NEXT:    retl # sched: [6:0.50]
772;
773; SKYLAKE-LABEL: test_das:
774; SKYLAKE:       # %bb.0:
775; SKYLAKE-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
776; SKYLAKE-NEXT:    #APP
777; SKYLAKE-NEXT:    das # sched: [100:0.25]
778; SKYLAKE-NEXT:    #NO_APP
779; SKYLAKE-NEXT:    retl # sched: [6:0.50]
780;
781; SKX-LABEL: test_das:
782; SKX:       # %bb.0:
783; SKX-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:0.50]
784; SKX-NEXT:    #APP
785; SKX-NEXT:    das # sched: [100:0.25]
786; SKX-NEXT:    #NO_APP
787; SKX-NEXT:    retl # sched: [6:0.50]
788;
789; BTVER2-LABEL: test_das:
790; BTVER2:       # %bb.0:
791; BTVER2-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [5:1.00]
792; BTVER2-NEXT:    #APP
793; BTVER2-NEXT:    das # sched: [100:0.50]
794; BTVER2-NEXT:    #NO_APP
795; BTVER2-NEXT:    retl # sched: [4:1.00]
796;
797; ZNVER1-LABEL: test_das:
798; ZNVER1:       # %bb.0:
799; ZNVER1-NEXT:    movb {{[0-9]+}}(%esp), %al # sched: [8:0.50]
800; ZNVER1-NEXT:    #APP
801; ZNVER1-NEXT:    das # sched: [100:0.25]
802; ZNVER1-NEXT:    #NO_APP
803; ZNVER1-NEXT:    retl # sched: [1:0.50]
804  %1 = tail call i8 asm "das", "=r,r"(i8 %a0) nounwind
805  ret i8 %1
806}
807
808define void @test_dec16(i16 %a0, i16* %a1) optsize {
809; GENERIC-LABEL: test_dec16:
810; GENERIC:       # %bb.0:
811; GENERIC-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
812; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
813; GENERIC-NEXT:    #APP
814; GENERIC-NEXT:    decw %ax
815; GENERIC-NEXT:    decw (%ecx)
816; GENERIC-NEXT:    #NO_APP
817; GENERIC-NEXT:    retl
818;
819; ATOM-LABEL: test_dec16:
820; ATOM:       # %bb.0:
821; ATOM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
822; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
823; ATOM-NEXT:    #APP
824; ATOM-NEXT:    decw %ax # sched: [1:0.50]
825; ATOM-NEXT:    decw (%ecx) # sched: [1:1.00]
826; ATOM-NEXT:    #NO_APP
827; ATOM-NEXT:    retl # sched: [79:39.50]
828;
829; SLM-LABEL: test_dec16:
830; SLM:       # %bb.0:
831; SLM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
832; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
833; SLM-NEXT:    #APP
834; SLM-NEXT:    decw %ax # sched: [1:0.50]
835; SLM-NEXT:    decw (%ecx) # sched: [5:2.00]
836; SLM-NEXT:    #NO_APP
837; SLM-NEXT:    retl # sched: [4:1.00]
838;
839; SANDY-LABEL: test_dec16:
840; SANDY:       # %bb.0:
841; SANDY-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
842; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
843; SANDY-NEXT:    #APP
844; SANDY-NEXT:    decw %ax # sched: [1:0.33]
845; SANDY-NEXT:    decw (%ecx) # sched: [7:1.00]
846; SANDY-NEXT:    #NO_APP
847; SANDY-NEXT:    retl # sched: [6:1.00]
848;
849; HASWELL-LABEL: test_dec16:
850; HASWELL:       # %bb.0:
851; HASWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
852; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
853; HASWELL-NEXT:    #APP
854; HASWELL-NEXT:    decw %ax # sched: [1:0.25]
855; HASWELL-NEXT:    decw (%ecx) # sched: [7:1.00]
856; HASWELL-NEXT:    #NO_APP
857; HASWELL-NEXT:    retl # sched: [7:1.00]
858;
859; BROADWELL-LABEL: test_dec16:
860; BROADWELL:       # %bb.0:
861; BROADWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
862; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
863; BROADWELL-NEXT:    #APP
864; BROADWELL-NEXT:    decw %ax # sched: [1:0.25]
865; BROADWELL-NEXT:    decw (%ecx) # sched: [7:1.00]
866; BROADWELL-NEXT:    #NO_APP
867; BROADWELL-NEXT:    retl # sched: [6:0.50]
868;
869; SKYLAKE-LABEL: test_dec16:
870; SKYLAKE:       # %bb.0:
871; SKYLAKE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
872; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
873; SKYLAKE-NEXT:    #APP
874; SKYLAKE-NEXT:    decw %ax # sched: [1:0.25]
875; SKYLAKE-NEXT:    decw (%ecx) # sched: [7:1.00]
876; SKYLAKE-NEXT:    #NO_APP
877; SKYLAKE-NEXT:    retl # sched: [6:0.50]
878;
879; SKX-LABEL: test_dec16:
880; SKX:       # %bb.0:
881; SKX-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
882; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
883; SKX-NEXT:    #APP
884; SKX-NEXT:    decw %ax # sched: [1:0.25]
885; SKX-NEXT:    decw (%ecx) # sched: [7:1.00]
886; SKX-NEXT:    #NO_APP
887; SKX-NEXT:    retl # sched: [6:0.50]
888;
889; BTVER2-LABEL: test_dec16:
890; BTVER2:       # %bb.0:
891; BTVER2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
892; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
893; BTVER2-NEXT:    #APP
894; BTVER2-NEXT:    decw %ax # sched: [1:0.50]
895; BTVER2-NEXT:    decw (%ecx) # sched: [5:1.00]
896; BTVER2-NEXT:    #NO_APP
897; BTVER2-NEXT:    retl # sched: [4:1.00]
898;
899; ZNVER1-LABEL: test_dec16:
900; ZNVER1:       # %bb.0:
901; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
902; ZNVER1-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
903; ZNVER1-NEXT:    #APP
904; ZNVER1-NEXT:    decw %ax # sched: [1:0.25]
905; ZNVER1-NEXT:    decw (%ecx) # sched: [5:0.50]
906; ZNVER1-NEXT:    #NO_APP
907; ZNVER1-NEXT:    retl # sched: [1:0.50]
908  tail call void asm "decw $0 \0A\09 decw $1", "r,*m"(i16 %a0, i16* %a1) nounwind
909  ret void
910}
911define void @test_dec32(i32 %a0, i32* %a1) optsize {
912; GENERIC-LABEL: test_dec32:
913; GENERIC:       # %bb.0:
914; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
915; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
916; GENERIC-NEXT:    #APP
917; GENERIC-NEXT:    decl %eax
918; GENERIC-NEXT:    decl (%ecx)
919; GENERIC-NEXT:    #NO_APP
920; GENERIC-NEXT:    retl
921;
922; ATOM-LABEL: test_dec32:
923; ATOM:       # %bb.0:
924; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
925; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
926; ATOM-NEXT:    #APP
927; ATOM-NEXT:    decl %eax # sched: [1:0.50]
928; ATOM-NEXT:    decl (%ecx) # sched: [1:1.00]
929; ATOM-NEXT:    #NO_APP
930; ATOM-NEXT:    retl # sched: [79:39.50]
931;
932; SLM-LABEL: test_dec32:
933; SLM:       # %bb.0:
934; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
935; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
936; SLM-NEXT:    #APP
937; SLM-NEXT:    decl %eax # sched: [1:0.50]
938; SLM-NEXT:    decl (%ecx) # sched: [5:2.00]
939; SLM-NEXT:    #NO_APP
940; SLM-NEXT:    retl # sched: [4:1.00]
941;
942; SANDY-LABEL: test_dec32:
943; SANDY:       # %bb.0:
944; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
945; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
946; SANDY-NEXT:    #APP
947; SANDY-NEXT:    decl %eax # sched: [1:0.33]
948; SANDY-NEXT:    decl (%ecx) # sched: [7:1.00]
949; SANDY-NEXT:    #NO_APP
950; SANDY-NEXT:    retl # sched: [6:1.00]
951;
952; HASWELL-LABEL: test_dec32:
953; HASWELL:       # %bb.0:
954; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
955; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
956; HASWELL-NEXT:    #APP
957; HASWELL-NEXT:    decl %eax # sched: [1:0.25]
958; HASWELL-NEXT:    decl (%ecx) # sched: [7:1.00]
959; HASWELL-NEXT:    #NO_APP
960; HASWELL-NEXT:    retl # sched: [7:1.00]
961;
962; BROADWELL-LABEL: test_dec32:
963; BROADWELL:       # %bb.0:
964; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
965; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
966; BROADWELL-NEXT:    #APP
967; BROADWELL-NEXT:    decl %eax # sched: [1:0.25]
968; BROADWELL-NEXT:    decl (%ecx) # sched: [7:1.00]
969; BROADWELL-NEXT:    #NO_APP
970; BROADWELL-NEXT:    retl # sched: [6:0.50]
971;
972; SKYLAKE-LABEL: test_dec32:
973; SKYLAKE:       # %bb.0:
974; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
975; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
976; SKYLAKE-NEXT:    #APP
977; SKYLAKE-NEXT:    decl %eax # sched: [1:0.25]
978; SKYLAKE-NEXT:    decl (%ecx) # sched: [7:1.00]
979; SKYLAKE-NEXT:    #NO_APP
980; SKYLAKE-NEXT:    retl # sched: [6:0.50]
981;
982; SKX-LABEL: test_dec32:
983; SKX:       # %bb.0:
984; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
985; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
986; SKX-NEXT:    #APP
987; SKX-NEXT:    decl %eax # sched: [1:0.25]
988; SKX-NEXT:    decl (%ecx) # sched: [7:1.00]
989; SKX-NEXT:    #NO_APP
990; SKX-NEXT:    retl # sched: [6:0.50]
991;
992; BTVER2-LABEL: test_dec32:
993; BTVER2:       # %bb.0:
994; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
995; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
996; BTVER2-NEXT:    #APP
997; BTVER2-NEXT:    decl %eax # sched: [1:0.50]
998; BTVER2-NEXT:    decl (%ecx) # sched: [5:1.00]
999; BTVER2-NEXT:    #NO_APP
1000; BTVER2-NEXT:    retl # sched: [4:1.00]
1001;
1002; ZNVER1-LABEL: test_dec32:
1003; ZNVER1:       # %bb.0:
1004; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1005; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1006; ZNVER1-NEXT:    #APP
1007; ZNVER1-NEXT:    decl %eax # sched: [1:0.25]
1008; ZNVER1-NEXT:    decl (%ecx) # sched: [5:0.50]
1009; ZNVER1-NEXT:    #NO_APP
1010; ZNVER1-NEXT:    retl # sched: [1:0.50]
1011  tail call void asm "decl $0 \0A\09 decl $1", "r,*m"(i32 %a0, i32* %a1) nounwind
1012  ret void
1013}
1014
1015define void @test_inc16(i16 %a0, i16* %a1) optsize {
1016; GENERIC-LABEL: test_inc16:
1017; GENERIC:       # %bb.0:
1018; GENERIC-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1019; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1020; GENERIC-NEXT:    #APP
1021; GENERIC-NEXT:    incw %ax
1022; GENERIC-NEXT:    incw (%ecx)
1023; GENERIC-NEXT:    #NO_APP
1024; GENERIC-NEXT:    retl
1025;
1026; ATOM-LABEL: test_inc16:
1027; ATOM:       # %bb.0:
1028; ATOM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1029; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1030; ATOM-NEXT:    #APP
1031; ATOM-NEXT:    incw %ax # sched: [1:0.50]
1032; ATOM-NEXT:    incw (%ecx) # sched: [1:1.00]
1033; ATOM-NEXT:    #NO_APP
1034; ATOM-NEXT:    retl # sched: [79:39.50]
1035;
1036; SLM-LABEL: test_inc16:
1037; SLM:       # %bb.0:
1038; SLM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
1039; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1040; SLM-NEXT:    #APP
1041; SLM-NEXT:    incw %ax # sched: [1:0.50]
1042; SLM-NEXT:    incw (%ecx) # sched: [5:2.00]
1043; SLM-NEXT:    #NO_APP
1044; SLM-NEXT:    retl # sched: [4:1.00]
1045;
1046; SANDY-LABEL: test_inc16:
1047; SANDY:       # %bb.0:
1048; SANDY-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1049; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1050; SANDY-NEXT:    #APP
1051; SANDY-NEXT:    incw %ax # sched: [1:0.33]
1052; SANDY-NEXT:    incw (%ecx) # sched: [7:1.00]
1053; SANDY-NEXT:    #NO_APP
1054; SANDY-NEXT:    retl # sched: [6:1.00]
1055;
1056; HASWELL-LABEL: test_inc16:
1057; HASWELL:       # %bb.0:
1058; HASWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1059; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1060; HASWELL-NEXT:    #APP
1061; HASWELL-NEXT:    incw %ax # sched: [1:0.25]
1062; HASWELL-NEXT:    incw (%ecx) # sched: [7:1.00]
1063; HASWELL-NEXT:    #NO_APP
1064; HASWELL-NEXT:    retl # sched: [7:1.00]
1065;
1066; BROADWELL-LABEL: test_inc16:
1067; BROADWELL:       # %bb.0:
1068; BROADWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1069; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1070; BROADWELL-NEXT:    #APP
1071; BROADWELL-NEXT:    incw %ax # sched: [1:0.25]
1072; BROADWELL-NEXT:    incw (%ecx) # sched: [7:1.00]
1073; BROADWELL-NEXT:    #NO_APP
1074; BROADWELL-NEXT:    retl # sched: [6:0.50]
1075;
1076; SKYLAKE-LABEL: test_inc16:
1077; SKYLAKE:       # %bb.0:
1078; SKYLAKE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1079; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1080; SKYLAKE-NEXT:    #APP
1081; SKYLAKE-NEXT:    incw %ax # sched: [1:0.25]
1082; SKYLAKE-NEXT:    incw (%ecx) # sched: [7:1.00]
1083; SKYLAKE-NEXT:    #NO_APP
1084; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1085;
1086; SKX-LABEL: test_inc16:
1087; SKX:       # %bb.0:
1088; SKX-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1089; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1090; SKX-NEXT:    #APP
1091; SKX-NEXT:    incw %ax # sched: [1:0.25]
1092; SKX-NEXT:    incw (%ecx) # sched: [7:1.00]
1093; SKX-NEXT:    #NO_APP
1094; SKX-NEXT:    retl # sched: [6:0.50]
1095;
1096; BTVER2-LABEL: test_inc16:
1097; BTVER2:       # %bb.0:
1098; BTVER2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
1099; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1100; BTVER2-NEXT:    #APP
1101; BTVER2-NEXT:    incw %ax # sched: [1:0.50]
1102; BTVER2-NEXT:    incw (%ecx) # sched: [5:1.00]
1103; BTVER2-NEXT:    #NO_APP
1104; BTVER2-NEXT:    retl # sched: [4:1.00]
1105;
1106; ZNVER1-LABEL: test_inc16:
1107; ZNVER1:       # %bb.0:
1108; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1109; ZNVER1-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1110; ZNVER1-NEXT:    #APP
1111; ZNVER1-NEXT:    incw %ax # sched: [1:0.25]
1112; ZNVER1-NEXT:    incw (%ecx) # sched: [5:0.50]
1113; ZNVER1-NEXT:    #NO_APP
1114; ZNVER1-NEXT:    retl # sched: [1:0.50]
1115  tail call void asm "incw $0 \0A\09 incw $1", "r,*m"(i16 %a0, i16* %a1) nounwind
1116  ret void
1117}
1118define void @test_inc32(i32 %a0, i32* %a1) optsize {
1119; GENERIC-LABEL: test_inc32:
1120; GENERIC:       # %bb.0:
1121; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
1122; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1123; GENERIC-NEXT:    #APP
1124; GENERIC-NEXT:    incl %eax
1125; GENERIC-NEXT:    incl (%ecx)
1126; GENERIC-NEXT:    #NO_APP
1127; GENERIC-NEXT:    retl
1128;
1129; ATOM-LABEL: test_inc32:
1130; ATOM:       # %bb.0:
1131; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1132; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1133; ATOM-NEXT:    #APP
1134; ATOM-NEXT:    incl %eax # sched: [1:0.50]
1135; ATOM-NEXT:    incl (%ecx) # sched: [1:1.00]
1136; ATOM-NEXT:    #NO_APP
1137; ATOM-NEXT:    retl # sched: [79:39.50]
1138;
1139; SLM-LABEL: test_inc32:
1140; SLM:       # %bb.0:
1141; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
1142; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1143; SLM-NEXT:    #APP
1144; SLM-NEXT:    incl %eax # sched: [1:0.50]
1145; SLM-NEXT:    incl (%ecx) # sched: [5:2.00]
1146; SLM-NEXT:    #NO_APP
1147; SLM-NEXT:    retl # sched: [4:1.00]
1148;
1149; SANDY-LABEL: test_inc32:
1150; SANDY:       # %bb.0:
1151; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1152; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1153; SANDY-NEXT:    #APP
1154; SANDY-NEXT:    incl %eax # sched: [1:0.33]
1155; SANDY-NEXT:    incl (%ecx) # sched: [7:1.00]
1156; SANDY-NEXT:    #NO_APP
1157; SANDY-NEXT:    retl # sched: [6:1.00]
1158;
1159; HASWELL-LABEL: test_inc32:
1160; HASWELL:       # %bb.0:
1161; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1162; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1163; HASWELL-NEXT:    #APP
1164; HASWELL-NEXT:    incl %eax # sched: [1:0.25]
1165; HASWELL-NEXT:    incl (%ecx) # sched: [7:1.00]
1166; HASWELL-NEXT:    #NO_APP
1167; HASWELL-NEXT:    retl # sched: [7:1.00]
1168;
1169; BROADWELL-LABEL: test_inc32:
1170; BROADWELL:       # %bb.0:
1171; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1172; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1173; BROADWELL-NEXT:    #APP
1174; BROADWELL-NEXT:    incl %eax # sched: [1:0.25]
1175; BROADWELL-NEXT:    incl (%ecx) # sched: [7:1.00]
1176; BROADWELL-NEXT:    #NO_APP
1177; BROADWELL-NEXT:    retl # sched: [6:0.50]
1178;
1179; SKYLAKE-LABEL: test_inc32:
1180; SKYLAKE:       # %bb.0:
1181; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1182; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1183; SKYLAKE-NEXT:    #APP
1184; SKYLAKE-NEXT:    incl %eax # sched: [1:0.25]
1185; SKYLAKE-NEXT:    incl (%ecx) # sched: [7:1.00]
1186; SKYLAKE-NEXT:    #NO_APP
1187; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1188;
1189; SKX-LABEL: test_inc32:
1190; SKX:       # %bb.0:
1191; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1192; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1193; SKX-NEXT:    #APP
1194; SKX-NEXT:    incl %eax # sched: [1:0.25]
1195; SKX-NEXT:    incl (%ecx) # sched: [7:1.00]
1196; SKX-NEXT:    #NO_APP
1197; SKX-NEXT:    retl # sched: [6:0.50]
1198;
1199; BTVER2-LABEL: test_inc32:
1200; BTVER2:       # %bb.0:
1201; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
1202; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1203; BTVER2-NEXT:    #APP
1204; BTVER2-NEXT:    incl %eax # sched: [1:0.50]
1205; BTVER2-NEXT:    incl (%ecx) # sched: [5:1.00]
1206; BTVER2-NEXT:    #NO_APP
1207; BTVER2-NEXT:    retl # sched: [4:1.00]
1208;
1209; ZNVER1-LABEL: test_inc32:
1210; ZNVER1:       # %bb.0:
1211; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1212; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1213; ZNVER1-NEXT:    #APP
1214; ZNVER1-NEXT:    incl %eax # sched: [1:0.25]
1215; ZNVER1-NEXT:    incl (%ecx) # sched: [5:0.50]
1216; ZNVER1-NEXT:    #NO_APP
1217; ZNVER1-NEXT:    retl # sched: [1:0.50]
1218  tail call void asm "incl $0 \0A\09 incl $1", "r,*m"(i32 %a0, i32* %a1) nounwind
1219  ret void
1220}
1221
1222define void @test_into() optsize {
1223; GENERIC-LABEL: test_into:
1224; GENERIC:       # %bb.0:
1225; GENERIC-NEXT:    #APP
1226; GENERIC-NEXT:    into
1227; GENERIC-NEXT:    #NO_APP
1228; GENERIC-NEXT:    retl
1229;
1230; ATOM-LABEL: test_into:
1231; ATOM:       # %bb.0:
1232; ATOM-NEXT:    #APP
1233; ATOM-NEXT:    into # sched: [6:3.00]
1234; ATOM-NEXT:    #NO_APP
1235; ATOM-NEXT:    retl # sched: [79:39.50]
1236;
1237; SLM-LABEL: test_into:
1238; SLM:       # %bb.0:
1239; SLM-NEXT:    #APP
1240; SLM-NEXT:    into # sched: [100:1.00]
1241; SLM-NEXT:    #NO_APP
1242; SLM-NEXT:    retl # sched: [4:1.00]
1243;
1244; SANDY-LABEL: test_into:
1245; SANDY:       # %bb.0:
1246; SANDY-NEXT:    #APP
1247; SANDY-NEXT:    into # sched: [100:0.33]
1248; SANDY-NEXT:    #NO_APP
1249; SANDY-NEXT:    retl # sched: [6:1.00]
1250;
1251; HASWELL-LABEL: test_into:
1252; HASWELL:       # %bb.0:
1253; HASWELL-NEXT:    #APP
1254; HASWELL-NEXT:    into # sched: [1:1.00]
1255; HASWELL-NEXT:    #NO_APP
1256; HASWELL-NEXT:    retl # sched: [7:1.00]
1257;
1258; BROADWELL-LABEL: test_into:
1259; BROADWELL:       # %bb.0:
1260; BROADWELL-NEXT:    #APP
1261; BROADWELL-NEXT:    into # sched: [100:0.25]
1262; BROADWELL-NEXT:    #NO_APP
1263; BROADWELL-NEXT:    retl # sched: [6:0.50]
1264;
1265; SKYLAKE-LABEL: test_into:
1266; SKYLAKE:       # %bb.0:
1267; SKYLAKE-NEXT:    #APP
1268; SKYLAKE-NEXT:    into # sched: [100:0.25]
1269; SKYLAKE-NEXT:    #NO_APP
1270; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1271;
1272; SKX-LABEL: test_into:
1273; SKX:       # %bb.0:
1274; SKX-NEXT:    #APP
1275; SKX-NEXT:    into # sched: [100:0.25]
1276; SKX-NEXT:    #NO_APP
1277; SKX-NEXT:    retl # sched: [6:0.50]
1278;
1279; BTVER2-LABEL: test_into:
1280; BTVER2:       # %bb.0:
1281; BTVER2-NEXT:    #APP
1282; BTVER2-NEXT:    into # sched: [100:0.50]
1283; BTVER2-NEXT:    #NO_APP
1284; BTVER2-NEXT:    retl # sched: [4:1.00]
1285;
1286; ZNVER1-LABEL: test_into:
1287; ZNVER1:       # %bb.0:
1288; ZNVER1-NEXT:    #APP
1289; ZNVER1-NEXT:    into # sched: [100:0.25]
1290; ZNVER1-NEXT:    #NO_APP
1291; ZNVER1-NEXT:    retl # sched: [1:0.50]
1292  call void asm sideeffect "into", ""()
1293  ret void
1294}
1295
1296; TODO - test_jmp
1297
1298define void @test_jcxz_jecxz() optsize {
1299; GENERIC-LABEL: test_jcxz_jecxz:
1300; GENERIC:       # %bb.0:
1301; GENERIC-NEXT:    #APP
1302; GENERIC-NEXT:  JXTGT:
1303; GENERIC-NEXT:    jcxz JXTGT
1304; GENERIC-NEXT:    jecxz JXTGT
1305; GENERIC-NEXT:    #NO_APP
1306; GENERIC-NEXT:    retl
1307;
1308; ATOM-LABEL: test_jcxz_jecxz:
1309; ATOM:       # %bb.0:
1310; ATOM-NEXT:    #APP
1311; ATOM-NEXT:  JXTGT:
1312; ATOM-NEXT:    jcxz JXTGT # sched: [4:2.00]
1313; ATOM-NEXT:    jecxz JXTGT # sched: [4:2.00]
1314; ATOM-NEXT:    #NO_APP
1315; ATOM-NEXT:    retl # sched: [79:39.50]
1316;
1317; SLM-LABEL: test_jcxz_jecxz:
1318; SLM:       # %bb.0:
1319; SLM-NEXT:    #APP
1320; SLM-NEXT:  JXTGT:
1321; SLM-NEXT:    jcxz JXTGT # sched: [1:1.00]
1322; SLM-NEXT:    jecxz JXTGT # sched: [1:1.00]
1323; SLM-NEXT:    #NO_APP
1324; SLM-NEXT:    retl # sched: [4:1.00]
1325;
1326; SANDY-LABEL: test_jcxz_jecxz:
1327; SANDY:       # %bb.0:
1328; SANDY-NEXT:    #APP
1329; SANDY-NEXT:  JXTGT:
1330; SANDY-NEXT:    jcxz JXTGT # sched: [2:1.00]
1331; SANDY-NEXT:    jecxz JXTGT # sched: [2:1.00]
1332; SANDY-NEXT:    #NO_APP
1333; SANDY-NEXT:    retl # sched: [6:1.00]
1334;
1335; HASWELL-LABEL: test_jcxz_jecxz:
1336; HASWELL:       # %bb.0:
1337; HASWELL-NEXT:    #APP
1338; HASWELL-NEXT:  JXTGT:
1339; HASWELL-NEXT:    jcxz JXTGT # sched: [2:0.50]
1340; HASWELL-NEXT:    jecxz JXTGT # sched: [2:0.50]
1341; HASWELL-NEXT:    #NO_APP
1342; HASWELL-NEXT:    retl # sched: [7:1.00]
1343;
1344; BROADWELL-LABEL: test_jcxz_jecxz:
1345; BROADWELL:       # %bb.0:
1346; BROADWELL-NEXT:    #APP
1347; BROADWELL-NEXT:  JXTGT:
1348; BROADWELL-NEXT:    jcxz JXTGT # sched: [2:0.50]
1349; BROADWELL-NEXT:    jecxz JXTGT # sched: [2:0.50]
1350; BROADWELL-NEXT:    #NO_APP
1351; BROADWELL-NEXT:    retl # sched: [6:0.50]
1352;
1353; SKYLAKE-LABEL: test_jcxz_jecxz:
1354; SKYLAKE:       # %bb.0:
1355; SKYLAKE-NEXT:    #APP
1356; SKYLAKE-NEXT:  JXTGT:
1357; SKYLAKE-NEXT:    jcxz JXTGT # sched: [2:0.50]
1358; SKYLAKE-NEXT:    jecxz JXTGT # sched: [2:0.50]
1359; SKYLAKE-NEXT:    #NO_APP
1360; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1361;
1362; SKX-LABEL: test_jcxz_jecxz:
1363; SKX:       # %bb.0:
1364; SKX-NEXT:    #APP
1365; SKX-NEXT:  JXTGT:
1366; SKX-NEXT:    jcxz JXTGT # sched: [2:0.50]
1367; SKX-NEXT:    jecxz JXTGT # sched: [2:0.50]
1368; SKX-NEXT:    #NO_APP
1369; SKX-NEXT:    retl # sched: [6:0.50]
1370;
1371; BTVER2-LABEL: test_jcxz_jecxz:
1372; BTVER2:       # %bb.0:
1373; BTVER2-NEXT:    #APP
1374; BTVER2-NEXT:  JXTGT:
1375; BTVER2-NEXT:    jcxz JXTGT # sched: [1:0.50]
1376; BTVER2-NEXT:    jecxz JXTGT # sched: [1:0.50]
1377; BTVER2-NEXT:    #NO_APP
1378; BTVER2-NEXT:    retl # sched: [4:1.00]
1379;
1380; ZNVER1-LABEL: test_jcxz_jecxz:
1381; ZNVER1:       # %bb.0:
1382; ZNVER1-NEXT:    #APP
1383; ZNVER1-NEXT:  JXTGT:
1384; ZNVER1-NEXT:    jcxz JXTGT # sched: [1:0.50]
1385; ZNVER1-NEXT:    jecxz JXTGT # sched: [1:0.50]
1386; ZNVER1-NEXT:    #NO_APP
1387; ZNVER1-NEXT:    retl # sched: [1:0.50]
1388  call void asm sideeffect "JXTGT: \0A\09 jcxz JXTGT \0A\09 jecxz JXTGT", ""()
1389  ret void
1390}
1391
1392; TODO - test_lds
1393
1394define void @test_leave() optsize {
1395; GENERIC-LABEL: test_leave:
1396; GENERIC:       # %bb.0:
1397; GENERIC-NEXT:    #APP
1398; GENERIC-NEXT:    leave
1399; GENERIC-NEXT:    #NO_APP
1400; GENERIC-NEXT:    retl
1401;
1402; ATOM-LABEL: test_leave:
1403; ATOM:       # %bb.0:
1404; ATOM-NEXT:    #APP
1405; ATOM-NEXT:    leave # sched: [2:1.00]
1406; ATOM-NEXT:    #NO_APP
1407; ATOM-NEXT:    retl # sched: [79:39.50]
1408;
1409; SLM-LABEL: test_leave:
1410; SLM:       # %bb.0:
1411; SLM-NEXT:    #APP
1412; SLM-NEXT:    leave # sched: [1:0.50]
1413; SLM-NEXT:    #NO_APP
1414; SLM-NEXT:    retl # sched: [4:1.00]
1415;
1416; SANDY-LABEL: test_leave:
1417; SANDY:       # %bb.0:
1418; SANDY-NEXT:    #APP
1419; SANDY-NEXT:    leave # sched: [7:0.67]
1420; SANDY-NEXT:    #NO_APP
1421; SANDY-NEXT:    retl # sched: [6:1.00]
1422;
1423; HASWELL-LABEL: test_leave:
1424; HASWELL:       # %bb.0:
1425; HASWELL-NEXT:    #APP
1426; HASWELL-NEXT:    leave # sched: [7:0.50]
1427; HASWELL-NEXT:    #NO_APP
1428; HASWELL-NEXT:    retl # sched: [7:1.00]
1429;
1430; BROADWELL-LABEL: test_leave:
1431; BROADWELL:       # %bb.0:
1432; BROADWELL-NEXT:    #APP
1433; BROADWELL-NEXT:    leave # sched: [7:0.50]
1434; BROADWELL-NEXT:    #NO_APP
1435; BROADWELL-NEXT:    retl # sched: [6:0.50]
1436;
1437; SKYLAKE-LABEL: test_leave:
1438; SKYLAKE:       # %bb.0:
1439; SKYLAKE-NEXT:    #APP
1440; SKYLAKE-NEXT:    leave # sched: [7:0.50]
1441; SKYLAKE-NEXT:    #NO_APP
1442; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1443;
1444; SKX-LABEL: test_leave:
1445; SKX:       # %bb.0:
1446; SKX-NEXT:    #APP
1447; SKX-NEXT:    leave # sched: [7:0.50]
1448; SKX-NEXT:    #NO_APP
1449; SKX-NEXT:    retl # sched: [6:0.50]
1450;
1451; BTVER2-LABEL: test_leave:
1452; BTVER2:       # %bb.0:
1453; BTVER2-NEXT:    #APP
1454; BTVER2-NEXT:    leave # sched: [1:0.50]
1455; BTVER2-NEXT:    #NO_APP
1456; BTVER2-NEXT:    retl # sched: [4:1.00]
1457;
1458; ZNVER1-LABEL: test_leave:
1459; ZNVER1:       # %bb.0:
1460; ZNVER1-NEXT:    #APP
1461; ZNVER1-NEXT:    leave # sched: [8:0.50]
1462; ZNVER1-NEXT:    #NO_APP
1463; ZNVER1-NEXT:    retl # sched: [1:0.50]
1464  tail call void asm "leave", ""() nounwind
1465  ret void
1466}
1467
1468; TODO - test_les
1469
1470define void @test_pop_push() optsize {
1471; GENERIC-LABEL: test_pop_push:
1472; GENERIC:       # %bb.0:
1473; GENERIC-NEXT:    #APP
1474; GENERIC-NEXT:    popl %ds
1475; GENERIC-NEXT:    popl %es
1476; GENERIC-NEXT:    popl %ss
1477; GENERIC-NEXT:    popl %fs
1478; GENERIC-NEXT:    popl %gs
1479; GENERIC-NEXT:    pushl %cs
1480; GENERIC-NEXT:    pushl %ds
1481; GENERIC-NEXT:    pushl %es
1482; GENERIC-NEXT:    pushl %ss
1483; GENERIC-NEXT:    pushl %fs
1484; GENERIC-NEXT:    pushl %gs
1485; GENERIC-NEXT:    #NO_APP
1486; GENERIC-NEXT:    retl
1487;
1488; ATOM-LABEL: test_pop_push:
1489; ATOM:       # %bb.0:
1490; ATOM-NEXT:    #APP
1491; ATOM-NEXT:    popl %ds # sched: [29:14.50]
1492; ATOM-NEXT:    popl %es # sched: [29:14.50]
1493; ATOM-NEXT:    popl %ss # sched: [48:24.00]
1494; ATOM-NEXT:    popl %fs # sched: [29:14.50]
1495; ATOM-NEXT:    popl %gs # sched: [29:14.50]
1496; ATOM-NEXT:    pushl %cs # sched: [2:1.00]
1497; ATOM-NEXT:    pushl %ds # sched: [2:1.00]
1498; ATOM-NEXT:    pushl %es # sched: [2:1.00]
1499; ATOM-NEXT:    pushl %ss # sched: [2:1.00]
1500; ATOM-NEXT:    pushl %fs # sched: [2:1.00]
1501; ATOM-NEXT:    pushl %gs # sched: [2:1.00]
1502; ATOM-NEXT:    #NO_APP
1503; ATOM-NEXT:    retl # sched: [79:39.50]
1504;
1505; SLM-LABEL: test_pop_push:
1506; SLM:       # %bb.0:
1507; SLM-NEXT:    #APP
1508; SLM-NEXT:    popl %ds # sched: [100:1.00]
1509; SLM-NEXT:    popl %es # sched: [100:1.00]
1510; SLM-NEXT:    popl %ss # sched: [100:1.00]
1511; SLM-NEXT:    popl %fs # sched: [100:1.00]
1512; SLM-NEXT:    popl %gs # sched: [100:1.00]
1513; SLM-NEXT:    pushl %cs # sched: [100:1.00]
1514; SLM-NEXT:    pushl %ds # sched: [100:1.00]
1515; SLM-NEXT:    pushl %es # sched: [100:1.00]
1516; SLM-NEXT:    pushl %ss # sched: [100:1.00]
1517; SLM-NEXT:    pushl %fs # sched: [100:1.00]
1518; SLM-NEXT:    pushl %gs # sched: [100:1.00]
1519; SLM-NEXT:    #NO_APP
1520; SLM-NEXT:    retl # sched: [4:1.00]
1521;
1522; SANDY-LABEL: test_pop_push:
1523; SANDY:       # %bb.0:
1524; SANDY-NEXT:    #APP
1525; SANDY-NEXT:    popl %ds # sched: [100:0.33]
1526; SANDY-NEXT:    popl %es # sched: [100:0.33]
1527; SANDY-NEXT:    popl %ss # sched: [100:0.33]
1528; SANDY-NEXT:    popl %fs # sched: [100:0.33]
1529; SANDY-NEXT:    popl %gs # sched: [100:0.33]
1530; SANDY-NEXT:    pushl %cs # sched: [100:0.33]
1531; SANDY-NEXT:    pushl %ds # sched: [100:0.33]
1532; SANDY-NEXT:    pushl %es # sched: [100:0.33]
1533; SANDY-NEXT:    pushl %ss # sched: [100:0.33]
1534; SANDY-NEXT:    pushl %fs # sched: [100:0.33]
1535; SANDY-NEXT:    pushl %gs # sched: [100:0.33]
1536; SANDY-NEXT:    #NO_APP
1537; SANDY-NEXT:    retl # sched: [6:1.00]
1538;
1539; HASWELL-LABEL: test_pop_push:
1540; HASWELL:       # %bb.0:
1541; HASWELL-NEXT:    #APP
1542; HASWELL-NEXT:    popl %ds # sched: [100:0.25]
1543; HASWELL-NEXT:    popl %es # sched: [100:0.25]
1544; HASWELL-NEXT:    popl %ss # sched: [100:0.25]
1545; HASWELL-NEXT:    popl %fs # sched: [100:0.25]
1546; HASWELL-NEXT:    popl %gs # sched: [100:0.25]
1547; HASWELL-NEXT:    pushl %cs # sched: [100:0.25]
1548; HASWELL-NEXT:    pushl %ds # sched: [100:0.25]
1549; HASWELL-NEXT:    pushl %es # sched: [100:0.25]
1550; HASWELL-NEXT:    pushl %ss # sched: [100:0.25]
1551; HASWELL-NEXT:    pushl %fs # sched: [100:0.25]
1552; HASWELL-NEXT:    pushl %gs # sched: [100:0.25]
1553; HASWELL-NEXT:    #NO_APP
1554; HASWELL-NEXT:    retl # sched: [7:1.00]
1555;
1556; BROADWELL-LABEL: test_pop_push:
1557; BROADWELL:       # %bb.0:
1558; BROADWELL-NEXT:    #APP
1559; BROADWELL-NEXT:    popl %ds # sched: [100:0.25]
1560; BROADWELL-NEXT:    popl %es # sched: [100:0.25]
1561; BROADWELL-NEXT:    popl %ss # sched: [100:0.25]
1562; BROADWELL-NEXT:    popl %fs # sched: [100:0.25]
1563; BROADWELL-NEXT:    popl %gs # sched: [100:0.25]
1564; BROADWELL-NEXT:    pushl %cs # sched: [100:0.25]
1565; BROADWELL-NEXT:    pushl %ds # sched: [100:0.25]
1566; BROADWELL-NEXT:    pushl %es # sched: [100:0.25]
1567; BROADWELL-NEXT:    pushl %ss # sched: [100:0.25]
1568; BROADWELL-NEXT:    pushl %fs # sched: [100:0.25]
1569; BROADWELL-NEXT:    pushl %gs # sched: [100:0.25]
1570; BROADWELL-NEXT:    #NO_APP
1571; BROADWELL-NEXT:    retl # sched: [6:0.50]
1572;
1573; SKYLAKE-LABEL: test_pop_push:
1574; SKYLAKE:       # %bb.0:
1575; SKYLAKE-NEXT:    #APP
1576; SKYLAKE-NEXT:    popl %ds # sched: [100:0.25]
1577; SKYLAKE-NEXT:    popl %es # sched: [100:0.25]
1578; SKYLAKE-NEXT:    popl %ss # sched: [100:0.25]
1579; SKYLAKE-NEXT:    popl %fs # sched: [100:0.25]
1580; SKYLAKE-NEXT:    popl %gs # sched: [100:0.25]
1581; SKYLAKE-NEXT:    pushl %cs # sched: [100:0.25]
1582; SKYLAKE-NEXT:    pushl %ds # sched: [100:0.25]
1583; SKYLAKE-NEXT:    pushl %es # sched: [100:0.25]
1584; SKYLAKE-NEXT:    pushl %ss # sched: [100:0.25]
1585; SKYLAKE-NEXT:    pushl %fs # sched: [100:0.25]
1586; SKYLAKE-NEXT:    pushl %gs # sched: [100:0.25]
1587; SKYLAKE-NEXT:    #NO_APP
1588; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1589;
1590; SKX-LABEL: test_pop_push:
1591; SKX:       # %bb.0:
1592; SKX-NEXT:    #APP
1593; SKX-NEXT:    popl %ds # sched: [100:0.25]
1594; SKX-NEXT:    popl %es # sched: [100:0.25]
1595; SKX-NEXT:    popl %ss # sched: [100:0.25]
1596; SKX-NEXT:    popl %fs # sched: [100:0.25]
1597; SKX-NEXT:    popl %gs # sched: [100:0.25]
1598; SKX-NEXT:    pushl %cs # sched: [100:0.25]
1599; SKX-NEXT:    pushl %ds # sched: [100:0.25]
1600; SKX-NEXT:    pushl %es # sched: [100:0.25]
1601; SKX-NEXT:    pushl %ss # sched: [100:0.25]
1602; SKX-NEXT:    pushl %fs # sched: [100:0.25]
1603; SKX-NEXT:    pushl %gs # sched: [100:0.25]
1604; SKX-NEXT:    #NO_APP
1605; SKX-NEXT:    retl # sched: [6:0.50]
1606;
1607; BTVER2-LABEL: test_pop_push:
1608; BTVER2:       # %bb.0:
1609; BTVER2-NEXT:    #APP
1610; BTVER2-NEXT:    popl %ds # sched: [100:0.50]
1611; BTVER2-NEXT:    popl %es # sched: [100:0.50]
1612; BTVER2-NEXT:    popl %ss # sched: [100:0.50]
1613; BTVER2-NEXT:    popl %fs # sched: [100:0.50]
1614; BTVER2-NEXT:    popl %gs # sched: [100:0.50]
1615; BTVER2-NEXT:    pushl %cs # sched: [100:0.50]
1616; BTVER2-NEXT:    pushl %ds # sched: [100:0.50]
1617; BTVER2-NEXT:    pushl %es # sched: [100:0.50]
1618; BTVER2-NEXT:    pushl %ss # sched: [100:0.50]
1619; BTVER2-NEXT:    pushl %fs # sched: [100:0.50]
1620; BTVER2-NEXT:    pushl %gs # sched: [100:0.50]
1621; BTVER2-NEXT:    #NO_APP
1622; BTVER2-NEXT:    retl # sched: [4:1.00]
1623;
1624; ZNVER1-LABEL: test_pop_push:
1625; ZNVER1:       # %bb.0:
1626; ZNVER1-NEXT:    #APP
1627; ZNVER1-NEXT:    popl %ds # sched: [100:0.25]
1628; ZNVER1-NEXT:    popl %es # sched: [100:0.25]
1629; ZNVER1-NEXT:    popl %ss # sched: [100:0.25]
1630; ZNVER1-NEXT:    popl %fs # sched: [100:0.25]
1631; ZNVER1-NEXT:    popl %gs # sched: [100:0.25]
1632; ZNVER1-NEXT:    pushl %cs # sched: [100:0.25]
1633; ZNVER1-NEXT:    pushl %ds # sched: [100:0.25]
1634; ZNVER1-NEXT:    pushl %es # sched: [100:0.25]
1635; ZNVER1-NEXT:    pushl %ss # sched: [100:0.25]
1636; ZNVER1-NEXT:    pushl %fs # sched: [100:0.25]
1637; ZNVER1-NEXT:    pushl %gs # sched: [100:0.25]
1638; ZNVER1-NEXT:    #NO_APP
1639; ZNVER1-NEXT:    retl # sched: [1:0.50]
1640  call void asm sideeffect "pop %DS \0A\09 pop %ES \0A\09 pop %SS \0A\09 pop %FS \0A\09 pop %GS \0A\09 push %CS \0A\09 push %DS \0A\09 push %ES \0A\09 push %SS \0A\09 push %FS \0A\09 push %GS", ""()
1641  ret void
1642}
1643define i16 @test_pop_push_16(i16 %a0, i16 *%a1) optsize {
1644; GENERIC-LABEL: test_pop_push_16:
1645; GENERIC:       # %bb.0:
1646; GENERIC-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1647; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1648; GENERIC-NEXT:    #APP
1649; GENERIC-NEXT:    popw %ax
1650; GENERIC-NEXT:    popw (%ecx)
1651; GENERIC-NEXT:    pushw %ax
1652; GENERIC-NEXT:    pushw (%ecx)
1653; GENERIC-NEXT:    pushw $4095 # imm = 0xFFF
1654; GENERIC-NEXT:    pushw $7
1655; GENERIC-NEXT:    #NO_APP
1656; GENERIC-NEXT:    retl
1657;
1658; ATOM-LABEL: test_pop_push_16:
1659; ATOM:       # %bb.0:
1660; ATOM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1661; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1662; ATOM-NEXT:    #APP
1663; ATOM-NEXT:    popw %ax # sched: [2:1.00]
1664; ATOM-NEXT:    popw (%ecx) # sched: [3:1.50]
1665; ATOM-NEXT:    pushw %ax # sched: [1:1.00]
1666; ATOM-NEXT:    pushw (%ecx) # sched: [2:1.00]
1667; ATOM-NEXT:    pushw $4095 # imm = 0xFFF
1668; ATOM-NEXT:    # sched: [1:1.00]
1669; ATOM-NEXT:    pushw $7 # sched: [1:1.00]
1670; ATOM-NEXT:    #NO_APP
1671; ATOM-NEXT:    retl # sched: [79:39.50]
1672;
1673; SLM-LABEL: test_pop_push_16:
1674; SLM:       # %bb.0:
1675; SLM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
1676; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1677; SLM-NEXT:    #APP
1678; SLM-NEXT:    popw %ax # sched: [3:1.00]
1679; SLM-NEXT:    popw (%ecx) # sched: [1:1.00]
1680; SLM-NEXT:    pushw %ax # sched: [1:1.00]
1681; SLM-NEXT:    pushw (%ecx) # sched: [1:1.00]
1682; SLM-NEXT:    pushw $4095 # imm = 0xFFF
1683; SLM-NEXT:    # sched: [1:1.00]
1684; SLM-NEXT:    pushw $7 # sched: [1:1.00]
1685; SLM-NEXT:    #NO_APP
1686; SLM-NEXT:    retl # sched: [4:1.00]
1687;
1688; SANDY-LABEL: test_pop_push_16:
1689; SANDY:       # %bb.0:
1690; SANDY-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1691; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1692; SANDY-NEXT:    #APP
1693; SANDY-NEXT:    popw %ax # sched: [6:0.50]
1694; SANDY-NEXT:    popw (%ecx) # sched: [6:0.50]
1695; SANDY-NEXT:    pushw %ax # sched: [5:1.00]
1696; SANDY-NEXT:    pushw (%ecx) # sched: [5:1.00]
1697; SANDY-NEXT:    pushw $4095 # imm = 0xFFF
1698; SANDY-NEXT:    # sched: [1:1.00]
1699; SANDY-NEXT:    pushw $7 # sched: [1:1.00]
1700; SANDY-NEXT:    #NO_APP
1701; SANDY-NEXT:    retl # sched: [6:1.00]
1702;
1703; HASWELL-LABEL: test_pop_push_16:
1704; HASWELL:       # %bb.0:
1705; HASWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1706; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1707; HASWELL-NEXT:    #APP
1708; HASWELL-NEXT:    popw %ax # sched: [6:0.50]
1709; HASWELL-NEXT:    popw (%ecx) # sched: [7:1.00]
1710; HASWELL-NEXT:    pushw %ax # sched: [2:1.00]
1711; HASWELL-NEXT:    pushw (%ecx) # sched: [7:1.00]
1712; HASWELL-NEXT:    pushw $4095 # imm = 0xFFF
1713; HASWELL-NEXT:    # sched: [1:1.00]
1714; HASWELL-NEXT:    pushw $7 # sched: [1:1.00]
1715; HASWELL-NEXT:    #NO_APP
1716; HASWELL-NEXT:    retl # sched: [7:1.00]
1717;
1718; BROADWELL-LABEL: test_pop_push_16:
1719; BROADWELL:       # %bb.0:
1720; BROADWELL-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1721; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1722; BROADWELL-NEXT:    #APP
1723; BROADWELL-NEXT:    popw %ax # sched: [6:0.50]
1724; BROADWELL-NEXT:    popw (%ecx) # sched: [6:1.00]
1725; BROADWELL-NEXT:    pushw %ax # sched: [2:1.00]
1726; BROADWELL-NEXT:    pushw (%ecx) # sched: [6:1.00]
1727; BROADWELL-NEXT:    pushw $4095 # imm = 0xFFF
1728; BROADWELL-NEXT:    # sched: [1:1.00]
1729; BROADWELL-NEXT:    pushw $7 # sched: [1:1.00]
1730; BROADWELL-NEXT:    #NO_APP
1731; BROADWELL-NEXT:    retl # sched: [6:0.50]
1732;
1733; SKYLAKE-LABEL: test_pop_push_16:
1734; SKYLAKE:       # %bb.0:
1735; SKYLAKE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1736; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1737; SKYLAKE-NEXT:    #APP
1738; SKYLAKE-NEXT:    popw %ax # sched: [6:0.50]
1739; SKYLAKE-NEXT:    popw (%ecx) # sched: [6:1.00]
1740; SKYLAKE-NEXT:    pushw %ax # sched: [2:1.00]
1741; SKYLAKE-NEXT:    pushw (%ecx) # sched: [6:1.00]
1742; SKYLAKE-NEXT:    pushw $4095 # imm = 0xFFF
1743; SKYLAKE-NEXT:    # sched: [1:1.00]
1744; SKYLAKE-NEXT:    pushw $7 # sched: [1:1.00]
1745; SKYLAKE-NEXT:    #NO_APP
1746; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1747;
1748; SKX-LABEL: test_pop_push_16:
1749; SKX:       # %bb.0:
1750; SKX-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1751; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1752; SKX-NEXT:    #APP
1753; SKX-NEXT:    popw %ax # sched: [6:0.50]
1754; SKX-NEXT:    popw (%ecx) # sched: [6:1.00]
1755; SKX-NEXT:    pushw %ax # sched: [2:1.00]
1756; SKX-NEXT:    pushw (%ecx) # sched: [6:1.00]
1757; SKX-NEXT:    pushw $4095 # imm = 0xFFF
1758; SKX-NEXT:    # sched: [1:1.00]
1759; SKX-NEXT:    pushw $7 # sched: [1:1.00]
1760; SKX-NEXT:    #NO_APP
1761; SKX-NEXT:    retl # sched: [6:0.50]
1762;
1763; BTVER2-LABEL: test_pop_push_16:
1764; BTVER2:       # %bb.0:
1765; BTVER2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [4:1.00]
1766; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1767; BTVER2-NEXT:    #APP
1768; BTVER2-NEXT:    popw %ax # sched: [5:1.00]
1769; BTVER2-NEXT:    popw (%ecx) # sched: [1:1.00]
1770; BTVER2-NEXT:    pushw %ax # sched: [1:1.00]
1771; BTVER2-NEXT:    pushw (%ecx) # sched: [1:1.00]
1772; BTVER2-NEXT:    pushw $4095 # imm = 0xFFF
1773; BTVER2-NEXT:    # sched: [1:1.00]
1774; BTVER2-NEXT:    pushw $7 # sched: [1:1.00]
1775; BTVER2-NEXT:    #NO_APP
1776; BTVER2-NEXT:    retl # sched: [4:1.00]
1777;
1778; ZNVER1-LABEL: test_pop_push_16:
1779; ZNVER1:       # %bb.0:
1780; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1781; ZNVER1-NEXT:    movzwl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1782; ZNVER1-NEXT:    #APP
1783; ZNVER1-NEXT:    popw %ax # sched: [8:0.50]
1784; ZNVER1-NEXT:    popw (%ecx) # sched: [5:0.50]
1785; ZNVER1-NEXT:    pushw %ax # sched: [1:0.50]
1786; ZNVER1-NEXT:    pushw (%ecx) # sched: [4:0.50]
1787; ZNVER1-NEXT:    pushw $4095 # imm = 0xFFF
1788; ZNVER1-NEXT:    # sched: [1:0.50]
1789; ZNVER1-NEXT:    pushw $7 # sched: [1:0.50]
1790; ZNVER1-NEXT:    #NO_APP
1791; ZNVER1-NEXT:    retl # sched: [1:0.50]
1792  %1 = call i16 asm sideeffect "popw $0 \0A\09 popw $2 \0A\09 pushw $1 \0A\09 pushw $2 \0A\09 pushw $3 \0A\09 pushw $4", "=r,r,*m,i,i"(i16 %a0, i16 *%a1, i16 4095, i8 7)
1793  ret i16 %1
1794}
1795define i32 @test_pop_push_32(i32 %a0, i32 *%a1) optsize {
1796; GENERIC-LABEL: test_pop_push_32:
1797; GENERIC:       # %bb.0:
1798; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
1799; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1800; GENERIC-NEXT:    #APP
1801; GENERIC-NEXT:    popl %eax
1802; GENERIC-NEXT:    popl (%ecx)
1803; GENERIC-NEXT:    pushl %eax
1804; GENERIC-NEXT:    pushl (%ecx)
1805; GENERIC-NEXT:    pushl $4095 # imm = 0xFFF
1806; GENERIC-NEXT:    pushl $7
1807; GENERIC-NEXT:    #NO_APP
1808; GENERIC-NEXT:    retl
1809;
1810; ATOM-LABEL: test_pop_push_32:
1811; ATOM:       # %bb.0:
1812; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1813; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1814; ATOM-NEXT:    #APP
1815; ATOM-NEXT:    popl %eax # sched: [1:1.00]
1816; ATOM-NEXT:    popl (%ecx) # sched: [3:1.50]
1817; ATOM-NEXT:    pushl %eax # sched: [1:1.00]
1818; ATOM-NEXT:    pushl (%ecx) # sched: [2:1.00]
1819; ATOM-NEXT:    pushl $4095 # imm = 0xFFF
1820; ATOM-NEXT:    # sched: [1:1.00]
1821; ATOM-NEXT:    pushl $7 # sched: [1:1.00]
1822; ATOM-NEXT:    #NO_APP
1823; ATOM-NEXT:    retl # sched: [79:39.50]
1824;
1825; SLM-LABEL: test_pop_push_32:
1826; SLM:       # %bb.0:
1827; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
1828; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1829; SLM-NEXT:    #APP
1830; SLM-NEXT:    popl %eax # sched: [3:1.00]
1831; SLM-NEXT:    popl (%ecx) # sched: [1:1.00]
1832; SLM-NEXT:    pushl %eax # sched: [1:1.00]
1833; SLM-NEXT:    pushl (%ecx) # sched: [1:1.00]
1834; SLM-NEXT:    pushl $4095 # imm = 0xFFF
1835; SLM-NEXT:    # sched: [1:1.00]
1836; SLM-NEXT:    pushl $7 # sched: [1:1.00]
1837; SLM-NEXT:    #NO_APP
1838; SLM-NEXT:    retl # sched: [4:1.00]
1839;
1840; SANDY-LABEL: test_pop_push_32:
1841; SANDY:       # %bb.0:
1842; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1843; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1844; SANDY-NEXT:    #APP
1845; SANDY-NEXT:    popl %eax # sched: [6:0.50]
1846; SANDY-NEXT:    popl (%ecx) # sched: [6:0.50]
1847; SANDY-NEXT:    pushl %eax # sched: [5:1.00]
1848; SANDY-NEXT:    pushl (%ecx) # sched: [5:1.00]
1849; SANDY-NEXT:    pushl $4095 # imm = 0xFFF
1850; SANDY-NEXT:    # sched: [1:1.00]
1851; SANDY-NEXT:    pushl $7 # sched: [1:1.00]
1852; SANDY-NEXT:    #NO_APP
1853; SANDY-NEXT:    retl # sched: [6:1.00]
1854;
1855; HASWELL-LABEL: test_pop_push_32:
1856; HASWELL:       # %bb.0:
1857; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1858; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1859; HASWELL-NEXT:    #APP
1860; HASWELL-NEXT:    popl %eax # sched: [6:0.50]
1861; HASWELL-NEXT:    popl (%ecx) # sched: [7:1.00]
1862; HASWELL-NEXT:    pushl %eax # sched: [2:1.00]
1863; HASWELL-NEXT:    pushl (%ecx) # sched: [7:1.00]
1864; HASWELL-NEXT:    pushl $4095 # imm = 0xFFF
1865; HASWELL-NEXT:    # sched: [1:1.00]
1866; HASWELL-NEXT:    pushl $7 # sched: [1:1.00]
1867; HASWELL-NEXT:    #NO_APP
1868; HASWELL-NEXT:    retl # sched: [7:1.00]
1869;
1870; BROADWELL-LABEL: test_pop_push_32:
1871; BROADWELL:       # %bb.0:
1872; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1873; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1874; BROADWELL-NEXT:    #APP
1875; BROADWELL-NEXT:    popl %eax # sched: [6:0.50]
1876; BROADWELL-NEXT:    popl (%ecx) # sched: [6:1.00]
1877; BROADWELL-NEXT:    pushl %eax # sched: [2:1.00]
1878; BROADWELL-NEXT:    pushl (%ecx) # sched: [6:1.00]
1879; BROADWELL-NEXT:    pushl $4095 # imm = 0xFFF
1880; BROADWELL-NEXT:    # sched: [1:1.00]
1881; BROADWELL-NEXT:    pushl $7 # sched: [1:1.00]
1882; BROADWELL-NEXT:    #NO_APP
1883; BROADWELL-NEXT:    retl # sched: [6:0.50]
1884;
1885; SKYLAKE-LABEL: test_pop_push_32:
1886; SKYLAKE:       # %bb.0:
1887; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1888; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1889; SKYLAKE-NEXT:    #APP
1890; SKYLAKE-NEXT:    popl %eax # sched: [6:0.50]
1891; SKYLAKE-NEXT:    popl (%ecx) # sched: [6:1.00]
1892; SKYLAKE-NEXT:    pushl %eax # sched: [2:1.00]
1893; SKYLAKE-NEXT:    pushl (%ecx) # sched: [6:1.00]
1894; SKYLAKE-NEXT:    pushl $4095 # imm = 0xFFF
1895; SKYLAKE-NEXT:    # sched: [1:1.00]
1896; SKYLAKE-NEXT:    pushl $7 # sched: [1:1.00]
1897; SKYLAKE-NEXT:    #NO_APP
1898; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1899;
1900; SKX-LABEL: test_pop_push_32:
1901; SKX:       # %bb.0:
1902; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1903; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1904; SKX-NEXT:    #APP
1905; SKX-NEXT:    popl %eax # sched: [6:0.50]
1906; SKX-NEXT:    popl (%ecx) # sched: [6:1.00]
1907; SKX-NEXT:    pushl %eax # sched: [2:1.00]
1908; SKX-NEXT:    pushl (%ecx) # sched: [6:1.00]
1909; SKX-NEXT:    pushl $4095 # imm = 0xFFF
1910; SKX-NEXT:    # sched: [1:1.00]
1911; SKX-NEXT:    pushl $7 # sched: [1:1.00]
1912; SKX-NEXT:    #NO_APP
1913; SKX-NEXT:    retl # sched: [6:0.50]
1914;
1915; BTVER2-LABEL: test_pop_push_32:
1916; BTVER2:       # %bb.0:
1917; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
1918; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1919; BTVER2-NEXT:    #APP
1920; BTVER2-NEXT:    popl %eax # sched: [5:1.00]
1921; BTVER2-NEXT:    popl (%ecx) # sched: [1:1.00]
1922; BTVER2-NEXT:    pushl %eax # sched: [1:1.00]
1923; BTVER2-NEXT:    pushl (%ecx) # sched: [1:1.00]
1924; BTVER2-NEXT:    pushl $4095 # imm = 0xFFF
1925; BTVER2-NEXT:    # sched: [1:1.00]
1926; BTVER2-NEXT:    pushl $7 # sched: [1:1.00]
1927; BTVER2-NEXT:    #NO_APP
1928; BTVER2-NEXT:    retl # sched: [4:1.00]
1929;
1930; ZNVER1-LABEL: test_pop_push_32:
1931; ZNVER1:       # %bb.0:
1932; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1933; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1934; ZNVER1-NEXT:    #APP
1935; ZNVER1-NEXT:    popl %eax # sched: [8:0.50]
1936; ZNVER1-NEXT:    popl (%ecx) # sched: [1:0.50]
1937; ZNVER1-NEXT:    pushl %eax # sched: [1:0.50]
1938; ZNVER1-NEXT:    pushl (%ecx) # sched: [4:0.50]
1939; ZNVER1-NEXT:    pushl $4095 # imm = 0xFFF
1940; ZNVER1-NEXT:    # sched: [1:0.50]
1941; ZNVER1-NEXT:    pushl $7 # sched: [1:0.50]
1942; ZNVER1-NEXT:    #NO_APP
1943; ZNVER1-NEXT:    retl # sched: [1:0.50]
1944  %1 = call i32 asm sideeffect "popl $0 \0A\09 popl $2 \0A\09 pushl $1 \0A\09 pushl $2 \0A\09 pushl $3 \0A\09 pushl $4", "=r,r,*m,i,i"(i32 %a0, i32 *%a1, i32 4095, i8 7)
1945  ret i32 %1
1946}
1947
1948define void @test_popa_popf_pusha_pushf() optsize {
1949; GENERIC-LABEL: test_popa_popf_pusha_pushf:
1950; GENERIC:       # %bb.0:
1951; GENERIC-NEXT:    #APP
1952; GENERIC-NEXT:    popal
1953; GENERIC-NEXT:    popfl
1954; GENERIC-NEXT:    pushal
1955; GENERIC-NEXT:    pushfl
1956; GENERIC-NEXT:    #NO_APP
1957; GENERIC-NEXT:    retl
1958;
1959; ATOM-LABEL: test_popa_popf_pusha_pushf:
1960; ATOM:       # %bb.0:
1961; ATOM-NEXT:    #APP
1962; ATOM-NEXT:    popal # sched: [9:4.50]
1963; ATOM-NEXT:    popfl # sched: [26:13.00]
1964; ATOM-NEXT:    pushal # sched: [8:4.00]
1965; ATOM-NEXT:    pushfl # sched: [9:4.50]
1966; ATOM-NEXT:    #NO_APP
1967; ATOM-NEXT:    retl # sched: [79:39.50]
1968;
1969; SLM-LABEL: test_popa_popf_pusha_pushf:
1970; SLM:       # %bb.0:
1971; SLM-NEXT:    #APP
1972; SLM-NEXT:    popal # sched: [3:1.00]
1973; SLM-NEXT:    popfl # sched: [3:1.00]
1974; SLM-NEXT:    pushal # sched: [1:1.00]
1975; SLM-NEXT:    pushfl # sched: [1:1.00]
1976; SLM-NEXT:    #NO_APP
1977; SLM-NEXT:    retl # sched: [4:1.00]
1978;
1979; SANDY-LABEL: test_popa_popf_pusha_pushf:
1980; SANDY:       # %bb.0:
1981; SANDY-NEXT:    #APP
1982; SANDY-NEXT:    popal # sched: [5:0.50]
1983; SANDY-NEXT:    popfl # sched: [5:0.50]
1984; SANDY-NEXT:    pushal # sched: [1:1.00]
1985; SANDY-NEXT:    pushfl # sched: [1:1.00]
1986; SANDY-NEXT:    #NO_APP
1987; SANDY-NEXT:    retl # sched: [6:1.00]
1988;
1989; HASWELL-LABEL: test_popa_popf_pusha_pushf:
1990; HASWELL:       # %bb.0:
1991; HASWELL-NEXT:    #APP
1992; HASWELL-NEXT:    popal # sched: [1:4.50]
1993; HASWELL-NEXT:    popfl # sched: [5:0.50]
1994; HASWELL-NEXT:    pushal # sched: [1:4.75]
1995; HASWELL-NEXT:    pushfl # sched: [1:1.00]
1996; HASWELL-NEXT:    #NO_APP
1997; HASWELL-NEXT:    retl # sched: [7:1.00]
1998;
1999; BROADWELL-LABEL: test_popa_popf_pusha_pushf:
2000; BROADWELL:       # %bb.0:
2001; BROADWELL-NEXT:    #APP
2002; BROADWELL-NEXT:    popal # sched: [5:0.50]
2003; BROADWELL-NEXT:    popfl # sched: [5:0.50]
2004; BROADWELL-NEXT:    pushal # sched: [1:1.00]
2005; BROADWELL-NEXT:    pushfl # sched: [1:1.00]
2006; BROADWELL-NEXT:    #NO_APP
2007; BROADWELL-NEXT:    retl # sched: [6:0.50]
2008;
2009; SKYLAKE-LABEL: test_popa_popf_pusha_pushf:
2010; SKYLAKE:       # %bb.0:
2011; SKYLAKE-NEXT:    #APP
2012; SKYLAKE-NEXT:    popal # sched: [5:0.50]
2013; SKYLAKE-NEXT:    popfl # sched: [5:0.50]
2014; SKYLAKE-NEXT:    pushal # sched: [1:1.00]
2015; SKYLAKE-NEXT:    pushfl # sched: [1:1.00]
2016; SKYLAKE-NEXT:    #NO_APP
2017; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2018;
2019; SKX-LABEL: test_popa_popf_pusha_pushf:
2020; SKX:       # %bb.0:
2021; SKX-NEXT:    #APP
2022; SKX-NEXT:    popal # sched: [5:0.50]
2023; SKX-NEXT:    popfl # sched: [5:0.50]
2024; SKX-NEXT:    pushal # sched: [1:1.00]
2025; SKX-NEXT:    pushfl # sched: [1:1.00]
2026; SKX-NEXT:    #NO_APP
2027; SKX-NEXT:    retl # sched: [6:0.50]
2028;
2029; BTVER2-LABEL: test_popa_popf_pusha_pushf:
2030; BTVER2:       # %bb.0:
2031; BTVER2-NEXT:    #APP
2032; BTVER2-NEXT:    popal # sched: [5:1.00]
2033; BTVER2-NEXT:    popfl # sched: [5:1.00]
2034; BTVER2-NEXT:    pushal # sched: [1:1.00]
2035; BTVER2-NEXT:    pushfl # sched: [1:1.00]
2036; BTVER2-NEXT:    #NO_APP
2037; BTVER2-NEXT:    retl # sched: [4:1.00]
2038;
2039; ZNVER1-LABEL: test_popa_popf_pusha_pushf:
2040; ZNVER1:       # %bb.0:
2041; ZNVER1-NEXT:    #APP
2042; ZNVER1-NEXT:    popal # sched: [100:0.25]
2043; ZNVER1-NEXT:    popfl # sched: [100:0.25]
2044; ZNVER1-NEXT:    pushal # sched: [8:0.50]
2045; ZNVER1-NEXT:    pushfl # sched: [100:0.25]
2046; ZNVER1-NEXT:    #NO_APP
2047; ZNVER1-NEXT:    retl # sched: [1:0.50]
2048  call void asm sideeffect "popa \0A\09 popf \0A\09 pusha \0A\09 pushf", ""()
2049  ret void
2050}
2051
2052define void @test_ret() optsize {
2053; GENERIC-LABEL: test_ret:
2054; GENERIC:       # %bb.0:
2055; GENERIC-NEXT:    #APP
2056; GENERIC-NEXT:    retl
2057; GENERIC-NEXT:    retl $4095 # imm = 0xFFF
2058; GENERIC-NEXT:    lretl
2059; GENERIC-NEXT:    lretl $4095 # imm = 0xFFF
2060; GENERIC-NEXT:    #NO_APP
2061; GENERIC-NEXT:    retl
2062;
2063; ATOM-LABEL: test_ret:
2064; ATOM:       # %bb.0:
2065; ATOM-NEXT:    #APP
2066; ATOM-NEXT:    retl # sched: [79:39.50]
2067; ATOM-NEXT:    retl $4095 # imm = 0xFFF
2068; ATOM-NEXT:    # sched: [1:1.00]
2069; ATOM-NEXT:    lretl # sched: [79:39.50]
2070; ATOM-NEXT:    lretl $4095 # imm = 0xFFF
2071; ATOM-NEXT:    # sched: [79:39.50]
2072; ATOM-NEXT:    #NO_APP
2073; ATOM-NEXT:    retl # sched: [79:39.50]
2074;
2075; SLM-LABEL: test_ret:
2076; SLM:       # %bb.0:
2077; SLM-NEXT:    #APP
2078; SLM-NEXT:    retl # sched: [4:1.00]
2079; SLM-NEXT:    retl $4095 # imm = 0xFFF
2080; SLM-NEXT:    # sched: [4:1.00]
2081; SLM-NEXT:    lretl # sched: [4:1.00]
2082; SLM-NEXT:    lretl $4095 # imm = 0xFFF
2083; SLM-NEXT:    # sched: [4:1.00]
2084; SLM-NEXT:    #NO_APP
2085; SLM-NEXT:    retl # sched: [4:1.00]
2086;
2087; SANDY-LABEL: test_ret:
2088; SANDY:       # %bb.0:
2089; SANDY-NEXT:    #APP
2090; SANDY-NEXT:    retl # sched: [6:1.00]
2091; SANDY-NEXT:    retl $4095 # imm = 0xFFF
2092; SANDY-NEXT:    # sched: [6:1.00]
2093; SANDY-NEXT:    lretl # sched: [6:1.00]
2094; SANDY-NEXT:    lretl $4095 # imm = 0xFFF
2095; SANDY-NEXT:    # sched: [6:1.00]
2096; SANDY-NEXT:    #NO_APP
2097; SANDY-NEXT:    retl # sched: [6:1.00]
2098;
2099; HASWELL-LABEL: test_ret:
2100; HASWELL:       # %bb.0:
2101; HASWELL-NEXT:    #APP
2102; HASWELL-NEXT:    retl # sched: [7:1.00]
2103; HASWELL-NEXT:    retl $4095 # imm = 0xFFF
2104; HASWELL-NEXT:    # sched: [1:2.00]
2105; HASWELL-NEXT:    lretl # sched: [6:0.50]
2106; HASWELL-NEXT:    lretl $4095 # imm = 0xFFF
2107; HASWELL-NEXT:    # sched: [1:2.00]
2108; HASWELL-NEXT:    #NO_APP
2109; HASWELL-NEXT:    retl # sched: [7:1.00]
2110;
2111; BROADWELL-LABEL: test_ret:
2112; BROADWELL:       # %bb.0:
2113; BROADWELL-NEXT:    #APP
2114; BROADWELL-NEXT:    retl # sched: [6:0.50]
2115; BROADWELL-NEXT:    retl $4095 # imm = 0xFFF
2116; BROADWELL-NEXT:    # sched: [6:0.50]
2117; BROADWELL-NEXT:    lretl # sched: [6:0.50]
2118; BROADWELL-NEXT:    lretl $4095 # imm = 0xFFF
2119; BROADWELL-NEXT:    # sched: [6:0.50]
2120; BROADWELL-NEXT:    #NO_APP
2121; BROADWELL-NEXT:    retl # sched: [6:0.50]
2122;
2123; SKYLAKE-LABEL: test_ret:
2124; SKYLAKE:       # %bb.0:
2125; SKYLAKE-NEXT:    #APP
2126; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2127; SKYLAKE-NEXT:    retl $4095 # imm = 0xFFF
2128; SKYLAKE-NEXT:    # sched: [6:0.50]
2129; SKYLAKE-NEXT:    lretl # sched: [6:0.50]
2130; SKYLAKE-NEXT:    lretl $4095 # imm = 0xFFF
2131; SKYLAKE-NEXT:    # sched: [6:0.50]
2132; SKYLAKE-NEXT:    #NO_APP
2133; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2134;
2135; SKX-LABEL: test_ret:
2136; SKX:       # %bb.0:
2137; SKX-NEXT:    #APP
2138; SKX-NEXT:    retl # sched: [6:0.50]
2139; SKX-NEXT:    retl $4095 # imm = 0xFFF
2140; SKX-NEXT:    # sched: [6:0.50]
2141; SKX-NEXT:    lretl # sched: [6:0.50]
2142; SKX-NEXT:    lretl $4095 # imm = 0xFFF
2143; SKX-NEXT:    # sched: [6:0.50]
2144; SKX-NEXT:    #NO_APP
2145; SKX-NEXT:    retl # sched: [6:0.50]
2146;
2147; BTVER2-LABEL: test_ret:
2148; BTVER2:       # %bb.0:
2149; BTVER2-NEXT:    #APP
2150; BTVER2-NEXT:    retl # sched: [4:1.00]
2151; BTVER2-NEXT:    retl $4095 # imm = 0xFFF
2152; BTVER2-NEXT:    # sched: [4:1.00]
2153; BTVER2-NEXT:    lretl # sched: [4:1.00]
2154; BTVER2-NEXT:    lretl $4095 # imm = 0xFFF
2155; BTVER2-NEXT:    # sched: [4:1.00]
2156; BTVER2-NEXT:    #NO_APP
2157; BTVER2-NEXT:    retl # sched: [4:1.00]
2158;
2159; ZNVER1-LABEL: test_ret:
2160; ZNVER1:       # %bb.0:
2161; ZNVER1-NEXT:    #APP
2162; ZNVER1-NEXT:    retl # sched: [1:0.50]
2163; ZNVER1-NEXT:    retl $4095 # imm = 0xFFF
2164; ZNVER1-NEXT:    # sched: [5:0.50]
2165; ZNVER1-NEXT:    lretl # sched: [1:0.50]
2166; ZNVER1-NEXT:    lretl $4095 # imm = 0xFFF
2167; ZNVER1-NEXT:    # sched: [5:0.50]
2168; ZNVER1-NEXT:    #NO_APP
2169; ZNVER1-NEXT:    retl # sched: [1:0.50]
2170  call void asm sideeffect "ret \0A\09 ret $0 \0A\09 lret \0A\09 lret $0", "i"(i16 4095)
2171  ret void
2172}
2173
2174define i8 @test_salc() optsize {
2175; GENERIC-LABEL: test_salc:
2176; GENERIC:       # %bb.0:
2177; GENERIC-NEXT:    #APP
2178; GENERIC-NEXT:    salc
2179; GENERIC-NEXT:    #NO_APP
2180; GENERIC-NEXT:    retl
2181;
2182; ATOM-LABEL: test_salc:
2183; ATOM:       # %bb.0:
2184; ATOM-NEXT:    #APP
2185; ATOM-NEXT:    salc # sched: [1:0.50]
2186; ATOM-NEXT:    #NO_APP
2187; ATOM-NEXT:    retl # sched: [79:39.50]
2188;
2189; SLM-LABEL: test_salc:
2190; SLM:       # %bb.0:
2191; SLM-NEXT:    #APP
2192; SLM-NEXT:    salc # sched: [1:0.50]
2193; SLM-NEXT:    #NO_APP
2194; SLM-NEXT:    retl # sched: [4:1.00]
2195;
2196; SANDY-LABEL: test_salc:
2197; SANDY:       # %bb.0:
2198; SANDY-NEXT:    #APP
2199; SANDY-NEXT:    salc # sched: [1:0.33]
2200; SANDY-NEXT:    #NO_APP
2201; SANDY-NEXT:    retl # sched: [6:1.00]
2202;
2203; HASWELL-LABEL: test_salc:
2204; HASWELL:       # %bb.0:
2205; HASWELL-NEXT:    #APP
2206; HASWELL-NEXT:    salc # sched: [1:0.25]
2207; HASWELL-NEXT:    #NO_APP
2208; HASWELL-NEXT:    retl # sched: [7:1.00]
2209;
2210; BROADWELL-LABEL: test_salc:
2211; BROADWELL:       # %bb.0:
2212; BROADWELL-NEXT:    #APP
2213; BROADWELL-NEXT:    salc # sched: [1:0.25]
2214; BROADWELL-NEXT:    #NO_APP
2215; BROADWELL-NEXT:    retl # sched: [6:0.50]
2216;
2217; SKYLAKE-LABEL: test_salc:
2218; SKYLAKE:       # %bb.0:
2219; SKYLAKE-NEXT:    #APP
2220; SKYLAKE-NEXT:    salc # sched: [1:0.25]
2221; SKYLAKE-NEXT:    #NO_APP
2222; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2223;
2224; SKX-LABEL: test_salc:
2225; SKX:       # %bb.0:
2226; SKX-NEXT:    #APP
2227; SKX-NEXT:    salc # sched: [1:0.25]
2228; SKX-NEXT:    #NO_APP
2229; SKX-NEXT:    retl # sched: [6:0.50]
2230;
2231; BTVER2-LABEL: test_salc:
2232; BTVER2:       # %bb.0:
2233; BTVER2-NEXT:    #APP
2234; BTVER2-NEXT:    salc # sched: [1:0.50]
2235; BTVER2-NEXT:    #NO_APP
2236; BTVER2-NEXT:    retl # sched: [4:1.00]
2237;
2238; ZNVER1-LABEL: test_salc:
2239; ZNVER1:       # %bb.0:
2240; ZNVER1-NEXT:    #APP
2241; ZNVER1-NEXT:    salc # sched: [1:0.25]
2242; ZNVER1-NEXT:    #NO_APP
2243; ZNVER1-NEXT:    retl # sched: [1:0.50]
2244  %1 = tail call i8 asm "salc", "=r"() nounwind
2245  ret i8 %1
2246}
2247
2248; TODO - test_sgdt
2249; TODO - test_sidt
2250
2251define void @test_xchg_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
2252; GENERIC-LABEL: test_xchg_32:
2253; GENERIC:       # %bb.0:
2254; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2255; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2256; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %edx
2257; GENERIC-NEXT:    #APP
2258; GENERIC-NEXT:    xchgl %eax, %eax
2259; GENERIC-NEXT:    xchgl %ecx, %eax
2260; GENERIC-NEXT:    xchgl %eax, (%edx)
2261; GENERIC-NEXT:    #NO_APP
2262; GENERIC-NEXT:    retl
2263;
2264; ATOM-LABEL: test_xchg_32:
2265; ATOM:       # %bb.0:
2266; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
2267; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
2268; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [1:1.00]
2269; ATOM-NEXT:    #APP
2270; ATOM-NEXT:    xchgl %eax, %eax # sched: [2:1.00]
2271; ATOM-NEXT:    xchgl %ecx, %eax # sched: [2:1.00]
2272; ATOM-NEXT:    xchgl %eax, (%edx) # sched: [3:1.50]
2273; ATOM-NEXT:    #NO_APP
2274; ATOM-NEXT:    retl # sched: [79:39.50]
2275;
2276; SLM-LABEL: test_xchg_32:
2277; SLM:       # %bb.0:
2278; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
2279; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
2280; SLM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [3:1.00]
2281; SLM-NEXT:    #APP
2282; SLM-NEXT:    xchgl %eax, %eax # sched: [1:0.50]
2283; SLM-NEXT:    xchgl %ecx, %eax # sched: [1:0.50]
2284; SLM-NEXT:    xchgl %eax, (%edx) # sched: [4:2.00]
2285; SLM-NEXT:    #NO_APP
2286; SLM-NEXT:    retl # sched: [4:1.00]
2287;
2288; SANDY-LABEL: test_xchg_32:
2289; SANDY:       # %bb.0:
2290; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2291; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2292; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2293; SANDY-NEXT:    #APP
2294; SANDY-NEXT:    xchgl %eax, %eax # sched: [2:1.00]
2295; SANDY-NEXT:    xchgl %ecx, %eax # sched: [2:1.00]
2296; SANDY-NEXT:    xchgl %eax, (%edx) # sched: [6:1.00]
2297; SANDY-NEXT:    #NO_APP
2298; SANDY-NEXT:    retl # sched: [6:1.00]
2299;
2300; HASWELL-LABEL: test_xchg_32:
2301; HASWELL:       # %bb.0:
2302; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2303; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2304; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2305; HASWELL-NEXT:    #APP
2306; HASWELL-NEXT:    xchgl %eax, %eax # sched: [2:0.75]
2307; HASWELL-NEXT:    xchgl %ecx, %eax # sched: [2:0.75]
2308; HASWELL-NEXT:    xchgl %eax, (%edx) # sched: [9:1.00]
2309; HASWELL-NEXT:    #NO_APP
2310; HASWELL-NEXT:    retl # sched: [7:1.00]
2311;
2312; BROADWELL-LABEL: test_xchg_32:
2313; BROADWELL:       # %bb.0:
2314; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2315; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2316; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2317; BROADWELL-NEXT:    #APP
2318; BROADWELL-NEXT:    xchgl %eax, %eax # sched: [2:0.75]
2319; BROADWELL-NEXT:    xchgl %ecx, %eax # sched: [2:0.75]
2320; BROADWELL-NEXT:    xchgl %eax, (%edx) # sched: [8:1.00]
2321; BROADWELL-NEXT:    #NO_APP
2322; BROADWELL-NEXT:    retl # sched: [6:0.50]
2323;
2324; SKYLAKE-LABEL: test_xchg_32:
2325; SKYLAKE:       # %bb.0:
2326; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2327; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2328; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2329; SKYLAKE-NEXT:    #APP
2330; SKYLAKE-NEXT:    xchgl %eax, %eax # sched: [2:0.75]
2331; SKYLAKE-NEXT:    xchgl %ecx, %eax # sched: [2:0.75]
2332; SKYLAKE-NEXT:    xchgl %eax, (%edx) # sched: [10:1.25]
2333; SKYLAKE-NEXT:    #NO_APP
2334; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2335;
2336; SKX-LABEL: test_xchg_32:
2337; SKX:       # %bb.0:
2338; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2339; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2340; SKX-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2341; SKX-NEXT:    #APP
2342; SKX-NEXT:    xchgl %eax, %eax # sched: [2:0.75]
2343; SKX-NEXT:    xchgl %ecx, %eax # sched: [2:0.75]
2344; SKX-NEXT:    xchgl %eax, (%edx) # sched: [10:1.25]
2345; SKX-NEXT:    #NO_APP
2346; SKX-NEXT:    retl # sched: [6:0.50]
2347;
2348; BTVER2-LABEL: test_xchg_32:
2349; BTVER2:       # %bb.0:
2350; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
2351; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
2352; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:1.00]
2353; BTVER2-NEXT:    #APP
2354; BTVER2-NEXT:    xchgl %eax, %eax # sched: [1:0.50]
2355; BTVER2-NEXT:    xchgl %ecx, %eax # sched: [1:0.50]
2356; BTVER2-NEXT:    xchgl %eax, (%edx) # sched: [4:1.00]
2357; BTVER2-NEXT:    #NO_APP
2358; BTVER2-NEXT:    retl # sched: [4:1.00]
2359;
2360; ZNVER1-LABEL: test_xchg_32:
2361; ZNVER1:       # %bb.0:
2362; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
2363; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
2364; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [8:0.50]
2365; ZNVER1-NEXT:    #APP
2366; ZNVER1-NEXT:    xchgl %eax, %eax # sched: [1:0.50]
2367; ZNVER1-NEXT:    xchgl %ecx, %eax # sched: [1:0.50]
2368; ZNVER1-NEXT:    xchgl %eax, (%edx) # sched: [5:0.50]
2369; ZNVER1-NEXT:    #NO_APP
2370; ZNVER1-NEXT:    retl # sched: [1:0.50]
2371  tail call void asm "xchg %EAX, $0 \0A\09 xchg $1, $0 \0A\09 xchg $2, $0", "r,r,*m"(i32 %a0, i32 %a1, i32 *%a2) nounwind
2372  ret void
2373}
2374