• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=atom | FileCheck %s --check-prefix=CHECK --check-prefix=ATOM
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2
12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
13
14define void @test_adc_8(i8 %a0, i8* %a1, i8 %a2) optsize {
15; GENERIC-LABEL: test_adc_8:
16; GENERIC:       # %bb.0:
17; GENERIC-NEXT:    #APP
18; GENERIC-NEXT:    adcb $7, %al # sched: [2:0.67]
19; GENERIC-NEXT:    adcb $7, %dil # sched: [2:0.67]
20; GENERIC-NEXT:    adcb $7, (%rsi) # sched: [9:1.00]
21; GENERIC-NEXT:    adcb %dl, %dil # sched: [2:0.67]
22; GENERIC-NEXT:    adcb %dil, (%rsi) # sched: [9:1.00]
23; GENERIC-NEXT:    adcb (%rsi), %dil # sched: [7:0.67]
24; GENERIC-NEXT:    #NO_APP
25; GENERIC-NEXT:    retq # sched: [1:1.00]
26;
27; ATOM-LABEL: test_adc_8:
28; ATOM:       # %bb.0:
29; ATOM-NEXT:    #APP
30; ATOM-NEXT:    adcb $7, %al # sched: [1:0.50]
31; ATOM-NEXT:    adcb $7, %dil # sched: [1:0.50]
32; ATOM-NEXT:    adcb $7, (%rsi) # sched: [1:1.00]
33; ATOM-NEXT:    adcb %dl, %dil # sched: [1:0.50]
34; ATOM-NEXT:    adcb %dil, (%rsi) # sched: [1:1.00]
35; ATOM-NEXT:    adcb (%rsi), %dil # sched: [1:1.00]
36; ATOM-NEXT:    #NO_APP
37; ATOM-NEXT:    retq # sched: [79:39.50]
38;
39; SLM-LABEL: test_adc_8:
40; SLM:       # %bb.0:
41; SLM-NEXT:    #APP
42; SLM-NEXT:    adcb $7, %al # sched: [1:0.50]
43; SLM-NEXT:    adcb $7, %dil # sched: [1:0.50]
44; SLM-NEXT:    adcb $7, (%rsi) # sched: [5:2.00]
45; SLM-NEXT:    adcb %dl, %dil # sched: [1:0.50]
46; SLM-NEXT:    adcb %dil, (%rsi) # sched: [5:2.00]
47; SLM-NEXT:    adcb (%rsi), %dil # sched: [4:1.00]
48; SLM-NEXT:    #NO_APP
49; SLM-NEXT:    retq # sched: [4:1.00]
50;
51; SANDY-LABEL: test_adc_8:
52; SANDY:       # %bb.0:
53; SANDY-NEXT:    #APP
54; SANDY-NEXT:    adcb $7, %al # sched: [2:0.67]
55; SANDY-NEXT:    adcb $7, %dil # sched: [2:0.67]
56; SANDY-NEXT:    adcb $7, (%rsi) # sched: [9:1.00]
57; SANDY-NEXT:    adcb %dl, %dil # sched: [2:0.67]
58; SANDY-NEXT:    adcb %dil, (%rsi) # sched: [9:1.00]
59; SANDY-NEXT:    adcb (%rsi), %dil # sched: [7:0.67]
60; SANDY-NEXT:    #NO_APP
61; SANDY-NEXT:    retq # sched: [1:1.00]
62;
63; HASWELL-LABEL: test_adc_8:
64; HASWELL:       # %bb.0:
65; HASWELL-NEXT:    #APP
66; HASWELL-NEXT:    adcb $7, %al # sched: [2:0.50]
67; HASWELL-NEXT:    adcb $7, %dil # sched: [2:0.50]
68; HASWELL-NEXT:    adcb $7, (%rsi) # sched: [9:1.00]
69; HASWELL-NEXT:    adcb %dl, %dil # sched: [2:0.50]
70; HASWELL-NEXT:    adcb %dil, (%rsi) # sched: [9:1.00]
71; HASWELL-NEXT:    adcb (%rsi), %dil # sched: [7:0.50]
72; HASWELL-NEXT:    #NO_APP
73; HASWELL-NEXT:    retq # sched: [7:1.00]
74;
75; BROADWELL-LABEL: test_adc_8:
76; BROADWELL:       # %bb.0:
77; BROADWELL-NEXT:    #APP
78; BROADWELL-NEXT:    adcb $7, %al # sched: [2:0.50]
79; BROADWELL-NEXT:    adcb $7, %dil # sched: [2:0.50]
80; BROADWELL-NEXT:    adcb $7, (%rsi) # sched: [8:1.00]
81; BROADWELL-NEXT:    adcb %dl, %dil # sched: [1:0.50]
82; BROADWELL-NEXT:    adcb %dil, (%rsi) # sched: [8:1.00]
83; BROADWELL-NEXT:    adcb (%rsi), %dil # sched: [6:0.50]
84; BROADWELL-NEXT:    #NO_APP
85; BROADWELL-NEXT:    retq # sched: [7:1.00]
86;
87; SKYLAKE-LABEL: test_adc_8:
88; SKYLAKE:       # %bb.0:
89; SKYLAKE-NEXT:    #APP
90; SKYLAKE-NEXT:    adcb $7, %al # sched: [2:0.50]
91; SKYLAKE-NEXT:    adcb $7, %dil # sched: [2:0.50]
92; SKYLAKE-NEXT:    adcb $7, (%rsi) # sched: [8:1.00]
93; SKYLAKE-NEXT:    adcb %dl, %dil # sched: [1:0.50]
94; SKYLAKE-NEXT:    adcb %dil, (%rsi) # sched: [8:1.00]
95; SKYLAKE-NEXT:    adcb (%rsi), %dil # sched: [6:0.50]
96; SKYLAKE-NEXT:    #NO_APP
97; SKYLAKE-NEXT:    retq # sched: [7:1.00]
98;
99; SKX-LABEL: test_adc_8:
100; SKX:       # %bb.0:
101; SKX-NEXT:    #APP
102; SKX-NEXT:    adcb $7, %al # sched: [2:0.50]
103; SKX-NEXT:    adcb $7, %dil # sched: [2:0.50]
104; SKX-NEXT:    adcb $7, (%rsi) # sched: [8:1.00]
105; SKX-NEXT:    adcb %dl, %dil # sched: [1:0.50]
106; SKX-NEXT:    adcb %dil, (%rsi) # sched: [8:1.00]
107; SKX-NEXT:    adcb (%rsi), %dil # sched: [6:0.50]
108; SKX-NEXT:    #NO_APP
109; SKX-NEXT:    retq # sched: [7:1.00]
110;
111; BTVER2-LABEL: test_adc_8:
112; BTVER2:       # %bb.0:
113; BTVER2-NEXT:    #APP
114; BTVER2-NEXT:    adcb $7, %al # sched: [1:1.00]
115; BTVER2-NEXT:    adcb $7, %dil # sched: [1:1.00]
116; BTVER2-NEXT:    adcb $7, (%rsi) # sched: [5:1.00]
117; BTVER2-NEXT:    adcb %dl, %dil # sched: [1:1.00]
118; BTVER2-NEXT:    adcb %dil, (%rsi) # sched: [5:1.00]
119; BTVER2-NEXT:    adcb (%rsi), %dil # sched: [4:1.00]
120; BTVER2-NEXT:    #NO_APP
121; BTVER2-NEXT:    retq # sched: [4:1.00]
122;
123; ZNVER1-LABEL: test_adc_8:
124; ZNVER1:       # %bb.0:
125; ZNVER1-NEXT:    #APP
126; ZNVER1-NEXT:    adcb $7, %al # sched: [1:0.25]
127; ZNVER1-NEXT:    adcb $7, %dil # sched: [1:0.25]
128; ZNVER1-NEXT:    adcb $7, (%rsi) # sched: [5:0.50]
129; ZNVER1-NEXT:    adcb %dl, %dil # sched: [1:0.25]
130; ZNVER1-NEXT:    adcb %dil, (%rsi) # sched: [5:0.50]
131; ZNVER1-NEXT:    adcb (%rsi), %dil # sched: [5:0.50]
132; ZNVER1-NEXT:    #NO_APP
133; ZNVER1-NEXT:    retq # sched: [1:0.50]
134  tail call void asm "adcb $3, %AL \0A\09 adcb $3, $0 \0A\09 adcb $3, $2 \0A\09 adcb $1, $0 \0A\09 adcb $0, $2 \0A\09 adcb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
135  ret void
136}
137define void @test_adc_16(i16 %a0, i16* %a1, i16 %a2) optsize {
138; GENERIC-LABEL: test_adc_16:
139; GENERIC:       # %bb.0:
140; GENERIC-NEXT:    #APP
141; GENERIC-NEXT:    adcw $511, %ax # imm = 0x1FF
142; GENERIC-NEXT:    # sched: [2:0.67]
143; GENERIC-NEXT:    adcw $511, %di # imm = 0x1FF
144; GENERIC-NEXT:    # sched: [2:0.67]
145; GENERIC-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
146; GENERIC-NEXT:    # sched: [9:1.00]
147; GENERIC-NEXT:    adcw $7, %di # sched: [2:0.67]
148; GENERIC-NEXT:    adcw $7, (%rsi) # sched: [9:1.00]
149; GENERIC-NEXT:    adcw %dx, %di # sched: [2:0.67]
150; GENERIC-NEXT:    adcw %di, (%rsi) # sched: [9:1.00]
151; GENERIC-NEXT:    adcw (%rsi), %di # sched: [7:0.67]
152; GENERIC-NEXT:    #NO_APP
153; GENERIC-NEXT:    retq # sched: [1:1.00]
154;
155; ATOM-LABEL: test_adc_16:
156; ATOM:       # %bb.0:
157; ATOM-NEXT:    #APP
158; ATOM-NEXT:    adcw $511, %ax # imm = 0x1FF
159; ATOM-NEXT:    # sched: [1:0.50]
160; ATOM-NEXT:    adcw $511, %di # imm = 0x1FF
161; ATOM-NEXT:    # sched: [1:0.50]
162; ATOM-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
163; ATOM-NEXT:    # sched: [1:1.00]
164; ATOM-NEXT:    adcw $7, %di # sched: [1:0.50]
165; ATOM-NEXT:    adcw $7, (%rsi) # sched: [1:1.00]
166; ATOM-NEXT:    adcw %dx, %di # sched: [1:0.50]
167; ATOM-NEXT:    adcw %di, (%rsi) # sched: [1:1.00]
168; ATOM-NEXT:    adcw (%rsi), %di # sched: [1:1.00]
169; ATOM-NEXT:    #NO_APP
170; ATOM-NEXT:    retq # sched: [79:39.50]
171;
172; SLM-LABEL: test_adc_16:
173; SLM:       # %bb.0:
174; SLM-NEXT:    #APP
175; SLM-NEXT:    adcw $511, %ax # imm = 0x1FF
176; SLM-NEXT:    # sched: [1:0.50]
177; SLM-NEXT:    adcw $511, %di # imm = 0x1FF
178; SLM-NEXT:    # sched: [1:0.50]
179; SLM-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
180; SLM-NEXT:    # sched: [5:2.00]
181; SLM-NEXT:    adcw $7, %di # sched: [1:0.50]
182; SLM-NEXT:    adcw $7, (%rsi) # sched: [5:2.00]
183; SLM-NEXT:    adcw %dx, %di # sched: [1:0.50]
184; SLM-NEXT:    adcw %di, (%rsi) # sched: [5:2.00]
185; SLM-NEXT:    adcw (%rsi), %di # sched: [4:1.00]
186; SLM-NEXT:    #NO_APP
187; SLM-NEXT:    retq # sched: [4:1.00]
188;
189; SANDY-LABEL: test_adc_16:
190; SANDY:       # %bb.0:
191; SANDY-NEXT:    #APP
192; SANDY-NEXT:    adcw $511, %ax # imm = 0x1FF
193; SANDY-NEXT:    # sched: [2:0.67]
194; SANDY-NEXT:    adcw $511, %di # imm = 0x1FF
195; SANDY-NEXT:    # sched: [2:0.67]
196; SANDY-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
197; SANDY-NEXT:    # sched: [9:1.00]
198; SANDY-NEXT:    adcw $7, %di # sched: [2:0.67]
199; SANDY-NEXT:    adcw $7, (%rsi) # sched: [9:1.00]
200; SANDY-NEXT:    adcw %dx, %di # sched: [2:0.67]
201; SANDY-NEXT:    adcw %di, (%rsi) # sched: [9:1.00]
202; SANDY-NEXT:    adcw (%rsi), %di # sched: [7:0.67]
203; SANDY-NEXT:    #NO_APP
204; SANDY-NEXT:    retq # sched: [1:1.00]
205;
206; HASWELL-LABEL: test_adc_16:
207; HASWELL:       # %bb.0:
208; HASWELL-NEXT:    #APP
209; HASWELL-NEXT:    adcw $511, %ax # imm = 0x1FF
210; HASWELL-NEXT:    # sched: [2:0.50]
211; HASWELL-NEXT:    adcw $511, %di # imm = 0x1FF
212; HASWELL-NEXT:    # sched: [2:0.50]
213; HASWELL-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
214; HASWELL-NEXT:    # sched: [9:1.00]
215; HASWELL-NEXT:    adcw $7, %di # sched: [2:0.50]
216; HASWELL-NEXT:    adcw $7, (%rsi) # sched: [9:1.00]
217; HASWELL-NEXT:    adcw %dx, %di # sched: [2:0.50]
218; HASWELL-NEXT:    adcw %di, (%rsi) # sched: [9:1.00]
219; HASWELL-NEXT:    adcw (%rsi), %di # sched: [7:0.50]
220; HASWELL-NEXT:    #NO_APP
221; HASWELL-NEXT:    retq # sched: [7:1.00]
222;
223; BROADWELL-LABEL: test_adc_16:
224; BROADWELL:       # %bb.0:
225; BROADWELL-NEXT:    #APP
226; BROADWELL-NEXT:    adcw $511, %ax # imm = 0x1FF
227; BROADWELL-NEXT:    # sched: [1:0.50]
228; BROADWELL-NEXT:    adcw $511, %di # imm = 0x1FF
229; BROADWELL-NEXT:    # sched: [1:0.50]
230; BROADWELL-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
231; BROADWELL-NEXT:    # sched: [8:1.00]
232; BROADWELL-NEXT:    adcw $7, %di # sched: [1:0.50]
233; BROADWELL-NEXT:    adcw $7, (%rsi) # sched: [8:1.00]
234; BROADWELL-NEXT:    adcw %dx, %di # sched: [1:0.50]
235; BROADWELL-NEXT:    adcw %di, (%rsi) # sched: [8:1.00]
236; BROADWELL-NEXT:    adcw (%rsi), %di # sched: [6:0.50]
237; BROADWELL-NEXT:    #NO_APP
238; BROADWELL-NEXT:    retq # sched: [7:1.00]
239;
240; SKYLAKE-LABEL: test_adc_16:
241; SKYLAKE:       # %bb.0:
242; SKYLAKE-NEXT:    #APP
243; SKYLAKE-NEXT:    adcw $511, %ax # imm = 0x1FF
244; SKYLAKE-NEXT:    # sched: [1:0.50]
245; SKYLAKE-NEXT:    adcw $511, %di # imm = 0x1FF
246; SKYLAKE-NEXT:    # sched: [1:0.50]
247; SKYLAKE-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
248; SKYLAKE-NEXT:    # sched: [8:1.00]
249; SKYLAKE-NEXT:    adcw $7, %di # sched: [1:0.50]
250; SKYLAKE-NEXT:    adcw $7, (%rsi) # sched: [8:1.00]
251; SKYLAKE-NEXT:    adcw %dx, %di # sched: [1:0.50]
252; SKYLAKE-NEXT:    adcw %di, (%rsi) # sched: [8:1.00]
253; SKYLAKE-NEXT:    adcw (%rsi), %di # sched: [6:0.50]
254; SKYLAKE-NEXT:    #NO_APP
255; SKYLAKE-NEXT:    retq # sched: [7:1.00]
256;
257; SKX-LABEL: test_adc_16:
258; SKX:       # %bb.0:
259; SKX-NEXT:    #APP
260; SKX-NEXT:    adcw $511, %ax # imm = 0x1FF
261; SKX-NEXT:    # sched: [1:0.50]
262; SKX-NEXT:    adcw $511, %di # imm = 0x1FF
263; SKX-NEXT:    # sched: [1:0.50]
264; SKX-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
265; SKX-NEXT:    # sched: [8:1.00]
266; SKX-NEXT:    adcw $7, %di # sched: [1:0.50]
267; SKX-NEXT:    adcw $7, (%rsi) # sched: [8:1.00]
268; SKX-NEXT:    adcw %dx, %di # sched: [1:0.50]
269; SKX-NEXT:    adcw %di, (%rsi) # sched: [8:1.00]
270; SKX-NEXT:    adcw (%rsi), %di # sched: [6:0.50]
271; SKX-NEXT:    #NO_APP
272; SKX-NEXT:    retq # sched: [7:1.00]
273;
274; BTVER2-LABEL: test_adc_16:
275; BTVER2:       # %bb.0:
276; BTVER2-NEXT:    #APP
277; BTVER2-NEXT:    adcw $511, %ax # imm = 0x1FF
278; BTVER2-NEXT:    # sched: [1:1.00]
279; BTVER2-NEXT:    adcw $511, %di # imm = 0x1FF
280; BTVER2-NEXT:    # sched: [1:1.00]
281; BTVER2-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
282; BTVER2-NEXT:    # sched: [5:1.00]
283; BTVER2-NEXT:    adcw $7, %di # sched: [1:1.00]
284; BTVER2-NEXT:    adcw $7, (%rsi) # sched: [5:1.00]
285; BTVER2-NEXT:    adcw %dx, %di # sched: [1:1.00]
286; BTVER2-NEXT:    adcw %di, (%rsi) # sched: [5:1.00]
287; BTVER2-NEXT:    adcw (%rsi), %di # sched: [4:1.00]
288; BTVER2-NEXT:    #NO_APP
289; BTVER2-NEXT:    retq # sched: [4:1.00]
290;
291; ZNVER1-LABEL: test_adc_16:
292; ZNVER1:       # %bb.0:
293; ZNVER1-NEXT:    #APP
294; ZNVER1-NEXT:    adcw $511, %ax # imm = 0x1FF
295; ZNVER1-NEXT:    # sched: [1:0.25]
296; ZNVER1-NEXT:    adcw $511, %di # imm = 0x1FF
297; ZNVER1-NEXT:    # sched: [1:0.25]
298; ZNVER1-NEXT:    adcw $511, (%rsi) # imm = 0x1FF
299; ZNVER1-NEXT:    # sched: [5:0.50]
300; ZNVER1-NEXT:    adcw $7, %di # sched: [1:0.25]
301; ZNVER1-NEXT:    adcw $7, (%rsi) # sched: [5:0.50]
302; ZNVER1-NEXT:    adcw %dx, %di # sched: [1:0.25]
303; ZNVER1-NEXT:    adcw %di, (%rsi) # sched: [5:0.50]
304; ZNVER1-NEXT:    adcw (%rsi), %di # sched: [5:0.50]
305; ZNVER1-NEXT:    #NO_APP
306; ZNVER1-NEXT:    retq # sched: [1:0.50]
307  tail call void asm "adcw $3, %AX \0A\09 adcw $3, $0 \0A\09 adcw $3, $2 \0A\09 adcw $4, $0 \0A\09 adcw $4, $2 \0A\09 adcw $1, $0 \0A\09 adcw $0, $2 \0A\09 adcw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
308  ret void
309}
310define void @test_adc_32(i32 %a0, i32* %a1, i32 %a2) optsize {
311; GENERIC-LABEL: test_adc_32:
312; GENERIC:       # %bb.0:
313; GENERIC-NEXT:    #APP
314; GENERIC-NEXT:    adcl $665536, %eax # imm = 0xA27C0
315; GENERIC-NEXT:    # sched: [2:0.67]
316; GENERIC-NEXT:    adcl $665536, %edi # imm = 0xA27C0
317; GENERIC-NEXT:    # sched: [2:0.67]
318; GENERIC-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
319; GENERIC-NEXT:    # sched: [9:1.00]
320; GENERIC-NEXT:    adcl $7, %edi # sched: [2:0.67]
321; GENERIC-NEXT:    adcl $7, (%rsi) # sched: [9:1.00]
322; GENERIC-NEXT:    adcl %edx, %edi # sched: [2:0.67]
323; GENERIC-NEXT:    adcl %edi, (%rsi) # sched: [9:1.00]
324; GENERIC-NEXT:    adcl (%rsi), %edi # sched: [7:0.67]
325; GENERIC-NEXT:    #NO_APP
326; GENERIC-NEXT:    retq # sched: [1:1.00]
327;
328; ATOM-LABEL: test_adc_32:
329; ATOM:       # %bb.0:
330; ATOM-NEXT:    #APP
331; ATOM-NEXT:    adcl $665536, %eax # imm = 0xA27C0
332; ATOM-NEXT:    # sched: [1:0.50]
333; ATOM-NEXT:    adcl $665536, %edi # imm = 0xA27C0
334; ATOM-NEXT:    # sched: [1:0.50]
335; ATOM-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
336; ATOM-NEXT:    # sched: [1:1.00]
337; ATOM-NEXT:    adcl $7, %edi # sched: [1:0.50]
338; ATOM-NEXT:    adcl $7, (%rsi) # sched: [1:1.00]
339; ATOM-NEXT:    adcl %edx, %edi # sched: [1:0.50]
340; ATOM-NEXT:    adcl %edi, (%rsi) # sched: [1:1.00]
341; ATOM-NEXT:    adcl (%rsi), %edi # sched: [1:1.00]
342; ATOM-NEXT:    #NO_APP
343; ATOM-NEXT:    retq # sched: [79:39.50]
344;
345; SLM-LABEL: test_adc_32:
346; SLM:       # %bb.0:
347; SLM-NEXT:    #APP
348; SLM-NEXT:    adcl $665536, %eax # imm = 0xA27C0
349; SLM-NEXT:    # sched: [1:0.50]
350; SLM-NEXT:    adcl $665536, %edi # imm = 0xA27C0
351; SLM-NEXT:    # sched: [1:0.50]
352; SLM-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
353; SLM-NEXT:    # sched: [5:2.00]
354; SLM-NEXT:    adcl $7, %edi # sched: [1:0.50]
355; SLM-NEXT:    adcl $7, (%rsi) # sched: [5:2.00]
356; SLM-NEXT:    adcl %edx, %edi # sched: [1:0.50]
357; SLM-NEXT:    adcl %edi, (%rsi) # sched: [5:2.00]
358; SLM-NEXT:    adcl (%rsi), %edi # sched: [4:1.00]
359; SLM-NEXT:    #NO_APP
360; SLM-NEXT:    retq # sched: [4:1.00]
361;
362; SANDY-LABEL: test_adc_32:
363; SANDY:       # %bb.0:
364; SANDY-NEXT:    #APP
365; SANDY-NEXT:    adcl $665536, %eax # imm = 0xA27C0
366; SANDY-NEXT:    # sched: [2:0.67]
367; SANDY-NEXT:    adcl $665536, %edi # imm = 0xA27C0
368; SANDY-NEXT:    # sched: [2:0.67]
369; SANDY-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
370; SANDY-NEXT:    # sched: [9:1.00]
371; SANDY-NEXT:    adcl $7, %edi # sched: [2:0.67]
372; SANDY-NEXT:    adcl $7, (%rsi) # sched: [9:1.00]
373; SANDY-NEXT:    adcl %edx, %edi # sched: [2:0.67]
374; SANDY-NEXT:    adcl %edi, (%rsi) # sched: [9:1.00]
375; SANDY-NEXT:    adcl (%rsi), %edi # sched: [7:0.67]
376; SANDY-NEXT:    #NO_APP
377; SANDY-NEXT:    retq # sched: [1:1.00]
378;
379; HASWELL-LABEL: test_adc_32:
380; HASWELL:       # %bb.0:
381; HASWELL-NEXT:    #APP
382; HASWELL-NEXT:    adcl $665536, %eax # imm = 0xA27C0
383; HASWELL-NEXT:    # sched: [2:0.50]
384; HASWELL-NEXT:    adcl $665536, %edi # imm = 0xA27C0
385; HASWELL-NEXT:    # sched: [2:0.50]
386; HASWELL-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
387; HASWELL-NEXT:    # sched: [9:1.00]
388; HASWELL-NEXT:    adcl $7, %edi # sched: [2:0.50]
389; HASWELL-NEXT:    adcl $7, (%rsi) # sched: [9:1.00]
390; HASWELL-NEXT:    adcl %edx, %edi # sched: [2:0.50]
391; HASWELL-NEXT:    adcl %edi, (%rsi) # sched: [9:1.00]
392; HASWELL-NEXT:    adcl (%rsi), %edi # sched: [7:0.50]
393; HASWELL-NEXT:    #NO_APP
394; HASWELL-NEXT:    retq # sched: [7:1.00]
395;
396; BROADWELL-LABEL: test_adc_32:
397; BROADWELL:       # %bb.0:
398; BROADWELL-NEXT:    #APP
399; BROADWELL-NEXT:    adcl $665536, %eax # imm = 0xA27C0
400; BROADWELL-NEXT:    # sched: [1:0.50]
401; BROADWELL-NEXT:    adcl $665536, %edi # imm = 0xA27C0
402; BROADWELL-NEXT:    # sched: [1:0.50]
403; BROADWELL-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
404; BROADWELL-NEXT:    # sched: [8:1.00]
405; BROADWELL-NEXT:    adcl $7, %edi # sched: [1:0.50]
406; BROADWELL-NEXT:    adcl $7, (%rsi) # sched: [8:1.00]
407; BROADWELL-NEXT:    adcl %edx, %edi # sched: [1:0.50]
408; BROADWELL-NEXT:    adcl %edi, (%rsi) # sched: [8:1.00]
409; BROADWELL-NEXT:    adcl (%rsi), %edi # sched: [6:0.50]
410; BROADWELL-NEXT:    #NO_APP
411; BROADWELL-NEXT:    retq # sched: [7:1.00]
412;
413; SKYLAKE-LABEL: test_adc_32:
414; SKYLAKE:       # %bb.0:
415; SKYLAKE-NEXT:    #APP
416; SKYLAKE-NEXT:    adcl $665536, %eax # imm = 0xA27C0
417; SKYLAKE-NEXT:    # sched: [1:0.50]
418; SKYLAKE-NEXT:    adcl $665536, %edi # imm = 0xA27C0
419; SKYLAKE-NEXT:    # sched: [1:0.50]
420; SKYLAKE-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
421; SKYLAKE-NEXT:    # sched: [8:1.00]
422; SKYLAKE-NEXT:    adcl $7, %edi # sched: [1:0.50]
423; SKYLAKE-NEXT:    adcl $7, (%rsi) # sched: [8:1.00]
424; SKYLAKE-NEXT:    adcl %edx, %edi # sched: [1:0.50]
425; SKYLAKE-NEXT:    adcl %edi, (%rsi) # sched: [8:1.00]
426; SKYLAKE-NEXT:    adcl (%rsi), %edi # sched: [6:0.50]
427; SKYLAKE-NEXT:    #NO_APP
428; SKYLAKE-NEXT:    retq # sched: [7:1.00]
429;
430; SKX-LABEL: test_adc_32:
431; SKX:       # %bb.0:
432; SKX-NEXT:    #APP
433; SKX-NEXT:    adcl $665536, %eax # imm = 0xA27C0
434; SKX-NEXT:    # sched: [1:0.50]
435; SKX-NEXT:    adcl $665536, %edi # imm = 0xA27C0
436; SKX-NEXT:    # sched: [1:0.50]
437; SKX-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
438; SKX-NEXT:    # sched: [8:1.00]
439; SKX-NEXT:    adcl $7, %edi # sched: [1:0.50]
440; SKX-NEXT:    adcl $7, (%rsi) # sched: [8:1.00]
441; SKX-NEXT:    adcl %edx, %edi # sched: [1:0.50]
442; SKX-NEXT:    adcl %edi, (%rsi) # sched: [8:1.00]
443; SKX-NEXT:    adcl (%rsi), %edi # sched: [6:0.50]
444; SKX-NEXT:    #NO_APP
445; SKX-NEXT:    retq # sched: [7:1.00]
446;
447; BTVER2-LABEL: test_adc_32:
448; BTVER2:       # %bb.0:
449; BTVER2-NEXT:    #APP
450; BTVER2-NEXT:    adcl $665536, %eax # imm = 0xA27C0
451; BTVER2-NEXT:    # sched: [1:1.00]
452; BTVER2-NEXT:    adcl $665536, %edi # imm = 0xA27C0
453; BTVER2-NEXT:    # sched: [1:1.00]
454; BTVER2-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
455; BTVER2-NEXT:    # sched: [5:1.00]
456; BTVER2-NEXT:    adcl $7, %edi # sched: [1:1.00]
457; BTVER2-NEXT:    adcl $7, (%rsi) # sched: [5:1.00]
458; BTVER2-NEXT:    adcl %edx, %edi # sched: [1:1.00]
459; BTVER2-NEXT:    adcl %edi, (%rsi) # sched: [5:1.00]
460; BTVER2-NEXT:    adcl (%rsi), %edi # sched: [4:1.00]
461; BTVER2-NEXT:    #NO_APP
462; BTVER2-NEXT:    retq # sched: [4:1.00]
463;
464; ZNVER1-LABEL: test_adc_32:
465; ZNVER1:       # %bb.0:
466; ZNVER1-NEXT:    #APP
467; ZNVER1-NEXT:    adcl $665536, %eax # imm = 0xA27C0
468; ZNVER1-NEXT:    # sched: [1:0.25]
469; ZNVER1-NEXT:    adcl $665536, %edi # imm = 0xA27C0
470; ZNVER1-NEXT:    # sched: [1:0.25]
471; ZNVER1-NEXT:    adcl $665536, (%rsi) # imm = 0xA27C0
472; ZNVER1-NEXT:    # sched: [5:0.50]
473; ZNVER1-NEXT:    adcl $7, %edi # sched: [1:0.25]
474; ZNVER1-NEXT:    adcl $7, (%rsi) # sched: [5:0.50]
475; ZNVER1-NEXT:    adcl %edx, %edi # sched: [1:0.25]
476; ZNVER1-NEXT:    adcl %edi, (%rsi) # sched: [5:0.50]
477; ZNVER1-NEXT:    adcl (%rsi), %edi # sched: [5:0.50]
478; ZNVER1-NEXT:    #NO_APP
479; ZNVER1-NEXT:    retq # sched: [1:0.50]
480  tail call void asm "adcl $3, %EAX \0A\09 adcl $3, $0 \0A\09 adcl $3, $2 \0A\09 adcl $4, $0 \0A\09 adcl $4, $2 \0A\09 adcl $1, $0 \0A\09 adcl $0, $2 \0A\09 adcl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
481  ret void
482}
483define void @test_adc_64(i64 %a0, i64* %a1, i64 %a2) optsize {
484; GENERIC-LABEL: test_adc_64:
485; GENERIC:       # %bb.0:
486; GENERIC-NEXT:    #APP
487; GENERIC-NEXT:    adcq $665536, %rax # imm = 0xA27C0
488; GENERIC-NEXT:    # sched: [2:0.67]
489; GENERIC-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
490; GENERIC-NEXT:    # sched: [2:0.67]
491; GENERIC-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
492; GENERIC-NEXT:    # sched: [9:1.00]
493; GENERIC-NEXT:    adcq $7, %rdi # sched: [2:0.67]
494; GENERIC-NEXT:    adcq $7, (%rsi) # sched: [9:1.00]
495; GENERIC-NEXT:    adcq %rdx, %rdi # sched: [2:0.67]
496; GENERIC-NEXT:    adcq %rdi, (%rsi) # sched: [9:1.00]
497; GENERIC-NEXT:    adcq (%rsi), %rdi # sched: [7:0.67]
498; GENERIC-NEXT:    #NO_APP
499; GENERIC-NEXT:    retq # sched: [1:1.00]
500;
501; ATOM-LABEL: test_adc_64:
502; ATOM:       # %bb.0:
503; ATOM-NEXT:    #APP
504; ATOM-NEXT:    adcq $665536, %rax # imm = 0xA27C0
505; ATOM-NEXT:    # sched: [1:0.50]
506; ATOM-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
507; ATOM-NEXT:    # sched: [1:0.50]
508; ATOM-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
509; ATOM-NEXT:    # sched: [1:1.00]
510; ATOM-NEXT:    adcq $7, %rdi # sched: [1:0.50]
511; ATOM-NEXT:    adcq $7, (%rsi) # sched: [1:1.00]
512; ATOM-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
513; ATOM-NEXT:    adcq %rdi, (%rsi) # sched: [1:1.00]
514; ATOM-NEXT:    adcq (%rsi), %rdi # sched: [1:1.00]
515; ATOM-NEXT:    #NO_APP
516; ATOM-NEXT:    retq # sched: [79:39.50]
517;
518; SLM-LABEL: test_adc_64:
519; SLM:       # %bb.0:
520; SLM-NEXT:    #APP
521; SLM-NEXT:    adcq $665536, %rax # imm = 0xA27C0
522; SLM-NEXT:    # sched: [1:0.50]
523; SLM-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
524; SLM-NEXT:    # sched: [1:0.50]
525; SLM-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
526; SLM-NEXT:    # sched: [5:2.00]
527; SLM-NEXT:    adcq $7, %rdi # sched: [1:0.50]
528; SLM-NEXT:    adcq $7, (%rsi) # sched: [5:2.00]
529; SLM-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
530; SLM-NEXT:    adcq %rdi, (%rsi) # sched: [5:2.00]
531; SLM-NEXT:    adcq (%rsi), %rdi # sched: [4:1.00]
532; SLM-NEXT:    #NO_APP
533; SLM-NEXT:    retq # sched: [4:1.00]
534;
535; SANDY-LABEL: test_adc_64:
536; SANDY:       # %bb.0:
537; SANDY-NEXT:    #APP
538; SANDY-NEXT:    adcq $665536, %rax # imm = 0xA27C0
539; SANDY-NEXT:    # sched: [2:0.67]
540; SANDY-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
541; SANDY-NEXT:    # sched: [2:0.67]
542; SANDY-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
543; SANDY-NEXT:    # sched: [9:1.00]
544; SANDY-NEXT:    adcq $7, %rdi # sched: [2:0.67]
545; SANDY-NEXT:    adcq $7, (%rsi) # sched: [9:1.00]
546; SANDY-NEXT:    adcq %rdx, %rdi # sched: [2:0.67]
547; SANDY-NEXT:    adcq %rdi, (%rsi) # sched: [9:1.00]
548; SANDY-NEXT:    adcq (%rsi), %rdi # sched: [7:0.67]
549; SANDY-NEXT:    #NO_APP
550; SANDY-NEXT:    retq # sched: [1:1.00]
551;
552; HASWELL-LABEL: test_adc_64:
553; HASWELL:       # %bb.0:
554; HASWELL-NEXT:    #APP
555; HASWELL-NEXT:    adcq $665536, %rax # imm = 0xA27C0
556; HASWELL-NEXT:    # sched: [2:0.50]
557; HASWELL-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
558; HASWELL-NEXT:    # sched: [2:0.50]
559; HASWELL-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
560; HASWELL-NEXT:    # sched: [9:1.00]
561; HASWELL-NEXT:    adcq $7, %rdi # sched: [2:0.50]
562; HASWELL-NEXT:    adcq $7, (%rsi) # sched: [9:1.00]
563; HASWELL-NEXT:    adcq %rdx, %rdi # sched: [2:0.50]
564; HASWELL-NEXT:    adcq %rdi, (%rsi) # sched: [9:1.00]
565; HASWELL-NEXT:    adcq (%rsi), %rdi # sched: [7:0.50]
566; HASWELL-NEXT:    #NO_APP
567; HASWELL-NEXT:    retq # sched: [7:1.00]
568;
569; BROADWELL-LABEL: test_adc_64:
570; BROADWELL:       # %bb.0:
571; BROADWELL-NEXT:    #APP
572; BROADWELL-NEXT:    adcq $665536, %rax # imm = 0xA27C0
573; BROADWELL-NEXT:    # sched: [1:0.50]
574; BROADWELL-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
575; BROADWELL-NEXT:    # sched: [1:0.50]
576; BROADWELL-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
577; BROADWELL-NEXT:    # sched: [8:1.00]
578; BROADWELL-NEXT:    adcq $7, %rdi # sched: [1:0.50]
579; BROADWELL-NEXT:    adcq $7, (%rsi) # sched: [8:1.00]
580; BROADWELL-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
581; BROADWELL-NEXT:    adcq %rdi, (%rsi) # sched: [8:1.00]
582; BROADWELL-NEXT:    adcq (%rsi), %rdi # sched: [6:0.50]
583; BROADWELL-NEXT:    #NO_APP
584; BROADWELL-NEXT:    retq # sched: [7:1.00]
585;
586; SKYLAKE-LABEL: test_adc_64:
587; SKYLAKE:       # %bb.0:
588; SKYLAKE-NEXT:    #APP
589; SKYLAKE-NEXT:    adcq $665536, %rax # imm = 0xA27C0
590; SKYLAKE-NEXT:    # sched: [1:0.50]
591; SKYLAKE-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
592; SKYLAKE-NEXT:    # sched: [1:0.50]
593; SKYLAKE-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
594; SKYLAKE-NEXT:    # sched: [8:1.00]
595; SKYLAKE-NEXT:    adcq $7, %rdi # sched: [1:0.50]
596; SKYLAKE-NEXT:    adcq $7, (%rsi) # sched: [8:1.00]
597; SKYLAKE-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
598; SKYLAKE-NEXT:    adcq %rdi, (%rsi) # sched: [8:1.00]
599; SKYLAKE-NEXT:    adcq (%rsi), %rdi # sched: [6:0.50]
600; SKYLAKE-NEXT:    #NO_APP
601; SKYLAKE-NEXT:    retq # sched: [7:1.00]
602;
603; SKX-LABEL: test_adc_64:
604; SKX:       # %bb.0:
605; SKX-NEXT:    #APP
606; SKX-NEXT:    adcq $665536, %rax # imm = 0xA27C0
607; SKX-NEXT:    # sched: [1:0.50]
608; SKX-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
609; SKX-NEXT:    # sched: [1:0.50]
610; SKX-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
611; SKX-NEXT:    # sched: [8:1.00]
612; SKX-NEXT:    adcq $7, %rdi # sched: [1:0.50]
613; SKX-NEXT:    adcq $7, (%rsi) # sched: [8:1.00]
614; SKX-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
615; SKX-NEXT:    adcq %rdi, (%rsi) # sched: [8:1.00]
616; SKX-NEXT:    adcq (%rsi), %rdi # sched: [6:0.50]
617; SKX-NEXT:    #NO_APP
618; SKX-NEXT:    retq # sched: [7:1.00]
619;
620; BTVER2-LABEL: test_adc_64:
621; BTVER2:       # %bb.0:
622; BTVER2-NEXT:    #APP
623; BTVER2-NEXT:    adcq $665536, %rax # imm = 0xA27C0
624; BTVER2-NEXT:    # sched: [1:1.00]
625; BTVER2-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
626; BTVER2-NEXT:    # sched: [1:1.00]
627; BTVER2-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
628; BTVER2-NEXT:    # sched: [5:1.00]
629; BTVER2-NEXT:    adcq $7, %rdi # sched: [1:1.00]
630; BTVER2-NEXT:    adcq $7, (%rsi) # sched: [5:1.00]
631; BTVER2-NEXT:    adcq %rdx, %rdi # sched: [1:1.00]
632; BTVER2-NEXT:    adcq %rdi, (%rsi) # sched: [5:1.00]
633; BTVER2-NEXT:    adcq (%rsi), %rdi # sched: [4:1.00]
634; BTVER2-NEXT:    #NO_APP
635; BTVER2-NEXT:    retq # sched: [4:1.00]
636;
637; ZNVER1-LABEL: test_adc_64:
638; ZNVER1:       # %bb.0:
639; ZNVER1-NEXT:    #APP
640; ZNVER1-NEXT:    adcq $665536, %rax # imm = 0xA27C0
641; ZNVER1-NEXT:    # sched: [1:0.25]
642; ZNVER1-NEXT:    adcq $665536, %rdi # imm = 0xA27C0
643; ZNVER1-NEXT:    # sched: [1:0.25]
644; ZNVER1-NEXT:    adcq $665536, (%rsi) # imm = 0xA27C0
645; ZNVER1-NEXT:    # sched: [5:0.50]
646; ZNVER1-NEXT:    adcq $7, %rdi # sched: [1:0.25]
647; ZNVER1-NEXT:    adcq $7, (%rsi) # sched: [5:0.50]
648; ZNVER1-NEXT:    adcq %rdx, %rdi # sched: [1:0.25]
649; ZNVER1-NEXT:    adcq %rdi, (%rsi) # sched: [5:0.50]
650; ZNVER1-NEXT:    adcq (%rsi), %rdi # sched: [5:0.50]
651; ZNVER1-NEXT:    #NO_APP
652; ZNVER1-NEXT:    retq # sched: [1:0.50]
653  tail call void asm "adcq $3, %RAX \0A\09 adcq $3, $0 \0A\09 adcq $3, $2 \0A\09 adcq $4, $0 \0A\09 adcq $4, $2 \0A\09 adcq $1, $0 \0A\09 adcq $0, $2 \0A\09 adcq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
654  ret void
655}
656
657define void @test_add_8(i8 %a0, i8* %a1, i8 %a2) optsize {
658; GENERIC-LABEL: test_add_8:
659; GENERIC:       # %bb.0:
660; GENERIC-NEXT:    #APP
661; GENERIC-NEXT:    addb $7, %al # sched: [1:0.33]
662; GENERIC-NEXT:    addb $7, %dil # sched: [1:0.33]
663; GENERIC-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
664; GENERIC-NEXT:    addb %dl, %dil # sched: [1:0.33]
665; GENERIC-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
666; GENERIC-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
667; GENERIC-NEXT:    #NO_APP
668; GENERIC-NEXT:    retq # sched: [1:1.00]
669;
670; ATOM-LABEL: test_add_8:
671; ATOM:       # %bb.0:
672; ATOM-NEXT:    #APP
673; ATOM-NEXT:    addb $7, %al # sched: [1:0.50]
674; ATOM-NEXT:    addb $7, %dil # sched: [1:0.50]
675; ATOM-NEXT:    addb $7, (%rsi) # sched: [1:1.00]
676; ATOM-NEXT:    addb %dl, %dil # sched: [1:0.50]
677; ATOM-NEXT:    addb %dil, (%rsi) # sched: [1:1.00]
678; ATOM-NEXT:    addb (%rsi), %dil # sched: [1:1.00]
679; ATOM-NEXT:    #NO_APP
680; ATOM-NEXT:    retq # sched: [79:39.50]
681;
682; SLM-LABEL: test_add_8:
683; SLM:       # %bb.0:
684; SLM-NEXT:    #APP
685; SLM-NEXT:    addb $7, %al # sched: [1:0.50]
686; SLM-NEXT:    addb $7, %dil # sched: [1:0.50]
687; SLM-NEXT:    addb $7, (%rsi) # sched: [5:2.00]
688; SLM-NEXT:    addb %dl, %dil # sched: [1:0.50]
689; SLM-NEXT:    addb %dil, (%rsi) # sched: [5:2.00]
690; SLM-NEXT:    addb (%rsi), %dil # sched: [4:1.00]
691; SLM-NEXT:    #NO_APP
692; SLM-NEXT:    retq # sched: [4:1.00]
693;
694; SANDY-LABEL: test_add_8:
695; SANDY:       # %bb.0:
696; SANDY-NEXT:    #APP
697; SANDY-NEXT:    addb $7, %al # sched: [1:0.33]
698; SANDY-NEXT:    addb $7, %dil # sched: [1:0.33]
699; SANDY-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
700; SANDY-NEXT:    addb %dl, %dil # sched: [1:0.33]
701; SANDY-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
702; SANDY-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
703; SANDY-NEXT:    #NO_APP
704; SANDY-NEXT:    retq # sched: [1:1.00]
705;
706; HASWELL-LABEL: test_add_8:
707; HASWELL:       # %bb.0:
708; HASWELL-NEXT:    #APP
709; HASWELL-NEXT:    addb $7, %al # sched: [1:0.25]
710; HASWELL-NEXT:    addb $7, %dil # sched: [1:0.25]
711; HASWELL-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
712; HASWELL-NEXT:    addb %dl, %dil # sched: [1:0.25]
713; HASWELL-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
714; HASWELL-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
715; HASWELL-NEXT:    #NO_APP
716; HASWELL-NEXT:    retq # sched: [7:1.00]
717;
718; BROADWELL-LABEL: test_add_8:
719; BROADWELL:       # %bb.0:
720; BROADWELL-NEXT:    #APP
721; BROADWELL-NEXT:    addb $7, %al # sched: [1:0.25]
722; BROADWELL-NEXT:    addb $7, %dil # sched: [1:0.25]
723; BROADWELL-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
724; BROADWELL-NEXT:    addb %dl, %dil # sched: [1:0.25]
725; BROADWELL-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
726; BROADWELL-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
727; BROADWELL-NEXT:    #NO_APP
728; BROADWELL-NEXT:    retq # sched: [7:1.00]
729;
730; SKYLAKE-LABEL: test_add_8:
731; SKYLAKE:       # %bb.0:
732; SKYLAKE-NEXT:    #APP
733; SKYLAKE-NEXT:    addb $7, %al # sched: [1:0.25]
734; SKYLAKE-NEXT:    addb $7, %dil # sched: [1:0.25]
735; SKYLAKE-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
736; SKYLAKE-NEXT:    addb %dl, %dil # sched: [1:0.25]
737; SKYLAKE-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
738; SKYLAKE-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
739; SKYLAKE-NEXT:    #NO_APP
740; SKYLAKE-NEXT:    retq # sched: [7:1.00]
741;
742; SKX-LABEL: test_add_8:
743; SKX:       # %bb.0:
744; SKX-NEXT:    #APP
745; SKX-NEXT:    addb $7, %al # sched: [1:0.25]
746; SKX-NEXT:    addb $7, %dil # sched: [1:0.25]
747; SKX-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
748; SKX-NEXT:    addb %dl, %dil # sched: [1:0.25]
749; SKX-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
750; SKX-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
751; SKX-NEXT:    #NO_APP
752; SKX-NEXT:    retq # sched: [7:1.00]
753;
754; BTVER2-LABEL: test_add_8:
755; BTVER2:       # %bb.0:
756; BTVER2-NEXT:    #APP
757; BTVER2-NEXT:    addb $7, %al # sched: [1:0.50]
758; BTVER2-NEXT:    addb $7, %dil # sched: [1:0.50]
759; BTVER2-NEXT:    addb $7, (%rsi) # sched: [5:1.00]
760; BTVER2-NEXT:    addb %dl, %dil # sched: [1:0.50]
761; BTVER2-NEXT:    addb %dil, (%rsi) # sched: [5:1.00]
762; BTVER2-NEXT:    addb (%rsi), %dil # sched: [4:1.00]
763; BTVER2-NEXT:    #NO_APP
764; BTVER2-NEXT:    retq # sched: [4:1.00]
765;
766; ZNVER1-LABEL: test_add_8:
767; ZNVER1:       # %bb.0:
768; ZNVER1-NEXT:    #APP
769; ZNVER1-NEXT:    addb $7, %al # sched: [1:0.25]
770; ZNVER1-NEXT:    addb $7, %dil # sched: [1:0.25]
771; ZNVER1-NEXT:    addb $7, (%rsi) # sched: [5:0.50]
772; ZNVER1-NEXT:    addb %dl, %dil # sched: [1:0.25]
773; ZNVER1-NEXT:    addb %dil, (%rsi) # sched: [5:0.50]
774; ZNVER1-NEXT:    addb (%rsi), %dil # sched: [5:0.50]
775; ZNVER1-NEXT:    #NO_APP
776; ZNVER1-NEXT:    retq # sched: [1:0.50]
777  tail call void asm "addb $3, %AL \0A\09 addb $3, $0 \0A\09 addb $3, $2 \0A\09 addb $1, $0 \0A\09 addb $0, $2 \0A\09 addb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
778  ret void
779}
780define void @test_add_16(i16 %a0, i16* %a1, i16 %a2) optsize {
781; GENERIC-LABEL: test_add_16:
782; GENERIC:       # %bb.0:
783; GENERIC-NEXT:    #APP
784; GENERIC-NEXT:    addw $511, %ax # imm = 0x1FF
785; GENERIC-NEXT:    # sched: [1:0.33]
786; GENERIC-NEXT:    addw $511, %di # imm = 0x1FF
787; GENERIC-NEXT:    # sched: [1:0.33]
788; GENERIC-NEXT:    addw $511, (%rsi) # imm = 0x1FF
789; GENERIC-NEXT:    # sched: [7:1.00]
790; GENERIC-NEXT:    addw $7, %di # sched: [1:0.33]
791; GENERIC-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
792; GENERIC-NEXT:    addw %dx, %di # sched: [1:0.33]
793; GENERIC-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
794; GENERIC-NEXT:    addw (%rsi), %di # sched: [6:0.50]
795; GENERIC-NEXT:    #NO_APP
796; GENERIC-NEXT:    retq # sched: [1:1.00]
797;
798; ATOM-LABEL: test_add_16:
799; ATOM:       # %bb.0:
800; ATOM-NEXT:    #APP
801; ATOM-NEXT:    addw $511, %ax # imm = 0x1FF
802; ATOM-NEXT:    # sched: [1:0.50]
803; ATOM-NEXT:    addw $511, %di # imm = 0x1FF
804; ATOM-NEXT:    # sched: [1:0.50]
805; ATOM-NEXT:    addw $511, (%rsi) # imm = 0x1FF
806; ATOM-NEXT:    # sched: [1:1.00]
807; ATOM-NEXT:    addw $7, %di # sched: [1:0.50]
808; ATOM-NEXT:    addw $7, (%rsi) # sched: [1:1.00]
809; ATOM-NEXT:    addw %dx, %di # sched: [1:0.50]
810; ATOM-NEXT:    addw %di, (%rsi) # sched: [1:1.00]
811; ATOM-NEXT:    addw (%rsi), %di # sched: [1:1.00]
812; ATOM-NEXT:    #NO_APP
813; ATOM-NEXT:    retq # sched: [79:39.50]
814;
815; SLM-LABEL: test_add_16:
816; SLM:       # %bb.0:
817; SLM-NEXT:    #APP
818; SLM-NEXT:    addw $511, %ax # imm = 0x1FF
819; SLM-NEXT:    # sched: [1:0.50]
820; SLM-NEXT:    addw $511, %di # imm = 0x1FF
821; SLM-NEXT:    # sched: [1:0.50]
822; SLM-NEXT:    addw $511, (%rsi) # imm = 0x1FF
823; SLM-NEXT:    # sched: [5:2.00]
824; SLM-NEXT:    addw $7, %di # sched: [1:0.50]
825; SLM-NEXT:    addw $7, (%rsi) # sched: [5:2.00]
826; SLM-NEXT:    addw %dx, %di # sched: [1:0.50]
827; SLM-NEXT:    addw %di, (%rsi) # sched: [5:2.00]
828; SLM-NEXT:    addw (%rsi), %di # sched: [4:1.00]
829; SLM-NEXT:    #NO_APP
830; SLM-NEXT:    retq # sched: [4:1.00]
831;
832; SANDY-LABEL: test_add_16:
833; SANDY:       # %bb.0:
834; SANDY-NEXT:    #APP
835; SANDY-NEXT:    addw $511, %ax # imm = 0x1FF
836; SANDY-NEXT:    # sched: [1:0.33]
837; SANDY-NEXT:    addw $511, %di # imm = 0x1FF
838; SANDY-NEXT:    # sched: [1:0.33]
839; SANDY-NEXT:    addw $511, (%rsi) # imm = 0x1FF
840; SANDY-NEXT:    # sched: [7:1.00]
841; SANDY-NEXT:    addw $7, %di # sched: [1:0.33]
842; SANDY-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
843; SANDY-NEXT:    addw %dx, %di # sched: [1:0.33]
844; SANDY-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
845; SANDY-NEXT:    addw (%rsi), %di # sched: [6:0.50]
846; SANDY-NEXT:    #NO_APP
847; SANDY-NEXT:    retq # sched: [1:1.00]
848;
849; HASWELL-LABEL: test_add_16:
850; HASWELL:       # %bb.0:
851; HASWELL-NEXT:    #APP
852; HASWELL-NEXT:    addw $511, %ax # imm = 0x1FF
853; HASWELL-NEXT:    # sched: [1:0.25]
854; HASWELL-NEXT:    addw $511, %di # imm = 0x1FF
855; HASWELL-NEXT:    # sched: [1:0.25]
856; HASWELL-NEXT:    addw $511, (%rsi) # imm = 0x1FF
857; HASWELL-NEXT:    # sched: [7:1.00]
858; HASWELL-NEXT:    addw $7, %di # sched: [1:0.25]
859; HASWELL-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
860; HASWELL-NEXT:    addw %dx, %di # sched: [1:0.25]
861; HASWELL-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
862; HASWELL-NEXT:    addw (%rsi), %di # sched: [6:0.50]
863; HASWELL-NEXT:    #NO_APP
864; HASWELL-NEXT:    retq # sched: [7:1.00]
865;
866; BROADWELL-LABEL: test_add_16:
867; BROADWELL:       # %bb.0:
868; BROADWELL-NEXT:    #APP
869; BROADWELL-NEXT:    addw $511, %ax # imm = 0x1FF
870; BROADWELL-NEXT:    # sched: [1:0.25]
871; BROADWELL-NEXT:    addw $511, %di # imm = 0x1FF
872; BROADWELL-NEXT:    # sched: [1:0.25]
873; BROADWELL-NEXT:    addw $511, (%rsi) # imm = 0x1FF
874; BROADWELL-NEXT:    # sched: [7:1.00]
875; BROADWELL-NEXT:    addw $7, %di # sched: [1:0.25]
876; BROADWELL-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
877; BROADWELL-NEXT:    addw %dx, %di # sched: [1:0.25]
878; BROADWELL-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
879; BROADWELL-NEXT:    addw (%rsi), %di # sched: [6:0.50]
880; BROADWELL-NEXT:    #NO_APP
881; BROADWELL-NEXT:    retq # sched: [7:1.00]
882;
883; SKYLAKE-LABEL: test_add_16:
884; SKYLAKE:       # %bb.0:
885; SKYLAKE-NEXT:    #APP
886; SKYLAKE-NEXT:    addw $511, %ax # imm = 0x1FF
887; SKYLAKE-NEXT:    # sched: [1:0.25]
888; SKYLAKE-NEXT:    addw $511, %di # imm = 0x1FF
889; SKYLAKE-NEXT:    # sched: [1:0.25]
890; SKYLAKE-NEXT:    addw $511, (%rsi) # imm = 0x1FF
891; SKYLAKE-NEXT:    # sched: [7:1.00]
892; SKYLAKE-NEXT:    addw $7, %di # sched: [1:0.25]
893; SKYLAKE-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
894; SKYLAKE-NEXT:    addw %dx, %di # sched: [1:0.25]
895; SKYLAKE-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
896; SKYLAKE-NEXT:    addw (%rsi), %di # sched: [6:0.50]
897; SKYLAKE-NEXT:    #NO_APP
898; SKYLAKE-NEXT:    retq # sched: [7:1.00]
899;
900; SKX-LABEL: test_add_16:
901; SKX:       # %bb.0:
902; SKX-NEXT:    #APP
903; SKX-NEXT:    addw $511, %ax # imm = 0x1FF
904; SKX-NEXT:    # sched: [1:0.25]
905; SKX-NEXT:    addw $511, %di # imm = 0x1FF
906; SKX-NEXT:    # sched: [1:0.25]
907; SKX-NEXT:    addw $511, (%rsi) # imm = 0x1FF
908; SKX-NEXT:    # sched: [7:1.00]
909; SKX-NEXT:    addw $7, %di # sched: [1:0.25]
910; SKX-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
911; SKX-NEXT:    addw %dx, %di # sched: [1:0.25]
912; SKX-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
913; SKX-NEXT:    addw (%rsi), %di # sched: [6:0.50]
914; SKX-NEXT:    #NO_APP
915; SKX-NEXT:    retq # sched: [7:1.00]
916;
917; BTVER2-LABEL: test_add_16:
918; BTVER2:       # %bb.0:
919; BTVER2-NEXT:    #APP
920; BTVER2-NEXT:    addw $511, %ax # imm = 0x1FF
921; BTVER2-NEXT:    # sched: [1:0.50]
922; BTVER2-NEXT:    addw $511, %di # imm = 0x1FF
923; BTVER2-NEXT:    # sched: [1:0.50]
924; BTVER2-NEXT:    addw $511, (%rsi) # imm = 0x1FF
925; BTVER2-NEXT:    # sched: [5:1.00]
926; BTVER2-NEXT:    addw $7, %di # sched: [1:0.50]
927; BTVER2-NEXT:    addw $7, (%rsi) # sched: [5:1.00]
928; BTVER2-NEXT:    addw %dx, %di # sched: [1:0.50]
929; BTVER2-NEXT:    addw %di, (%rsi) # sched: [5:1.00]
930; BTVER2-NEXT:    addw (%rsi), %di # sched: [4:1.00]
931; BTVER2-NEXT:    #NO_APP
932; BTVER2-NEXT:    retq # sched: [4:1.00]
933;
934; ZNVER1-LABEL: test_add_16:
935; ZNVER1:       # %bb.0:
936; ZNVER1-NEXT:    #APP
937; ZNVER1-NEXT:    addw $511, %ax # imm = 0x1FF
938; ZNVER1-NEXT:    # sched: [1:0.25]
939; ZNVER1-NEXT:    addw $511, %di # imm = 0x1FF
940; ZNVER1-NEXT:    # sched: [1:0.25]
941; ZNVER1-NEXT:    addw $511, (%rsi) # imm = 0x1FF
942; ZNVER1-NEXT:    # sched: [5:0.50]
943; ZNVER1-NEXT:    addw $7, %di # sched: [1:0.25]
944; ZNVER1-NEXT:    addw $7, (%rsi) # sched: [5:0.50]
945; ZNVER1-NEXT:    addw %dx, %di # sched: [1:0.25]
946; ZNVER1-NEXT:    addw %di, (%rsi) # sched: [5:0.50]
947; ZNVER1-NEXT:    addw (%rsi), %di # sched: [5:0.50]
948; ZNVER1-NEXT:    #NO_APP
949; ZNVER1-NEXT:    retq # sched: [1:0.50]
950  tail call void asm "addw $3, %AX \0A\09 addw $3, $0 \0A\09 addw $3, $2 \0A\09 addw $4, $0 \0A\09 addw $4, $2 \0A\09 addw $1, $0 \0A\09 addw $0, $2 \0A\09 addw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
951  ret void
952}
953define void @test_add_32(i32 %a0, i32* %a1, i32 %a2) optsize {
954; GENERIC-LABEL: test_add_32:
955; GENERIC:       # %bb.0:
956; GENERIC-NEXT:    #APP
957; GENERIC-NEXT:    addl $665536, %eax # imm = 0xA27C0
958; GENERIC-NEXT:    # sched: [1:0.33]
959; GENERIC-NEXT:    addl $665536, %edi # imm = 0xA27C0
960; GENERIC-NEXT:    # sched: [1:0.33]
961; GENERIC-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
962; GENERIC-NEXT:    # sched: [7:1.00]
963; GENERIC-NEXT:    addl $7, %edi # sched: [1:0.33]
964; GENERIC-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
965; GENERIC-NEXT:    addl %edx, %edi # sched: [1:0.33]
966; GENERIC-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
967; GENERIC-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
968; GENERIC-NEXT:    #NO_APP
969; GENERIC-NEXT:    retq # sched: [1:1.00]
970;
971; ATOM-LABEL: test_add_32:
972; ATOM:       # %bb.0:
973; ATOM-NEXT:    #APP
974; ATOM-NEXT:    addl $665536, %eax # imm = 0xA27C0
975; ATOM-NEXT:    # sched: [1:0.50]
976; ATOM-NEXT:    addl $665536, %edi # imm = 0xA27C0
977; ATOM-NEXT:    # sched: [1:0.50]
978; ATOM-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
979; ATOM-NEXT:    # sched: [1:1.00]
980; ATOM-NEXT:    addl $7, %edi # sched: [1:0.50]
981; ATOM-NEXT:    addl $7, (%rsi) # sched: [1:1.00]
982; ATOM-NEXT:    addl %edx, %edi # sched: [1:0.50]
983; ATOM-NEXT:    addl %edi, (%rsi) # sched: [1:1.00]
984; ATOM-NEXT:    addl (%rsi), %edi # sched: [1:1.00]
985; ATOM-NEXT:    #NO_APP
986; ATOM-NEXT:    retq # sched: [79:39.50]
987;
988; SLM-LABEL: test_add_32:
989; SLM:       # %bb.0:
990; SLM-NEXT:    #APP
991; SLM-NEXT:    addl $665536, %eax # imm = 0xA27C0
992; SLM-NEXT:    # sched: [1:0.50]
993; SLM-NEXT:    addl $665536, %edi # imm = 0xA27C0
994; SLM-NEXT:    # sched: [1:0.50]
995; SLM-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
996; SLM-NEXT:    # sched: [5:2.00]
997; SLM-NEXT:    addl $7, %edi # sched: [1:0.50]
998; SLM-NEXT:    addl $7, (%rsi) # sched: [5:2.00]
999; SLM-NEXT:    addl %edx, %edi # sched: [1:0.50]
1000; SLM-NEXT:    addl %edi, (%rsi) # sched: [5:2.00]
1001; SLM-NEXT:    addl (%rsi), %edi # sched: [4:1.00]
1002; SLM-NEXT:    #NO_APP
1003; SLM-NEXT:    retq # sched: [4:1.00]
1004;
1005; SANDY-LABEL: test_add_32:
1006; SANDY:       # %bb.0:
1007; SANDY-NEXT:    #APP
1008; SANDY-NEXT:    addl $665536, %eax # imm = 0xA27C0
1009; SANDY-NEXT:    # sched: [1:0.33]
1010; SANDY-NEXT:    addl $665536, %edi # imm = 0xA27C0
1011; SANDY-NEXT:    # sched: [1:0.33]
1012; SANDY-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
1013; SANDY-NEXT:    # sched: [7:1.00]
1014; SANDY-NEXT:    addl $7, %edi # sched: [1:0.33]
1015; SANDY-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
1016; SANDY-NEXT:    addl %edx, %edi # sched: [1:0.33]
1017; SANDY-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
1018; SANDY-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
1019; SANDY-NEXT:    #NO_APP
1020; SANDY-NEXT:    retq # sched: [1:1.00]
1021;
1022; HASWELL-LABEL: test_add_32:
1023; HASWELL:       # %bb.0:
1024; HASWELL-NEXT:    #APP
1025; HASWELL-NEXT:    addl $665536, %eax # imm = 0xA27C0
1026; HASWELL-NEXT:    # sched: [1:0.25]
1027; HASWELL-NEXT:    addl $665536, %edi # imm = 0xA27C0
1028; HASWELL-NEXT:    # sched: [1:0.25]
1029; HASWELL-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
1030; HASWELL-NEXT:    # sched: [7:1.00]
1031; HASWELL-NEXT:    addl $7, %edi # sched: [1:0.25]
1032; HASWELL-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
1033; HASWELL-NEXT:    addl %edx, %edi # sched: [1:0.25]
1034; HASWELL-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
1035; HASWELL-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
1036; HASWELL-NEXT:    #NO_APP
1037; HASWELL-NEXT:    retq # sched: [7:1.00]
1038;
1039; BROADWELL-LABEL: test_add_32:
1040; BROADWELL:       # %bb.0:
1041; BROADWELL-NEXT:    #APP
1042; BROADWELL-NEXT:    addl $665536, %eax # imm = 0xA27C0
1043; BROADWELL-NEXT:    # sched: [1:0.25]
1044; BROADWELL-NEXT:    addl $665536, %edi # imm = 0xA27C0
1045; BROADWELL-NEXT:    # sched: [1:0.25]
1046; BROADWELL-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
1047; BROADWELL-NEXT:    # sched: [7:1.00]
1048; BROADWELL-NEXT:    addl $7, %edi # sched: [1:0.25]
1049; BROADWELL-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
1050; BROADWELL-NEXT:    addl %edx, %edi # sched: [1:0.25]
1051; BROADWELL-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
1052; BROADWELL-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
1053; BROADWELL-NEXT:    #NO_APP
1054; BROADWELL-NEXT:    retq # sched: [7:1.00]
1055;
1056; SKYLAKE-LABEL: test_add_32:
1057; SKYLAKE:       # %bb.0:
1058; SKYLAKE-NEXT:    #APP
1059; SKYLAKE-NEXT:    addl $665536, %eax # imm = 0xA27C0
1060; SKYLAKE-NEXT:    # sched: [1:0.25]
1061; SKYLAKE-NEXT:    addl $665536, %edi # imm = 0xA27C0
1062; SKYLAKE-NEXT:    # sched: [1:0.25]
1063; SKYLAKE-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
1064; SKYLAKE-NEXT:    # sched: [7:1.00]
1065; SKYLAKE-NEXT:    addl $7, %edi # sched: [1:0.25]
1066; SKYLAKE-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
1067; SKYLAKE-NEXT:    addl %edx, %edi # sched: [1:0.25]
1068; SKYLAKE-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
1069; SKYLAKE-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
1070; SKYLAKE-NEXT:    #NO_APP
1071; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1072;
1073; SKX-LABEL: test_add_32:
1074; SKX:       # %bb.0:
1075; SKX-NEXT:    #APP
1076; SKX-NEXT:    addl $665536, %eax # imm = 0xA27C0
1077; SKX-NEXT:    # sched: [1:0.25]
1078; SKX-NEXT:    addl $665536, %edi # imm = 0xA27C0
1079; SKX-NEXT:    # sched: [1:0.25]
1080; SKX-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
1081; SKX-NEXT:    # sched: [7:1.00]
1082; SKX-NEXT:    addl $7, %edi # sched: [1:0.25]
1083; SKX-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
1084; SKX-NEXT:    addl %edx, %edi # sched: [1:0.25]
1085; SKX-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
1086; SKX-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
1087; SKX-NEXT:    #NO_APP
1088; SKX-NEXT:    retq # sched: [7:1.00]
1089;
1090; BTVER2-LABEL: test_add_32:
1091; BTVER2:       # %bb.0:
1092; BTVER2-NEXT:    #APP
1093; BTVER2-NEXT:    addl $665536, %eax # imm = 0xA27C0
1094; BTVER2-NEXT:    # sched: [1:0.50]
1095; BTVER2-NEXT:    addl $665536, %edi # imm = 0xA27C0
1096; BTVER2-NEXT:    # sched: [1:0.50]
1097; BTVER2-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
1098; BTVER2-NEXT:    # sched: [5:1.00]
1099; BTVER2-NEXT:    addl $7, %edi # sched: [1:0.50]
1100; BTVER2-NEXT:    addl $7, (%rsi) # sched: [5:1.00]
1101; BTVER2-NEXT:    addl %edx, %edi # sched: [1:0.50]
1102; BTVER2-NEXT:    addl %edi, (%rsi) # sched: [5:1.00]
1103; BTVER2-NEXT:    addl (%rsi), %edi # sched: [4:1.00]
1104; BTVER2-NEXT:    #NO_APP
1105; BTVER2-NEXT:    retq # sched: [4:1.00]
1106;
1107; ZNVER1-LABEL: test_add_32:
1108; ZNVER1:       # %bb.0:
1109; ZNVER1-NEXT:    #APP
1110; ZNVER1-NEXT:    addl $665536, %eax # imm = 0xA27C0
1111; ZNVER1-NEXT:    # sched: [1:0.25]
1112; ZNVER1-NEXT:    addl $665536, %edi # imm = 0xA27C0
1113; ZNVER1-NEXT:    # sched: [1:0.25]
1114; ZNVER1-NEXT:    addl $665536, (%rsi) # imm = 0xA27C0
1115; ZNVER1-NEXT:    # sched: [5:0.50]
1116; ZNVER1-NEXT:    addl $7, %edi # sched: [1:0.25]
1117; ZNVER1-NEXT:    addl $7, (%rsi) # sched: [5:0.50]
1118; ZNVER1-NEXT:    addl %edx, %edi # sched: [1:0.25]
1119; ZNVER1-NEXT:    addl %edi, (%rsi) # sched: [5:0.50]
1120; ZNVER1-NEXT:    addl (%rsi), %edi # sched: [5:0.50]
1121; ZNVER1-NEXT:    #NO_APP
1122; ZNVER1-NEXT:    retq # sched: [1:0.50]
1123  tail call void asm "addl $3, %EAX \0A\09 addl $3, $0 \0A\09 addl $3, $2 \0A\09 addl $4, $0 \0A\09 addl $4, $2 \0A\09 addl $1, $0 \0A\09 addl $0, $2 \0A\09 addl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
1124  ret void
1125}
1126define void @test_add_64(i64 %a0, i64* %a1, i64 %a2) optsize {
1127; GENERIC-LABEL: test_add_64:
1128; GENERIC:       # %bb.0:
1129; GENERIC-NEXT:    #APP
1130; GENERIC-NEXT:    addq $665536, %rax # imm = 0xA27C0
1131; GENERIC-NEXT:    # sched: [1:0.33]
1132; GENERIC-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1133; GENERIC-NEXT:    # sched: [1:0.33]
1134; GENERIC-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1135; GENERIC-NEXT:    # sched: [7:1.00]
1136; GENERIC-NEXT:    addq $7, %rdi # sched: [1:0.33]
1137; GENERIC-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
1138; GENERIC-NEXT:    addq %rdx, %rdi # sched: [1:0.33]
1139; GENERIC-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
1140; GENERIC-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
1141; GENERIC-NEXT:    #NO_APP
1142; GENERIC-NEXT:    retq # sched: [1:1.00]
1143;
1144; ATOM-LABEL: test_add_64:
1145; ATOM:       # %bb.0:
1146; ATOM-NEXT:    #APP
1147; ATOM-NEXT:    addq $665536, %rax # imm = 0xA27C0
1148; ATOM-NEXT:    # sched: [1:0.50]
1149; ATOM-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1150; ATOM-NEXT:    # sched: [1:0.50]
1151; ATOM-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1152; ATOM-NEXT:    # sched: [1:1.00]
1153; ATOM-NEXT:    addq $7, %rdi # sched: [1:0.50]
1154; ATOM-NEXT:    addq $7, (%rsi) # sched: [1:1.00]
1155; ATOM-NEXT:    addq %rdx, %rdi # sched: [1:0.50]
1156; ATOM-NEXT:    addq %rdi, (%rsi) # sched: [1:1.00]
1157; ATOM-NEXT:    addq (%rsi), %rdi # sched: [1:1.00]
1158; ATOM-NEXT:    #NO_APP
1159; ATOM-NEXT:    retq # sched: [79:39.50]
1160;
1161; SLM-LABEL: test_add_64:
1162; SLM:       # %bb.0:
1163; SLM-NEXT:    #APP
1164; SLM-NEXT:    addq $665536, %rax # imm = 0xA27C0
1165; SLM-NEXT:    # sched: [1:0.50]
1166; SLM-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1167; SLM-NEXT:    # sched: [1:0.50]
1168; SLM-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1169; SLM-NEXT:    # sched: [5:2.00]
1170; SLM-NEXT:    addq $7, %rdi # sched: [1:0.50]
1171; SLM-NEXT:    addq $7, (%rsi) # sched: [5:2.00]
1172; SLM-NEXT:    addq %rdx, %rdi # sched: [1:0.50]
1173; SLM-NEXT:    addq %rdi, (%rsi) # sched: [5:2.00]
1174; SLM-NEXT:    addq (%rsi), %rdi # sched: [4:1.00]
1175; SLM-NEXT:    #NO_APP
1176; SLM-NEXT:    retq # sched: [4:1.00]
1177;
1178; SANDY-LABEL: test_add_64:
1179; SANDY:       # %bb.0:
1180; SANDY-NEXT:    #APP
1181; SANDY-NEXT:    addq $665536, %rax # imm = 0xA27C0
1182; SANDY-NEXT:    # sched: [1:0.33]
1183; SANDY-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1184; SANDY-NEXT:    # sched: [1:0.33]
1185; SANDY-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1186; SANDY-NEXT:    # sched: [7:1.00]
1187; SANDY-NEXT:    addq $7, %rdi # sched: [1:0.33]
1188; SANDY-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
1189; SANDY-NEXT:    addq %rdx, %rdi # sched: [1:0.33]
1190; SANDY-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
1191; SANDY-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
1192; SANDY-NEXT:    #NO_APP
1193; SANDY-NEXT:    retq # sched: [1:1.00]
1194;
1195; HASWELL-LABEL: test_add_64:
1196; HASWELL:       # %bb.0:
1197; HASWELL-NEXT:    #APP
1198; HASWELL-NEXT:    addq $665536, %rax # imm = 0xA27C0
1199; HASWELL-NEXT:    # sched: [1:0.25]
1200; HASWELL-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1201; HASWELL-NEXT:    # sched: [1:0.25]
1202; HASWELL-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1203; HASWELL-NEXT:    # sched: [7:1.00]
1204; HASWELL-NEXT:    addq $7, %rdi # sched: [1:0.25]
1205; HASWELL-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
1206; HASWELL-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
1207; HASWELL-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
1208; HASWELL-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
1209; HASWELL-NEXT:    #NO_APP
1210; HASWELL-NEXT:    retq # sched: [7:1.00]
1211;
1212; BROADWELL-LABEL: test_add_64:
1213; BROADWELL:       # %bb.0:
1214; BROADWELL-NEXT:    #APP
1215; BROADWELL-NEXT:    addq $665536, %rax # imm = 0xA27C0
1216; BROADWELL-NEXT:    # sched: [1:0.25]
1217; BROADWELL-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1218; BROADWELL-NEXT:    # sched: [1:0.25]
1219; BROADWELL-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1220; BROADWELL-NEXT:    # sched: [7:1.00]
1221; BROADWELL-NEXT:    addq $7, %rdi # sched: [1:0.25]
1222; BROADWELL-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
1223; BROADWELL-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
1224; BROADWELL-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
1225; BROADWELL-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
1226; BROADWELL-NEXT:    #NO_APP
1227; BROADWELL-NEXT:    retq # sched: [7:1.00]
1228;
1229; SKYLAKE-LABEL: test_add_64:
1230; SKYLAKE:       # %bb.0:
1231; SKYLAKE-NEXT:    #APP
1232; SKYLAKE-NEXT:    addq $665536, %rax # imm = 0xA27C0
1233; SKYLAKE-NEXT:    # sched: [1:0.25]
1234; SKYLAKE-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1235; SKYLAKE-NEXT:    # sched: [1:0.25]
1236; SKYLAKE-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1237; SKYLAKE-NEXT:    # sched: [7:1.00]
1238; SKYLAKE-NEXT:    addq $7, %rdi # sched: [1:0.25]
1239; SKYLAKE-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
1240; SKYLAKE-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
1241; SKYLAKE-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
1242; SKYLAKE-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
1243; SKYLAKE-NEXT:    #NO_APP
1244; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1245;
1246; SKX-LABEL: test_add_64:
1247; SKX:       # %bb.0:
1248; SKX-NEXT:    #APP
1249; SKX-NEXT:    addq $665536, %rax # imm = 0xA27C0
1250; SKX-NEXT:    # sched: [1:0.25]
1251; SKX-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1252; SKX-NEXT:    # sched: [1:0.25]
1253; SKX-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1254; SKX-NEXT:    # sched: [7:1.00]
1255; SKX-NEXT:    addq $7, %rdi # sched: [1:0.25]
1256; SKX-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
1257; SKX-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
1258; SKX-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
1259; SKX-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
1260; SKX-NEXT:    #NO_APP
1261; SKX-NEXT:    retq # sched: [7:1.00]
1262;
1263; BTVER2-LABEL: test_add_64:
1264; BTVER2:       # %bb.0:
1265; BTVER2-NEXT:    #APP
1266; BTVER2-NEXT:    addq $665536, %rax # imm = 0xA27C0
1267; BTVER2-NEXT:    # sched: [1:0.50]
1268; BTVER2-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1269; BTVER2-NEXT:    # sched: [1:0.50]
1270; BTVER2-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1271; BTVER2-NEXT:    # sched: [5:1.00]
1272; BTVER2-NEXT:    addq $7, %rdi # sched: [1:0.50]
1273; BTVER2-NEXT:    addq $7, (%rsi) # sched: [5:1.00]
1274; BTVER2-NEXT:    addq %rdx, %rdi # sched: [1:0.50]
1275; BTVER2-NEXT:    addq %rdi, (%rsi) # sched: [5:1.00]
1276; BTVER2-NEXT:    addq (%rsi), %rdi # sched: [4:1.00]
1277; BTVER2-NEXT:    #NO_APP
1278; BTVER2-NEXT:    retq # sched: [4:1.00]
1279;
1280; ZNVER1-LABEL: test_add_64:
1281; ZNVER1:       # %bb.0:
1282; ZNVER1-NEXT:    #APP
1283; ZNVER1-NEXT:    addq $665536, %rax # imm = 0xA27C0
1284; ZNVER1-NEXT:    # sched: [1:0.25]
1285; ZNVER1-NEXT:    addq $665536, %rdi # imm = 0xA27C0
1286; ZNVER1-NEXT:    # sched: [1:0.25]
1287; ZNVER1-NEXT:    addq $665536, (%rsi) # imm = 0xA27C0
1288; ZNVER1-NEXT:    # sched: [5:0.50]
1289; ZNVER1-NEXT:    addq $7, %rdi # sched: [1:0.25]
1290; ZNVER1-NEXT:    addq $7, (%rsi) # sched: [5:0.50]
1291; ZNVER1-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
1292; ZNVER1-NEXT:    addq %rdi, (%rsi) # sched: [5:0.50]
1293; ZNVER1-NEXT:    addq (%rsi), %rdi # sched: [5:0.50]
1294; ZNVER1-NEXT:    #NO_APP
1295; ZNVER1-NEXT:    retq # sched: [1:0.50]
1296  tail call void asm "addq $3, %RAX \0A\09 addq $3, $0 \0A\09 addq $3, $2 \0A\09 addq $4, $0 \0A\09 addq $4, $2 \0A\09 addq $1, $0 \0A\09 addq $0, $2 \0A\09 addq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
1297  ret void
1298}
1299
1300define void @test_and_8(i8 %a0, i8* %a1, i8 %a2) optsize {
1301; GENERIC-LABEL: test_and_8:
1302; GENERIC:       # %bb.0:
1303; GENERIC-NEXT:    #APP
1304; GENERIC-NEXT:    andb $7, %al # sched: [1:0.33]
1305; GENERIC-NEXT:    andb $7, %dil # sched: [1:0.33]
1306; GENERIC-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
1307; GENERIC-NEXT:    andb %dl, %dil # sched: [1:0.33]
1308; GENERIC-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
1309; GENERIC-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
1310; GENERIC-NEXT:    #NO_APP
1311; GENERIC-NEXT:    retq # sched: [1:1.00]
1312;
1313; ATOM-LABEL: test_and_8:
1314; ATOM:       # %bb.0:
1315; ATOM-NEXT:    #APP
1316; ATOM-NEXT:    andb $7, %al # sched: [1:0.50]
1317; ATOM-NEXT:    andb $7, %dil # sched: [1:0.50]
1318; ATOM-NEXT:    andb $7, (%rsi) # sched: [1:1.00]
1319; ATOM-NEXT:    andb %dl, %dil # sched: [1:0.50]
1320; ATOM-NEXT:    andb %dil, (%rsi) # sched: [1:1.00]
1321; ATOM-NEXT:    andb (%rsi), %dil # sched: [1:1.00]
1322; ATOM-NEXT:    #NO_APP
1323; ATOM-NEXT:    retq # sched: [79:39.50]
1324;
1325; SLM-LABEL: test_and_8:
1326; SLM:       # %bb.0:
1327; SLM-NEXT:    #APP
1328; SLM-NEXT:    andb $7, %al # sched: [1:0.50]
1329; SLM-NEXT:    andb $7, %dil # sched: [1:0.50]
1330; SLM-NEXT:    andb $7, (%rsi) # sched: [5:2.00]
1331; SLM-NEXT:    andb %dl, %dil # sched: [1:0.50]
1332; SLM-NEXT:    andb %dil, (%rsi) # sched: [5:2.00]
1333; SLM-NEXT:    andb (%rsi), %dil # sched: [4:1.00]
1334; SLM-NEXT:    #NO_APP
1335; SLM-NEXT:    retq # sched: [4:1.00]
1336;
1337; SANDY-LABEL: test_and_8:
1338; SANDY:       # %bb.0:
1339; SANDY-NEXT:    #APP
1340; SANDY-NEXT:    andb $7, %al # sched: [1:0.33]
1341; SANDY-NEXT:    andb $7, %dil # sched: [1:0.33]
1342; SANDY-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
1343; SANDY-NEXT:    andb %dl, %dil # sched: [1:0.33]
1344; SANDY-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
1345; SANDY-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
1346; SANDY-NEXT:    #NO_APP
1347; SANDY-NEXT:    retq # sched: [1:1.00]
1348;
1349; HASWELL-LABEL: test_and_8:
1350; HASWELL:       # %bb.0:
1351; HASWELL-NEXT:    #APP
1352; HASWELL-NEXT:    andb $7, %al # sched: [1:0.25]
1353; HASWELL-NEXT:    andb $7, %dil # sched: [1:0.25]
1354; HASWELL-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
1355; HASWELL-NEXT:    andb %dl, %dil # sched: [1:0.25]
1356; HASWELL-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
1357; HASWELL-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
1358; HASWELL-NEXT:    #NO_APP
1359; HASWELL-NEXT:    retq # sched: [7:1.00]
1360;
1361; BROADWELL-LABEL: test_and_8:
1362; BROADWELL:       # %bb.0:
1363; BROADWELL-NEXT:    #APP
1364; BROADWELL-NEXT:    andb $7, %al # sched: [1:0.25]
1365; BROADWELL-NEXT:    andb $7, %dil # sched: [1:0.25]
1366; BROADWELL-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
1367; BROADWELL-NEXT:    andb %dl, %dil # sched: [1:0.25]
1368; BROADWELL-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
1369; BROADWELL-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
1370; BROADWELL-NEXT:    #NO_APP
1371; BROADWELL-NEXT:    retq # sched: [7:1.00]
1372;
1373; SKYLAKE-LABEL: test_and_8:
1374; SKYLAKE:       # %bb.0:
1375; SKYLAKE-NEXT:    #APP
1376; SKYLAKE-NEXT:    andb $7, %al # sched: [1:0.25]
1377; SKYLAKE-NEXT:    andb $7, %dil # sched: [1:0.25]
1378; SKYLAKE-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
1379; SKYLAKE-NEXT:    andb %dl, %dil # sched: [1:0.25]
1380; SKYLAKE-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
1381; SKYLAKE-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
1382; SKYLAKE-NEXT:    #NO_APP
1383; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1384;
1385; SKX-LABEL: test_and_8:
1386; SKX:       # %bb.0:
1387; SKX-NEXT:    #APP
1388; SKX-NEXT:    andb $7, %al # sched: [1:0.25]
1389; SKX-NEXT:    andb $7, %dil # sched: [1:0.25]
1390; SKX-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
1391; SKX-NEXT:    andb %dl, %dil # sched: [1:0.25]
1392; SKX-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
1393; SKX-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
1394; SKX-NEXT:    #NO_APP
1395; SKX-NEXT:    retq # sched: [7:1.00]
1396;
1397; BTVER2-LABEL: test_and_8:
1398; BTVER2:       # %bb.0:
1399; BTVER2-NEXT:    #APP
1400; BTVER2-NEXT:    andb $7, %al # sched: [1:0.50]
1401; BTVER2-NEXT:    andb $7, %dil # sched: [1:0.50]
1402; BTVER2-NEXT:    andb $7, (%rsi) # sched: [5:1.00]
1403; BTVER2-NEXT:    andb %dl, %dil # sched: [1:0.50]
1404; BTVER2-NEXT:    andb %dil, (%rsi) # sched: [5:1.00]
1405; BTVER2-NEXT:    andb (%rsi), %dil # sched: [4:1.00]
1406; BTVER2-NEXT:    #NO_APP
1407; BTVER2-NEXT:    retq # sched: [4:1.00]
1408;
1409; ZNVER1-LABEL: test_and_8:
1410; ZNVER1:       # %bb.0:
1411; ZNVER1-NEXT:    #APP
1412; ZNVER1-NEXT:    andb $7, %al # sched: [1:0.25]
1413; ZNVER1-NEXT:    andb $7, %dil # sched: [1:0.25]
1414; ZNVER1-NEXT:    andb $7, (%rsi) # sched: [5:0.50]
1415; ZNVER1-NEXT:    andb %dl, %dil # sched: [1:0.25]
1416; ZNVER1-NEXT:    andb %dil, (%rsi) # sched: [5:0.50]
1417; ZNVER1-NEXT:    andb (%rsi), %dil # sched: [5:0.50]
1418; ZNVER1-NEXT:    #NO_APP
1419; ZNVER1-NEXT:    retq # sched: [1:0.50]
1420  tail call void asm "andb $3, %AL \0A\09 andb $3, $0 \0A\09 andb $3, $2 \0A\09 andb $1, $0 \0A\09 andb $0, $2 \0A\09 andb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
1421  ret void
1422}
1423define void @test_and_16(i16 %a0, i16* %a1, i16 %a2) optsize {
1424; GENERIC-LABEL: test_and_16:
1425; GENERIC:       # %bb.0:
1426; GENERIC-NEXT:    #APP
1427; GENERIC-NEXT:    andw $511, %ax # imm = 0x1FF
1428; GENERIC-NEXT:    # sched: [1:0.33]
1429; GENERIC-NEXT:    andw $511, %di # imm = 0x1FF
1430; GENERIC-NEXT:    # sched: [1:0.33]
1431; GENERIC-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1432; GENERIC-NEXT:    # sched: [7:1.00]
1433; GENERIC-NEXT:    andw $7, %di # sched: [1:0.33]
1434; GENERIC-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
1435; GENERIC-NEXT:    andw %dx, %di # sched: [1:0.33]
1436; GENERIC-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
1437; GENERIC-NEXT:    andw (%rsi), %di # sched: [6:0.50]
1438; GENERIC-NEXT:    #NO_APP
1439; GENERIC-NEXT:    retq # sched: [1:1.00]
1440;
1441; ATOM-LABEL: test_and_16:
1442; ATOM:       # %bb.0:
1443; ATOM-NEXT:    #APP
1444; ATOM-NEXT:    andw $511, %ax # imm = 0x1FF
1445; ATOM-NEXT:    # sched: [1:0.50]
1446; ATOM-NEXT:    andw $511, %di # imm = 0x1FF
1447; ATOM-NEXT:    # sched: [1:0.50]
1448; ATOM-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1449; ATOM-NEXT:    # sched: [1:1.00]
1450; ATOM-NEXT:    andw $7, %di # sched: [1:0.50]
1451; ATOM-NEXT:    andw $7, (%rsi) # sched: [1:1.00]
1452; ATOM-NEXT:    andw %dx, %di # sched: [1:0.50]
1453; ATOM-NEXT:    andw %di, (%rsi) # sched: [1:1.00]
1454; ATOM-NEXT:    andw (%rsi), %di # sched: [1:1.00]
1455; ATOM-NEXT:    #NO_APP
1456; ATOM-NEXT:    retq # sched: [79:39.50]
1457;
1458; SLM-LABEL: test_and_16:
1459; SLM:       # %bb.0:
1460; SLM-NEXT:    #APP
1461; SLM-NEXT:    andw $511, %ax # imm = 0x1FF
1462; SLM-NEXT:    # sched: [1:0.50]
1463; SLM-NEXT:    andw $511, %di # imm = 0x1FF
1464; SLM-NEXT:    # sched: [1:0.50]
1465; SLM-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1466; SLM-NEXT:    # sched: [5:2.00]
1467; SLM-NEXT:    andw $7, %di # sched: [1:0.50]
1468; SLM-NEXT:    andw $7, (%rsi) # sched: [5:2.00]
1469; SLM-NEXT:    andw %dx, %di # sched: [1:0.50]
1470; SLM-NEXT:    andw %di, (%rsi) # sched: [5:2.00]
1471; SLM-NEXT:    andw (%rsi), %di # sched: [4:1.00]
1472; SLM-NEXT:    #NO_APP
1473; SLM-NEXT:    retq # sched: [4:1.00]
1474;
1475; SANDY-LABEL: test_and_16:
1476; SANDY:       # %bb.0:
1477; SANDY-NEXT:    #APP
1478; SANDY-NEXT:    andw $511, %ax # imm = 0x1FF
1479; SANDY-NEXT:    # sched: [1:0.33]
1480; SANDY-NEXT:    andw $511, %di # imm = 0x1FF
1481; SANDY-NEXT:    # sched: [1:0.33]
1482; SANDY-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1483; SANDY-NEXT:    # sched: [7:1.00]
1484; SANDY-NEXT:    andw $7, %di # sched: [1:0.33]
1485; SANDY-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
1486; SANDY-NEXT:    andw %dx, %di # sched: [1:0.33]
1487; SANDY-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
1488; SANDY-NEXT:    andw (%rsi), %di # sched: [6:0.50]
1489; SANDY-NEXT:    #NO_APP
1490; SANDY-NEXT:    retq # sched: [1:1.00]
1491;
1492; HASWELL-LABEL: test_and_16:
1493; HASWELL:       # %bb.0:
1494; HASWELL-NEXT:    #APP
1495; HASWELL-NEXT:    andw $511, %ax # imm = 0x1FF
1496; HASWELL-NEXT:    # sched: [1:0.25]
1497; HASWELL-NEXT:    andw $511, %di # imm = 0x1FF
1498; HASWELL-NEXT:    # sched: [1:0.25]
1499; HASWELL-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1500; HASWELL-NEXT:    # sched: [7:1.00]
1501; HASWELL-NEXT:    andw $7, %di # sched: [1:0.25]
1502; HASWELL-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
1503; HASWELL-NEXT:    andw %dx, %di # sched: [1:0.25]
1504; HASWELL-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
1505; HASWELL-NEXT:    andw (%rsi), %di # sched: [6:0.50]
1506; HASWELL-NEXT:    #NO_APP
1507; HASWELL-NEXT:    retq # sched: [7:1.00]
1508;
1509; BROADWELL-LABEL: test_and_16:
1510; BROADWELL:       # %bb.0:
1511; BROADWELL-NEXT:    #APP
1512; BROADWELL-NEXT:    andw $511, %ax # imm = 0x1FF
1513; BROADWELL-NEXT:    # sched: [1:0.25]
1514; BROADWELL-NEXT:    andw $511, %di # imm = 0x1FF
1515; BROADWELL-NEXT:    # sched: [1:0.25]
1516; BROADWELL-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1517; BROADWELL-NEXT:    # sched: [7:1.00]
1518; BROADWELL-NEXT:    andw $7, %di # sched: [1:0.25]
1519; BROADWELL-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
1520; BROADWELL-NEXT:    andw %dx, %di # sched: [1:0.25]
1521; BROADWELL-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
1522; BROADWELL-NEXT:    andw (%rsi), %di # sched: [6:0.50]
1523; BROADWELL-NEXT:    #NO_APP
1524; BROADWELL-NEXT:    retq # sched: [7:1.00]
1525;
1526; SKYLAKE-LABEL: test_and_16:
1527; SKYLAKE:       # %bb.0:
1528; SKYLAKE-NEXT:    #APP
1529; SKYLAKE-NEXT:    andw $511, %ax # imm = 0x1FF
1530; SKYLAKE-NEXT:    # sched: [1:0.25]
1531; SKYLAKE-NEXT:    andw $511, %di # imm = 0x1FF
1532; SKYLAKE-NEXT:    # sched: [1:0.25]
1533; SKYLAKE-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1534; SKYLAKE-NEXT:    # sched: [7:1.00]
1535; SKYLAKE-NEXT:    andw $7, %di # sched: [1:0.25]
1536; SKYLAKE-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
1537; SKYLAKE-NEXT:    andw %dx, %di # sched: [1:0.25]
1538; SKYLAKE-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
1539; SKYLAKE-NEXT:    andw (%rsi), %di # sched: [6:0.50]
1540; SKYLAKE-NEXT:    #NO_APP
1541; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1542;
1543; SKX-LABEL: test_and_16:
1544; SKX:       # %bb.0:
1545; SKX-NEXT:    #APP
1546; SKX-NEXT:    andw $511, %ax # imm = 0x1FF
1547; SKX-NEXT:    # sched: [1:0.25]
1548; SKX-NEXT:    andw $511, %di # imm = 0x1FF
1549; SKX-NEXT:    # sched: [1:0.25]
1550; SKX-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1551; SKX-NEXT:    # sched: [7:1.00]
1552; SKX-NEXT:    andw $7, %di # sched: [1:0.25]
1553; SKX-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
1554; SKX-NEXT:    andw %dx, %di # sched: [1:0.25]
1555; SKX-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
1556; SKX-NEXT:    andw (%rsi), %di # sched: [6:0.50]
1557; SKX-NEXT:    #NO_APP
1558; SKX-NEXT:    retq # sched: [7:1.00]
1559;
1560; BTVER2-LABEL: test_and_16:
1561; BTVER2:       # %bb.0:
1562; BTVER2-NEXT:    #APP
1563; BTVER2-NEXT:    andw $511, %ax # imm = 0x1FF
1564; BTVER2-NEXT:    # sched: [1:0.50]
1565; BTVER2-NEXT:    andw $511, %di # imm = 0x1FF
1566; BTVER2-NEXT:    # sched: [1:0.50]
1567; BTVER2-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1568; BTVER2-NEXT:    # sched: [5:1.00]
1569; BTVER2-NEXT:    andw $7, %di # sched: [1:0.50]
1570; BTVER2-NEXT:    andw $7, (%rsi) # sched: [5:1.00]
1571; BTVER2-NEXT:    andw %dx, %di # sched: [1:0.50]
1572; BTVER2-NEXT:    andw %di, (%rsi) # sched: [5:1.00]
1573; BTVER2-NEXT:    andw (%rsi), %di # sched: [4:1.00]
1574; BTVER2-NEXT:    #NO_APP
1575; BTVER2-NEXT:    retq # sched: [4:1.00]
1576;
1577; ZNVER1-LABEL: test_and_16:
1578; ZNVER1:       # %bb.0:
1579; ZNVER1-NEXT:    #APP
1580; ZNVER1-NEXT:    andw $511, %ax # imm = 0x1FF
1581; ZNVER1-NEXT:    # sched: [1:0.25]
1582; ZNVER1-NEXT:    andw $511, %di # imm = 0x1FF
1583; ZNVER1-NEXT:    # sched: [1:0.25]
1584; ZNVER1-NEXT:    andw $511, (%rsi) # imm = 0x1FF
1585; ZNVER1-NEXT:    # sched: [5:0.50]
1586; ZNVER1-NEXT:    andw $7, %di # sched: [1:0.25]
1587; ZNVER1-NEXT:    andw $7, (%rsi) # sched: [5:0.50]
1588; ZNVER1-NEXT:    andw %dx, %di # sched: [1:0.25]
1589; ZNVER1-NEXT:    andw %di, (%rsi) # sched: [5:0.50]
1590; ZNVER1-NEXT:    andw (%rsi), %di # sched: [5:0.50]
1591; ZNVER1-NEXT:    #NO_APP
1592; ZNVER1-NEXT:    retq # sched: [1:0.50]
1593  tail call void asm "andw $3, %AX \0A\09 andw $3, $0 \0A\09 andw $3, $2 \0A\09 andw $4, $0 \0A\09 andw $4, $2 \0A\09 andw $1, $0 \0A\09 andw $0, $2 \0A\09 andw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
1594  ret void
1595}
1596define void @test_and_32(i32 %a0, i32* %a1, i32 %a2) optsize {
1597; GENERIC-LABEL: test_and_32:
1598; GENERIC:       # %bb.0:
1599; GENERIC-NEXT:    #APP
1600; GENERIC-NEXT:    andl $665536, %eax # imm = 0xA27C0
1601; GENERIC-NEXT:    # sched: [1:0.33]
1602; GENERIC-NEXT:    andl $665536, %edi # imm = 0xA27C0
1603; GENERIC-NEXT:    # sched: [1:0.33]
1604; GENERIC-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1605; GENERIC-NEXT:    # sched: [7:1.00]
1606; GENERIC-NEXT:    andl $7, %edi # sched: [1:0.33]
1607; GENERIC-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
1608; GENERIC-NEXT:    andl %edx, %edi # sched: [1:0.33]
1609; GENERIC-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
1610; GENERIC-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
1611; GENERIC-NEXT:    #NO_APP
1612; GENERIC-NEXT:    retq # sched: [1:1.00]
1613;
1614; ATOM-LABEL: test_and_32:
1615; ATOM:       # %bb.0:
1616; ATOM-NEXT:    #APP
1617; ATOM-NEXT:    andl $665536, %eax # imm = 0xA27C0
1618; ATOM-NEXT:    # sched: [1:0.50]
1619; ATOM-NEXT:    andl $665536, %edi # imm = 0xA27C0
1620; ATOM-NEXT:    # sched: [1:0.50]
1621; ATOM-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1622; ATOM-NEXT:    # sched: [1:1.00]
1623; ATOM-NEXT:    andl $7, %edi # sched: [1:0.50]
1624; ATOM-NEXT:    andl $7, (%rsi) # sched: [1:1.00]
1625; ATOM-NEXT:    andl %edx, %edi # sched: [1:0.50]
1626; ATOM-NEXT:    andl %edi, (%rsi) # sched: [1:1.00]
1627; ATOM-NEXT:    andl (%rsi), %edi # sched: [1:1.00]
1628; ATOM-NEXT:    #NO_APP
1629; ATOM-NEXT:    retq # sched: [79:39.50]
1630;
1631; SLM-LABEL: test_and_32:
1632; SLM:       # %bb.0:
1633; SLM-NEXT:    #APP
1634; SLM-NEXT:    andl $665536, %eax # imm = 0xA27C0
1635; SLM-NEXT:    # sched: [1:0.50]
1636; SLM-NEXT:    andl $665536, %edi # imm = 0xA27C0
1637; SLM-NEXT:    # sched: [1:0.50]
1638; SLM-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1639; SLM-NEXT:    # sched: [5:2.00]
1640; SLM-NEXT:    andl $7, %edi # sched: [1:0.50]
1641; SLM-NEXT:    andl $7, (%rsi) # sched: [5:2.00]
1642; SLM-NEXT:    andl %edx, %edi # sched: [1:0.50]
1643; SLM-NEXT:    andl %edi, (%rsi) # sched: [5:2.00]
1644; SLM-NEXT:    andl (%rsi), %edi # sched: [4:1.00]
1645; SLM-NEXT:    #NO_APP
1646; SLM-NEXT:    retq # sched: [4:1.00]
1647;
1648; SANDY-LABEL: test_and_32:
1649; SANDY:       # %bb.0:
1650; SANDY-NEXT:    #APP
1651; SANDY-NEXT:    andl $665536, %eax # imm = 0xA27C0
1652; SANDY-NEXT:    # sched: [1:0.33]
1653; SANDY-NEXT:    andl $665536, %edi # imm = 0xA27C0
1654; SANDY-NEXT:    # sched: [1:0.33]
1655; SANDY-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1656; SANDY-NEXT:    # sched: [7:1.00]
1657; SANDY-NEXT:    andl $7, %edi # sched: [1:0.33]
1658; SANDY-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
1659; SANDY-NEXT:    andl %edx, %edi # sched: [1:0.33]
1660; SANDY-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
1661; SANDY-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
1662; SANDY-NEXT:    #NO_APP
1663; SANDY-NEXT:    retq # sched: [1:1.00]
1664;
1665; HASWELL-LABEL: test_and_32:
1666; HASWELL:       # %bb.0:
1667; HASWELL-NEXT:    #APP
1668; HASWELL-NEXT:    andl $665536, %eax # imm = 0xA27C0
1669; HASWELL-NEXT:    # sched: [1:0.25]
1670; HASWELL-NEXT:    andl $665536, %edi # imm = 0xA27C0
1671; HASWELL-NEXT:    # sched: [1:0.25]
1672; HASWELL-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1673; HASWELL-NEXT:    # sched: [7:1.00]
1674; HASWELL-NEXT:    andl $7, %edi # sched: [1:0.25]
1675; HASWELL-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
1676; HASWELL-NEXT:    andl %edx, %edi # sched: [1:0.25]
1677; HASWELL-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
1678; HASWELL-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
1679; HASWELL-NEXT:    #NO_APP
1680; HASWELL-NEXT:    retq # sched: [7:1.00]
1681;
1682; BROADWELL-LABEL: test_and_32:
1683; BROADWELL:       # %bb.0:
1684; BROADWELL-NEXT:    #APP
1685; BROADWELL-NEXT:    andl $665536, %eax # imm = 0xA27C0
1686; BROADWELL-NEXT:    # sched: [1:0.25]
1687; BROADWELL-NEXT:    andl $665536, %edi # imm = 0xA27C0
1688; BROADWELL-NEXT:    # sched: [1:0.25]
1689; BROADWELL-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1690; BROADWELL-NEXT:    # sched: [7:1.00]
1691; BROADWELL-NEXT:    andl $7, %edi # sched: [1:0.25]
1692; BROADWELL-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
1693; BROADWELL-NEXT:    andl %edx, %edi # sched: [1:0.25]
1694; BROADWELL-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
1695; BROADWELL-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
1696; BROADWELL-NEXT:    #NO_APP
1697; BROADWELL-NEXT:    retq # sched: [7:1.00]
1698;
1699; SKYLAKE-LABEL: test_and_32:
1700; SKYLAKE:       # %bb.0:
1701; SKYLAKE-NEXT:    #APP
1702; SKYLAKE-NEXT:    andl $665536, %eax # imm = 0xA27C0
1703; SKYLAKE-NEXT:    # sched: [1:0.25]
1704; SKYLAKE-NEXT:    andl $665536, %edi # imm = 0xA27C0
1705; SKYLAKE-NEXT:    # sched: [1:0.25]
1706; SKYLAKE-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1707; SKYLAKE-NEXT:    # sched: [7:1.00]
1708; SKYLAKE-NEXT:    andl $7, %edi # sched: [1:0.25]
1709; SKYLAKE-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
1710; SKYLAKE-NEXT:    andl %edx, %edi # sched: [1:0.25]
1711; SKYLAKE-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
1712; SKYLAKE-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
1713; SKYLAKE-NEXT:    #NO_APP
1714; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1715;
1716; SKX-LABEL: test_and_32:
1717; SKX:       # %bb.0:
1718; SKX-NEXT:    #APP
1719; SKX-NEXT:    andl $665536, %eax # imm = 0xA27C0
1720; SKX-NEXT:    # sched: [1:0.25]
1721; SKX-NEXT:    andl $665536, %edi # imm = 0xA27C0
1722; SKX-NEXT:    # sched: [1:0.25]
1723; SKX-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1724; SKX-NEXT:    # sched: [7:1.00]
1725; SKX-NEXT:    andl $7, %edi # sched: [1:0.25]
1726; SKX-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
1727; SKX-NEXT:    andl %edx, %edi # sched: [1:0.25]
1728; SKX-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
1729; SKX-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
1730; SKX-NEXT:    #NO_APP
1731; SKX-NEXT:    retq # sched: [7:1.00]
1732;
1733; BTVER2-LABEL: test_and_32:
1734; BTVER2:       # %bb.0:
1735; BTVER2-NEXT:    #APP
1736; BTVER2-NEXT:    andl $665536, %eax # imm = 0xA27C0
1737; BTVER2-NEXT:    # sched: [1:0.50]
1738; BTVER2-NEXT:    andl $665536, %edi # imm = 0xA27C0
1739; BTVER2-NEXT:    # sched: [1:0.50]
1740; BTVER2-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1741; BTVER2-NEXT:    # sched: [5:1.00]
1742; BTVER2-NEXT:    andl $7, %edi # sched: [1:0.50]
1743; BTVER2-NEXT:    andl $7, (%rsi) # sched: [5:1.00]
1744; BTVER2-NEXT:    andl %edx, %edi # sched: [1:0.50]
1745; BTVER2-NEXT:    andl %edi, (%rsi) # sched: [5:1.00]
1746; BTVER2-NEXT:    andl (%rsi), %edi # sched: [4:1.00]
1747; BTVER2-NEXT:    #NO_APP
1748; BTVER2-NEXT:    retq # sched: [4:1.00]
1749;
1750; ZNVER1-LABEL: test_and_32:
1751; ZNVER1:       # %bb.0:
1752; ZNVER1-NEXT:    #APP
1753; ZNVER1-NEXT:    andl $665536, %eax # imm = 0xA27C0
1754; ZNVER1-NEXT:    # sched: [1:0.25]
1755; ZNVER1-NEXT:    andl $665536, %edi # imm = 0xA27C0
1756; ZNVER1-NEXT:    # sched: [1:0.25]
1757; ZNVER1-NEXT:    andl $665536, (%rsi) # imm = 0xA27C0
1758; ZNVER1-NEXT:    # sched: [5:0.50]
1759; ZNVER1-NEXT:    andl $7, %edi # sched: [1:0.25]
1760; ZNVER1-NEXT:    andl $7, (%rsi) # sched: [5:0.50]
1761; ZNVER1-NEXT:    andl %edx, %edi # sched: [1:0.25]
1762; ZNVER1-NEXT:    andl %edi, (%rsi) # sched: [5:0.50]
1763; ZNVER1-NEXT:    andl (%rsi), %edi # sched: [5:0.50]
1764; ZNVER1-NEXT:    #NO_APP
1765; ZNVER1-NEXT:    retq # sched: [1:0.50]
1766  tail call void asm "andl $3, %EAX \0A\09 andl $3, $0 \0A\09 andl $3, $2 \0A\09 andl $4, $0 \0A\09 andl $4, $2 \0A\09 andl $1, $0 \0A\09 andl $0, $2 \0A\09 andl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
1767  ret void
1768}
1769define void @test_and_64(i64 %a0, i64* %a1, i64 %a2) optsize {
1770; GENERIC-LABEL: test_and_64:
1771; GENERIC:       # %bb.0:
1772; GENERIC-NEXT:    #APP
1773; GENERIC-NEXT:    andq $665536, %rax # imm = 0xA27C0
1774; GENERIC-NEXT:    # sched: [1:0.33]
1775; GENERIC-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1776; GENERIC-NEXT:    # sched: [1:0.33]
1777; GENERIC-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1778; GENERIC-NEXT:    # sched: [7:1.00]
1779; GENERIC-NEXT:    andq $7, %rdi # sched: [1:0.33]
1780; GENERIC-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
1781; GENERIC-NEXT:    andq %rdx, %rdi # sched: [1:0.33]
1782; GENERIC-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
1783; GENERIC-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
1784; GENERIC-NEXT:    #NO_APP
1785; GENERIC-NEXT:    retq # sched: [1:1.00]
1786;
1787; ATOM-LABEL: test_and_64:
1788; ATOM:       # %bb.0:
1789; ATOM-NEXT:    #APP
1790; ATOM-NEXT:    andq $665536, %rax # imm = 0xA27C0
1791; ATOM-NEXT:    # sched: [1:0.50]
1792; ATOM-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1793; ATOM-NEXT:    # sched: [1:0.50]
1794; ATOM-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1795; ATOM-NEXT:    # sched: [1:1.00]
1796; ATOM-NEXT:    andq $7, %rdi # sched: [1:0.50]
1797; ATOM-NEXT:    andq $7, (%rsi) # sched: [1:1.00]
1798; ATOM-NEXT:    andq %rdx, %rdi # sched: [1:0.50]
1799; ATOM-NEXT:    andq %rdi, (%rsi) # sched: [1:1.00]
1800; ATOM-NEXT:    andq (%rsi), %rdi # sched: [1:1.00]
1801; ATOM-NEXT:    #NO_APP
1802; ATOM-NEXT:    retq # sched: [79:39.50]
1803;
1804; SLM-LABEL: test_and_64:
1805; SLM:       # %bb.0:
1806; SLM-NEXT:    #APP
1807; SLM-NEXT:    andq $665536, %rax # imm = 0xA27C0
1808; SLM-NEXT:    # sched: [1:0.50]
1809; SLM-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1810; SLM-NEXT:    # sched: [1:0.50]
1811; SLM-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1812; SLM-NEXT:    # sched: [5:2.00]
1813; SLM-NEXT:    andq $7, %rdi # sched: [1:0.50]
1814; SLM-NEXT:    andq $7, (%rsi) # sched: [5:2.00]
1815; SLM-NEXT:    andq %rdx, %rdi # sched: [1:0.50]
1816; SLM-NEXT:    andq %rdi, (%rsi) # sched: [5:2.00]
1817; SLM-NEXT:    andq (%rsi), %rdi # sched: [4:1.00]
1818; SLM-NEXT:    #NO_APP
1819; SLM-NEXT:    retq # sched: [4:1.00]
1820;
1821; SANDY-LABEL: test_and_64:
1822; SANDY:       # %bb.0:
1823; SANDY-NEXT:    #APP
1824; SANDY-NEXT:    andq $665536, %rax # imm = 0xA27C0
1825; SANDY-NEXT:    # sched: [1:0.33]
1826; SANDY-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1827; SANDY-NEXT:    # sched: [1:0.33]
1828; SANDY-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1829; SANDY-NEXT:    # sched: [7:1.00]
1830; SANDY-NEXT:    andq $7, %rdi # sched: [1:0.33]
1831; SANDY-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
1832; SANDY-NEXT:    andq %rdx, %rdi # sched: [1:0.33]
1833; SANDY-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
1834; SANDY-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
1835; SANDY-NEXT:    #NO_APP
1836; SANDY-NEXT:    retq # sched: [1:1.00]
1837;
1838; HASWELL-LABEL: test_and_64:
1839; HASWELL:       # %bb.0:
1840; HASWELL-NEXT:    #APP
1841; HASWELL-NEXT:    andq $665536, %rax # imm = 0xA27C0
1842; HASWELL-NEXT:    # sched: [1:0.25]
1843; HASWELL-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1844; HASWELL-NEXT:    # sched: [1:0.25]
1845; HASWELL-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1846; HASWELL-NEXT:    # sched: [7:1.00]
1847; HASWELL-NEXT:    andq $7, %rdi # sched: [1:0.25]
1848; HASWELL-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
1849; HASWELL-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
1850; HASWELL-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
1851; HASWELL-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
1852; HASWELL-NEXT:    #NO_APP
1853; HASWELL-NEXT:    retq # sched: [7:1.00]
1854;
1855; BROADWELL-LABEL: test_and_64:
1856; BROADWELL:       # %bb.0:
1857; BROADWELL-NEXT:    #APP
1858; BROADWELL-NEXT:    andq $665536, %rax # imm = 0xA27C0
1859; BROADWELL-NEXT:    # sched: [1:0.25]
1860; BROADWELL-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1861; BROADWELL-NEXT:    # sched: [1:0.25]
1862; BROADWELL-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1863; BROADWELL-NEXT:    # sched: [7:1.00]
1864; BROADWELL-NEXT:    andq $7, %rdi # sched: [1:0.25]
1865; BROADWELL-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
1866; BROADWELL-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
1867; BROADWELL-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
1868; BROADWELL-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
1869; BROADWELL-NEXT:    #NO_APP
1870; BROADWELL-NEXT:    retq # sched: [7:1.00]
1871;
1872; SKYLAKE-LABEL: test_and_64:
1873; SKYLAKE:       # %bb.0:
1874; SKYLAKE-NEXT:    #APP
1875; SKYLAKE-NEXT:    andq $665536, %rax # imm = 0xA27C0
1876; SKYLAKE-NEXT:    # sched: [1:0.25]
1877; SKYLAKE-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1878; SKYLAKE-NEXT:    # sched: [1:0.25]
1879; SKYLAKE-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1880; SKYLAKE-NEXT:    # sched: [7:1.00]
1881; SKYLAKE-NEXT:    andq $7, %rdi # sched: [1:0.25]
1882; SKYLAKE-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
1883; SKYLAKE-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
1884; SKYLAKE-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
1885; SKYLAKE-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
1886; SKYLAKE-NEXT:    #NO_APP
1887; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1888;
1889; SKX-LABEL: test_and_64:
1890; SKX:       # %bb.0:
1891; SKX-NEXT:    #APP
1892; SKX-NEXT:    andq $665536, %rax # imm = 0xA27C0
1893; SKX-NEXT:    # sched: [1:0.25]
1894; SKX-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1895; SKX-NEXT:    # sched: [1:0.25]
1896; SKX-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1897; SKX-NEXT:    # sched: [7:1.00]
1898; SKX-NEXT:    andq $7, %rdi # sched: [1:0.25]
1899; SKX-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
1900; SKX-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
1901; SKX-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
1902; SKX-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
1903; SKX-NEXT:    #NO_APP
1904; SKX-NEXT:    retq # sched: [7:1.00]
1905;
1906; BTVER2-LABEL: test_and_64:
1907; BTVER2:       # %bb.0:
1908; BTVER2-NEXT:    #APP
1909; BTVER2-NEXT:    andq $665536, %rax # imm = 0xA27C0
1910; BTVER2-NEXT:    # sched: [1:0.50]
1911; BTVER2-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1912; BTVER2-NEXT:    # sched: [1:0.50]
1913; BTVER2-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1914; BTVER2-NEXT:    # sched: [5:1.00]
1915; BTVER2-NEXT:    andq $7, %rdi # sched: [1:0.50]
1916; BTVER2-NEXT:    andq $7, (%rsi) # sched: [5:1.00]
1917; BTVER2-NEXT:    andq %rdx, %rdi # sched: [1:0.50]
1918; BTVER2-NEXT:    andq %rdi, (%rsi) # sched: [5:1.00]
1919; BTVER2-NEXT:    andq (%rsi), %rdi # sched: [4:1.00]
1920; BTVER2-NEXT:    #NO_APP
1921; BTVER2-NEXT:    retq # sched: [4:1.00]
1922;
1923; ZNVER1-LABEL: test_and_64:
1924; ZNVER1:       # %bb.0:
1925; ZNVER1-NEXT:    #APP
1926; ZNVER1-NEXT:    andq $665536, %rax # imm = 0xA27C0
1927; ZNVER1-NEXT:    # sched: [1:0.25]
1928; ZNVER1-NEXT:    andq $665536, %rdi # imm = 0xA27C0
1929; ZNVER1-NEXT:    # sched: [1:0.25]
1930; ZNVER1-NEXT:    andq $665536, (%rsi) # imm = 0xA27C0
1931; ZNVER1-NEXT:    # sched: [5:0.50]
1932; ZNVER1-NEXT:    andq $7, %rdi # sched: [1:0.25]
1933; ZNVER1-NEXT:    andq $7, (%rsi) # sched: [5:0.50]
1934; ZNVER1-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
1935; ZNVER1-NEXT:    andq %rdi, (%rsi) # sched: [5:0.50]
1936; ZNVER1-NEXT:    andq (%rsi), %rdi # sched: [5:0.50]
1937; ZNVER1-NEXT:    #NO_APP
1938; ZNVER1-NEXT:    retq # sched: [1:0.50]
1939  tail call void asm "andq $3, %RAX \0A\09 andq $3, $0 \0A\09 andq $3, $2 \0A\09 andq $4, $0 \0A\09 andq $4, $2 \0A\09 andq $1, $0 \0A\09 andq $0, $2 \0A\09 andq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
1940  ret void
1941}
1942
1943define i16 @test_bsf16(i16 %a0, i16* %a1) optsize {
1944; GENERIC-LABEL: test_bsf16:
1945; GENERIC:       # %bb.0:
1946; GENERIC-NEXT:    #APP
1947; GENERIC-NEXT:    bsfw %di, %ax # sched: [3:1.00]
1948; GENERIC-NEXT:    bsfw (%rsi), %cx # sched: [8:1.00]
1949; GENERIC-NEXT:    #NO_APP
1950; GENERIC-NEXT:    orl %ecx, %eax # sched: [1:0.33]
1951; GENERIC-NEXT:    # kill: def $ax killed $ax killed $eax
1952; GENERIC-NEXT:    retq # sched: [1:1.00]
1953;
1954; ATOM-LABEL: test_bsf16:
1955; ATOM:       # %bb.0:
1956; ATOM-NEXT:    #APP
1957; ATOM-NEXT:    bsfw %di, %ax # sched: [16:8.00]
1958; ATOM-NEXT:    bsfw (%rsi), %cx # sched: [16:8.00]
1959; ATOM-NEXT:    #NO_APP
1960; ATOM-NEXT:    orl %ecx, %eax # sched: [1:0.50]
1961; ATOM-NEXT:    # kill: def $ax killed $ax killed $eax
1962; ATOM-NEXT:    retq # sched: [79:39.50]
1963;
1964; SLM-LABEL: test_bsf16:
1965; SLM:       # %bb.0:
1966; SLM-NEXT:    #APP
1967; SLM-NEXT:    bsfw %di, %ax # sched: [10:10.00]
1968; SLM-NEXT:    bsfw (%rsi), %cx # sched: [13:10.00]
1969; SLM-NEXT:    #NO_APP
1970; SLM-NEXT:    orl %ecx, %eax # sched: [1:0.50]
1971; SLM-NEXT:    # kill: def $ax killed $ax killed $eax
1972; SLM-NEXT:    retq # sched: [4:1.00]
1973;
1974; SANDY-LABEL: test_bsf16:
1975; SANDY:       # %bb.0:
1976; SANDY-NEXT:    #APP
1977; SANDY-NEXT:    bsfw %di, %ax # sched: [3:1.00]
1978; SANDY-NEXT:    bsfw (%rsi), %cx # sched: [8:1.00]
1979; SANDY-NEXT:    #NO_APP
1980; SANDY-NEXT:    orl %ecx, %eax # sched: [1:0.33]
1981; SANDY-NEXT:    # kill: def $ax killed $ax killed $eax
1982; SANDY-NEXT:    retq # sched: [1:1.00]
1983;
1984; HASWELL-LABEL: test_bsf16:
1985; HASWELL:       # %bb.0:
1986; HASWELL-NEXT:    #APP
1987; HASWELL-NEXT:    bsfw %di, %ax # sched: [3:1.00]
1988; HASWELL-NEXT:    bsfw (%rsi), %cx # sched: [8:1.00]
1989; HASWELL-NEXT:    #NO_APP
1990; HASWELL-NEXT:    orl %ecx, %eax # sched: [1:0.25]
1991; HASWELL-NEXT:    # kill: def $ax killed $ax killed $eax
1992; HASWELL-NEXT:    retq # sched: [7:1.00]
1993;
1994; BROADWELL-LABEL: test_bsf16:
1995; BROADWELL:       # %bb.0:
1996; BROADWELL-NEXT:    #APP
1997; BROADWELL-NEXT:    bsfw %di, %ax # sched: [3:1.00]
1998; BROADWELL-NEXT:    bsfw (%rsi), %cx # sched: [8:1.00]
1999; BROADWELL-NEXT:    #NO_APP
2000; BROADWELL-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2001; BROADWELL-NEXT:    # kill: def $ax killed $ax killed $eax
2002; BROADWELL-NEXT:    retq # sched: [7:1.00]
2003;
2004; SKYLAKE-LABEL: test_bsf16:
2005; SKYLAKE:       # %bb.0:
2006; SKYLAKE-NEXT:    #APP
2007; SKYLAKE-NEXT:    bsfw %di, %ax # sched: [3:1.00]
2008; SKYLAKE-NEXT:    bsfw (%rsi), %cx # sched: [8:1.00]
2009; SKYLAKE-NEXT:    #NO_APP
2010; SKYLAKE-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2011; SKYLAKE-NEXT:    # kill: def $ax killed $ax killed $eax
2012; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2013;
2014; SKX-LABEL: test_bsf16:
2015; SKX:       # %bb.0:
2016; SKX-NEXT:    #APP
2017; SKX-NEXT:    bsfw %di, %ax # sched: [3:1.00]
2018; SKX-NEXT:    bsfw (%rsi), %cx # sched: [8:1.00]
2019; SKX-NEXT:    #NO_APP
2020; SKX-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2021; SKX-NEXT:    # kill: def $ax killed $ax killed $eax
2022; SKX-NEXT:    retq # sched: [7:1.00]
2023;
2024; BTVER2-LABEL: test_bsf16:
2025; BTVER2:       # %bb.0:
2026; BTVER2-NEXT:    #APP
2027; BTVER2-NEXT:    bsfw %di, %ax # sched: [5:2.00]
2028; BTVER2-NEXT:    bsfw (%rsi), %cx # sched: [8:2.00]
2029; BTVER2-NEXT:    #NO_APP
2030; BTVER2-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2031; BTVER2-NEXT:    # kill: def $ax killed $ax killed $eax
2032; BTVER2-NEXT:    retq # sched: [4:1.00]
2033;
2034; ZNVER1-LABEL: test_bsf16:
2035; ZNVER1:       # %bb.0:
2036; ZNVER1-NEXT:    #APP
2037; ZNVER1-NEXT:    bsfw %di, %ax # sched: [3:0.25]
2038; ZNVER1-NEXT:    bsfw (%rsi), %cx # sched: [7:0.50]
2039; ZNVER1-NEXT:    #NO_APP
2040; ZNVER1-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2041; ZNVER1-NEXT:    # kill: def $ax killed $ax killed $eax
2042; ZNVER1-NEXT:    retq # sched: [1:0.50]
2043  %1 = call { i16, i16 } asm sideeffect "bsf $2, $0 \0A\09 bsf $3, $1", "=r,=r,r,*m,~{dirflag},~{fpsr},~{flags}"(i16 %a0, i16* %a1)
2044  %2 = extractvalue { i16, i16 } %1, 0
2045  %3 = extractvalue { i16, i16 } %1, 1
2046  %4 = or i16 %2, %3
2047  ret i16 %4
2048}
2049define i32 @test_bsf32(i32 %a0, i32* %a1) optsize {
2050; GENERIC-LABEL: test_bsf32:
2051; GENERIC:       # %bb.0:
2052; GENERIC-NEXT:    #APP
2053; GENERIC-NEXT:    bsfl %edi, %eax # sched: [3:1.00]
2054; GENERIC-NEXT:    bsfl (%rsi), %ecx # sched: [8:1.00]
2055; GENERIC-NEXT:    #NO_APP
2056; GENERIC-NEXT:    orl %ecx, %eax # sched: [1:0.33]
2057; GENERIC-NEXT:    retq # sched: [1:1.00]
2058;
2059; ATOM-LABEL: test_bsf32:
2060; ATOM:       # %bb.0:
2061; ATOM-NEXT:    #APP
2062; ATOM-NEXT:    bsfl %edi, %eax # sched: [16:8.00]
2063; ATOM-NEXT:    bsfl (%rsi), %ecx # sched: [16:8.00]
2064; ATOM-NEXT:    #NO_APP
2065; ATOM-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2066; ATOM-NEXT:    retq # sched: [79:39.50]
2067;
2068; SLM-LABEL: test_bsf32:
2069; SLM:       # %bb.0:
2070; SLM-NEXT:    #APP
2071; SLM-NEXT:    bsfl %edi, %eax # sched: [10:10.00]
2072; SLM-NEXT:    bsfl (%rsi), %ecx # sched: [13:10.00]
2073; SLM-NEXT:    #NO_APP
2074; SLM-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2075; SLM-NEXT:    retq # sched: [4:1.00]
2076;
2077; SANDY-LABEL: test_bsf32:
2078; SANDY:       # %bb.0:
2079; SANDY-NEXT:    #APP
2080; SANDY-NEXT:    bsfl %edi, %eax # sched: [3:1.00]
2081; SANDY-NEXT:    bsfl (%rsi), %ecx # sched: [8:1.00]
2082; SANDY-NEXT:    #NO_APP
2083; SANDY-NEXT:    orl %ecx, %eax # sched: [1:0.33]
2084; SANDY-NEXT:    retq # sched: [1:1.00]
2085;
2086; HASWELL-LABEL: test_bsf32:
2087; HASWELL:       # %bb.0:
2088; HASWELL-NEXT:    #APP
2089; HASWELL-NEXT:    bsfl %edi, %eax # sched: [3:1.00]
2090; HASWELL-NEXT:    bsfl (%rsi), %ecx # sched: [8:1.00]
2091; HASWELL-NEXT:    #NO_APP
2092; HASWELL-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2093; HASWELL-NEXT:    retq # sched: [7:1.00]
2094;
2095; BROADWELL-LABEL: test_bsf32:
2096; BROADWELL:       # %bb.0:
2097; BROADWELL-NEXT:    #APP
2098; BROADWELL-NEXT:    bsfl %edi, %eax # sched: [3:1.00]
2099; BROADWELL-NEXT:    bsfl (%rsi), %ecx # sched: [8:1.00]
2100; BROADWELL-NEXT:    #NO_APP
2101; BROADWELL-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2102; BROADWELL-NEXT:    retq # sched: [7:1.00]
2103;
2104; SKYLAKE-LABEL: test_bsf32:
2105; SKYLAKE:       # %bb.0:
2106; SKYLAKE-NEXT:    #APP
2107; SKYLAKE-NEXT:    bsfl %edi, %eax # sched: [3:1.00]
2108; SKYLAKE-NEXT:    bsfl (%rsi), %ecx # sched: [8:1.00]
2109; SKYLAKE-NEXT:    #NO_APP
2110; SKYLAKE-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2111; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2112;
2113; SKX-LABEL: test_bsf32:
2114; SKX:       # %bb.0:
2115; SKX-NEXT:    #APP
2116; SKX-NEXT:    bsfl %edi, %eax # sched: [3:1.00]
2117; SKX-NEXT:    bsfl (%rsi), %ecx # sched: [8:1.00]
2118; SKX-NEXT:    #NO_APP
2119; SKX-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2120; SKX-NEXT:    retq # sched: [7:1.00]
2121;
2122; BTVER2-LABEL: test_bsf32:
2123; BTVER2:       # %bb.0:
2124; BTVER2-NEXT:    #APP
2125; BTVER2-NEXT:    bsfl %edi, %eax # sched: [5:2.00]
2126; BTVER2-NEXT:    bsfl (%rsi), %ecx # sched: [8:2.00]
2127; BTVER2-NEXT:    #NO_APP
2128; BTVER2-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2129; BTVER2-NEXT:    retq # sched: [4:1.00]
2130;
2131; ZNVER1-LABEL: test_bsf32:
2132; ZNVER1:       # %bb.0:
2133; ZNVER1-NEXT:    #APP
2134; ZNVER1-NEXT:    bsfl %edi, %eax # sched: [3:0.25]
2135; ZNVER1-NEXT:    bsfl (%rsi), %ecx # sched: [7:0.50]
2136; ZNVER1-NEXT:    #NO_APP
2137; ZNVER1-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2138; ZNVER1-NEXT:    retq # sched: [1:0.50]
2139  %1 = call { i32, i32 } asm sideeffect "bsf $2, $0 \0A\09 bsf $3, $1", "=r,=r,r,*m,~{dirflag},~{fpsr},~{flags}"(i32 %a0, i32* %a1)
2140  %2 = extractvalue { i32, i32 } %1, 0
2141  %3 = extractvalue { i32, i32 } %1, 1
2142  %4 = or i32 %2, %3
2143  ret i32 %4
2144}
2145define i64 @test_bsf64(i64 %a0, i64* %a1) optsize {
2146; GENERIC-LABEL: test_bsf64:
2147; GENERIC:       # %bb.0:
2148; GENERIC-NEXT:    #APP
2149; GENERIC-NEXT:    bsfq %rdi, %rax # sched: [3:1.00]
2150; GENERIC-NEXT:    bsfq (%rsi), %rcx # sched: [8:1.00]
2151; GENERIC-NEXT:    #NO_APP
2152; GENERIC-NEXT:    orq %rcx, %rax # sched: [1:0.33]
2153; GENERIC-NEXT:    retq # sched: [1:1.00]
2154;
2155; ATOM-LABEL: test_bsf64:
2156; ATOM:       # %bb.0:
2157; ATOM-NEXT:    #APP
2158; ATOM-NEXT:    bsfq %rdi, %rax # sched: [16:8.00]
2159; ATOM-NEXT:    bsfq (%rsi), %rcx # sched: [16:8.00]
2160; ATOM-NEXT:    #NO_APP
2161; ATOM-NEXT:    orq %rcx, %rax # sched: [1:0.50]
2162; ATOM-NEXT:    retq # sched: [79:39.50]
2163;
2164; SLM-LABEL: test_bsf64:
2165; SLM:       # %bb.0:
2166; SLM-NEXT:    #APP
2167; SLM-NEXT:    bsfq %rdi, %rax # sched: [10:10.00]
2168; SLM-NEXT:    bsfq (%rsi), %rcx # sched: [13:10.00]
2169; SLM-NEXT:    #NO_APP
2170; SLM-NEXT:    orq %rcx, %rax # sched: [1:0.50]
2171; SLM-NEXT:    retq # sched: [4:1.00]
2172;
2173; SANDY-LABEL: test_bsf64:
2174; SANDY:       # %bb.0:
2175; SANDY-NEXT:    #APP
2176; SANDY-NEXT:    bsfq %rdi, %rax # sched: [3:1.00]
2177; SANDY-NEXT:    bsfq (%rsi), %rcx # sched: [8:1.00]
2178; SANDY-NEXT:    #NO_APP
2179; SANDY-NEXT:    orq %rcx, %rax # sched: [1:0.33]
2180; SANDY-NEXT:    retq # sched: [1:1.00]
2181;
2182; HASWELL-LABEL: test_bsf64:
2183; HASWELL:       # %bb.0:
2184; HASWELL-NEXT:    #APP
2185; HASWELL-NEXT:    bsfq %rdi, %rax # sched: [3:1.00]
2186; HASWELL-NEXT:    bsfq (%rsi), %rcx # sched: [8:1.00]
2187; HASWELL-NEXT:    #NO_APP
2188; HASWELL-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2189; HASWELL-NEXT:    retq # sched: [7:1.00]
2190;
2191; BROADWELL-LABEL: test_bsf64:
2192; BROADWELL:       # %bb.0:
2193; BROADWELL-NEXT:    #APP
2194; BROADWELL-NEXT:    bsfq %rdi, %rax # sched: [3:1.00]
2195; BROADWELL-NEXT:    bsfq (%rsi), %rcx # sched: [8:1.00]
2196; BROADWELL-NEXT:    #NO_APP
2197; BROADWELL-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2198; BROADWELL-NEXT:    retq # sched: [7:1.00]
2199;
2200; SKYLAKE-LABEL: test_bsf64:
2201; SKYLAKE:       # %bb.0:
2202; SKYLAKE-NEXT:    #APP
2203; SKYLAKE-NEXT:    bsfq %rdi, %rax # sched: [3:1.00]
2204; SKYLAKE-NEXT:    bsfq (%rsi), %rcx # sched: [8:1.00]
2205; SKYLAKE-NEXT:    #NO_APP
2206; SKYLAKE-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2207; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2208;
2209; SKX-LABEL: test_bsf64:
2210; SKX:       # %bb.0:
2211; SKX-NEXT:    #APP
2212; SKX-NEXT:    bsfq %rdi, %rax # sched: [3:1.00]
2213; SKX-NEXT:    bsfq (%rsi), %rcx # sched: [8:1.00]
2214; SKX-NEXT:    #NO_APP
2215; SKX-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2216; SKX-NEXT:    retq # sched: [7:1.00]
2217;
2218; BTVER2-LABEL: test_bsf64:
2219; BTVER2:       # %bb.0:
2220; BTVER2-NEXT:    #APP
2221; BTVER2-NEXT:    bsfq %rdi, %rax # sched: [5:2.00]
2222; BTVER2-NEXT:    bsfq (%rsi), %rcx # sched: [8:2.00]
2223; BTVER2-NEXT:    #NO_APP
2224; BTVER2-NEXT:    orq %rcx, %rax # sched: [1:0.50]
2225; BTVER2-NEXT:    retq # sched: [4:1.00]
2226;
2227; ZNVER1-LABEL: test_bsf64:
2228; ZNVER1:       # %bb.0:
2229; ZNVER1-NEXT:    #APP
2230; ZNVER1-NEXT:    bsfq %rdi, %rax # sched: [3:0.25]
2231; ZNVER1-NEXT:    bsfq (%rsi), %rcx # sched: [7:0.50]
2232; ZNVER1-NEXT:    #NO_APP
2233; ZNVER1-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2234; ZNVER1-NEXT:    retq # sched: [1:0.50]
2235  %1 = call { i64, i64 } asm sideeffect "bsf $2, $0 \0A\09 bsf $3, $1", "=r,=r,r,*m,~{dirflag},~{fpsr},~{flags}"(i64 %a0, i64* %a1)
2236  %2 = extractvalue { i64, i64 } %1, 0
2237  %3 = extractvalue { i64, i64 } %1, 1
2238  %4 = or i64 %2, %3
2239  ret i64 %4
2240}
2241
2242define i16 @test_bsr16(i16 %a0, i16* %a1) optsize {
2243; GENERIC-LABEL: test_bsr16:
2244; GENERIC:       # %bb.0:
2245; GENERIC-NEXT:    #APP
2246; GENERIC-NEXT:    bsrw %di, %ax # sched: [3:1.00]
2247; GENERIC-NEXT:    bsrw (%rsi), %cx # sched: [8:1.00]
2248; GENERIC-NEXT:    #NO_APP
2249; GENERIC-NEXT:    orl %ecx, %eax # sched: [1:0.33]
2250; GENERIC-NEXT:    # kill: def $ax killed $ax killed $eax
2251; GENERIC-NEXT:    retq # sched: [1:1.00]
2252;
2253; ATOM-LABEL: test_bsr16:
2254; ATOM:       # %bb.0:
2255; ATOM-NEXT:    #APP
2256; ATOM-NEXT:    bsrw %di, %ax # sched: [16:8.00]
2257; ATOM-NEXT:    bsrw (%rsi), %cx # sched: [16:8.00]
2258; ATOM-NEXT:    #NO_APP
2259; ATOM-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2260; ATOM-NEXT:    # kill: def $ax killed $ax killed $eax
2261; ATOM-NEXT:    retq # sched: [79:39.50]
2262;
2263; SLM-LABEL: test_bsr16:
2264; SLM:       # %bb.0:
2265; SLM-NEXT:    #APP
2266; SLM-NEXT:    bsrw %di, %ax # sched: [10:10.00]
2267; SLM-NEXT:    bsrw (%rsi), %cx # sched: [13:10.00]
2268; SLM-NEXT:    #NO_APP
2269; SLM-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2270; SLM-NEXT:    # kill: def $ax killed $ax killed $eax
2271; SLM-NEXT:    retq # sched: [4:1.00]
2272;
2273; SANDY-LABEL: test_bsr16:
2274; SANDY:       # %bb.0:
2275; SANDY-NEXT:    #APP
2276; SANDY-NEXT:    bsrw %di, %ax # sched: [3:1.00]
2277; SANDY-NEXT:    bsrw (%rsi), %cx # sched: [8:1.00]
2278; SANDY-NEXT:    #NO_APP
2279; SANDY-NEXT:    orl %ecx, %eax # sched: [1:0.33]
2280; SANDY-NEXT:    # kill: def $ax killed $ax killed $eax
2281; SANDY-NEXT:    retq # sched: [1:1.00]
2282;
2283; HASWELL-LABEL: test_bsr16:
2284; HASWELL:       # %bb.0:
2285; HASWELL-NEXT:    #APP
2286; HASWELL-NEXT:    bsrw %di, %ax # sched: [3:1.00]
2287; HASWELL-NEXT:    bsrw (%rsi), %cx # sched: [8:1.00]
2288; HASWELL-NEXT:    #NO_APP
2289; HASWELL-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2290; HASWELL-NEXT:    # kill: def $ax killed $ax killed $eax
2291; HASWELL-NEXT:    retq # sched: [7:1.00]
2292;
2293; BROADWELL-LABEL: test_bsr16:
2294; BROADWELL:       # %bb.0:
2295; BROADWELL-NEXT:    #APP
2296; BROADWELL-NEXT:    bsrw %di, %ax # sched: [3:1.00]
2297; BROADWELL-NEXT:    bsrw (%rsi), %cx # sched: [8:1.00]
2298; BROADWELL-NEXT:    #NO_APP
2299; BROADWELL-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2300; BROADWELL-NEXT:    # kill: def $ax killed $ax killed $eax
2301; BROADWELL-NEXT:    retq # sched: [7:1.00]
2302;
2303; SKYLAKE-LABEL: test_bsr16:
2304; SKYLAKE:       # %bb.0:
2305; SKYLAKE-NEXT:    #APP
2306; SKYLAKE-NEXT:    bsrw %di, %ax # sched: [3:1.00]
2307; SKYLAKE-NEXT:    bsrw (%rsi), %cx # sched: [8:1.00]
2308; SKYLAKE-NEXT:    #NO_APP
2309; SKYLAKE-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2310; SKYLAKE-NEXT:    # kill: def $ax killed $ax killed $eax
2311; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2312;
2313; SKX-LABEL: test_bsr16:
2314; SKX:       # %bb.0:
2315; SKX-NEXT:    #APP
2316; SKX-NEXT:    bsrw %di, %ax # sched: [3:1.00]
2317; SKX-NEXT:    bsrw (%rsi), %cx # sched: [8:1.00]
2318; SKX-NEXT:    #NO_APP
2319; SKX-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2320; SKX-NEXT:    # kill: def $ax killed $ax killed $eax
2321; SKX-NEXT:    retq # sched: [7:1.00]
2322;
2323; BTVER2-LABEL: test_bsr16:
2324; BTVER2:       # %bb.0:
2325; BTVER2-NEXT:    #APP
2326; BTVER2-NEXT:    bsrw %di, %ax # sched: [5:2.00]
2327; BTVER2-NEXT:    bsrw (%rsi), %cx # sched: [8:2.00]
2328; BTVER2-NEXT:    #NO_APP
2329; BTVER2-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2330; BTVER2-NEXT:    # kill: def $ax killed $ax killed $eax
2331; BTVER2-NEXT:    retq # sched: [4:1.00]
2332;
2333; ZNVER1-LABEL: test_bsr16:
2334; ZNVER1:       # %bb.0:
2335; ZNVER1-NEXT:    #APP
2336; ZNVER1-NEXT:    bsrw %di, %ax # sched: [3:0.25]
2337; ZNVER1-NEXT:    bsrw (%rsi), %cx # sched: [7:0.50]
2338; ZNVER1-NEXT:    #NO_APP
2339; ZNVER1-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2340; ZNVER1-NEXT:    # kill: def $ax killed $ax killed $eax
2341; ZNVER1-NEXT:    retq # sched: [1:0.50]
2342  %1 = call { i16, i16 } asm sideeffect "bsr $2, $0 \0A\09 bsr $3, $1", "=r,=r,r,*m,~{dirflag},~{fpsr},~{flags}"(i16 %a0, i16* %a1)
2343  %2 = extractvalue { i16, i16 } %1, 0
2344  %3 = extractvalue { i16, i16 } %1, 1
2345  %4 = or i16 %2, %3
2346  ret i16 %4
2347}
2348define i32 @test_bsr32(i32 %a0, i32* %a1) optsize {
2349; GENERIC-LABEL: test_bsr32:
2350; GENERIC:       # %bb.0:
2351; GENERIC-NEXT:    #APP
2352; GENERIC-NEXT:    bsrl %edi, %eax # sched: [3:1.00]
2353; GENERIC-NEXT:    bsrl (%rsi), %ecx # sched: [8:1.00]
2354; GENERIC-NEXT:    #NO_APP
2355; GENERIC-NEXT:    orl %ecx, %eax # sched: [1:0.33]
2356; GENERIC-NEXT:    retq # sched: [1:1.00]
2357;
2358; ATOM-LABEL: test_bsr32:
2359; ATOM:       # %bb.0:
2360; ATOM-NEXT:    #APP
2361; ATOM-NEXT:    bsrl %edi, %eax # sched: [16:8.00]
2362; ATOM-NEXT:    bsrl (%rsi), %ecx # sched: [16:8.00]
2363; ATOM-NEXT:    #NO_APP
2364; ATOM-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2365; ATOM-NEXT:    retq # sched: [79:39.50]
2366;
2367; SLM-LABEL: test_bsr32:
2368; SLM:       # %bb.0:
2369; SLM-NEXT:    #APP
2370; SLM-NEXT:    bsrl %edi, %eax # sched: [10:10.00]
2371; SLM-NEXT:    bsrl (%rsi), %ecx # sched: [13:10.00]
2372; SLM-NEXT:    #NO_APP
2373; SLM-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2374; SLM-NEXT:    retq # sched: [4:1.00]
2375;
2376; SANDY-LABEL: test_bsr32:
2377; SANDY:       # %bb.0:
2378; SANDY-NEXT:    #APP
2379; SANDY-NEXT:    bsrl %edi, %eax # sched: [3:1.00]
2380; SANDY-NEXT:    bsrl (%rsi), %ecx # sched: [8:1.00]
2381; SANDY-NEXT:    #NO_APP
2382; SANDY-NEXT:    orl %ecx, %eax # sched: [1:0.33]
2383; SANDY-NEXT:    retq # sched: [1:1.00]
2384;
2385; HASWELL-LABEL: test_bsr32:
2386; HASWELL:       # %bb.0:
2387; HASWELL-NEXT:    #APP
2388; HASWELL-NEXT:    bsrl %edi, %eax # sched: [3:1.00]
2389; HASWELL-NEXT:    bsrl (%rsi), %ecx # sched: [8:1.00]
2390; HASWELL-NEXT:    #NO_APP
2391; HASWELL-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2392; HASWELL-NEXT:    retq # sched: [7:1.00]
2393;
2394; BROADWELL-LABEL: test_bsr32:
2395; BROADWELL:       # %bb.0:
2396; BROADWELL-NEXT:    #APP
2397; BROADWELL-NEXT:    bsrl %edi, %eax # sched: [3:1.00]
2398; BROADWELL-NEXT:    bsrl (%rsi), %ecx # sched: [8:1.00]
2399; BROADWELL-NEXT:    #NO_APP
2400; BROADWELL-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2401; BROADWELL-NEXT:    retq # sched: [7:1.00]
2402;
2403; SKYLAKE-LABEL: test_bsr32:
2404; SKYLAKE:       # %bb.0:
2405; SKYLAKE-NEXT:    #APP
2406; SKYLAKE-NEXT:    bsrl %edi, %eax # sched: [3:1.00]
2407; SKYLAKE-NEXT:    bsrl (%rsi), %ecx # sched: [8:1.00]
2408; SKYLAKE-NEXT:    #NO_APP
2409; SKYLAKE-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2410; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2411;
2412; SKX-LABEL: test_bsr32:
2413; SKX:       # %bb.0:
2414; SKX-NEXT:    #APP
2415; SKX-NEXT:    bsrl %edi, %eax # sched: [3:1.00]
2416; SKX-NEXT:    bsrl (%rsi), %ecx # sched: [8:1.00]
2417; SKX-NEXT:    #NO_APP
2418; SKX-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2419; SKX-NEXT:    retq # sched: [7:1.00]
2420;
2421; BTVER2-LABEL: test_bsr32:
2422; BTVER2:       # %bb.0:
2423; BTVER2-NEXT:    #APP
2424; BTVER2-NEXT:    bsrl %edi, %eax # sched: [5:2.00]
2425; BTVER2-NEXT:    bsrl (%rsi), %ecx # sched: [8:2.00]
2426; BTVER2-NEXT:    #NO_APP
2427; BTVER2-NEXT:    orl %ecx, %eax # sched: [1:0.50]
2428; BTVER2-NEXT:    retq # sched: [4:1.00]
2429;
2430; ZNVER1-LABEL: test_bsr32:
2431; ZNVER1:       # %bb.0:
2432; ZNVER1-NEXT:    #APP
2433; ZNVER1-NEXT:    bsrl %edi, %eax # sched: [3:0.25]
2434; ZNVER1-NEXT:    bsrl (%rsi), %ecx # sched: [7:0.50]
2435; ZNVER1-NEXT:    #NO_APP
2436; ZNVER1-NEXT:    orl %ecx, %eax # sched: [1:0.25]
2437; ZNVER1-NEXT:    retq # sched: [1:0.50]
2438  %1 = call { i32, i32 } asm sideeffect "bsr $2, $0 \0A\09 bsr $3, $1", "=r,=r,r,*m,~{dirflag},~{fpsr},~{flags}"(i32 %a0, i32* %a1)
2439  %2 = extractvalue { i32, i32 } %1, 0
2440  %3 = extractvalue { i32, i32 } %1, 1
2441  %4 = or i32 %2, %3
2442  ret i32 %4
2443}
2444define i64 @test_bsr64(i64 %a0, i64* %a1) optsize {
2445; GENERIC-LABEL: test_bsr64:
2446; GENERIC:       # %bb.0:
2447; GENERIC-NEXT:    #APP
2448; GENERIC-NEXT:    bsrq %rdi, %rax # sched: [3:1.00]
2449; GENERIC-NEXT:    bsrq (%rsi), %rcx # sched: [8:1.00]
2450; GENERIC-NEXT:    #NO_APP
2451; GENERIC-NEXT:    orq %rcx, %rax # sched: [1:0.33]
2452; GENERIC-NEXT:    retq # sched: [1:1.00]
2453;
2454; ATOM-LABEL: test_bsr64:
2455; ATOM:       # %bb.0:
2456; ATOM-NEXT:    #APP
2457; ATOM-NEXT:    bsrq %rdi, %rax # sched: [16:8.00]
2458; ATOM-NEXT:    bsrq (%rsi), %rcx # sched: [16:8.00]
2459; ATOM-NEXT:    #NO_APP
2460; ATOM-NEXT:    orq %rcx, %rax # sched: [1:0.50]
2461; ATOM-NEXT:    retq # sched: [79:39.50]
2462;
2463; SLM-LABEL: test_bsr64:
2464; SLM:       # %bb.0:
2465; SLM-NEXT:    #APP
2466; SLM-NEXT:    bsrq %rdi, %rax # sched: [10:10.00]
2467; SLM-NEXT:    bsrq (%rsi), %rcx # sched: [13:10.00]
2468; SLM-NEXT:    #NO_APP
2469; SLM-NEXT:    orq %rcx, %rax # sched: [1:0.50]
2470; SLM-NEXT:    retq # sched: [4:1.00]
2471;
2472; SANDY-LABEL: test_bsr64:
2473; SANDY:       # %bb.0:
2474; SANDY-NEXT:    #APP
2475; SANDY-NEXT:    bsrq %rdi, %rax # sched: [3:1.00]
2476; SANDY-NEXT:    bsrq (%rsi), %rcx # sched: [8:1.00]
2477; SANDY-NEXT:    #NO_APP
2478; SANDY-NEXT:    orq %rcx, %rax # sched: [1:0.33]
2479; SANDY-NEXT:    retq # sched: [1:1.00]
2480;
2481; HASWELL-LABEL: test_bsr64:
2482; HASWELL:       # %bb.0:
2483; HASWELL-NEXT:    #APP
2484; HASWELL-NEXT:    bsrq %rdi, %rax # sched: [3:1.00]
2485; HASWELL-NEXT:    bsrq (%rsi), %rcx # sched: [8:1.00]
2486; HASWELL-NEXT:    #NO_APP
2487; HASWELL-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2488; HASWELL-NEXT:    retq # sched: [7:1.00]
2489;
2490; BROADWELL-LABEL: test_bsr64:
2491; BROADWELL:       # %bb.0:
2492; BROADWELL-NEXT:    #APP
2493; BROADWELL-NEXT:    bsrq %rdi, %rax # sched: [3:1.00]
2494; BROADWELL-NEXT:    bsrq (%rsi), %rcx # sched: [8:1.00]
2495; BROADWELL-NEXT:    #NO_APP
2496; BROADWELL-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2497; BROADWELL-NEXT:    retq # sched: [7:1.00]
2498;
2499; SKYLAKE-LABEL: test_bsr64:
2500; SKYLAKE:       # %bb.0:
2501; SKYLAKE-NEXT:    #APP
2502; SKYLAKE-NEXT:    bsrq %rdi, %rax # sched: [3:1.00]
2503; SKYLAKE-NEXT:    bsrq (%rsi), %rcx # sched: [8:1.00]
2504; SKYLAKE-NEXT:    #NO_APP
2505; SKYLAKE-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2506; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2507;
2508; SKX-LABEL: test_bsr64:
2509; SKX:       # %bb.0:
2510; SKX-NEXT:    #APP
2511; SKX-NEXT:    bsrq %rdi, %rax # sched: [3:1.00]
2512; SKX-NEXT:    bsrq (%rsi), %rcx # sched: [8:1.00]
2513; SKX-NEXT:    #NO_APP
2514; SKX-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2515; SKX-NEXT:    retq # sched: [7:1.00]
2516;
2517; BTVER2-LABEL: test_bsr64:
2518; BTVER2:       # %bb.0:
2519; BTVER2-NEXT:    #APP
2520; BTVER2-NEXT:    bsrq %rdi, %rax # sched: [5:2.00]
2521; BTVER2-NEXT:    bsrq (%rsi), %rcx # sched: [8:2.00]
2522; BTVER2-NEXT:    #NO_APP
2523; BTVER2-NEXT:    orq %rcx, %rax # sched: [1:0.50]
2524; BTVER2-NEXT:    retq # sched: [4:1.00]
2525;
2526; ZNVER1-LABEL: test_bsr64:
2527; ZNVER1:       # %bb.0:
2528; ZNVER1-NEXT:    #APP
2529; ZNVER1-NEXT:    bsrq %rdi, %rax # sched: [3:0.25]
2530; ZNVER1-NEXT:    bsrq (%rsi), %rcx # sched: [7:0.50]
2531; ZNVER1-NEXT:    #NO_APP
2532; ZNVER1-NEXT:    orq %rcx, %rax # sched: [1:0.25]
2533; ZNVER1-NEXT:    retq # sched: [1:0.50]
2534  %1 = call { i64, i64 } asm sideeffect "bsr $2, $0 \0A\09 bsr $3, $1", "=r,=r,r,*m,~{dirflag},~{fpsr},~{flags}"(i64 %a0, i64* %a1)
2535  %2 = extractvalue { i64, i64 } %1, 0
2536  %3 = extractvalue { i64, i64 } %1, 1
2537  %4 = or i64 %2, %3
2538  ret i64 %4
2539}
2540
2541define i32 @test_bswap32(i32 %a0) optsize {
2542; GENERIC-LABEL: test_bswap32:
2543; GENERIC:       # %bb.0:
2544; GENERIC-NEXT:    bswapl %edi # sched: [1:1.00]
2545; GENERIC-NEXT:    movl %edi, %eax # sched: [1:0.33]
2546; GENERIC-NEXT:    retq # sched: [1:1.00]
2547;
2548; ATOM-LABEL: test_bswap32:
2549; ATOM:       # %bb.0:
2550; ATOM-NEXT:    bswapl %edi # sched: [1:1.00]
2551; ATOM-NEXT:    movl %edi, %eax # sched: [1:0.50]
2552; ATOM-NEXT:    retq # sched: [79:39.50]
2553;
2554; SLM-LABEL: test_bswap32:
2555; SLM:       # %bb.0:
2556; SLM-NEXT:    bswapl %edi # sched: [1:0.50]
2557; SLM-NEXT:    movl %edi, %eax # sched: [1:0.50]
2558; SLM-NEXT:    retq # sched: [4:1.00]
2559;
2560; SANDY-LABEL: test_bswap32:
2561; SANDY:       # %bb.0:
2562; SANDY-NEXT:    bswapl %edi # sched: [1:1.00]
2563; SANDY-NEXT:    movl %edi, %eax # sched: [1:0.33]
2564; SANDY-NEXT:    retq # sched: [1:1.00]
2565;
2566; HASWELL-LABEL: test_bswap32:
2567; HASWELL:       # %bb.0:
2568; HASWELL-NEXT:    bswapl %edi # sched: [1:0.50]
2569; HASWELL-NEXT:    movl %edi, %eax # sched: [1:0.25]
2570; HASWELL-NEXT:    retq # sched: [7:1.00]
2571;
2572; BROADWELL-LABEL: test_bswap32:
2573; BROADWELL:       # %bb.0:
2574; BROADWELL-NEXT:    bswapl %edi # sched: [1:0.50]
2575; BROADWELL-NEXT:    movl %edi, %eax # sched: [1:0.25]
2576; BROADWELL-NEXT:    retq # sched: [7:1.00]
2577;
2578; SKYLAKE-LABEL: test_bswap32:
2579; SKYLAKE:       # %bb.0:
2580; SKYLAKE-NEXT:    bswapl %edi # sched: [1:0.50]
2581; SKYLAKE-NEXT:    movl %edi, %eax # sched: [1:0.25]
2582; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2583;
2584; SKX-LABEL: test_bswap32:
2585; SKX:       # %bb.0:
2586; SKX-NEXT:    bswapl %edi # sched: [1:0.50]
2587; SKX-NEXT:    movl %edi, %eax # sched: [1:0.25]
2588; SKX-NEXT:    retq # sched: [7:1.00]
2589;
2590; BTVER2-LABEL: test_bswap32:
2591; BTVER2:       # %bb.0:
2592; BTVER2-NEXT:    bswapl %edi # sched: [1:0.50]
2593; BTVER2-NEXT:    movl %edi, %eax # sched: [1:0.50]
2594; BTVER2-NEXT:    retq # sched: [4:1.00]
2595;
2596; ZNVER1-LABEL: test_bswap32:
2597; ZNVER1:       # %bb.0:
2598; ZNVER1-NEXT:    bswapl %edi # sched: [1:1.00]
2599; ZNVER1-NEXT:    movl %edi, %eax # sched: [1:0.25]
2600; ZNVER1-NEXT:    retq # sched: [1:0.50]
2601  %1 = tail call i32 asm "bswap $0", "=r,0"(i32 %a0) nounwind
2602  ret i32 %1
2603}
2604define i64 @test_bswap64(i64 %a0) optsize {
2605; GENERIC-LABEL: test_bswap64:
2606; GENERIC:       # %bb.0:
2607; GENERIC-NEXT:    bswapq %rdi # sched: [2:1.00]
2608; GENERIC-NEXT:    movq %rdi, %rax # sched: [1:0.33]
2609; GENERIC-NEXT:    retq # sched: [1:1.00]
2610;
2611; ATOM-LABEL: test_bswap64:
2612; ATOM:       # %bb.0:
2613; ATOM-NEXT:    bswapq %rdi # sched: [1:1.00]
2614; ATOM-NEXT:    movq %rdi, %rax # sched: [1:0.50]
2615; ATOM-NEXT:    retq # sched: [79:39.50]
2616;
2617; SLM-LABEL: test_bswap64:
2618; SLM:       # %bb.0:
2619; SLM-NEXT:    bswapq %rdi # sched: [1:0.50]
2620; SLM-NEXT:    movq %rdi, %rax # sched: [1:0.50]
2621; SLM-NEXT:    retq # sched: [4:1.00]
2622;
2623; SANDY-LABEL: test_bswap64:
2624; SANDY:       # %bb.0:
2625; SANDY-NEXT:    bswapq %rdi # sched: [2:1.00]
2626; SANDY-NEXT:    movq %rdi, %rax # sched: [1:0.33]
2627; SANDY-NEXT:    retq # sched: [1:1.00]
2628;
2629; HASWELL-LABEL: test_bswap64:
2630; HASWELL:       # %bb.0:
2631; HASWELL-NEXT:    bswapq %rdi # sched: [2:0.50]
2632; HASWELL-NEXT:    movq %rdi, %rax # sched: [1:0.25]
2633; HASWELL-NEXT:    retq # sched: [7:1.00]
2634;
2635; BROADWELL-LABEL: test_bswap64:
2636; BROADWELL:       # %bb.0:
2637; BROADWELL-NEXT:    bswapq %rdi # sched: [2:0.50]
2638; BROADWELL-NEXT:    movq %rdi, %rax # sched: [1:0.25]
2639; BROADWELL-NEXT:    retq # sched: [7:1.00]
2640;
2641; SKYLAKE-LABEL: test_bswap64:
2642; SKYLAKE:       # %bb.0:
2643; SKYLAKE-NEXT:    bswapq %rdi # sched: [2:0.50]
2644; SKYLAKE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
2645; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2646;
2647; SKX-LABEL: test_bswap64:
2648; SKX:       # %bb.0:
2649; SKX-NEXT:    bswapq %rdi # sched: [2:0.50]
2650; SKX-NEXT:    movq %rdi, %rax # sched: [1:0.25]
2651; SKX-NEXT:    retq # sched: [7:1.00]
2652;
2653; BTVER2-LABEL: test_bswap64:
2654; BTVER2:       # %bb.0:
2655; BTVER2-NEXT:    bswapq %rdi # sched: [1:0.50]
2656; BTVER2-NEXT:    movq %rdi, %rax # sched: [1:0.50]
2657; BTVER2-NEXT:    retq # sched: [4:1.00]
2658;
2659; ZNVER1-LABEL: test_bswap64:
2660; ZNVER1:       # %bb.0:
2661; ZNVER1-NEXT:    bswapq %rdi # sched: [1:1.00]
2662; ZNVER1-NEXT:    movq %rdi, %rax # sched: [1:0.25]
2663; ZNVER1-NEXT:    retq # sched: [1:0.50]
2664  %1 = tail call i64 asm "bswap $0", "=r,0"(i64 %a0) nounwind
2665  ret i64 %1
2666}
2667
2668define void @test_bt_btc_btr_bts_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
2669; GENERIC-LABEL: test_bt_btc_btr_bts_16:
2670; GENERIC:       # %bb.0:
2671; GENERIC-NEXT:    #APP
2672; GENERIC-NEXT:    btw %si, %di # sched: [1:0.50]
2673; GENERIC-NEXT:    btcw %si, %di # sched: [1:0.50]
2674; GENERIC-NEXT:    btrw %si, %di # sched: [1:0.50]
2675; GENERIC-NEXT:    btsw %si, %di # sched: [1:0.50]
2676; GENERIC-NEXT:    btw %si, (%rdx) # sched: [9:1.00]
2677; GENERIC-NEXT:    btcw %si, (%rdx) # sched: [9:1.00]
2678; GENERIC-NEXT:    btrw %si, (%rdx) # sched: [9:1.00]
2679; GENERIC-NEXT:    btsw %si, (%rdx) # sched: [9:1.00]
2680; GENERIC-NEXT:    btw $7, %di # sched: [1:0.50]
2681; GENERIC-NEXT:    btcw $7, %di # sched: [1:0.50]
2682; GENERIC-NEXT:    btrw $7, %di # sched: [1:0.50]
2683; GENERIC-NEXT:    btsw $7, %di # sched: [1:0.50]
2684; GENERIC-NEXT:    btw $7, (%rdx) # sched: [6:0.50]
2685; GENERIC-NEXT:    btcw $7, (%rdx) # sched: [7:1.00]
2686; GENERIC-NEXT:    btrw $7, (%rdx) # sched: [7:1.00]
2687; GENERIC-NEXT:    btsw $7, (%rdx) # sched: [7:1.00]
2688; GENERIC-NEXT:    #NO_APP
2689; GENERIC-NEXT:    retq # sched: [1:1.00]
2690;
2691; ATOM-LABEL: test_bt_btc_btr_bts_16:
2692; ATOM:       # %bb.0:
2693; ATOM-NEXT:    #APP
2694; ATOM-NEXT:    btw %si, %di # sched: [1:1.00]
2695; ATOM-NEXT:    btcw %si, %di # sched: [1:1.00]
2696; ATOM-NEXT:    btrw %si, %di # sched: [1:1.00]
2697; ATOM-NEXT:    btsw %si, %di # sched: [1:1.00]
2698; ATOM-NEXT:    btw %si, (%rdx) # sched: [9:4.50]
2699; ATOM-NEXT:    btcw %si, (%rdx) # sched: [11:5.50]
2700; ATOM-NEXT:    btrw %si, (%rdx) # sched: [11:5.50]
2701; ATOM-NEXT:    btsw %si, (%rdx) # sched: [11:5.50]
2702; ATOM-NEXT:    btw $7, %di # sched: [1:1.00]
2703; ATOM-NEXT:    btcw $7, %di # sched: [1:1.00]
2704; ATOM-NEXT:    btrw $7, %di # sched: [1:1.00]
2705; ATOM-NEXT:    btsw $7, %di # sched: [1:1.00]
2706; ATOM-NEXT:    btw $7, (%rdx) # sched: [1:0.50]
2707; ATOM-NEXT:    btcw $7, (%rdx) # sched: [2:1.00]
2708; ATOM-NEXT:    btrw $7, (%rdx) # sched: [2:1.00]
2709; ATOM-NEXT:    btsw $7, (%rdx) # sched: [2:1.00]
2710; ATOM-NEXT:    #NO_APP
2711; ATOM-NEXT:    retq # sched: [79:39.50]
2712;
2713; SLM-LABEL: test_bt_btc_btr_bts_16:
2714; SLM:       # %bb.0:
2715; SLM-NEXT:    #APP
2716; SLM-NEXT:    btw %si, %di # sched: [1:0.50]
2717; SLM-NEXT:    btcw %si, %di # sched: [1:0.50]
2718; SLM-NEXT:    btrw %si, %di # sched: [1:0.50]
2719; SLM-NEXT:    btsw %si, %di # sched: [1:0.50]
2720; SLM-NEXT:    btw %si, (%rdx) # sched: [4:1.00]
2721; SLM-NEXT:    btcw %si, (%rdx) # sched: [4:2.00]
2722; SLM-NEXT:    btrw %si, (%rdx) # sched: [4:2.00]
2723; SLM-NEXT:    btsw %si, (%rdx) # sched: [4:2.00]
2724; SLM-NEXT:    btw $7, %di # sched: [1:0.50]
2725; SLM-NEXT:    btcw $7, %di # sched: [1:0.50]
2726; SLM-NEXT:    btrw $7, %di # sched: [1:0.50]
2727; SLM-NEXT:    btsw $7, %di # sched: [1:0.50]
2728; SLM-NEXT:    btw $7, (%rdx) # sched: [1:0.50]
2729; SLM-NEXT:    btcw $7, (%rdx) # sched: [4:2.00]
2730; SLM-NEXT:    btrw $7, (%rdx) # sched: [4:2.00]
2731; SLM-NEXT:    btsw $7, (%rdx) # sched: [4:2.00]
2732; SLM-NEXT:    #NO_APP
2733; SLM-NEXT:    retq # sched: [4:1.00]
2734;
2735; SANDY-LABEL: test_bt_btc_btr_bts_16:
2736; SANDY:       # %bb.0:
2737; SANDY-NEXT:    #APP
2738; SANDY-NEXT:    btw %si, %di # sched: [1:0.50]
2739; SANDY-NEXT:    btcw %si, %di # sched: [1:0.50]
2740; SANDY-NEXT:    btrw %si, %di # sched: [1:0.50]
2741; SANDY-NEXT:    btsw %si, %di # sched: [1:0.50]
2742; SANDY-NEXT:    btw %si, (%rdx) # sched: [9:1.00]
2743; SANDY-NEXT:    btcw %si, (%rdx) # sched: [9:1.00]
2744; SANDY-NEXT:    btrw %si, (%rdx) # sched: [9:1.00]
2745; SANDY-NEXT:    btsw %si, (%rdx) # sched: [9:1.00]
2746; SANDY-NEXT:    btw $7, %di # sched: [1:0.50]
2747; SANDY-NEXT:    btcw $7, %di # sched: [1:0.50]
2748; SANDY-NEXT:    btrw $7, %di # sched: [1:0.50]
2749; SANDY-NEXT:    btsw $7, %di # sched: [1:0.50]
2750; SANDY-NEXT:    btw $7, (%rdx) # sched: [6:0.50]
2751; SANDY-NEXT:    btcw $7, (%rdx) # sched: [7:1.00]
2752; SANDY-NEXT:    btrw $7, (%rdx) # sched: [7:1.00]
2753; SANDY-NEXT:    btsw $7, (%rdx) # sched: [7:1.00]
2754; SANDY-NEXT:    #NO_APP
2755; SANDY-NEXT:    retq # sched: [1:1.00]
2756;
2757; HASWELL-LABEL: test_bt_btc_btr_bts_16:
2758; HASWELL:       # %bb.0:
2759; HASWELL-NEXT:    #APP
2760; HASWELL-NEXT:    btw %si, %di # sched: [1:0.50]
2761; HASWELL-NEXT:    btcw %si, %di # sched: [1:0.50]
2762; HASWELL-NEXT:    btrw %si, %di # sched: [1:0.50]
2763; HASWELL-NEXT:    btsw %si, %di # sched: [1:0.50]
2764; HASWELL-NEXT:    btw %si, (%rdx) # sched: [1:2.50]
2765; HASWELL-NEXT:    btcw %si, (%rdx) # sched: [1:2.75]
2766; HASWELL-NEXT:    btrw %si, (%rdx) # sched: [1:2.75]
2767; HASWELL-NEXT:    btsw %si, (%rdx) # sched: [1:2.75]
2768; HASWELL-NEXT:    btw $7, %di # sched: [1:0.50]
2769; HASWELL-NEXT:    btcw $7, %di # sched: [1:0.50]
2770; HASWELL-NEXT:    btrw $7, %di # sched: [1:0.50]
2771; HASWELL-NEXT:    btsw $7, %di # sched: [1:0.50]
2772; HASWELL-NEXT:    btw $7, (%rdx) # sched: [6:0.50]
2773; HASWELL-NEXT:    btcw $7, (%rdx) # sched: [7:1.00]
2774; HASWELL-NEXT:    btrw $7, (%rdx) # sched: [7:1.00]
2775; HASWELL-NEXT:    btsw $7, (%rdx) # sched: [7:1.00]
2776; HASWELL-NEXT:    #NO_APP
2777; HASWELL-NEXT:    retq # sched: [7:1.00]
2778;
2779; BROADWELL-LABEL: test_bt_btc_btr_bts_16:
2780; BROADWELL:       # %bb.0:
2781; BROADWELL-NEXT:    #APP
2782; BROADWELL-NEXT:    btw %si, %di # sched: [1:0.50]
2783; BROADWELL-NEXT:    btcw %si, %di # sched: [1:0.50]
2784; BROADWELL-NEXT:    btrw %si, %di # sched: [1:0.50]
2785; BROADWELL-NEXT:    btsw %si, %di # sched: [1:0.50]
2786; BROADWELL-NEXT:    btw %si, (%rdx) # sched: [6:0.50]
2787; BROADWELL-NEXT:    btcw %si, (%rdx) # sched: [6:1.00]
2788; BROADWELL-NEXT:    btrw %si, (%rdx) # sched: [6:1.00]
2789; BROADWELL-NEXT:    btsw %si, (%rdx) # sched: [6:1.00]
2790; BROADWELL-NEXT:    btw $7, %di # sched: [1:0.50]
2791; BROADWELL-NEXT:    btcw $7, %di # sched: [1:0.50]
2792; BROADWELL-NEXT:    btrw $7, %di # sched: [1:0.50]
2793; BROADWELL-NEXT:    btsw $7, %di # sched: [1:0.50]
2794; BROADWELL-NEXT:    btw $7, (%rdx) # sched: [6:0.50]
2795; BROADWELL-NEXT:    btcw $7, (%rdx) # sched: [6:1.00]
2796; BROADWELL-NEXT:    btrw $7, (%rdx) # sched: [6:1.00]
2797; BROADWELL-NEXT:    btsw $7, (%rdx) # sched: [6:1.00]
2798; BROADWELL-NEXT:    #NO_APP
2799; BROADWELL-NEXT:    retq # sched: [7:1.00]
2800;
2801; SKYLAKE-LABEL: test_bt_btc_btr_bts_16:
2802; SKYLAKE:       # %bb.0:
2803; SKYLAKE-NEXT:    #APP
2804; SKYLAKE-NEXT:    btw %si, %di # sched: [1:0.50]
2805; SKYLAKE-NEXT:    btcw %si, %di # sched: [1:0.50]
2806; SKYLAKE-NEXT:    btrw %si, %di # sched: [1:0.50]
2807; SKYLAKE-NEXT:    btsw %si, %di # sched: [1:0.50]
2808; SKYLAKE-NEXT:    btw %si, (%rdx) # sched: [6:0.50]
2809; SKYLAKE-NEXT:    btcw %si, (%rdx) # sched: [6:1.00]
2810; SKYLAKE-NEXT:    btrw %si, (%rdx) # sched: [6:1.00]
2811; SKYLAKE-NEXT:    btsw %si, (%rdx) # sched: [6:1.00]
2812; SKYLAKE-NEXT:    btw $7, %di # sched: [1:0.50]
2813; SKYLAKE-NEXT:    btcw $7, %di # sched: [1:0.50]
2814; SKYLAKE-NEXT:    btrw $7, %di # sched: [1:0.50]
2815; SKYLAKE-NEXT:    btsw $7, %di # sched: [1:0.50]
2816; SKYLAKE-NEXT:    btw $7, (%rdx) # sched: [6:0.50]
2817; SKYLAKE-NEXT:    btcw $7, (%rdx) # sched: [6:1.00]
2818; SKYLAKE-NEXT:    btrw $7, (%rdx) # sched: [6:1.00]
2819; SKYLAKE-NEXT:    btsw $7, (%rdx) # sched: [6:1.00]
2820; SKYLAKE-NEXT:    #NO_APP
2821; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2822;
2823; SKX-LABEL: test_bt_btc_btr_bts_16:
2824; SKX:       # %bb.0:
2825; SKX-NEXT:    #APP
2826; SKX-NEXT:    btw %si, %di # sched: [1:0.50]
2827; SKX-NEXT:    btcw %si, %di # sched: [1:0.50]
2828; SKX-NEXT:    btrw %si, %di # sched: [1:0.50]
2829; SKX-NEXT:    btsw %si, %di # sched: [1:0.50]
2830; SKX-NEXT:    btw %si, (%rdx) # sched: [6:0.50]
2831; SKX-NEXT:    btcw %si, (%rdx) # sched: [6:1.00]
2832; SKX-NEXT:    btrw %si, (%rdx) # sched: [6:1.00]
2833; SKX-NEXT:    btsw %si, (%rdx) # sched: [6:1.00]
2834; SKX-NEXT:    btw $7, %di # sched: [1:0.50]
2835; SKX-NEXT:    btcw $7, %di # sched: [1:0.50]
2836; SKX-NEXT:    btrw $7, %di # sched: [1:0.50]
2837; SKX-NEXT:    btsw $7, %di # sched: [1:0.50]
2838; SKX-NEXT:    btw $7, (%rdx) # sched: [6:0.50]
2839; SKX-NEXT:    btcw $7, (%rdx) # sched: [6:1.00]
2840; SKX-NEXT:    btrw $7, (%rdx) # sched: [6:1.00]
2841; SKX-NEXT:    btsw $7, (%rdx) # sched: [6:1.00]
2842; SKX-NEXT:    #NO_APP
2843; SKX-NEXT:    retq # sched: [7:1.00]
2844;
2845; BTVER2-LABEL: test_bt_btc_btr_bts_16:
2846; BTVER2:       # %bb.0:
2847; BTVER2-NEXT:    #APP
2848; BTVER2-NEXT:    btw %si, %di # sched: [1:0.50]
2849; BTVER2-NEXT:    btcw %si, %di # sched: [1:0.50]
2850; BTVER2-NEXT:    btrw %si, %di # sched: [1:0.50]
2851; BTVER2-NEXT:    btsw %si, %di # sched: [1:0.50]
2852; BTVER2-NEXT:    btw %si, (%rdx) # sched: [4:1.00]
2853; BTVER2-NEXT:    btcw %si, (%rdx) # sched: [4:1.00]
2854; BTVER2-NEXT:    btrw %si, (%rdx) # sched: [4:1.00]
2855; BTVER2-NEXT:    btsw %si, (%rdx) # sched: [4:1.00]
2856; BTVER2-NEXT:    btw $7, %di # sched: [1:0.50]
2857; BTVER2-NEXT:    btcw $7, %di # sched: [1:0.50]
2858; BTVER2-NEXT:    btrw $7, %di # sched: [1:0.50]
2859; BTVER2-NEXT:    btsw $7, %di # sched: [1:0.50]
2860; BTVER2-NEXT:    btw $7, (%rdx) # sched: [1:0.50]
2861; BTVER2-NEXT:    btcw $7, (%rdx) # sched: [4:1.00]
2862; BTVER2-NEXT:    btrw $7, (%rdx) # sched: [4:1.00]
2863; BTVER2-NEXT:    btsw $7, (%rdx) # sched: [4:1.00]
2864; BTVER2-NEXT:    #NO_APP
2865; BTVER2-NEXT:    retq # sched: [4:1.00]
2866;
2867; ZNVER1-LABEL: test_bt_btc_btr_bts_16:
2868; ZNVER1:       # %bb.0:
2869; ZNVER1-NEXT:    #APP
2870; ZNVER1-NEXT:    btw %si, %di # sched: [1:0.25]
2871; ZNVER1-NEXT:    btcw %si, %di # sched: [2:0.25]
2872; ZNVER1-NEXT:    btrw %si, %di # sched: [2:0.25]
2873; ZNVER1-NEXT:    btsw %si, %di # sched: [2:0.25]
2874; ZNVER1-NEXT:    btw %si, (%rdx) # sched: [5:0.50]
2875; ZNVER1-NEXT:    btcw %si, (%rdx) # sched: [6:0.50]
2876; ZNVER1-NEXT:    btrw %si, (%rdx) # sched: [6:0.50]
2877; ZNVER1-NEXT:    btsw %si, (%rdx) # sched: [6:0.50]
2878; ZNVER1-NEXT:    btw $7, %di # sched: [1:0.25]
2879; ZNVER1-NEXT:    btcw $7, %di # sched: [2:0.25]
2880; ZNVER1-NEXT:    btrw $7, %di # sched: [2:0.25]
2881; ZNVER1-NEXT:    btsw $7, %di # sched: [2:0.25]
2882; ZNVER1-NEXT:    btw $7, (%rdx) # sched: [5:0.50]
2883; ZNVER1-NEXT:    btcw $7, (%rdx) # sched: [6:0.50]
2884; ZNVER1-NEXT:    btrw $7, (%rdx) # sched: [6:0.50]
2885; ZNVER1-NEXT:    btsw $7, (%rdx) # sched: [6:0.50]
2886; ZNVER1-NEXT:    #NO_APP
2887; ZNVER1-NEXT:    retq # sched: [1:0.50]
2888  call void asm sideeffect "btw $1, $0 \0A\09  btcw $1, $0 \0A\09  btrw $1, $0 \0A\09 btsw $1, $0 \0A\09 btw $1, $2 \0A\09 btcw $1, $2 \0A\09 btrw $1, $2 \0A\09 btsw $1, $2 \0A\09 btw $3, $0 \0A\09 btcw $3, $0 \0A\09 btrw $3, $0 \0A\09 btsw $3, $0 \0A\09 btw $3, $2 \0A\09 btcw $3, $2 \0A\09 btrw $3, $2 \0A\09 btsw $3, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7)
2889  ret void
2890}
2891define void @test_bt_btc_btr_bts_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
2892; GENERIC-LABEL: test_bt_btc_btr_bts_32:
2893; GENERIC:       # %bb.0:
2894; GENERIC-NEXT:    #APP
2895; GENERIC-NEXT:    btl %esi, %edi # sched: [1:0.50]
2896; GENERIC-NEXT:    btcl %esi, %edi # sched: [1:0.50]
2897; GENERIC-NEXT:    btrl %esi, %edi # sched: [1:0.50]
2898; GENERIC-NEXT:    btsl %esi, %edi # sched: [1:0.50]
2899; GENERIC-NEXT:    btl %esi, (%rdx) # sched: [9:1.00]
2900; GENERIC-NEXT:    btcl %esi, (%rdx) # sched: [9:1.00]
2901; GENERIC-NEXT:    btrl %esi, (%rdx) # sched: [9:1.00]
2902; GENERIC-NEXT:    btsl %esi, (%rdx) # sched: [9:1.00]
2903; GENERIC-NEXT:    btl $7, %edi # sched: [1:0.50]
2904; GENERIC-NEXT:    btcl $7, %edi # sched: [1:0.50]
2905; GENERIC-NEXT:    btrl $7, %edi # sched: [1:0.50]
2906; GENERIC-NEXT:    btsl $7, %edi # sched: [1:0.50]
2907; GENERIC-NEXT:    btl $7, (%rdx) # sched: [6:0.50]
2908; GENERIC-NEXT:    btcl $7, (%rdx) # sched: [7:1.00]
2909; GENERIC-NEXT:    btrl $7, (%rdx) # sched: [7:1.00]
2910; GENERIC-NEXT:    btsl $7, (%rdx) # sched: [7:1.00]
2911; GENERIC-NEXT:    #NO_APP
2912; GENERIC-NEXT:    retq # sched: [1:1.00]
2913;
2914; ATOM-LABEL: test_bt_btc_btr_bts_32:
2915; ATOM:       # %bb.0:
2916; ATOM-NEXT:    #APP
2917; ATOM-NEXT:    btl %esi, %edi # sched: [1:1.00]
2918; ATOM-NEXT:    btcl %esi, %edi # sched: [1:1.00]
2919; ATOM-NEXT:    btrl %esi, %edi # sched: [1:1.00]
2920; ATOM-NEXT:    btsl %esi, %edi # sched: [1:1.00]
2921; ATOM-NEXT:    btl %esi, (%rdx) # sched: [9:4.50]
2922; ATOM-NEXT:    btcl %esi, (%rdx) # sched: [11:5.50]
2923; ATOM-NEXT:    btrl %esi, (%rdx) # sched: [11:5.50]
2924; ATOM-NEXT:    btsl %esi, (%rdx) # sched: [11:5.50]
2925; ATOM-NEXT:    btl $7, %edi # sched: [1:1.00]
2926; ATOM-NEXT:    btcl $7, %edi # sched: [1:1.00]
2927; ATOM-NEXT:    btrl $7, %edi # sched: [1:1.00]
2928; ATOM-NEXT:    btsl $7, %edi # sched: [1:1.00]
2929; ATOM-NEXT:    btl $7, (%rdx) # sched: [1:0.50]
2930; ATOM-NEXT:    btcl $7, (%rdx) # sched: [2:1.00]
2931; ATOM-NEXT:    btrl $7, (%rdx) # sched: [2:1.00]
2932; ATOM-NEXT:    btsl $7, (%rdx) # sched: [2:1.00]
2933; ATOM-NEXT:    #NO_APP
2934; ATOM-NEXT:    retq # sched: [79:39.50]
2935;
2936; SLM-LABEL: test_bt_btc_btr_bts_32:
2937; SLM:       # %bb.0:
2938; SLM-NEXT:    #APP
2939; SLM-NEXT:    btl %esi, %edi # sched: [1:0.50]
2940; SLM-NEXT:    btcl %esi, %edi # sched: [1:0.50]
2941; SLM-NEXT:    btrl %esi, %edi # sched: [1:0.50]
2942; SLM-NEXT:    btsl %esi, %edi # sched: [1:0.50]
2943; SLM-NEXT:    btl %esi, (%rdx) # sched: [4:1.00]
2944; SLM-NEXT:    btcl %esi, (%rdx) # sched: [4:2.00]
2945; SLM-NEXT:    btrl %esi, (%rdx) # sched: [4:2.00]
2946; SLM-NEXT:    btsl %esi, (%rdx) # sched: [4:2.00]
2947; SLM-NEXT:    btl $7, %edi # sched: [1:0.50]
2948; SLM-NEXT:    btcl $7, %edi # sched: [1:0.50]
2949; SLM-NEXT:    btrl $7, %edi # sched: [1:0.50]
2950; SLM-NEXT:    btsl $7, %edi # sched: [1:0.50]
2951; SLM-NEXT:    btl $7, (%rdx) # sched: [1:0.50]
2952; SLM-NEXT:    btcl $7, (%rdx) # sched: [4:2.00]
2953; SLM-NEXT:    btrl $7, (%rdx) # sched: [4:2.00]
2954; SLM-NEXT:    btsl $7, (%rdx) # sched: [4:2.00]
2955; SLM-NEXT:    #NO_APP
2956; SLM-NEXT:    retq # sched: [4:1.00]
2957;
2958; SANDY-LABEL: test_bt_btc_btr_bts_32:
2959; SANDY:       # %bb.0:
2960; SANDY-NEXT:    #APP
2961; SANDY-NEXT:    btl %esi, %edi # sched: [1:0.50]
2962; SANDY-NEXT:    btcl %esi, %edi # sched: [1:0.50]
2963; SANDY-NEXT:    btrl %esi, %edi # sched: [1:0.50]
2964; SANDY-NEXT:    btsl %esi, %edi # sched: [1:0.50]
2965; SANDY-NEXT:    btl %esi, (%rdx) # sched: [9:1.00]
2966; SANDY-NEXT:    btcl %esi, (%rdx) # sched: [9:1.00]
2967; SANDY-NEXT:    btrl %esi, (%rdx) # sched: [9:1.00]
2968; SANDY-NEXT:    btsl %esi, (%rdx) # sched: [9:1.00]
2969; SANDY-NEXT:    btl $7, %edi # sched: [1:0.50]
2970; SANDY-NEXT:    btcl $7, %edi # sched: [1:0.50]
2971; SANDY-NEXT:    btrl $7, %edi # sched: [1:0.50]
2972; SANDY-NEXT:    btsl $7, %edi # sched: [1:0.50]
2973; SANDY-NEXT:    btl $7, (%rdx) # sched: [6:0.50]
2974; SANDY-NEXT:    btcl $7, (%rdx) # sched: [7:1.00]
2975; SANDY-NEXT:    btrl $7, (%rdx) # sched: [7:1.00]
2976; SANDY-NEXT:    btsl $7, (%rdx) # sched: [7:1.00]
2977; SANDY-NEXT:    #NO_APP
2978; SANDY-NEXT:    retq # sched: [1:1.00]
2979;
2980; HASWELL-LABEL: test_bt_btc_btr_bts_32:
2981; HASWELL:       # %bb.0:
2982; HASWELL-NEXT:    #APP
2983; HASWELL-NEXT:    btl %esi, %edi # sched: [1:0.50]
2984; HASWELL-NEXT:    btcl %esi, %edi # sched: [1:0.50]
2985; HASWELL-NEXT:    btrl %esi, %edi # sched: [1:0.50]
2986; HASWELL-NEXT:    btsl %esi, %edi # sched: [1:0.50]
2987; HASWELL-NEXT:    btl %esi, (%rdx) # sched: [1:2.50]
2988; HASWELL-NEXT:    btcl %esi, (%rdx) # sched: [1:2.75]
2989; HASWELL-NEXT:    btrl %esi, (%rdx) # sched: [1:2.75]
2990; HASWELL-NEXT:    btsl %esi, (%rdx) # sched: [1:2.75]
2991; HASWELL-NEXT:    btl $7, %edi # sched: [1:0.50]
2992; HASWELL-NEXT:    btcl $7, %edi # sched: [1:0.50]
2993; HASWELL-NEXT:    btrl $7, %edi # sched: [1:0.50]
2994; HASWELL-NEXT:    btsl $7, %edi # sched: [1:0.50]
2995; HASWELL-NEXT:    btl $7, (%rdx) # sched: [6:0.50]
2996; HASWELL-NEXT:    btcl $7, (%rdx) # sched: [7:1.00]
2997; HASWELL-NEXT:    btrl $7, (%rdx) # sched: [7:1.00]
2998; HASWELL-NEXT:    btsl $7, (%rdx) # sched: [7:1.00]
2999; HASWELL-NEXT:    #NO_APP
3000; HASWELL-NEXT:    retq # sched: [7:1.00]
3001;
3002; BROADWELL-LABEL: test_bt_btc_btr_bts_32:
3003; BROADWELL:       # %bb.0:
3004; BROADWELL-NEXT:    #APP
3005; BROADWELL-NEXT:    btl %esi, %edi # sched: [1:0.50]
3006; BROADWELL-NEXT:    btcl %esi, %edi # sched: [1:0.50]
3007; BROADWELL-NEXT:    btrl %esi, %edi # sched: [1:0.50]
3008; BROADWELL-NEXT:    btsl %esi, %edi # sched: [1:0.50]
3009; BROADWELL-NEXT:    btl %esi, (%rdx) # sched: [6:0.50]
3010; BROADWELL-NEXT:    btcl %esi, (%rdx) # sched: [6:1.00]
3011; BROADWELL-NEXT:    btrl %esi, (%rdx) # sched: [6:1.00]
3012; BROADWELL-NEXT:    btsl %esi, (%rdx) # sched: [6:1.00]
3013; BROADWELL-NEXT:    btl $7, %edi # sched: [1:0.50]
3014; BROADWELL-NEXT:    btcl $7, %edi # sched: [1:0.50]
3015; BROADWELL-NEXT:    btrl $7, %edi # sched: [1:0.50]
3016; BROADWELL-NEXT:    btsl $7, %edi # sched: [1:0.50]
3017; BROADWELL-NEXT:    btl $7, (%rdx) # sched: [6:0.50]
3018; BROADWELL-NEXT:    btcl $7, (%rdx) # sched: [6:1.00]
3019; BROADWELL-NEXT:    btrl $7, (%rdx) # sched: [6:1.00]
3020; BROADWELL-NEXT:    btsl $7, (%rdx) # sched: [6:1.00]
3021; BROADWELL-NEXT:    #NO_APP
3022; BROADWELL-NEXT:    retq # sched: [7:1.00]
3023;
3024; SKYLAKE-LABEL: test_bt_btc_btr_bts_32:
3025; SKYLAKE:       # %bb.0:
3026; SKYLAKE-NEXT:    #APP
3027; SKYLAKE-NEXT:    btl %esi, %edi # sched: [1:0.50]
3028; SKYLAKE-NEXT:    btcl %esi, %edi # sched: [1:0.50]
3029; SKYLAKE-NEXT:    btrl %esi, %edi # sched: [1:0.50]
3030; SKYLAKE-NEXT:    btsl %esi, %edi # sched: [1:0.50]
3031; SKYLAKE-NEXT:    btl %esi, (%rdx) # sched: [6:0.50]
3032; SKYLAKE-NEXT:    btcl %esi, (%rdx) # sched: [6:1.00]
3033; SKYLAKE-NEXT:    btrl %esi, (%rdx) # sched: [6:1.00]
3034; SKYLAKE-NEXT:    btsl %esi, (%rdx) # sched: [6:1.00]
3035; SKYLAKE-NEXT:    btl $7, %edi # sched: [1:0.50]
3036; SKYLAKE-NEXT:    btcl $7, %edi # sched: [1:0.50]
3037; SKYLAKE-NEXT:    btrl $7, %edi # sched: [1:0.50]
3038; SKYLAKE-NEXT:    btsl $7, %edi # sched: [1:0.50]
3039; SKYLAKE-NEXT:    btl $7, (%rdx) # sched: [6:0.50]
3040; SKYLAKE-NEXT:    btcl $7, (%rdx) # sched: [6:1.00]
3041; SKYLAKE-NEXT:    btrl $7, (%rdx) # sched: [6:1.00]
3042; SKYLAKE-NEXT:    btsl $7, (%rdx) # sched: [6:1.00]
3043; SKYLAKE-NEXT:    #NO_APP
3044; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3045;
3046; SKX-LABEL: test_bt_btc_btr_bts_32:
3047; SKX:       # %bb.0:
3048; SKX-NEXT:    #APP
3049; SKX-NEXT:    btl %esi, %edi # sched: [1:0.50]
3050; SKX-NEXT:    btcl %esi, %edi # sched: [1:0.50]
3051; SKX-NEXT:    btrl %esi, %edi # sched: [1:0.50]
3052; SKX-NEXT:    btsl %esi, %edi # sched: [1:0.50]
3053; SKX-NEXT:    btl %esi, (%rdx) # sched: [6:0.50]
3054; SKX-NEXT:    btcl %esi, (%rdx) # sched: [6:1.00]
3055; SKX-NEXT:    btrl %esi, (%rdx) # sched: [6:1.00]
3056; SKX-NEXT:    btsl %esi, (%rdx) # sched: [6:1.00]
3057; SKX-NEXT:    btl $7, %edi # sched: [1:0.50]
3058; SKX-NEXT:    btcl $7, %edi # sched: [1:0.50]
3059; SKX-NEXT:    btrl $7, %edi # sched: [1:0.50]
3060; SKX-NEXT:    btsl $7, %edi # sched: [1:0.50]
3061; SKX-NEXT:    btl $7, (%rdx) # sched: [6:0.50]
3062; SKX-NEXT:    btcl $7, (%rdx) # sched: [6:1.00]
3063; SKX-NEXT:    btrl $7, (%rdx) # sched: [6:1.00]
3064; SKX-NEXT:    btsl $7, (%rdx) # sched: [6:1.00]
3065; SKX-NEXT:    #NO_APP
3066; SKX-NEXT:    retq # sched: [7:1.00]
3067;
3068; BTVER2-LABEL: test_bt_btc_btr_bts_32:
3069; BTVER2:       # %bb.0:
3070; BTVER2-NEXT:    #APP
3071; BTVER2-NEXT:    btl %esi, %edi # sched: [1:0.50]
3072; BTVER2-NEXT:    btcl %esi, %edi # sched: [1:0.50]
3073; BTVER2-NEXT:    btrl %esi, %edi # sched: [1:0.50]
3074; BTVER2-NEXT:    btsl %esi, %edi # sched: [1:0.50]
3075; BTVER2-NEXT:    btl %esi, (%rdx) # sched: [4:1.00]
3076; BTVER2-NEXT:    btcl %esi, (%rdx) # sched: [4:1.00]
3077; BTVER2-NEXT:    btrl %esi, (%rdx) # sched: [4:1.00]
3078; BTVER2-NEXT:    btsl %esi, (%rdx) # sched: [4:1.00]
3079; BTVER2-NEXT:    btl $7, %edi # sched: [1:0.50]
3080; BTVER2-NEXT:    btcl $7, %edi # sched: [1:0.50]
3081; BTVER2-NEXT:    btrl $7, %edi # sched: [1:0.50]
3082; BTVER2-NEXT:    btsl $7, %edi # sched: [1:0.50]
3083; BTVER2-NEXT:    btl $7, (%rdx) # sched: [1:0.50]
3084; BTVER2-NEXT:    btcl $7, (%rdx) # sched: [4:1.00]
3085; BTVER2-NEXT:    btrl $7, (%rdx) # sched: [4:1.00]
3086; BTVER2-NEXT:    btsl $7, (%rdx) # sched: [4:1.00]
3087; BTVER2-NEXT:    #NO_APP
3088; BTVER2-NEXT:    retq # sched: [4:1.00]
3089;
3090; ZNVER1-LABEL: test_bt_btc_btr_bts_32:
3091; ZNVER1:       # %bb.0:
3092; ZNVER1-NEXT:    #APP
3093; ZNVER1-NEXT:    btl %esi, %edi # sched: [1:0.25]
3094; ZNVER1-NEXT:    btcl %esi, %edi # sched: [2:0.25]
3095; ZNVER1-NEXT:    btrl %esi, %edi # sched: [2:0.25]
3096; ZNVER1-NEXT:    btsl %esi, %edi # sched: [2:0.25]
3097; ZNVER1-NEXT:    btl %esi, (%rdx) # sched: [5:0.50]
3098; ZNVER1-NEXT:    btcl %esi, (%rdx) # sched: [6:0.50]
3099; ZNVER1-NEXT:    btrl %esi, (%rdx) # sched: [6:0.50]
3100; ZNVER1-NEXT:    btsl %esi, (%rdx) # sched: [6:0.50]
3101; ZNVER1-NEXT:    btl $7, %edi # sched: [1:0.25]
3102; ZNVER1-NEXT:    btcl $7, %edi # sched: [2:0.25]
3103; ZNVER1-NEXT:    btrl $7, %edi # sched: [2:0.25]
3104; ZNVER1-NEXT:    btsl $7, %edi # sched: [2:0.25]
3105; ZNVER1-NEXT:    btl $7, (%rdx) # sched: [5:0.50]
3106; ZNVER1-NEXT:    btcl $7, (%rdx) # sched: [6:0.50]
3107; ZNVER1-NEXT:    btrl $7, (%rdx) # sched: [6:0.50]
3108; ZNVER1-NEXT:    btsl $7, (%rdx) # sched: [6:0.50]
3109; ZNVER1-NEXT:    #NO_APP
3110; ZNVER1-NEXT:    retq # sched: [1:0.50]
3111  call void asm sideeffect "btl $1, $0 \0A\09  btcl $1, $0 \0A\09  btrl $1, $0 \0A\09 btsl $1, $0 \0A\09 btl $1, $2 \0A\09 btcl $1, $2 \0A\09 btrl $1, $2 \0A\09 btsl $1, $2 \0A\09 btl $3, $0 \0A\09 btcl $3, $0 \0A\09 btrl $3, $0 \0A\09 btsl $3, $0 \0A\09 btl $3, $2 \0A\09 btcl $3, $2 \0A\09 btrl $3, $2 \0A\09 btsl $3, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7)
3112  ret void
3113}
3114define void @test_bt_btc_btr_bts_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
3115; GENERIC-LABEL: test_bt_btc_btr_bts_64:
3116; GENERIC:       # %bb.0:
3117; GENERIC-NEXT:    #APP
3118; GENERIC-NEXT:    btq %rsi, %rdi # sched: [1:0.50]
3119; GENERIC-NEXT:    btcq %rsi, %rdi # sched: [1:0.50]
3120; GENERIC-NEXT:    btrq %rsi, %rdi # sched: [1:0.50]
3121; GENERIC-NEXT:    btsq %rsi, %rdi # sched: [1:0.50]
3122; GENERIC-NEXT:    btq %rsi, (%rdx) # sched: [9:1.00]
3123; GENERIC-NEXT:    btcq %rsi, (%rdx) # sched: [9:1.00]
3124; GENERIC-NEXT:    btrq %rsi, (%rdx) # sched: [9:1.00]
3125; GENERIC-NEXT:    btsq %rsi, (%rdx) # sched: [9:1.00]
3126; GENERIC-NEXT:    btq $7, %rdi # sched: [1:0.50]
3127; GENERIC-NEXT:    btcq $7, %rdi # sched: [1:0.50]
3128; GENERIC-NEXT:    btrq $7, %rdi # sched: [1:0.50]
3129; GENERIC-NEXT:    btsq $7, %rdi # sched: [1:0.50]
3130; GENERIC-NEXT:    btq $7, (%rdx) # sched: [6:0.50]
3131; GENERIC-NEXT:    btcq $7, (%rdx) # sched: [7:1.00]
3132; GENERIC-NEXT:    btrq $7, (%rdx) # sched: [7:1.00]
3133; GENERIC-NEXT:    btsq $7, (%rdx) # sched: [7:1.00]
3134; GENERIC-NEXT:    #NO_APP
3135; GENERIC-NEXT:    retq # sched: [1:1.00]
3136;
3137; ATOM-LABEL: test_bt_btc_btr_bts_64:
3138; ATOM:       # %bb.0:
3139; ATOM-NEXT:    #APP
3140; ATOM-NEXT:    btq %rsi, %rdi # sched: [1:1.00]
3141; ATOM-NEXT:    btcq %rsi, %rdi # sched: [1:1.00]
3142; ATOM-NEXT:    btrq %rsi, %rdi # sched: [1:1.00]
3143; ATOM-NEXT:    btsq %rsi, %rdi # sched: [1:1.00]
3144; ATOM-NEXT:    btq %rsi, (%rdx) # sched: [9:4.50]
3145; ATOM-NEXT:    btcq %rsi, (%rdx) # sched: [11:5.50]
3146; ATOM-NEXT:    btrq %rsi, (%rdx) # sched: [11:5.50]
3147; ATOM-NEXT:    btsq %rsi, (%rdx) # sched: [11:5.50]
3148; ATOM-NEXT:    btq $7, %rdi # sched: [1:1.00]
3149; ATOM-NEXT:    btcq $7, %rdi # sched: [1:1.00]
3150; ATOM-NEXT:    btrq $7, %rdi # sched: [1:1.00]
3151; ATOM-NEXT:    btsq $7, %rdi # sched: [1:1.00]
3152; ATOM-NEXT:    btq $7, (%rdx) # sched: [1:0.50]
3153; ATOM-NEXT:    btcq $7, (%rdx) # sched: [2:1.00]
3154; ATOM-NEXT:    btrq $7, (%rdx) # sched: [2:1.00]
3155; ATOM-NEXT:    btsq $7, (%rdx) # sched: [2:1.00]
3156; ATOM-NEXT:    #NO_APP
3157; ATOM-NEXT:    retq # sched: [79:39.50]
3158;
3159; SLM-LABEL: test_bt_btc_btr_bts_64:
3160; SLM:       # %bb.0:
3161; SLM-NEXT:    #APP
3162; SLM-NEXT:    btq %rsi, %rdi # sched: [1:0.50]
3163; SLM-NEXT:    btcq %rsi, %rdi # sched: [1:0.50]
3164; SLM-NEXT:    btrq %rsi, %rdi # sched: [1:0.50]
3165; SLM-NEXT:    btsq %rsi, %rdi # sched: [1:0.50]
3166; SLM-NEXT:    btq %rsi, (%rdx) # sched: [4:1.00]
3167; SLM-NEXT:    btcq %rsi, (%rdx) # sched: [4:2.00]
3168; SLM-NEXT:    btrq %rsi, (%rdx) # sched: [4:2.00]
3169; SLM-NEXT:    btsq %rsi, (%rdx) # sched: [4:2.00]
3170; SLM-NEXT:    btq $7, %rdi # sched: [1:0.50]
3171; SLM-NEXT:    btcq $7, %rdi # sched: [1:0.50]
3172; SLM-NEXT:    btrq $7, %rdi # sched: [1:0.50]
3173; SLM-NEXT:    btsq $7, %rdi # sched: [1:0.50]
3174; SLM-NEXT:    btq $7, (%rdx) # sched: [1:0.50]
3175; SLM-NEXT:    btcq $7, (%rdx) # sched: [4:2.00]
3176; SLM-NEXT:    btrq $7, (%rdx) # sched: [4:2.00]
3177; SLM-NEXT:    btsq $7, (%rdx) # sched: [4:2.00]
3178; SLM-NEXT:    #NO_APP
3179; SLM-NEXT:    retq # sched: [4:1.00]
3180;
3181; SANDY-LABEL: test_bt_btc_btr_bts_64:
3182; SANDY:       # %bb.0:
3183; SANDY-NEXT:    #APP
3184; SANDY-NEXT:    btq %rsi, %rdi # sched: [1:0.50]
3185; SANDY-NEXT:    btcq %rsi, %rdi # sched: [1:0.50]
3186; SANDY-NEXT:    btrq %rsi, %rdi # sched: [1:0.50]
3187; SANDY-NEXT:    btsq %rsi, %rdi # sched: [1:0.50]
3188; SANDY-NEXT:    btq %rsi, (%rdx) # sched: [9:1.00]
3189; SANDY-NEXT:    btcq %rsi, (%rdx) # sched: [9:1.00]
3190; SANDY-NEXT:    btrq %rsi, (%rdx) # sched: [9:1.00]
3191; SANDY-NEXT:    btsq %rsi, (%rdx) # sched: [9:1.00]
3192; SANDY-NEXT:    btq $7, %rdi # sched: [1:0.50]
3193; SANDY-NEXT:    btcq $7, %rdi # sched: [1:0.50]
3194; SANDY-NEXT:    btrq $7, %rdi # sched: [1:0.50]
3195; SANDY-NEXT:    btsq $7, %rdi # sched: [1:0.50]
3196; SANDY-NEXT:    btq $7, (%rdx) # sched: [6:0.50]
3197; SANDY-NEXT:    btcq $7, (%rdx) # sched: [7:1.00]
3198; SANDY-NEXT:    btrq $7, (%rdx) # sched: [7:1.00]
3199; SANDY-NEXT:    btsq $7, (%rdx) # sched: [7:1.00]
3200; SANDY-NEXT:    #NO_APP
3201; SANDY-NEXT:    retq # sched: [1:1.00]
3202;
3203; HASWELL-LABEL: test_bt_btc_btr_bts_64:
3204; HASWELL:       # %bb.0:
3205; HASWELL-NEXT:    #APP
3206; HASWELL-NEXT:    btq %rsi, %rdi # sched: [1:0.50]
3207; HASWELL-NEXT:    btcq %rsi, %rdi # sched: [1:0.50]
3208; HASWELL-NEXT:    btrq %rsi, %rdi # sched: [1:0.50]
3209; HASWELL-NEXT:    btsq %rsi, %rdi # sched: [1:0.50]
3210; HASWELL-NEXT:    btq %rsi, (%rdx) # sched: [1:2.50]
3211; HASWELL-NEXT:    btcq %rsi, (%rdx) # sched: [1:2.75]
3212; HASWELL-NEXT:    btrq %rsi, (%rdx) # sched: [1:2.75]
3213; HASWELL-NEXT:    btsq %rsi, (%rdx) # sched: [1:2.75]
3214; HASWELL-NEXT:    btq $7, %rdi # sched: [1:0.50]
3215; HASWELL-NEXT:    btcq $7, %rdi # sched: [1:0.50]
3216; HASWELL-NEXT:    btrq $7, %rdi # sched: [1:0.50]
3217; HASWELL-NEXT:    btsq $7, %rdi # sched: [1:0.50]
3218; HASWELL-NEXT:    btq $7, (%rdx) # sched: [6:0.50]
3219; HASWELL-NEXT:    btcq $7, (%rdx) # sched: [7:1.00]
3220; HASWELL-NEXT:    btrq $7, (%rdx) # sched: [7:1.00]
3221; HASWELL-NEXT:    btsq $7, (%rdx) # sched: [7:1.00]
3222; HASWELL-NEXT:    #NO_APP
3223; HASWELL-NEXT:    retq # sched: [7:1.00]
3224;
3225; BROADWELL-LABEL: test_bt_btc_btr_bts_64:
3226; BROADWELL:       # %bb.0:
3227; BROADWELL-NEXT:    #APP
3228; BROADWELL-NEXT:    btq %rsi, %rdi # sched: [1:0.50]
3229; BROADWELL-NEXT:    btcq %rsi, %rdi # sched: [1:0.50]
3230; BROADWELL-NEXT:    btrq %rsi, %rdi # sched: [1:0.50]
3231; BROADWELL-NEXT:    btsq %rsi, %rdi # sched: [1:0.50]
3232; BROADWELL-NEXT:    btq %rsi, (%rdx) # sched: [6:0.50]
3233; BROADWELL-NEXT:    btcq %rsi, (%rdx) # sched: [6:1.00]
3234; BROADWELL-NEXT:    btrq %rsi, (%rdx) # sched: [6:1.00]
3235; BROADWELL-NEXT:    btsq %rsi, (%rdx) # sched: [6:1.00]
3236; BROADWELL-NEXT:    btq $7, %rdi # sched: [1:0.50]
3237; BROADWELL-NEXT:    btcq $7, %rdi # sched: [1:0.50]
3238; BROADWELL-NEXT:    btrq $7, %rdi # sched: [1:0.50]
3239; BROADWELL-NEXT:    btsq $7, %rdi # sched: [1:0.50]
3240; BROADWELL-NEXT:    btq $7, (%rdx) # sched: [6:0.50]
3241; BROADWELL-NEXT:    btcq $7, (%rdx) # sched: [6:1.00]
3242; BROADWELL-NEXT:    btrq $7, (%rdx) # sched: [6:1.00]
3243; BROADWELL-NEXT:    btsq $7, (%rdx) # sched: [6:1.00]
3244; BROADWELL-NEXT:    #NO_APP
3245; BROADWELL-NEXT:    retq # sched: [7:1.00]
3246;
3247; SKYLAKE-LABEL: test_bt_btc_btr_bts_64:
3248; SKYLAKE:       # %bb.0:
3249; SKYLAKE-NEXT:    #APP
3250; SKYLAKE-NEXT:    btq %rsi, %rdi # sched: [1:0.50]
3251; SKYLAKE-NEXT:    btcq %rsi, %rdi # sched: [1:0.50]
3252; SKYLAKE-NEXT:    btrq %rsi, %rdi # sched: [1:0.50]
3253; SKYLAKE-NEXT:    btsq %rsi, %rdi # sched: [1:0.50]
3254; SKYLAKE-NEXT:    btq %rsi, (%rdx) # sched: [6:0.50]
3255; SKYLAKE-NEXT:    btcq %rsi, (%rdx) # sched: [6:1.00]
3256; SKYLAKE-NEXT:    btrq %rsi, (%rdx) # sched: [6:1.00]
3257; SKYLAKE-NEXT:    btsq %rsi, (%rdx) # sched: [6:1.00]
3258; SKYLAKE-NEXT:    btq $7, %rdi # sched: [1:0.50]
3259; SKYLAKE-NEXT:    btcq $7, %rdi # sched: [1:0.50]
3260; SKYLAKE-NEXT:    btrq $7, %rdi # sched: [1:0.50]
3261; SKYLAKE-NEXT:    btsq $7, %rdi # sched: [1:0.50]
3262; SKYLAKE-NEXT:    btq $7, (%rdx) # sched: [6:0.50]
3263; SKYLAKE-NEXT:    btcq $7, (%rdx) # sched: [6:1.00]
3264; SKYLAKE-NEXT:    btrq $7, (%rdx) # sched: [6:1.00]
3265; SKYLAKE-NEXT:    btsq $7, (%rdx) # sched: [6:1.00]
3266; SKYLAKE-NEXT:    #NO_APP
3267; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3268;
3269; SKX-LABEL: test_bt_btc_btr_bts_64:
3270; SKX:       # %bb.0:
3271; SKX-NEXT:    #APP
3272; SKX-NEXT:    btq %rsi, %rdi # sched: [1:0.50]
3273; SKX-NEXT:    btcq %rsi, %rdi # sched: [1:0.50]
3274; SKX-NEXT:    btrq %rsi, %rdi # sched: [1:0.50]
3275; SKX-NEXT:    btsq %rsi, %rdi # sched: [1:0.50]
3276; SKX-NEXT:    btq %rsi, (%rdx) # sched: [6:0.50]
3277; SKX-NEXT:    btcq %rsi, (%rdx) # sched: [6:1.00]
3278; SKX-NEXT:    btrq %rsi, (%rdx) # sched: [6:1.00]
3279; SKX-NEXT:    btsq %rsi, (%rdx) # sched: [6:1.00]
3280; SKX-NEXT:    btq $7, %rdi # sched: [1:0.50]
3281; SKX-NEXT:    btcq $7, %rdi # sched: [1:0.50]
3282; SKX-NEXT:    btrq $7, %rdi # sched: [1:0.50]
3283; SKX-NEXT:    btsq $7, %rdi # sched: [1:0.50]
3284; SKX-NEXT:    btq $7, (%rdx) # sched: [6:0.50]
3285; SKX-NEXT:    btcq $7, (%rdx) # sched: [6:1.00]
3286; SKX-NEXT:    btrq $7, (%rdx) # sched: [6:1.00]
3287; SKX-NEXT:    btsq $7, (%rdx) # sched: [6:1.00]
3288; SKX-NEXT:    #NO_APP
3289; SKX-NEXT:    retq # sched: [7:1.00]
3290;
3291; BTVER2-LABEL: test_bt_btc_btr_bts_64:
3292; BTVER2:       # %bb.0:
3293; BTVER2-NEXT:    #APP
3294; BTVER2-NEXT:    btq %rsi, %rdi # sched: [1:0.50]
3295; BTVER2-NEXT:    btcq %rsi, %rdi # sched: [1:0.50]
3296; BTVER2-NEXT:    btrq %rsi, %rdi # sched: [1:0.50]
3297; BTVER2-NEXT:    btsq %rsi, %rdi # sched: [1:0.50]
3298; BTVER2-NEXT:    btq %rsi, (%rdx) # sched: [4:1.00]
3299; BTVER2-NEXT:    btcq %rsi, (%rdx) # sched: [4:1.00]
3300; BTVER2-NEXT:    btrq %rsi, (%rdx) # sched: [4:1.00]
3301; BTVER2-NEXT:    btsq %rsi, (%rdx) # sched: [4:1.00]
3302; BTVER2-NEXT:    btq $7, %rdi # sched: [1:0.50]
3303; BTVER2-NEXT:    btcq $7, %rdi # sched: [1:0.50]
3304; BTVER2-NEXT:    btrq $7, %rdi # sched: [1:0.50]
3305; BTVER2-NEXT:    btsq $7, %rdi # sched: [1:0.50]
3306; BTVER2-NEXT:    btq $7, (%rdx) # sched: [1:0.50]
3307; BTVER2-NEXT:    btcq $7, (%rdx) # sched: [4:1.00]
3308; BTVER2-NEXT:    btrq $7, (%rdx) # sched: [4:1.00]
3309; BTVER2-NEXT:    btsq $7, (%rdx) # sched: [4:1.00]
3310; BTVER2-NEXT:    #NO_APP
3311; BTVER2-NEXT:    retq # sched: [4:1.00]
3312;
3313; ZNVER1-LABEL: test_bt_btc_btr_bts_64:
3314; ZNVER1:       # %bb.0:
3315; ZNVER1-NEXT:    #APP
3316; ZNVER1-NEXT:    btq %rsi, %rdi # sched: [1:0.25]
3317; ZNVER1-NEXT:    btcq %rsi, %rdi # sched: [2:0.25]
3318; ZNVER1-NEXT:    btrq %rsi, %rdi # sched: [2:0.25]
3319; ZNVER1-NEXT:    btsq %rsi, %rdi # sched: [2:0.25]
3320; ZNVER1-NEXT:    btq %rsi, (%rdx) # sched: [5:0.50]
3321; ZNVER1-NEXT:    btcq %rsi, (%rdx) # sched: [6:0.50]
3322; ZNVER1-NEXT:    btrq %rsi, (%rdx) # sched: [6:0.50]
3323; ZNVER1-NEXT:    btsq %rsi, (%rdx) # sched: [6:0.50]
3324; ZNVER1-NEXT:    btq $7, %rdi # sched: [1:0.25]
3325; ZNVER1-NEXT:    btcq $7, %rdi # sched: [2:0.25]
3326; ZNVER1-NEXT:    btrq $7, %rdi # sched: [2:0.25]
3327; ZNVER1-NEXT:    btsq $7, %rdi # sched: [2:0.25]
3328; ZNVER1-NEXT:    btq $7, (%rdx) # sched: [5:0.50]
3329; ZNVER1-NEXT:    btcq $7, (%rdx) # sched: [6:0.50]
3330; ZNVER1-NEXT:    btrq $7, (%rdx) # sched: [6:0.50]
3331; ZNVER1-NEXT:    btsq $7, (%rdx) # sched: [6:0.50]
3332; ZNVER1-NEXT:    #NO_APP
3333; ZNVER1-NEXT:    retq # sched: [1:0.50]
3334  call void asm sideeffect "btq $1, $0 \0A\09  btcq $1, $0 \0A\09  btrq $1, $0 \0A\09 btsq $1, $0 \0A\09 btq $1, $2 \0A\09 btcq $1, $2 \0A\09 btrq $1, $2 \0A\09 btsq $1, $2 \0A\09 btq $3, $0 \0A\09 btcq $3, $0 \0A\09 btrq $3, $0 \0A\09 btsq $3, $0 \0A\09 btq $3, $2 \0A\09 btcq $3, $2 \0A\09 btrq $3, $2 \0A\09 btsq $3, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7)
3335  ret void
3336}
3337
3338; TODO - test_call
3339
3340define void @test_cbw_cdq_cdqe_cqo_cwd_cwde() optsize {
3341; GENERIC-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3342; GENERIC:       # %bb.0:
3343; GENERIC-NEXT:    #APP
3344; GENERIC-NEXT:    cbtw # sched: [1:0.33]
3345; GENERIC-NEXT:    cltd # sched: [1:0.50]
3346; GENERIC-NEXT:    cltq # sched: [1:0.33]
3347; GENERIC-NEXT:    cqto # sched: [1:0.50]
3348; GENERIC-NEXT:    cwtd # sched: [2:1.00]
3349; GENERIC-NEXT:    cwtl # sched: [1:0.33]
3350; GENERIC-NEXT:    #NO_APP
3351; GENERIC-NEXT:    retq # sched: [1:1.00]
3352;
3353; ATOM-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3354; ATOM:       # %bb.0:
3355; ATOM-NEXT:    #APP
3356; ATOM-NEXT:    cbtw # sched: [4:2.00]
3357; ATOM-NEXT:    cltd # sched: [4:2.00]
3358; ATOM-NEXT:    cltq # sched: [4:2.00]
3359; ATOM-NEXT:    cqto # sched: [4:2.00]
3360; ATOM-NEXT:    cwtd # sched: [4:2.00]
3361; ATOM-NEXT:    cwtl # sched: [4:2.00]
3362; ATOM-NEXT:    #NO_APP
3363; ATOM-NEXT:    retq # sched: [79:39.50]
3364;
3365; SLM-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3366; SLM:       # %bb.0:
3367; SLM-NEXT:    #APP
3368; SLM-NEXT:    cbtw # sched: [1:0.50]
3369; SLM-NEXT:    cltd # sched: [1:0.50]
3370; SLM-NEXT:    cltq # sched: [1:0.50]
3371; SLM-NEXT:    cqto # sched: [1:0.50]
3372; SLM-NEXT:    cwtd # sched: [1:0.50]
3373; SLM-NEXT:    cwtl # sched: [1:0.50]
3374; SLM-NEXT:    #NO_APP
3375; SLM-NEXT:    retq # sched: [4:1.00]
3376;
3377; SANDY-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3378; SANDY:       # %bb.0:
3379; SANDY-NEXT:    #APP
3380; SANDY-NEXT:    cbtw # sched: [1:0.33]
3381; SANDY-NEXT:    cltd # sched: [1:0.50]
3382; SANDY-NEXT:    cltq # sched: [1:0.33]
3383; SANDY-NEXT:    cqto # sched: [1:0.50]
3384; SANDY-NEXT:    cwtd # sched: [2:1.00]
3385; SANDY-NEXT:    cwtl # sched: [1:0.33]
3386; SANDY-NEXT:    #NO_APP
3387; SANDY-NEXT:    retq # sched: [1:1.00]
3388;
3389; HASWELL-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3390; HASWELL:       # %bb.0:
3391; HASWELL-NEXT:    #APP
3392; HASWELL-NEXT:    cbtw # sched: [1:0.25]
3393; HASWELL-NEXT:    cltd # sched: [1:0.50]
3394; HASWELL-NEXT:    cltq # sched: [1:0.25]
3395; HASWELL-NEXT:    cqto # sched: [1:0.50]
3396; HASWELL-NEXT:    cwtd # sched: [2:0.50]
3397; HASWELL-NEXT:    cwtl # sched: [1:0.25]
3398; HASWELL-NEXT:    #NO_APP
3399; HASWELL-NEXT:    retq # sched: [7:1.00]
3400;
3401; BROADWELL-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3402; BROADWELL:       # %bb.0:
3403; BROADWELL-NEXT:    #APP
3404; BROADWELL-NEXT:    cbtw # sched: [1:0.25]
3405; BROADWELL-NEXT:    cltd # sched: [1:0.50]
3406; BROADWELL-NEXT:    cltq # sched: [1:0.25]
3407; BROADWELL-NEXT:    cqto # sched: [1:0.50]
3408; BROADWELL-NEXT:    cwtd # sched: [2:0.50]
3409; BROADWELL-NEXT:    cwtl # sched: [1:0.25]
3410; BROADWELL-NEXT:    #NO_APP
3411; BROADWELL-NEXT:    retq # sched: [7:1.00]
3412;
3413; SKYLAKE-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3414; SKYLAKE:       # %bb.0:
3415; SKYLAKE-NEXT:    #APP
3416; SKYLAKE-NEXT:    cbtw # sched: [1:0.25]
3417; SKYLAKE-NEXT:    cltd # sched: [1:0.50]
3418; SKYLAKE-NEXT:    cltq # sched: [1:0.25]
3419; SKYLAKE-NEXT:    cqto # sched: [1:0.50]
3420; SKYLAKE-NEXT:    cwtd # sched: [2:0.50]
3421; SKYLAKE-NEXT:    cwtl # sched: [1:0.25]
3422; SKYLAKE-NEXT:    #NO_APP
3423; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3424;
3425; SKX-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3426; SKX:       # %bb.0:
3427; SKX-NEXT:    #APP
3428; SKX-NEXT:    cbtw # sched: [1:0.25]
3429; SKX-NEXT:    cltd # sched: [1:0.50]
3430; SKX-NEXT:    cltq # sched: [1:0.25]
3431; SKX-NEXT:    cqto # sched: [1:0.50]
3432; SKX-NEXT:    cwtd # sched: [2:0.50]
3433; SKX-NEXT:    cwtl # sched: [1:0.25]
3434; SKX-NEXT:    #NO_APP
3435; SKX-NEXT:    retq # sched: [7:1.00]
3436;
3437; BTVER2-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3438; BTVER2:       # %bb.0:
3439; BTVER2-NEXT:    #APP
3440; BTVER2-NEXT:    cbtw # sched: [1:0.50]
3441; BTVER2-NEXT:    cltd # sched: [1:0.50]
3442; BTVER2-NEXT:    cltq # sched: [1:0.50]
3443; BTVER2-NEXT:    cqto # sched: [1:0.50]
3444; BTVER2-NEXT:    cwtd # sched: [1:0.50]
3445; BTVER2-NEXT:    cwtl # sched: [1:0.50]
3446; BTVER2-NEXT:    #NO_APP
3447; BTVER2-NEXT:    retq # sched: [4:1.00]
3448;
3449; ZNVER1-LABEL: test_cbw_cdq_cdqe_cqo_cwd_cwde:
3450; ZNVER1:       # %bb.0:
3451; ZNVER1-NEXT:    #APP
3452; ZNVER1-NEXT:    cbtw # sched: [1:0.25]
3453; ZNVER1-NEXT:    cltd # sched: [1:0.25]
3454; ZNVER1-NEXT:    cltq # sched: [1:0.25]
3455; ZNVER1-NEXT:    cqto # sched: [1:0.25]
3456; ZNVER1-NEXT:    cwtd # sched: [1:0.25]
3457; ZNVER1-NEXT:    cwtl # sched: [1:0.25]
3458; ZNVER1-NEXT:    #NO_APP
3459; ZNVER1-NEXT:    retq # sched: [1:0.50]
3460  tail call void asm "cbw \0A\09 cdq \0A\09 cdqe \0A\09 cqo \0A\09 cwd \0A\09 cwde", ""() nounwind
3461  ret void
3462}
3463
3464define void @test_clc_cld_cmc() optsize {
3465; GENERIC-LABEL: test_clc_cld_cmc:
3466; GENERIC:       # %bb.0:
3467; GENERIC-NEXT:    #APP
3468; GENERIC-NEXT:    clc # sched: [1:0.25]
3469; GENERIC-NEXT:    cld # sched: [1:0.33]
3470; GENERIC-NEXT:    cmc # sched: [1:0.33]
3471; GENERIC-NEXT:    #NO_APP
3472; GENERIC-NEXT:    retq # sched: [1:1.00]
3473;
3474; ATOM-LABEL: test_clc_cld_cmc:
3475; ATOM:       # %bb.0:
3476; ATOM-NEXT:    #APP
3477; ATOM-NEXT:    clc # sched: [1:0.50]
3478; ATOM-NEXT:    cld # sched: [3:1.50]
3479; ATOM-NEXT:    cmc # sched: [1:0.50]
3480; ATOM-NEXT:    #NO_APP
3481; ATOM-NEXT:    retq # sched: [79:39.50]
3482;
3483; SLM-LABEL: test_clc_cld_cmc:
3484; SLM:       # %bb.0:
3485; SLM-NEXT:    #APP
3486; SLM-NEXT:    clc # sched: [1:0.50]
3487; SLM-NEXT:    cld # sched: [1:0.50]
3488; SLM-NEXT:    cmc # sched: [1:0.50]
3489; SLM-NEXT:    #NO_APP
3490; SLM-NEXT:    retq # sched: [4:1.00]
3491;
3492; SANDY-LABEL: test_clc_cld_cmc:
3493; SANDY:       # %bb.0:
3494; SANDY-NEXT:    #APP
3495; SANDY-NEXT:    clc # sched: [1:0.25]
3496; SANDY-NEXT:    cld # sched: [1:0.33]
3497; SANDY-NEXT:    cmc # sched: [1:0.33]
3498; SANDY-NEXT:    #NO_APP
3499; SANDY-NEXT:    retq # sched: [1:1.00]
3500;
3501; HASWELL-LABEL: test_clc_cld_cmc:
3502; HASWELL:       # %bb.0:
3503; HASWELL-NEXT:    #APP
3504; HASWELL-NEXT:    clc # sched: [1:0.25]
3505; HASWELL-NEXT:    cld # sched: [3:1.00]
3506; HASWELL-NEXT:    cmc # sched: [1:0.25]
3507; HASWELL-NEXT:    #NO_APP
3508; HASWELL-NEXT:    retq # sched: [7:1.00]
3509;
3510; BROADWELL-LABEL: test_clc_cld_cmc:
3511; BROADWELL:       # %bb.0:
3512; BROADWELL-NEXT:    #APP
3513; BROADWELL-NEXT:    clc # sched: [1:0.25]
3514; BROADWELL-NEXT:    cld # sched: [3:1.00]
3515; BROADWELL-NEXT:    cmc # sched: [1:0.25]
3516; BROADWELL-NEXT:    #NO_APP
3517; BROADWELL-NEXT:    retq # sched: [7:1.00]
3518;
3519; SKYLAKE-LABEL: test_clc_cld_cmc:
3520; SKYLAKE:       # %bb.0:
3521; SKYLAKE-NEXT:    #APP
3522; SKYLAKE-NEXT:    clc # sched: [1:0.17]
3523; SKYLAKE-NEXT:    cld # sched: [3:1.00]
3524; SKYLAKE-NEXT:    cmc # sched: [1:0.25]
3525; SKYLAKE-NEXT:    #NO_APP
3526; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3527;
3528; SKX-LABEL: test_clc_cld_cmc:
3529; SKX:       # %bb.0:
3530; SKX-NEXT:    #APP
3531; SKX-NEXT:    clc # sched: [1:0.17]
3532; SKX-NEXT:    cld # sched: [3:1.00]
3533; SKX-NEXT:    cmc # sched: [1:0.25]
3534; SKX-NEXT:    #NO_APP
3535; SKX-NEXT:    retq # sched: [7:1.00]
3536;
3537; BTVER2-LABEL: test_clc_cld_cmc:
3538; BTVER2:       # %bb.0:
3539; BTVER2-NEXT:    #APP
3540; BTVER2-NEXT:    clc # sched: [1:0.50]
3541; BTVER2-NEXT:    cld # sched: [1:0.50]
3542; BTVER2-NEXT:    cmc # sched: [1:0.50]
3543; BTVER2-NEXT:    #NO_APP
3544; BTVER2-NEXT:    retq # sched: [4:1.00]
3545;
3546; ZNVER1-LABEL: test_clc_cld_cmc:
3547; ZNVER1:       # %bb.0:
3548; ZNVER1-NEXT:    #APP
3549; ZNVER1-NEXT:    clc # sched: [1:0.25]
3550; ZNVER1-NEXT:    cld # sched: [1:0.25]
3551; ZNVER1-NEXT:    cmc # sched: [1:0.25]
3552; ZNVER1-NEXT:    #NO_APP
3553; ZNVER1-NEXT:    retq # sched: [1:0.50]
3554  tail call void asm "clc \0A\09 cld \0A\09 cmc", ""() nounwind
3555  ret void
3556}
3557
3558define void @test_cmp_8(i8 %a0, i8* %a1) optsize {
3559; GENERIC-LABEL: test_cmp_8:
3560; GENERIC:       # %bb.0:
3561; GENERIC-NEXT:    #APP
3562; GENERIC-NEXT:    cmpb $7, %al # sched: [1:0.33]
3563; GENERIC-NEXT:    cmpb $7, %dil # sched: [1:0.33]
3564; GENERIC-NEXT:    cmpb $7, (%rsi) # sched: [6:0.50]
3565; GENERIC-NEXT:    cmpb %dil, %dil # sched: [1:0.33]
3566; GENERIC-NEXT:    cmpb %dil, (%rsi) # sched: [6:0.50]
3567; GENERIC-NEXT:    cmpb (%rsi), %dil # sched: [6:0.50]
3568; GENERIC-NEXT:    #NO_APP
3569; GENERIC-NEXT:    retq # sched: [1:1.00]
3570;
3571; ATOM-LABEL: test_cmp_8:
3572; ATOM:       # %bb.0:
3573; ATOM-NEXT:    #APP
3574; ATOM-NEXT:    cmpb $7, %al # sched: [1:0.50]
3575; ATOM-NEXT:    cmpb $7, %dil # sched: [1:0.50]
3576; ATOM-NEXT:    cmpb $7, (%rsi) # sched: [1:1.00]
3577; ATOM-NEXT:    cmpb %dil, %dil # sched: [1:0.50]
3578; ATOM-NEXT:    cmpb %dil, (%rsi) # sched: [1:1.00]
3579; ATOM-NEXT:    cmpb (%rsi), %dil # sched: [1:1.00]
3580; ATOM-NEXT:    #NO_APP
3581; ATOM-NEXT:    retq # sched: [79:39.50]
3582;
3583; SLM-LABEL: test_cmp_8:
3584; SLM:       # %bb.0:
3585; SLM-NEXT:    #APP
3586; SLM-NEXT:    cmpb $7, %al # sched: [1:0.50]
3587; SLM-NEXT:    cmpb $7, %dil # sched: [1:0.50]
3588; SLM-NEXT:    cmpb $7, (%rsi) # sched: [4:1.00]
3589; SLM-NEXT:    cmpb %dil, %dil # sched: [1:0.50]
3590; SLM-NEXT:    cmpb %dil, (%rsi) # sched: [4:1.00]
3591; SLM-NEXT:    cmpb (%rsi), %dil # sched: [4:1.00]
3592; SLM-NEXT:    #NO_APP
3593; SLM-NEXT:    retq # sched: [4:1.00]
3594;
3595; SANDY-LABEL: test_cmp_8:
3596; SANDY:       # %bb.0:
3597; SANDY-NEXT:    #APP
3598; SANDY-NEXT:    cmpb $7, %al # sched: [1:0.33]
3599; SANDY-NEXT:    cmpb $7, %dil # sched: [1:0.33]
3600; SANDY-NEXT:    cmpb $7, (%rsi) # sched: [6:0.50]
3601; SANDY-NEXT:    cmpb %dil, %dil # sched: [1:0.33]
3602; SANDY-NEXT:    cmpb %dil, (%rsi) # sched: [6:0.50]
3603; SANDY-NEXT:    cmpb (%rsi), %dil # sched: [6:0.50]
3604; SANDY-NEXT:    #NO_APP
3605; SANDY-NEXT:    retq # sched: [1:1.00]
3606;
3607; HASWELL-LABEL: test_cmp_8:
3608; HASWELL:       # %bb.0:
3609; HASWELL-NEXT:    #APP
3610; HASWELL-NEXT:    cmpb $7, %al # sched: [1:0.25]
3611; HASWELL-NEXT:    cmpb $7, %dil # sched: [1:0.25]
3612; HASWELL-NEXT:    cmpb $7, (%rsi) # sched: [6:0.50]
3613; HASWELL-NEXT:    cmpb %dil, %dil # sched: [1:0.25]
3614; HASWELL-NEXT:    cmpb %dil, (%rsi) # sched: [6:0.50]
3615; HASWELL-NEXT:    cmpb (%rsi), %dil # sched: [6:0.50]
3616; HASWELL-NEXT:    #NO_APP
3617; HASWELL-NEXT:    retq # sched: [7:1.00]
3618;
3619; BROADWELL-LABEL: test_cmp_8:
3620; BROADWELL:       # %bb.0:
3621; BROADWELL-NEXT:    #APP
3622; BROADWELL-NEXT:    cmpb $7, %al # sched: [1:0.25]
3623; BROADWELL-NEXT:    cmpb $7, %dil # sched: [1:0.25]
3624; BROADWELL-NEXT:    cmpb $7, (%rsi) # sched: [6:0.50]
3625; BROADWELL-NEXT:    cmpb %dil, %dil # sched: [1:0.25]
3626; BROADWELL-NEXT:    cmpb %dil, (%rsi) # sched: [6:0.50]
3627; BROADWELL-NEXT:    cmpb (%rsi), %dil # sched: [6:0.50]
3628; BROADWELL-NEXT:    #NO_APP
3629; BROADWELL-NEXT:    retq # sched: [7:1.00]
3630;
3631; SKYLAKE-LABEL: test_cmp_8:
3632; SKYLAKE:       # %bb.0:
3633; SKYLAKE-NEXT:    #APP
3634; SKYLAKE-NEXT:    cmpb $7, %al # sched: [1:0.25]
3635; SKYLAKE-NEXT:    cmpb $7, %dil # sched: [1:0.25]
3636; SKYLAKE-NEXT:    cmpb $7, (%rsi) # sched: [6:0.50]
3637; SKYLAKE-NEXT:    cmpb %dil, %dil # sched: [1:0.25]
3638; SKYLAKE-NEXT:    cmpb %dil, (%rsi) # sched: [6:0.50]
3639; SKYLAKE-NEXT:    cmpb (%rsi), %dil # sched: [6:0.50]
3640; SKYLAKE-NEXT:    #NO_APP
3641; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3642;
3643; SKX-LABEL: test_cmp_8:
3644; SKX:       # %bb.0:
3645; SKX-NEXT:    #APP
3646; SKX-NEXT:    cmpb $7, %al # sched: [1:0.25]
3647; SKX-NEXT:    cmpb $7, %dil # sched: [1:0.25]
3648; SKX-NEXT:    cmpb $7, (%rsi) # sched: [6:0.50]
3649; SKX-NEXT:    cmpb %dil, %dil # sched: [1:0.25]
3650; SKX-NEXT:    cmpb %dil, (%rsi) # sched: [6:0.50]
3651; SKX-NEXT:    cmpb (%rsi), %dil # sched: [6:0.50]
3652; SKX-NEXT:    #NO_APP
3653; SKX-NEXT:    retq # sched: [7:1.00]
3654;
3655; BTVER2-LABEL: test_cmp_8:
3656; BTVER2:       # %bb.0:
3657; BTVER2-NEXT:    #APP
3658; BTVER2-NEXT:    cmpb $7, %al # sched: [1:0.50]
3659; BTVER2-NEXT:    cmpb $7, %dil # sched: [1:0.50]
3660; BTVER2-NEXT:    cmpb $7, (%rsi) # sched: [4:1.00]
3661; BTVER2-NEXT:    cmpb %dil, %dil # sched: [1:0.50]
3662; BTVER2-NEXT:    cmpb %dil, (%rsi) # sched: [4:1.00]
3663; BTVER2-NEXT:    cmpb (%rsi), %dil # sched: [4:1.00]
3664; BTVER2-NEXT:    #NO_APP
3665; BTVER2-NEXT:    retq # sched: [4:1.00]
3666;
3667; ZNVER1-LABEL: test_cmp_8:
3668; ZNVER1:       # %bb.0:
3669; ZNVER1-NEXT:    #APP
3670; ZNVER1-NEXT:    cmpb $7, %al # sched: [1:0.25]
3671; ZNVER1-NEXT:    cmpb $7, %dil # sched: [1:0.25]
3672; ZNVER1-NEXT:    cmpb $7, (%rsi) # sched: [5:0.50]
3673; ZNVER1-NEXT:    cmpb %dil, %dil # sched: [1:0.25]
3674; ZNVER1-NEXT:    cmpb %dil, (%rsi) # sched: [5:0.50]
3675; ZNVER1-NEXT:    cmpb (%rsi), %dil # sched: [5:0.50]
3676; ZNVER1-NEXT:    #NO_APP
3677; ZNVER1-NEXT:    retq # sched: [1:0.50]
3678  tail call void asm "cmpb $2, %AL \0A\09 cmpb $2, $0 \0A\09 cmpb $2, $1 \0A\09 cmpb $0, $0 \0A\09 cmpb $0, $1 \0A\09 cmpb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
3679  ret void
3680}
3681define void @test_cmp_16(i16 %a0, i16* %a1) optsize {
3682; GENERIC-LABEL: test_cmp_16:
3683; GENERIC:       # %bb.0:
3684; GENERIC-NEXT:    #APP
3685; GENERIC-NEXT:    cmpw $511, %ax # imm = 0x1FF
3686; GENERIC-NEXT:    # sched: [1:0.33]
3687; GENERIC-NEXT:    cmpw $511, %di # imm = 0x1FF
3688; GENERIC-NEXT:    # sched: [1:0.33]
3689; GENERIC-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3690; GENERIC-NEXT:    # sched: [6:0.50]
3691; GENERIC-NEXT:    cmpw $7, %di # sched: [1:0.33]
3692; GENERIC-NEXT:    cmpw $7, (%rsi) # sched: [6:0.50]
3693; GENERIC-NEXT:    cmpw %di, %di # sched: [1:0.33]
3694; GENERIC-NEXT:    cmpw %di, (%rsi) # sched: [6:0.50]
3695; GENERIC-NEXT:    cmpw (%rsi), %di # sched: [6:0.50]
3696; GENERIC-NEXT:    #NO_APP
3697; GENERIC-NEXT:    retq # sched: [1:1.00]
3698;
3699; ATOM-LABEL: test_cmp_16:
3700; ATOM:       # %bb.0:
3701; ATOM-NEXT:    #APP
3702; ATOM-NEXT:    cmpw $511, %ax # imm = 0x1FF
3703; ATOM-NEXT:    # sched: [1:0.50]
3704; ATOM-NEXT:    cmpw $511, %di # imm = 0x1FF
3705; ATOM-NEXT:    # sched: [1:0.50]
3706; ATOM-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3707; ATOM-NEXT:    # sched: [1:1.00]
3708; ATOM-NEXT:    cmpw $7, %di # sched: [1:0.50]
3709; ATOM-NEXT:    cmpw $7, (%rsi) # sched: [1:1.00]
3710; ATOM-NEXT:    cmpw %di, %di # sched: [1:0.50]
3711; ATOM-NEXT:    cmpw %di, (%rsi) # sched: [1:1.00]
3712; ATOM-NEXT:    cmpw (%rsi), %di # sched: [1:1.00]
3713; ATOM-NEXT:    #NO_APP
3714; ATOM-NEXT:    retq # sched: [79:39.50]
3715;
3716; SLM-LABEL: test_cmp_16:
3717; SLM:       # %bb.0:
3718; SLM-NEXT:    #APP
3719; SLM-NEXT:    cmpw $511, %ax # imm = 0x1FF
3720; SLM-NEXT:    # sched: [1:0.50]
3721; SLM-NEXT:    cmpw $511, %di # imm = 0x1FF
3722; SLM-NEXT:    # sched: [1:0.50]
3723; SLM-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3724; SLM-NEXT:    # sched: [4:1.00]
3725; SLM-NEXT:    cmpw $7, %di # sched: [1:0.50]
3726; SLM-NEXT:    cmpw $7, (%rsi) # sched: [4:1.00]
3727; SLM-NEXT:    cmpw %di, %di # sched: [1:0.50]
3728; SLM-NEXT:    cmpw %di, (%rsi) # sched: [4:1.00]
3729; SLM-NEXT:    cmpw (%rsi), %di # sched: [4:1.00]
3730; SLM-NEXT:    #NO_APP
3731; SLM-NEXT:    retq # sched: [4:1.00]
3732;
3733; SANDY-LABEL: test_cmp_16:
3734; SANDY:       # %bb.0:
3735; SANDY-NEXT:    #APP
3736; SANDY-NEXT:    cmpw $511, %ax # imm = 0x1FF
3737; SANDY-NEXT:    # sched: [1:0.33]
3738; SANDY-NEXT:    cmpw $511, %di # imm = 0x1FF
3739; SANDY-NEXT:    # sched: [1:0.33]
3740; SANDY-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3741; SANDY-NEXT:    # sched: [6:0.50]
3742; SANDY-NEXT:    cmpw $7, %di # sched: [1:0.33]
3743; SANDY-NEXT:    cmpw $7, (%rsi) # sched: [6:0.50]
3744; SANDY-NEXT:    cmpw %di, %di # sched: [1:0.33]
3745; SANDY-NEXT:    cmpw %di, (%rsi) # sched: [6:0.50]
3746; SANDY-NEXT:    cmpw (%rsi), %di # sched: [6:0.50]
3747; SANDY-NEXT:    #NO_APP
3748; SANDY-NEXT:    retq # sched: [1:1.00]
3749;
3750; HASWELL-LABEL: test_cmp_16:
3751; HASWELL:       # %bb.0:
3752; HASWELL-NEXT:    #APP
3753; HASWELL-NEXT:    cmpw $511, %ax # imm = 0x1FF
3754; HASWELL-NEXT:    # sched: [1:0.25]
3755; HASWELL-NEXT:    cmpw $511, %di # imm = 0x1FF
3756; HASWELL-NEXT:    # sched: [1:0.25]
3757; HASWELL-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3758; HASWELL-NEXT:    # sched: [6:0.50]
3759; HASWELL-NEXT:    cmpw $7, %di # sched: [1:0.25]
3760; HASWELL-NEXT:    cmpw $7, (%rsi) # sched: [6:0.50]
3761; HASWELL-NEXT:    cmpw %di, %di # sched: [1:0.25]
3762; HASWELL-NEXT:    cmpw %di, (%rsi) # sched: [6:0.50]
3763; HASWELL-NEXT:    cmpw (%rsi), %di # sched: [6:0.50]
3764; HASWELL-NEXT:    #NO_APP
3765; HASWELL-NEXT:    retq # sched: [7:1.00]
3766;
3767; BROADWELL-LABEL: test_cmp_16:
3768; BROADWELL:       # %bb.0:
3769; BROADWELL-NEXT:    #APP
3770; BROADWELL-NEXT:    cmpw $511, %ax # imm = 0x1FF
3771; BROADWELL-NEXT:    # sched: [1:0.25]
3772; BROADWELL-NEXT:    cmpw $511, %di # imm = 0x1FF
3773; BROADWELL-NEXT:    # sched: [1:0.25]
3774; BROADWELL-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3775; BROADWELL-NEXT:    # sched: [6:0.50]
3776; BROADWELL-NEXT:    cmpw $7, %di # sched: [1:0.25]
3777; BROADWELL-NEXT:    cmpw $7, (%rsi) # sched: [6:0.50]
3778; BROADWELL-NEXT:    cmpw %di, %di # sched: [1:0.25]
3779; BROADWELL-NEXT:    cmpw %di, (%rsi) # sched: [6:0.50]
3780; BROADWELL-NEXT:    cmpw (%rsi), %di # sched: [6:0.50]
3781; BROADWELL-NEXT:    #NO_APP
3782; BROADWELL-NEXT:    retq # sched: [7:1.00]
3783;
3784; SKYLAKE-LABEL: test_cmp_16:
3785; SKYLAKE:       # %bb.0:
3786; SKYLAKE-NEXT:    #APP
3787; SKYLAKE-NEXT:    cmpw $511, %ax # imm = 0x1FF
3788; SKYLAKE-NEXT:    # sched: [1:0.25]
3789; SKYLAKE-NEXT:    cmpw $511, %di # imm = 0x1FF
3790; SKYLAKE-NEXT:    # sched: [1:0.25]
3791; SKYLAKE-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3792; SKYLAKE-NEXT:    # sched: [6:0.50]
3793; SKYLAKE-NEXT:    cmpw $7, %di # sched: [1:0.25]
3794; SKYLAKE-NEXT:    cmpw $7, (%rsi) # sched: [6:0.50]
3795; SKYLAKE-NEXT:    cmpw %di, %di # sched: [1:0.25]
3796; SKYLAKE-NEXT:    cmpw %di, (%rsi) # sched: [6:0.50]
3797; SKYLAKE-NEXT:    cmpw (%rsi), %di # sched: [6:0.50]
3798; SKYLAKE-NEXT:    #NO_APP
3799; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3800;
3801; SKX-LABEL: test_cmp_16:
3802; SKX:       # %bb.0:
3803; SKX-NEXT:    #APP
3804; SKX-NEXT:    cmpw $511, %ax # imm = 0x1FF
3805; SKX-NEXT:    # sched: [1:0.25]
3806; SKX-NEXT:    cmpw $511, %di # imm = 0x1FF
3807; SKX-NEXT:    # sched: [1:0.25]
3808; SKX-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3809; SKX-NEXT:    # sched: [6:0.50]
3810; SKX-NEXT:    cmpw $7, %di # sched: [1:0.25]
3811; SKX-NEXT:    cmpw $7, (%rsi) # sched: [6:0.50]
3812; SKX-NEXT:    cmpw %di, %di # sched: [1:0.25]
3813; SKX-NEXT:    cmpw %di, (%rsi) # sched: [6:0.50]
3814; SKX-NEXT:    cmpw (%rsi), %di # sched: [6:0.50]
3815; SKX-NEXT:    #NO_APP
3816; SKX-NEXT:    retq # sched: [7:1.00]
3817;
3818; BTVER2-LABEL: test_cmp_16:
3819; BTVER2:       # %bb.0:
3820; BTVER2-NEXT:    #APP
3821; BTVER2-NEXT:    cmpw $511, %ax # imm = 0x1FF
3822; BTVER2-NEXT:    # sched: [1:0.50]
3823; BTVER2-NEXT:    cmpw $511, %di # imm = 0x1FF
3824; BTVER2-NEXT:    # sched: [1:0.50]
3825; BTVER2-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3826; BTVER2-NEXT:    # sched: [4:1.00]
3827; BTVER2-NEXT:    cmpw $7, %di # sched: [1:0.50]
3828; BTVER2-NEXT:    cmpw $7, (%rsi) # sched: [4:1.00]
3829; BTVER2-NEXT:    cmpw %di, %di # sched: [1:0.50]
3830; BTVER2-NEXT:    cmpw %di, (%rsi) # sched: [4:1.00]
3831; BTVER2-NEXT:    cmpw (%rsi), %di # sched: [4:1.00]
3832; BTVER2-NEXT:    #NO_APP
3833; BTVER2-NEXT:    retq # sched: [4:1.00]
3834;
3835; ZNVER1-LABEL: test_cmp_16:
3836; ZNVER1:       # %bb.0:
3837; ZNVER1-NEXT:    #APP
3838; ZNVER1-NEXT:    cmpw $511, %ax # imm = 0x1FF
3839; ZNVER1-NEXT:    # sched: [1:0.25]
3840; ZNVER1-NEXT:    cmpw $511, %di # imm = 0x1FF
3841; ZNVER1-NEXT:    # sched: [1:0.25]
3842; ZNVER1-NEXT:    cmpw $511, (%rsi) # imm = 0x1FF
3843; ZNVER1-NEXT:    # sched: [5:0.50]
3844; ZNVER1-NEXT:    cmpw $7, %di # sched: [1:0.25]
3845; ZNVER1-NEXT:    cmpw $7, (%rsi) # sched: [5:0.50]
3846; ZNVER1-NEXT:    cmpw %di, %di # sched: [1:0.25]
3847; ZNVER1-NEXT:    cmpw %di, (%rsi) # sched: [5:0.50]
3848; ZNVER1-NEXT:    cmpw (%rsi), %di # sched: [5:0.50]
3849; ZNVER1-NEXT:    #NO_APP
3850; ZNVER1-NEXT:    retq # sched: [1:0.50]
3851  tail call void asm "cmpw $2, %AX \0A\09 cmpw $2, $0 \0A\09 cmpw $2, $1 \0A\09 cmpw $3, $0 \0A\09 cmpw $3, $1 \0A\09 cmpw $0, $0 \0A\09 cmpw $0, $1 \0A\09 cmpw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
3852  ret void
3853}
3854define void @test_cmp_32(i32 %a0, i32* %a1) optsize {
3855; GENERIC-LABEL: test_cmp_32:
3856; GENERIC:       # %bb.0:
3857; GENERIC-NEXT:    #APP
3858; GENERIC-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3859; GENERIC-NEXT:    # sched: [1:0.33]
3860; GENERIC-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3861; GENERIC-NEXT:    # sched: [1:0.33]
3862; GENERIC-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3863; GENERIC-NEXT:    # sched: [6:0.50]
3864; GENERIC-NEXT:    cmpl $7, %edi # sched: [1:0.33]
3865; GENERIC-NEXT:    cmpl $7, (%rsi) # sched: [6:0.50]
3866; GENERIC-NEXT:    cmpl %edi, %edi # sched: [1:0.33]
3867; GENERIC-NEXT:    cmpl %edi, (%rsi) # sched: [6:0.50]
3868; GENERIC-NEXT:    cmpl (%rsi), %edi # sched: [6:0.50]
3869; GENERIC-NEXT:    #NO_APP
3870; GENERIC-NEXT:    retq # sched: [1:1.00]
3871;
3872; ATOM-LABEL: test_cmp_32:
3873; ATOM:       # %bb.0:
3874; ATOM-NEXT:    #APP
3875; ATOM-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3876; ATOM-NEXT:    # sched: [1:0.50]
3877; ATOM-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3878; ATOM-NEXT:    # sched: [1:0.50]
3879; ATOM-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3880; ATOM-NEXT:    # sched: [1:1.00]
3881; ATOM-NEXT:    cmpl $7, %edi # sched: [1:0.50]
3882; ATOM-NEXT:    cmpl $7, (%rsi) # sched: [1:1.00]
3883; ATOM-NEXT:    cmpl %edi, %edi # sched: [1:0.50]
3884; ATOM-NEXT:    cmpl %edi, (%rsi) # sched: [1:1.00]
3885; ATOM-NEXT:    cmpl (%rsi), %edi # sched: [1:1.00]
3886; ATOM-NEXT:    #NO_APP
3887; ATOM-NEXT:    retq # sched: [79:39.50]
3888;
3889; SLM-LABEL: test_cmp_32:
3890; SLM:       # %bb.0:
3891; SLM-NEXT:    #APP
3892; SLM-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3893; SLM-NEXT:    # sched: [1:0.50]
3894; SLM-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3895; SLM-NEXT:    # sched: [1:0.50]
3896; SLM-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3897; SLM-NEXT:    # sched: [4:1.00]
3898; SLM-NEXT:    cmpl $7, %edi # sched: [1:0.50]
3899; SLM-NEXT:    cmpl $7, (%rsi) # sched: [4:1.00]
3900; SLM-NEXT:    cmpl %edi, %edi # sched: [1:0.50]
3901; SLM-NEXT:    cmpl %edi, (%rsi) # sched: [4:1.00]
3902; SLM-NEXT:    cmpl (%rsi), %edi # sched: [4:1.00]
3903; SLM-NEXT:    #NO_APP
3904; SLM-NEXT:    retq # sched: [4:1.00]
3905;
3906; SANDY-LABEL: test_cmp_32:
3907; SANDY:       # %bb.0:
3908; SANDY-NEXT:    #APP
3909; SANDY-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3910; SANDY-NEXT:    # sched: [1:0.33]
3911; SANDY-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3912; SANDY-NEXT:    # sched: [1:0.33]
3913; SANDY-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3914; SANDY-NEXT:    # sched: [6:0.50]
3915; SANDY-NEXT:    cmpl $7, %edi # sched: [1:0.33]
3916; SANDY-NEXT:    cmpl $7, (%rsi) # sched: [6:0.50]
3917; SANDY-NEXT:    cmpl %edi, %edi # sched: [1:0.33]
3918; SANDY-NEXT:    cmpl %edi, (%rsi) # sched: [6:0.50]
3919; SANDY-NEXT:    cmpl (%rsi), %edi # sched: [6:0.50]
3920; SANDY-NEXT:    #NO_APP
3921; SANDY-NEXT:    retq # sched: [1:1.00]
3922;
3923; HASWELL-LABEL: test_cmp_32:
3924; HASWELL:       # %bb.0:
3925; HASWELL-NEXT:    #APP
3926; HASWELL-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3927; HASWELL-NEXT:    # sched: [1:0.25]
3928; HASWELL-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3929; HASWELL-NEXT:    # sched: [1:0.25]
3930; HASWELL-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3931; HASWELL-NEXT:    # sched: [6:0.50]
3932; HASWELL-NEXT:    cmpl $7, %edi # sched: [1:0.25]
3933; HASWELL-NEXT:    cmpl $7, (%rsi) # sched: [6:0.50]
3934; HASWELL-NEXT:    cmpl %edi, %edi # sched: [1:0.25]
3935; HASWELL-NEXT:    cmpl %edi, (%rsi) # sched: [6:0.50]
3936; HASWELL-NEXT:    cmpl (%rsi), %edi # sched: [6:0.50]
3937; HASWELL-NEXT:    #NO_APP
3938; HASWELL-NEXT:    retq # sched: [7:1.00]
3939;
3940; BROADWELL-LABEL: test_cmp_32:
3941; BROADWELL:       # %bb.0:
3942; BROADWELL-NEXT:    #APP
3943; BROADWELL-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3944; BROADWELL-NEXT:    # sched: [1:0.25]
3945; BROADWELL-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3946; BROADWELL-NEXT:    # sched: [1:0.25]
3947; BROADWELL-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3948; BROADWELL-NEXT:    # sched: [6:0.50]
3949; BROADWELL-NEXT:    cmpl $7, %edi # sched: [1:0.25]
3950; BROADWELL-NEXT:    cmpl $7, (%rsi) # sched: [6:0.50]
3951; BROADWELL-NEXT:    cmpl %edi, %edi # sched: [1:0.25]
3952; BROADWELL-NEXT:    cmpl %edi, (%rsi) # sched: [6:0.50]
3953; BROADWELL-NEXT:    cmpl (%rsi), %edi # sched: [6:0.50]
3954; BROADWELL-NEXT:    #NO_APP
3955; BROADWELL-NEXT:    retq # sched: [7:1.00]
3956;
3957; SKYLAKE-LABEL: test_cmp_32:
3958; SKYLAKE:       # %bb.0:
3959; SKYLAKE-NEXT:    #APP
3960; SKYLAKE-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3961; SKYLAKE-NEXT:    # sched: [1:0.25]
3962; SKYLAKE-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3963; SKYLAKE-NEXT:    # sched: [1:0.25]
3964; SKYLAKE-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3965; SKYLAKE-NEXT:    # sched: [6:0.50]
3966; SKYLAKE-NEXT:    cmpl $7, %edi # sched: [1:0.25]
3967; SKYLAKE-NEXT:    cmpl $7, (%rsi) # sched: [6:0.50]
3968; SKYLAKE-NEXT:    cmpl %edi, %edi # sched: [1:0.25]
3969; SKYLAKE-NEXT:    cmpl %edi, (%rsi) # sched: [6:0.50]
3970; SKYLAKE-NEXT:    cmpl (%rsi), %edi # sched: [6:0.50]
3971; SKYLAKE-NEXT:    #NO_APP
3972; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3973;
3974; SKX-LABEL: test_cmp_32:
3975; SKX:       # %bb.0:
3976; SKX-NEXT:    #APP
3977; SKX-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3978; SKX-NEXT:    # sched: [1:0.25]
3979; SKX-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3980; SKX-NEXT:    # sched: [1:0.25]
3981; SKX-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3982; SKX-NEXT:    # sched: [6:0.50]
3983; SKX-NEXT:    cmpl $7, %edi # sched: [1:0.25]
3984; SKX-NEXT:    cmpl $7, (%rsi) # sched: [6:0.50]
3985; SKX-NEXT:    cmpl %edi, %edi # sched: [1:0.25]
3986; SKX-NEXT:    cmpl %edi, (%rsi) # sched: [6:0.50]
3987; SKX-NEXT:    cmpl (%rsi), %edi # sched: [6:0.50]
3988; SKX-NEXT:    #NO_APP
3989; SKX-NEXT:    retq # sched: [7:1.00]
3990;
3991; BTVER2-LABEL: test_cmp_32:
3992; BTVER2:       # %bb.0:
3993; BTVER2-NEXT:    #APP
3994; BTVER2-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
3995; BTVER2-NEXT:    # sched: [1:0.50]
3996; BTVER2-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
3997; BTVER2-NEXT:    # sched: [1:0.50]
3998; BTVER2-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
3999; BTVER2-NEXT:    # sched: [4:1.00]
4000; BTVER2-NEXT:    cmpl $7, %edi # sched: [1:0.50]
4001; BTVER2-NEXT:    cmpl $7, (%rsi) # sched: [4:1.00]
4002; BTVER2-NEXT:    cmpl %edi, %edi # sched: [1:0.50]
4003; BTVER2-NEXT:    cmpl %edi, (%rsi) # sched: [4:1.00]
4004; BTVER2-NEXT:    cmpl (%rsi), %edi # sched: [4:1.00]
4005; BTVER2-NEXT:    #NO_APP
4006; BTVER2-NEXT:    retq # sched: [4:1.00]
4007;
4008; ZNVER1-LABEL: test_cmp_32:
4009; ZNVER1:       # %bb.0:
4010; ZNVER1-NEXT:    #APP
4011; ZNVER1-NEXT:    cmpl $665536, %eax # imm = 0xA27C0
4012; ZNVER1-NEXT:    # sched: [1:0.25]
4013; ZNVER1-NEXT:    cmpl $665536, %edi # imm = 0xA27C0
4014; ZNVER1-NEXT:    # sched: [1:0.25]
4015; ZNVER1-NEXT:    cmpl $665536, (%rsi) # imm = 0xA27C0
4016; ZNVER1-NEXT:    # sched: [5:0.50]
4017; ZNVER1-NEXT:    cmpl $7, %edi # sched: [1:0.25]
4018; ZNVER1-NEXT:    cmpl $7, (%rsi) # sched: [5:0.50]
4019; ZNVER1-NEXT:    cmpl %edi, %edi # sched: [1:0.25]
4020; ZNVER1-NEXT:    cmpl %edi, (%rsi) # sched: [5:0.50]
4021; ZNVER1-NEXT:    cmpl (%rsi), %edi # sched: [5:0.50]
4022; ZNVER1-NEXT:    #NO_APP
4023; ZNVER1-NEXT:    retq # sched: [1:0.50]
4024  tail call void asm "cmpl $2, %EAX \0A\09 cmpl $2, $0 \0A\09 cmpl $2, $1 \0A\09 cmpl $3, $0 \0A\09 cmpl $3, $1 \0A\09 cmpl $0, $0 \0A\09 cmpl $0, $1 \0A\09 cmpl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
4025  ret void
4026}
4027define void @test_cmp_64(i64 %a0, i64* %a1) optsize {
4028; GENERIC-LABEL: test_cmp_64:
4029; GENERIC:       # %bb.0:
4030; GENERIC-NEXT:    #APP
4031; GENERIC-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4032; GENERIC-NEXT:    # sched: [1:0.33]
4033; GENERIC-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4034; GENERIC-NEXT:    # sched: [1:0.33]
4035; GENERIC-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4036; GENERIC-NEXT:    # sched: [6:0.50]
4037; GENERIC-NEXT:    cmpq $7, %rdi # sched: [1:0.33]
4038; GENERIC-NEXT:    cmpq $7, (%rsi) # sched: [6:0.50]
4039; GENERIC-NEXT:    cmpq %rdi, %rdi # sched: [1:0.33]
4040; GENERIC-NEXT:    cmpq %rdi, (%rsi) # sched: [6:0.50]
4041; GENERIC-NEXT:    cmpq (%rsi), %rdi # sched: [6:0.50]
4042; GENERIC-NEXT:    #NO_APP
4043; GENERIC-NEXT:    retq # sched: [1:1.00]
4044;
4045; ATOM-LABEL: test_cmp_64:
4046; ATOM:       # %bb.0:
4047; ATOM-NEXT:    #APP
4048; ATOM-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4049; ATOM-NEXT:    # sched: [1:0.50]
4050; ATOM-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4051; ATOM-NEXT:    # sched: [1:0.50]
4052; ATOM-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4053; ATOM-NEXT:    # sched: [1:1.00]
4054; ATOM-NEXT:    cmpq $7, %rdi # sched: [1:0.50]
4055; ATOM-NEXT:    cmpq $7, (%rsi) # sched: [1:1.00]
4056; ATOM-NEXT:    cmpq %rdi, %rdi # sched: [1:0.50]
4057; ATOM-NEXT:    cmpq %rdi, (%rsi) # sched: [1:1.00]
4058; ATOM-NEXT:    cmpq (%rsi), %rdi # sched: [1:1.00]
4059; ATOM-NEXT:    #NO_APP
4060; ATOM-NEXT:    retq # sched: [79:39.50]
4061;
4062; SLM-LABEL: test_cmp_64:
4063; SLM:       # %bb.0:
4064; SLM-NEXT:    #APP
4065; SLM-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4066; SLM-NEXT:    # sched: [1:0.50]
4067; SLM-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4068; SLM-NEXT:    # sched: [1:0.50]
4069; SLM-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4070; SLM-NEXT:    # sched: [4:1.00]
4071; SLM-NEXT:    cmpq $7, %rdi # sched: [1:0.50]
4072; SLM-NEXT:    cmpq $7, (%rsi) # sched: [4:1.00]
4073; SLM-NEXT:    cmpq %rdi, %rdi # sched: [1:0.50]
4074; SLM-NEXT:    cmpq %rdi, (%rsi) # sched: [4:1.00]
4075; SLM-NEXT:    cmpq (%rsi), %rdi # sched: [4:1.00]
4076; SLM-NEXT:    #NO_APP
4077; SLM-NEXT:    retq # sched: [4:1.00]
4078;
4079; SANDY-LABEL: test_cmp_64:
4080; SANDY:       # %bb.0:
4081; SANDY-NEXT:    #APP
4082; SANDY-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4083; SANDY-NEXT:    # sched: [1:0.33]
4084; SANDY-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4085; SANDY-NEXT:    # sched: [1:0.33]
4086; SANDY-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4087; SANDY-NEXT:    # sched: [6:0.50]
4088; SANDY-NEXT:    cmpq $7, %rdi # sched: [1:0.33]
4089; SANDY-NEXT:    cmpq $7, (%rsi) # sched: [6:0.50]
4090; SANDY-NEXT:    cmpq %rdi, %rdi # sched: [1:0.33]
4091; SANDY-NEXT:    cmpq %rdi, (%rsi) # sched: [6:0.50]
4092; SANDY-NEXT:    cmpq (%rsi), %rdi # sched: [6:0.50]
4093; SANDY-NEXT:    #NO_APP
4094; SANDY-NEXT:    retq # sched: [1:1.00]
4095;
4096; HASWELL-LABEL: test_cmp_64:
4097; HASWELL:       # %bb.0:
4098; HASWELL-NEXT:    #APP
4099; HASWELL-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4100; HASWELL-NEXT:    # sched: [1:0.25]
4101; HASWELL-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4102; HASWELL-NEXT:    # sched: [1:0.25]
4103; HASWELL-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4104; HASWELL-NEXT:    # sched: [6:0.50]
4105; HASWELL-NEXT:    cmpq $7, %rdi # sched: [1:0.25]
4106; HASWELL-NEXT:    cmpq $7, (%rsi) # sched: [6:0.50]
4107; HASWELL-NEXT:    cmpq %rdi, %rdi # sched: [1:0.25]
4108; HASWELL-NEXT:    cmpq %rdi, (%rsi) # sched: [6:0.50]
4109; HASWELL-NEXT:    cmpq (%rsi), %rdi # sched: [6:0.50]
4110; HASWELL-NEXT:    #NO_APP
4111; HASWELL-NEXT:    retq # sched: [7:1.00]
4112;
4113; BROADWELL-LABEL: test_cmp_64:
4114; BROADWELL:       # %bb.0:
4115; BROADWELL-NEXT:    #APP
4116; BROADWELL-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4117; BROADWELL-NEXT:    # sched: [1:0.25]
4118; BROADWELL-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4119; BROADWELL-NEXT:    # sched: [1:0.25]
4120; BROADWELL-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4121; BROADWELL-NEXT:    # sched: [6:0.50]
4122; BROADWELL-NEXT:    cmpq $7, %rdi # sched: [1:0.25]
4123; BROADWELL-NEXT:    cmpq $7, (%rsi) # sched: [6:0.50]
4124; BROADWELL-NEXT:    cmpq %rdi, %rdi # sched: [1:0.25]
4125; BROADWELL-NEXT:    cmpq %rdi, (%rsi) # sched: [6:0.50]
4126; BROADWELL-NEXT:    cmpq (%rsi), %rdi # sched: [6:0.50]
4127; BROADWELL-NEXT:    #NO_APP
4128; BROADWELL-NEXT:    retq # sched: [7:1.00]
4129;
4130; SKYLAKE-LABEL: test_cmp_64:
4131; SKYLAKE:       # %bb.0:
4132; SKYLAKE-NEXT:    #APP
4133; SKYLAKE-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4134; SKYLAKE-NEXT:    # sched: [1:0.25]
4135; SKYLAKE-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4136; SKYLAKE-NEXT:    # sched: [1:0.25]
4137; SKYLAKE-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4138; SKYLAKE-NEXT:    # sched: [6:0.50]
4139; SKYLAKE-NEXT:    cmpq $7, %rdi # sched: [1:0.25]
4140; SKYLAKE-NEXT:    cmpq $7, (%rsi) # sched: [6:0.50]
4141; SKYLAKE-NEXT:    cmpq %rdi, %rdi # sched: [1:0.25]
4142; SKYLAKE-NEXT:    cmpq %rdi, (%rsi) # sched: [6:0.50]
4143; SKYLAKE-NEXT:    cmpq (%rsi), %rdi # sched: [6:0.50]
4144; SKYLAKE-NEXT:    #NO_APP
4145; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4146;
4147; SKX-LABEL: test_cmp_64:
4148; SKX:       # %bb.0:
4149; SKX-NEXT:    #APP
4150; SKX-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4151; SKX-NEXT:    # sched: [1:0.25]
4152; SKX-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4153; SKX-NEXT:    # sched: [1:0.25]
4154; SKX-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4155; SKX-NEXT:    # sched: [6:0.50]
4156; SKX-NEXT:    cmpq $7, %rdi # sched: [1:0.25]
4157; SKX-NEXT:    cmpq $7, (%rsi) # sched: [6:0.50]
4158; SKX-NEXT:    cmpq %rdi, %rdi # sched: [1:0.25]
4159; SKX-NEXT:    cmpq %rdi, (%rsi) # sched: [6:0.50]
4160; SKX-NEXT:    cmpq (%rsi), %rdi # sched: [6:0.50]
4161; SKX-NEXT:    #NO_APP
4162; SKX-NEXT:    retq # sched: [7:1.00]
4163;
4164; BTVER2-LABEL: test_cmp_64:
4165; BTVER2:       # %bb.0:
4166; BTVER2-NEXT:    #APP
4167; BTVER2-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4168; BTVER2-NEXT:    # sched: [1:0.50]
4169; BTVER2-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4170; BTVER2-NEXT:    # sched: [1:0.50]
4171; BTVER2-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4172; BTVER2-NEXT:    # sched: [4:1.00]
4173; BTVER2-NEXT:    cmpq $7, %rdi # sched: [1:0.50]
4174; BTVER2-NEXT:    cmpq $7, (%rsi) # sched: [4:1.00]
4175; BTVER2-NEXT:    cmpq %rdi, %rdi # sched: [1:0.50]
4176; BTVER2-NEXT:    cmpq %rdi, (%rsi) # sched: [4:1.00]
4177; BTVER2-NEXT:    cmpq (%rsi), %rdi # sched: [4:1.00]
4178; BTVER2-NEXT:    #NO_APP
4179; BTVER2-NEXT:    retq # sched: [4:1.00]
4180;
4181; ZNVER1-LABEL: test_cmp_64:
4182; ZNVER1:       # %bb.0:
4183; ZNVER1-NEXT:    #APP
4184; ZNVER1-NEXT:    cmpq $665536, %rax # imm = 0xA27C0
4185; ZNVER1-NEXT:    # sched: [1:0.25]
4186; ZNVER1-NEXT:    cmpq $665536, %rdi # imm = 0xA27C0
4187; ZNVER1-NEXT:    # sched: [1:0.25]
4188; ZNVER1-NEXT:    cmpq $665536, (%rsi) # imm = 0xA27C0
4189; ZNVER1-NEXT:    # sched: [5:0.50]
4190; ZNVER1-NEXT:    cmpq $7, %rdi # sched: [1:0.25]
4191; ZNVER1-NEXT:    cmpq $7, (%rsi) # sched: [5:0.50]
4192; ZNVER1-NEXT:    cmpq %rdi, %rdi # sched: [1:0.25]
4193; ZNVER1-NEXT:    cmpq %rdi, (%rsi) # sched: [5:0.50]
4194; ZNVER1-NEXT:    cmpq (%rsi), %rdi # sched: [5:0.50]
4195; ZNVER1-NEXT:    #NO_APP
4196; ZNVER1-NEXT:    retq # sched: [1:0.50]
4197  tail call void asm "cmpq $2, %RAX \0A\09 cmpq $2, $0 \0A\09 cmpq $2, $1 \0A\09 cmpq $3, $0 \0A\09 cmpq $3, $1 \0A\09 cmpq $0, $0 \0A\09 cmpq $0, $1 \0A\09 cmpq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
4198  ret void
4199}
4200
4201define void @test_cmps() optsize {
4202; GENERIC-LABEL: test_cmps:
4203; GENERIC:       # %bb.0:
4204; GENERIC-NEXT:    #APP
4205; GENERIC-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [8:1.00]
4206; GENERIC-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [8:1.00]
4207; GENERIC-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [8:1.00]
4208; GENERIC-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [8:1.00]
4209; GENERIC-NEXT:    #NO_APP
4210; GENERIC-NEXT:    retq # sched: [1:1.00]
4211;
4212; ATOM-LABEL: test_cmps:
4213; ATOM:       # %bb.0:
4214; ATOM-NEXT:    #APP
4215; ATOM-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [3:1.50]
4216; ATOM-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [3:1.50]
4217; ATOM-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [3:1.50]
4218; ATOM-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [3:1.50]
4219; ATOM-NEXT:    #NO_APP
4220; ATOM-NEXT:    retq # sched: [79:39.50]
4221;
4222; SLM-LABEL: test_cmps:
4223; SLM:       # %bb.0:
4224; SLM-NEXT:    #APP
4225; SLM-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [100:1.00]
4226; SLM-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [100:1.00]
4227; SLM-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [100:1.00]
4228; SLM-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [100:1.00]
4229; SLM-NEXT:    #NO_APP
4230; SLM-NEXT:    retq # sched: [4:1.00]
4231;
4232; SANDY-LABEL: test_cmps:
4233; SANDY:       # %bb.0:
4234; SANDY-NEXT:    #APP
4235; SANDY-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [8:1.00]
4236; SANDY-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [8:1.00]
4237; SANDY-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [8:1.00]
4238; SANDY-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [8:1.00]
4239; SANDY-NEXT:    #NO_APP
4240; SANDY-NEXT:    retq # sched: [1:1.00]
4241;
4242; HASWELL-LABEL: test_cmps:
4243; HASWELL:       # %bb.0:
4244; HASWELL-NEXT:    #APP
4245; HASWELL-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [4:1.00]
4246; HASWELL-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [4:1.00]
4247; HASWELL-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [4:1.00]
4248; HASWELL-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [4:1.00]
4249; HASWELL-NEXT:    #NO_APP
4250; HASWELL-NEXT:    retq # sched: [7:1.00]
4251;
4252; BROADWELL-LABEL: test_cmps:
4253; BROADWELL:       # %bb.0:
4254; BROADWELL-NEXT:    #APP
4255; BROADWELL-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25]
4256; BROADWELL-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25]
4257; BROADWELL-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25]
4258; BROADWELL-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25]
4259; BROADWELL-NEXT:    #NO_APP
4260; BROADWELL-NEXT:    retq # sched: [7:1.00]
4261;
4262; SKYLAKE-LABEL: test_cmps:
4263; SKYLAKE:       # %bb.0:
4264; SKYLAKE-NEXT:    #APP
4265; SKYLAKE-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25]
4266; SKYLAKE-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25]
4267; SKYLAKE-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25]
4268; SKYLAKE-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25]
4269; SKYLAKE-NEXT:    #NO_APP
4270; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4271;
4272; SKX-LABEL: test_cmps:
4273; SKX:       # %bb.0:
4274; SKX-NEXT:    #APP
4275; SKX-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25]
4276; SKX-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25]
4277; SKX-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25]
4278; SKX-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25]
4279; SKX-NEXT:    #NO_APP
4280; SKX-NEXT:    retq # sched: [7:1.00]
4281;
4282; BTVER2-LABEL: test_cmps:
4283; BTVER2:       # %bb.0:
4284; BTVER2-NEXT:    #APP
4285; BTVER2-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [100:0.50]
4286; BTVER2-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [100:0.50]
4287; BTVER2-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [100:0.50]
4288; BTVER2-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [100:0.50]
4289; BTVER2-NEXT:    #NO_APP
4290; BTVER2-NEXT:    retq # sched: [4:1.00]
4291;
4292; ZNVER1-LABEL: test_cmps:
4293; ZNVER1:       # %bb.0:
4294; ZNVER1-NEXT:    #APP
4295; ZNVER1-NEXT:    cmpsb %es:(%rdi), (%rsi) # sched: [100:0.25]
4296; ZNVER1-NEXT:    cmpsw %es:(%rdi), (%rsi) # sched: [100:0.25]
4297; ZNVER1-NEXT:    cmpsl %es:(%rdi), (%rsi) # sched: [100:0.25]
4298; ZNVER1-NEXT:    cmpsq %es:(%rdi), (%rsi) # sched: [100:0.25]
4299; ZNVER1-NEXT:    #NO_APP
4300; ZNVER1-NEXT:    retq # sched: [1:0.50]
4301  call void asm sideeffect "cmpsb \0A\09 cmpsw \0A\09 cmpsl \0A\09 cmpsq", ""()
4302  ret void
4303}
4304
4305define void @test_cmpxchg_8(i8 %a0, i8 %a1, i8 *%a2) optsize {
4306; GENERIC-LABEL: test_cmpxchg_8:
4307; GENERIC:       # %bb.0:
4308; GENERIC-NEXT:    #APP
4309; GENERIC-NEXT:    cmpxchgb %dil, %sil # sched: [5:1.33]
4310; GENERIC-NEXT:    cmpxchgb %dil, (%rdx) # sched: [8:1.00]
4311; GENERIC-NEXT:    #NO_APP
4312; GENERIC-NEXT:    retq # sched: [1:1.00]
4313;
4314; ATOM-LABEL: test_cmpxchg_8:
4315; ATOM:       # %bb.0:
4316; ATOM-NEXT:    #APP
4317; ATOM-NEXT:    cmpxchgb %dil, %sil # sched: [9:4.50]
4318; ATOM-NEXT:    cmpxchgb %dil, (%rdx) # sched: [6:3.00]
4319; ATOM-NEXT:    #NO_APP
4320; ATOM-NEXT:    retq # sched: [79:39.50]
4321;
4322; SLM-LABEL: test_cmpxchg_8:
4323; SLM:       # %bb.0:
4324; SLM-NEXT:    #APP
4325; SLM-NEXT:    cmpxchgb %dil, %sil # sched: [1:0.50]
4326; SLM-NEXT:    cmpxchgb %dil, (%rdx) # sched: [4:2.00]
4327; SLM-NEXT:    #NO_APP
4328; SLM-NEXT:    retq # sched: [4:1.00]
4329;
4330; SANDY-LABEL: test_cmpxchg_8:
4331; SANDY:       # %bb.0:
4332; SANDY-NEXT:    #APP
4333; SANDY-NEXT:    cmpxchgb %dil, %sil # sched: [5:1.33]
4334; SANDY-NEXT:    cmpxchgb %dil, (%rdx) # sched: [8:1.00]
4335; SANDY-NEXT:    #NO_APP
4336; SANDY-NEXT:    retq # sched: [1:1.00]
4337;
4338; HASWELL-LABEL: test_cmpxchg_8:
4339; HASWELL:       # %bb.0:
4340; HASWELL-NEXT:    #APP
4341; HASWELL-NEXT:    cmpxchgb %dil, %sil # sched: [5:1.25]
4342; HASWELL-NEXT:    cmpxchgb %dil, (%rdx) # sched: [9:1.00]
4343; HASWELL-NEXT:    #NO_APP
4344; HASWELL-NEXT:    retq # sched: [7:1.00]
4345;
4346; BROADWELL-LABEL: test_cmpxchg_8:
4347; BROADWELL:       # %bb.0:
4348; BROADWELL-NEXT:    #APP
4349; BROADWELL-NEXT:    cmpxchgb %dil, %sil # sched: [5:1.25]
4350; BROADWELL-NEXT:    cmpxchgb %dil, (%rdx) # sched: [8:1.00]
4351; BROADWELL-NEXT:    #NO_APP
4352; BROADWELL-NEXT:    retq # sched: [7:1.00]
4353;
4354; SKYLAKE-LABEL: test_cmpxchg_8:
4355; SKYLAKE:       # %bb.0:
4356; SKYLAKE-NEXT:    #APP
4357; SKYLAKE-NEXT:    cmpxchgb %dil, %sil # sched: [5:1.25]
4358; SKYLAKE-NEXT:    cmpxchgb %dil, (%rdx) # sched: [8:1.00]
4359; SKYLAKE-NEXT:    #NO_APP
4360; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4361;
4362; SKX-LABEL: test_cmpxchg_8:
4363; SKX:       # %bb.0:
4364; SKX-NEXT:    #APP
4365; SKX-NEXT:    cmpxchgb %dil, %sil # sched: [5:1.25]
4366; SKX-NEXT:    cmpxchgb %dil, (%rdx) # sched: [8:1.00]
4367; SKX-NEXT:    #NO_APP
4368; SKX-NEXT:    retq # sched: [7:1.00]
4369;
4370; BTVER2-LABEL: test_cmpxchg_8:
4371; BTVER2:       # %bb.0:
4372; BTVER2-NEXT:    #APP
4373; BTVER2-NEXT:    cmpxchgb %dil, %sil # sched: [1:0.50]
4374; BTVER2-NEXT:    cmpxchgb %dil, (%rdx) # sched: [4:1.00]
4375; BTVER2-NEXT:    #NO_APP
4376; BTVER2-NEXT:    retq # sched: [4:1.00]
4377;
4378; ZNVER1-LABEL: test_cmpxchg_8:
4379; ZNVER1:       # %bb.0:
4380; ZNVER1-NEXT:    #APP
4381; ZNVER1-NEXT:    cmpxchgb %dil, %sil # sched: [1:0.25]
4382; ZNVER1-NEXT:    cmpxchgb %dil, (%rdx) # sched: [8:0.50]
4383; ZNVER1-NEXT:    #NO_APP
4384; ZNVER1-NEXT:    retq # sched: [1:0.50]
4385  tail call void asm "cmpxchgb $0, $1 \0a\09 cmpxchgb $0, $2", "r,r,*m"(i8 %a0, i8 %a1, i8 *%a2) nounwind
4386  ret void
4387}
4388define void @test_cmpxchg_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
4389; GENERIC-LABEL: test_cmpxchg_16:
4390; GENERIC:       # %bb.0:
4391; GENERIC-NEXT:    #APP
4392; GENERIC-NEXT:    cmpxchgw %di, %si # sched: [5:1.33]
4393; GENERIC-NEXT:    cmpxchgw %di, (%rdx) # sched: [8:1.00]
4394; GENERIC-NEXT:    #NO_APP
4395; GENERIC-NEXT:    retq # sched: [1:1.00]
4396;
4397; ATOM-LABEL: test_cmpxchg_16:
4398; ATOM:       # %bb.0:
4399; ATOM-NEXT:    #APP
4400; ATOM-NEXT:    cmpxchgw %di, %si # sched: [15:7.50]
4401; ATOM-NEXT:    cmpxchgw %di, (%rdx) # sched: [14:7.00]
4402; ATOM-NEXT:    #NO_APP
4403; ATOM-NEXT:    retq # sched: [79:39.50]
4404;
4405; SLM-LABEL: test_cmpxchg_16:
4406; SLM:       # %bb.0:
4407; SLM-NEXT:    #APP
4408; SLM-NEXT:    cmpxchgw %di, %si # sched: [1:0.50]
4409; SLM-NEXT:    cmpxchgw %di, (%rdx) # sched: [4:2.00]
4410; SLM-NEXT:    #NO_APP
4411; SLM-NEXT:    retq # sched: [4:1.00]
4412;
4413; SANDY-LABEL: test_cmpxchg_16:
4414; SANDY:       # %bb.0:
4415; SANDY-NEXT:    #APP
4416; SANDY-NEXT:    cmpxchgw %di, %si # sched: [5:1.33]
4417; SANDY-NEXT:    cmpxchgw %di, (%rdx) # sched: [8:1.00]
4418; SANDY-NEXT:    #NO_APP
4419; SANDY-NEXT:    retq # sched: [1:1.00]
4420;
4421; HASWELL-LABEL: test_cmpxchg_16:
4422; HASWELL:       # %bb.0:
4423; HASWELL-NEXT:    #APP
4424; HASWELL-NEXT:    cmpxchgw %di, %si # sched: [5:1.25]
4425; HASWELL-NEXT:    cmpxchgw %di, (%rdx) # sched: [9:1.00]
4426; HASWELL-NEXT:    #NO_APP
4427; HASWELL-NEXT:    retq # sched: [7:1.00]
4428;
4429; BROADWELL-LABEL: test_cmpxchg_16:
4430; BROADWELL:       # %bb.0:
4431; BROADWELL-NEXT:    #APP
4432; BROADWELL-NEXT:    cmpxchgw %di, %si # sched: [5:1.25]
4433; BROADWELL-NEXT:    cmpxchgw %di, (%rdx) # sched: [8:1.00]
4434; BROADWELL-NEXT:    #NO_APP
4435; BROADWELL-NEXT:    retq # sched: [7:1.00]
4436;
4437; SKYLAKE-LABEL: test_cmpxchg_16:
4438; SKYLAKE:       # %bb.0:
4439; SKYLAKE-NEXT:    #APP
4440; SKYLAKE-NEXT:    cmpxchgw %di, %si # sched: [5:1.25]
4441; SKYLAKE-NEXT:    cmpxchgw %di, (%rdx) # sched: [8:1.00]
4442; SKYLAKE-NEXT:    #NO_APP
4443; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4444;
4445; SKX-LABEL: test_cmpxchg_16:
4446; SKX:       # %bb.0:
4447; SKX-NEXT:    #APP
4448; SKX-NEXT:    cmpxchgw %di, %si # sched: [5:1.25]
4449; SKX-NEXT:    cmpxchgw %di, (%rdx) # sched: [8:1.00]
4450; SKX-NEXT:    #NO_APP
4451; SKX-NEXT:    retq # sched: [7:1.00]
4452;
4453; BTVER2-LABEL: test_cmpxchg_16:
4454; BTVER2:       # %bb.0:
4455; BTVER2-NEXT:    #APP
4456; BTVER2-NEXT:    cmpxchgw %di, %si # sched: [1:0.50]
4457; BTVER2-NEXT:    cmpxchgw %di, (%rdx) # sched: [4:1.00]
4458; BTVER2-NEXT:    #NO_APP
4459; BTVER2-NEXT:    retq # sched: [4:1.00]
4460;
4461; ZNVER1-LABEL: test_cmpxchg_16:
4462; ZNVER1:       # %bb.0:
4463; ZNVER1-NEXT:    #APP
4464; ZNVER1-NEXT:    cmpxchgw %di, %si # sched: [1:0.25]
4465; ZNVER1-NEXT:    cmpxchgw %di, (%rdx) # sched: [8:0.50]
4466; ZNVER1-NEXT:    #NO_APP
4467; ZNVER1-NEXT:    retq # sched: [1:0.50]
4468  tail call void asm "cmpxchgw $0, $1 \0a\09 cmpxchgw $0, $2", "r,r,*m"(i16 %a0, i16 %a1, i16 *%a2) nounwind
4469  ret void
4470}
4471define void @test_cmpxchg_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
4472; GENERIC-LABEL: test_cmpxchg_32:
4473; GENERIC:       # %bb.0:
4474; GENERIC-NEXT:    #APP
4475; GENERIC-NEXT:    cmpxchgl %edi, %esi # sched: [5:1.33]
4476; GENERIC-NEXT:    cmpxchgl %edi, (%rdx) # sched: [8:1.00]
4477; GENERIC-NEXT:    #NO_APP
4478; GENERIC-NEXT:    retq # sched: [1:1.00]
4479;
4480; ATOM-LABEL: test_cmpxchg_32:
4481; ATOM:       # %bb.0:
4482; ATOM-NEXT:    #APP
4483; ATOM-NEXT:    cmpxchgl %edi, %esi # sched: [15:7.50]
4484; ATOM-NEXT:    cmpxchgl %edi, (%rdx) # sched: [14:7.00]
4485; ATOM-NEXT:    #NO_APP
4486; ATOM-NEXT:    retq # sched: [79:39.50]
4487;
4488; SLM-LABEL: test_cmpxchg_32:
4489; SLM:       # %bb.0:
4490; SLM-NEXT:    #APP
4491; SLM-NEXT:    cmpxchgl %edi, %esi # sched: [1:0.50]
4492; SLM-NEXT:    cmpxchgl %edi, (%rdx) # sched: [4:2.00]
4493; SLM-NEXT:    #NO_APP
4494; SLM-NEXT:    retq # sched: [4:1.00]
4495;
4496; SANDY-LABEL: test_cmpxchg_32:
4497; SANDY:       # %bb.0:
4498; SANDY-NEXT:    #APP
4499; SANDY-NEXT:    cmpxchgl %edi, %esi # sched: [5:1.33]
4500; SANDY-NEXT:    cmpxchgl %edi, (%rdx) # sched: [8:1.00]
4501; SANDY-NEXT:    #NO_APP
4502; SANDY-NEXT:    retq # sched: [1:1.00]
4503;
4504; HASWELL-LABEL: test_cmpxchg_32:
4505; HASWELL:       # %bb.0:
4506; HASWELL-NEXT:    #APP
4507; HASWELL-NEXT:    cmpxchgl %edi, %esi # sched: [5:1.25]
4508; HASWELL-NEXT:    cmpxchgl %edi, (%rdx) # sched: [9:1.00]
4509; HASWELL-NEXT:    #NO_APP
4510; HASWELL-NEXT:    retq # sched: [7:1.00]
4511;
4512; BROADWELL-LABEL: test_cmpxchg_32:
4513; BROADWELL:       # %bb.0:
4514; BROADWELL-NEXT:    #APP
4515; BROADWELL-NEXT:    cmpxchgl %edi, %esi # sched: [5:1.25]
4516; BROADWELL-NEXT:    cmpxchgl %edi, (%rdx) # sched: [8:1.00]
4517; BROADWELL-NEXT:    #NO_APP
4518; BROADWELL-NEXT:    retq # sched: [7:1.00]
4519;
4520; SKYLAKE-LABEL: test_cmpxchg_32:
4521; SKYLAKE:       # %bb.0:
4522; SKYLAKE-NEXT:    #APP
4523; SKYLAKE-NEXT:    cmpxchgl %edi, %esi # sched: [5:1.25]
4524; SKYLAKE-NEXT:    cmpxchgl %edi, (%rdx) # sched: [8:1.00]
4525; SKYLAKE-NEXT:    #NO_APP
4526; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4527;
4528; SKX-LABEL: test_cmpxchg_32:
4529; SKX:       # %bb.0:
4530; SKX-NEXT:    #APP
4531; SKX-NEXT:    cmpxchgl %edi, %esi # sched: [5:1.25]
4532; SKX-NEXT:    cmpxchgl %edi, (%rdx) # sched: [8:1.00]
4533; SKX-NEXT:    #NO_APP
4534; SKX-NEXT:    retq # sched: [7:1.00]
4535;
4536; BTVER2-LABEL: test_cmpxchg_32:
4537; BTVER2:       # %bb.0:
4538; BTVER2-NEXT:    #APP
4539; BTVER2-NEXT:    cmpxchgl %edi, %esi # sched: [1:0.50]
4540; BTVER2-NEXT:    cmpxchgl %edi, (%rdx) # sched: [4:1.00]
4541; BTVER2-NEXT:    #NO_APP
4542; BTVER2-NEXT:    retq # sched: [4:1.00]
4543;
4544; ZNVER1-LABEL: test_cmpxchg_32:
4545; ZNVER1:       # %bb.0:
4546; ZNVER1-NEXT:    #APP
4547; ZNVER1-NEXT:    cmpxchgl %edi, %esi # sched: [1:0.25]
4548; ZNVER1-NEXT:    cmpxchgl %edi, (%rdx) # sched: [8:0.50]
4549; ZNVER1-NEXT:    #NO_APP
4550; ZNVER1-NEXT:    retq # sched: [1:0.50]
4551  tail call void asm "cmpxchgl $0, $1 \0a\09 cmpxchgl $0, $2", "r,r,*m"(i32 %a0, i32 %a1, i32 *%a2) nounwind
4552  ret void
4553}
4554define void @test_cmpxchg_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
4555; GENERIC-LABEL: test_cmpxchg_64:
4556; GENERIC:       # %bb.0:
4557; GENERIC-NEXT:    #APP
4558; GENERIC-NEXT:    cmpxchgq %rdi, %rsi # sched: [5:1.33]
4559; GENERIC-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [8:1.00]
4560; GENERIC-NEXT:    #NO_APP
4561; GENERIC-NEXT:    retq # sched: [1:1.00]
4562;
4563; ATOM-LABEL: test_cmpxchg_64:
4564; ATOM:       # %bb.0:
4565; ATOM-NEXT:    #APP
4566; ATOM-NEXT:    cmpxchgq %rdi, %rsi # sched: [15:7.50]
4567; ATOM-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [14:7.00]
4568; ATOM-NEXT:    #NO_APP
4569; ATOM-NEXT:    retq # sched: [79:39.50]
4570;
4571; SLM-LABEL: test_cmpxchg_64:
4572; SLM:       # %bb.0:
4573; SLM-NEXT:    #APP
4574; SLM-NEXT:    cmpxchgq %rdi, %rsi # sched: [1:0.50]
4575; SLM-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [4:2.00]
4576; SLM-NEXT:    #NO_APP
4577; SLM-NEXT:    retq # sched: [4:1.00]
4578;
4579; SANDY-LABEL: test_cmpxchg_64:
4580; SANDY:       # %bb.0:
4581; SANDY-NEXT:    #APP
4582; SANDY-NEXT:    cmpxchgq %rdi, %rsi # sched: [5:1.33]
4583; SANDY-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [8:1.00]
4584; SANDY-NEXT:    #NO_APP
4585; SANDY-NEXT:    retq # sched: [1:1.00]
4586;
4587; HASWELL-LABEL: test_cmpxchg_64:
4588; HASWELL:       # %bb.0:
4589; HASWELL-NEXT:    #APP
4590; HASWELL-NEXT:    cmpxchgq %rdi, %rsi # sched: [5:1.25]
4591; HASWELL-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [9:1.00]
4592; HASWELL-NEXT:    #NO_APP
4593; HASWELL-NEXT:    retq # sched: [7:1.00]
4594;
4595; BROADWELL-LABEL: test_cmpxchg_64:
4596; BROADWELL:       # %bb.0:
4597; BROADWELL-NEXT:    #APP
4598; BROADWELL-NEXT:    cmpxchgq %rdi, %rsi # sched: [5:1.25]
4599; BROADWELL-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [8:1.00]
4600; BROADWELL-NEXT:    #NO_APP
4601; BROADWELL-NEXT:    retq # sched: [7:1.00]
4602;
4603; SKYLAKE-LABEL: test_cmpxchg_64:
4604; SKYLAKE:       # %bb.0:
4605; SKYLAKE-NEXT:    #APP
4606; SKYLAKE-NEXT:    cmpxchgq %rdi, %rsi # sched: [5:1.25]
4607; SKYLAKE-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [8:1.00]
4608; SKYLAKE-NEXT:    #NO_APP
4609; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4610;
4611; SKX-LABEL: test_cmpxchg_64:
4612; SKX:       # %bb.0:
4613; SKX-NEXT:    #APP
4614; SKX-NEXT:    cmpxchgq %rdi, %rsi # sched: [5:1.25]
4615; SKX-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [8:1.00]
4616; SKX-NEXT:    #NO_APP
4617; SKX-NEXT:    retq # sched: [7:1.00]
4618;
4619; BTVER2-LABEL: test_cmpxchg_64:
4620; BTVER2:       # %bb.0:
4621; BTVER2-NEXT:    #APP
4622; BTVER2-NEXT:    cmpxchgq %rdi, %rsi # sched: [1:0.50]
4623; BTVER2-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [4:1.00]
4624; BTVER2-NEXT:    #NO_APP
4625; BTVER2-NEXT:    retq # sched: [4:1.00]
4626;
4627; ZNVER1-LABEL: test_cmpxchg_64:
4628; ZNVER1:       # %bb.0:
4629; ZNVER1-NEXT:    #APP
4630; ZNVER1-NEXT:    cmpxchgq %rdi, %rsi # sched: [1:0.25]
4631; ZNVER1-NEXT:    cmpxchgq %rdi, (%rdx) # sched: [8:0.50]
4632; ZNVER1-NEXT:    #NO_APP
4633; ZNVER1-NEXT:    retq # sched: [1:0.50]
4634  tail call void asm "cmpxchgq $0, $1 \0a\09 cmpxchgq $0, $2", "r,r,*m"(i64 %a0, i64 %a1, i64 *%a2) nounwind
4635  ret void
4636}
4637define void @test_cmpxchg8b_cmpxchg16b(i8 *%a0) optsize {
4638; GENERIC-LABEL: test_cmpxchg8b_cmpxchg16b:
4639; GENERIC:       # %bb.0:
4640; GENERIC-NEXT:    #APP
4641; GENERIC-NEXT:    cmpxchg8b (%rdi) # sched: [6:1.00]
4642; GENERIC-NEXT:    cmpxchg16b (%rdi) # sched: [6:1.00]
4643; GENERIC-NEXT:    #NO_APP
4644; GENERIC-NEXT:    retq # sched: [1:1.00]
4645;
4646; ATOM-LABEL: test_cmpxchg8b_cmpxchg16b:
4647; ATOM:       # %bb.0:
4648; ATOM-NEXT:    #APP
4649; ATOM-NEXT:    cmpxchg8b (%rdi) # sched: [18:9.00]
4650; ATOM-NEXT:    cmpxchg16b (%rdi) # sched: [22:11.00]
4651; ATOM-NEXT:    #NO_APP
4652; ATOM-NEXT:    retq # sched: [79:39.50]
4653;
4654; SLM-LABEL: test_cmpxchg8b_cmpxchg16b:
4655; SLM:       # %bb.0:
4656; SLM-NEXT:    #APP
4657; SLM-NEXT:    cmpxchg8b (%rdi) # sched: [4:2.00]
4658; SLM-NEXT:    cmpxchg16b (%rdi) # sched: [4:2.00]
4659; SLM-NEXT:    #NO_APP
4660; SLM-NEXT:    retq # sched: [4:1.00]
4661;
4662; SANDY-LABEL: test_cmpxchg8b_cmpxchg16b:
4663; SANDY:       # %bb.0:
4664; SANDY-NEXT:    #APP
4665; SANDY-NEXT:    cmpxchg8b (%rdi) # sched: [6:1.00]
4666; SANDY-NEXT:    cmpxchg16b (%rdi) # sched: [6:1.00]
4667; SANDY-NEXT:    #NO_APP
4668; SANDY-NEXT:    retq # sched: [1:1.00]
4669;
4670; HASWELL-LABEL: test_cmpxchg8b_cmpxchg16b:
4671; HASWELL:       # %bb.0:
4672; HASWELL-NEXT:    #APP
4673; HASWELL-NEXT:    cmpxchg8b (%rdi) # sched: [17:2.75]
4674; HASWELL-NEXT:    cmpxchg16b (%rdi) # sched: [22:4.00]
4675; HASWELL-NEXT:    #NO_APP
4676; HASWELL-NEXT:    retq # sched: [7:1.00]
4677;
4678; BROADWELL-LABEL: test_cmpxchg8b_cmpxchg16b:
4679; BROADWELL:       # %bb.0:
4680; BROADWELL-NEXT:    #APP
4681; BROADWELL-NEXT:    cmpxchg8b (%rdi) # sched: [16:2.75]
4682; BROADWELL-NEXT:    cmpxchg16b (%rdi) # sched: [21:4.00]
4683; BROADWELL-NEXT:    #NO_APP
4684; BROADWELL-NEXT:    retq # sched: [7:1.00]
4685;
4686; SKYLAKE-LABEL: test_cmpxchg8b_cmpxchg16b:
4687; SKYLAKE:       # %bb.0:
4688; SKYLAKE-NEXT:    #APP
4689; SKYLAKE-NEXT:    cmpxchg8b (%rdi) # sched: [16:2.75]
4690; SKYLAKE-NEXT:    cmpxchg16b (%rdi) # sched: [23:4.00]
4691; SKYLAKE-NEXT:    #NO_APP
4692; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4693;
4694; SKX-LABEL: test_cmpxchg8b_cmpxchg16b:
4695; SKX:       # %bb.0:
4696; SKX-NEXT:    #APP
4697; SKX-NEXT:    cmpxchg8b (%rdi) # sched: [16:2.75]
4698; SKX-NEXT:    cmpxchg16b (%rdi) # sched: [23:4.00]
4699; SKX-NEXT:    #NO_APP
4700; SKX-NEXT:    retq # sched: [7:1.00]
4701;
4702; BTVER2-LABEL: test_cmpxchg8b_cmpxchg16b:
4703; BTVER2:       # %bb.0:
4704; BTVER2-NEXT:    #APP
4705; BTVER2-NEXT:    cmpxchg8b (%rdi) # sched: [4:1.00]
4706; BTVER2-NEXT:    cmpxchg16b (%rdi) # sched: [4:1.00]
4707; BTVER2-NEXT:    #NO_APP
4708; BTVER2-NEXT:    retq # sched: [4:1.00]
4709;
4710; ZNVER1-LABEL: test_cmpxchg8b_cmpxchg16b:
4711; ZNVER1:       # %bb.0:
4712; ZNVER1-NEXT:    #APP
4713; ZNVER1-NEXT:    cmpxchg8b (%rdi) # sched: [1:0.50]
4714; ZNVER1-NEXT:    cmpxchg16b (%rdi) # sched: [100:0.25]
4715; ZNVER1-NEXT:    #NO_APP
4716; ZNVER1-NEXT:    retq # sched: [1:0.50]
4717  tail call void asm "cmpxchg8b $0 \0a\09 cmpxchg16b $0", "*m"(i8 *%a0) nounwind
4718  ret void
4719}
4720
4721define void @test_cpuid() optsize {
4722; GENERIC-LABEL: test_cpuid:
4723; GENERIC:       # %bb.0:
4724; GENERIC-NEXT:    #APP
4725; GENERIC-NEXT:    cpuid # sched: [100:0.33]
4726; GENERIC-NEXT:    #NO_APP
4727; GENERIC-NEXT:    retq # sched: [1:1.00]
4728;
4729; ATOM-LABEL: test_cpuid:
4730; ATOM:       # %bb.0:
4731; ATOM-NEXT:    #APP
4732; ATOM-NEXT:    cpuid # sched: [121:60.50]
4733; ATOM-NEXT:    #NO_APP
4734; ATOM-NEXT:    retq # sched: [79:39.50]
4735;
4736; SLM-LABEL: test_cpuid:
4737; SLM:       # %bb.0:
4738; SLM-NEXT:    #APP
4739; SLM-NEXT:    cpuid # sched: [100:1.00]
4740; SLM-NEXT:    #NO_APP
4741; SLM-NEXT:    retq # sched: [4:1.00]
4742;
4743; SANDY-LABEL: test_cpuid:
4744; SANDY:       # %bb.0:
4745; SANDY-NEXT:    #APP
4746; SANDY-NEXT:    cpuid # sched: [100:0.33]
4747; SANDY-NEXT:    #NO_APP
4748; SANDY-NEXT:    retq # sched: [1:1.00]
4749;
4750; HASWELL-LABEL: test_cpuid:
4751; HASWELL:       # %bb.0:
4752; HASWELL-NEXT:    #APP
4753; HASWELL-NEXT:    cpuid # sched: [18:2.00]
4754; HASWELL-NEXT:    #NO_APP
4755; HASWELL-NEXT:    retq # sched: [7:1.00]
4756;
4757; BROADWELL-LABEL: test_cpuid:
4758; BROADWELL:       # %bb.0:
4759; BROADWELL-NEXT:    #APP
4760; BROADWELL-NEXT:    cpuid # sched: [18:2.00]
4761; BROADWELL-NEXT:    #NO_APP
4762; BROADWELL-NEXT:    retq # sched: [7:1.00]
4763;
4764; SKYLAKE-LABEL: test_cpuid:
4765; SKYLAKE:       # %bb.0:
4766; SKYLAKE-NEXT:    #APP
4767; SKYLAKE-NEXT:    cpuid # sched: [18:2.00]
4768; SKYLAKE-NEXT:    #NO_APP
4769; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4770;
4771; SKX-LABEL: test_cpuid:
4772; SKX:       # %bb.0:
4773; SKX-NEXT:    #APP
4774; SKX-NEXT:    cpuid # sched: [18:2.00]
4775; SKX-NEXT:    #NO_APP
4776; SKX-NEXT:    retq # sched: [7:1.00]
4777;
4778; BTVER2-LABEL: test_cpuid:
4779; BTVER2:       # %bb.0:
4780; BTVER2-NEXT:    #APP
4781; BTVER2-NEXT:    cpuid # sched: [100:0.50]
4782; BTVER2-NEXT:    #NO_APP
4783; BTVER2-NEXT:    retq # sched: [4:1.00]
4784;
4785; ZNVER1-LABEL: test_cpuid:
4786; ZNVER1:       # %bb.0:
4787; ZNVER1-NEXT:    #APP
4788; ZNVER1-NEXT:    cpuid # sched: [100:0.25]
4789; ZNVER1-NEXT:    #NO_APP
4790; ZNVER1-NEXT:    retq # sched: [1:0.50]
4791  tail call void asm "cpuid", ""() nounwind
4792  ret void
4793}
4794
4795define void @test_dec8(i8 %a0, i8* %a1) optsize {
4796; GENERIC-LABEL: test_dec8:
4797; GENERIC:       # %bb.0:
4798; GENERIC-NEXT:    #APP
4799; GENERIC-NEXT:    decb %dil # sched: [1:0.33]
4800; GENERIC-NEXT:    decb (%rsi) # sched: [7:1.00]
4801; GENERIC-NEXT:    #NO_APP
4802; GENERIC-NEXT:    retq # sched: [1:1.00]
4803;
4804; ATOM-LABEL: test_dec8:
4805; ATOM:       # %bb.0:
4806; ATOM-NEXT:    #APP
4807; ATOM-NEXT:    decb %dil # sched: [1:0.50]
4808; ATOM-NEXT:    decb (%rsi) # sched: [1:1.00]
4809; ATOM-NEXT:    #NO_APP
4810; ATOM-NEXT:    retq # sched: [79:39.50]
4811;
4812; SLM-LABEL: test_dec8:
4813; SLM:       # %bb.0:
4814; SLM-NEXT:    #APP
4815; SLM-NEXT:    decb %dil # sched: [1:0.50]
4816; SLM-NEXT:    decb (%rsi) # sched: [5:2.00]
4817; SLM-NEXT:    #NO_APP
4818; SLM-NEXT:    retq # sched: [4:1.00]
4819;
4820; SANDY-LABEL: test_dec8:
4821; SANDY:       # %bb.0:
4822; SANDY-NEXT:    #APP
4823; SANDY-NEXT:    decb %dil # sched: [1:0.33]
4824; SANDY-NEXT:    decb (%rsi) # sched: [7:1.00]
4825; SANDY-NEXT:    #NO_APP
4826; SANDY-NEXT:    retq # sched: [1:1.00]
4827;
4828; HASWELL-LABEL: test_dec8:
4829; HASWELL:       # %bb.0:
4830; HASWELL-NEXT:    #APP
4831; HASWELL-NEXT:    decb %dil # sched: [1:0.25]
4832; HASWELL-NEXT:    decb (%rsi) # sched: [7:1.00]
4833; HASWELL-NEXT:    #NO_APP
4834; HASWELL-NEXT:    retq # sched: [7:1.00]
4835;
4836; BROADWELL-LABEL: test_dec8:
4837; BROADWELL:       # %bb.0:
4838; BROADWELL-NEXT:    #APP
4839; BROADWELL-NEXT:    decb %dil # sched: [1:0.25]
4840; BROADWELL-NEXT:    decb (%rsi) # sched: [7:1.00]
4841; BROADWELL-NEXT:    #NO_APP
4842; BROADWELL-NEXT:    retq # sched: [7:1.00]
4843;
4844; SKYLAKE-LABEL: test_dec8:
4845; SKYLAKE:       # %bb.0:
4846; SKYLAKE-NEXT:    #APP
4847; SKYLAKE-NEXT:    decb %dil # sched: [1:0.25]
4848; SKYLAKE-NEXT:    decb (%rsi) # sched: [7:1.00]
4849; SKYLAKE-NEXT:    #NO_APP
4850; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4851;
4852; SKX-LABEL: test_dec8:
4853; SKX:       # %bb.0:
4854; SKX-NEXT:    #APP
4855; SKX-NEXT:    decb %dil # sched: [1:0.25]
4856; SKX-NEXT:    decb (%rsi) # sched: [7:1.00]
4857; SKX-NEXT:    #NO_APP
4858; SKX-NEXT:    retq # sched: [7:1.00]
4859;
4860; BTVER2-LABEL: test_dec8:
4861; BTVER2:       # %bb.0:
4862; BTVER2-NEXT:    #APP
4863; BTVER2-NEXT:    decb %dil # sched: [1:0.50]
4864; BTVER2-NEXT:    decb (%rsi) # sched: [5:1.00]
4865; BTVER2-NEXT:    #NO_APP
4866; BTVER2-NEXT:    retq # sched: [4:1.00]
4867;
4868; ZNVER1-LABEL: test_dec8:
4869; ZNVER1:       # %bb.0:
4870; ZNVER1-NEXT:    #APP
4871; ZNVER1-NEXT:    decb %dil # sched: [1:0.25]
4872; ZNVER1-NEXT:    decb (%rsi) # sched: [5:0.50]
4873; ZNVER1-NEXT:    #NO_APP
4874; ZNVER1-NEXT:    retq # sched: [1:0.50]
4875  tail call void asm "decb $0 \0A\09 decb $1", "r,*m"(i8 %a0, i8* %a1) nounwind
4876  ret void
4877}
4878define void @test_dec16(i16 %a0, i16* %a1) optsize {
4879; GENERIC-LABEL: test_dec16:
4880; GENERIC:       # %bb.0:
4881; GENERIC-NEXT:    #APP
4882; GENERIC-NEXT:    decw %di # sched: [1:0.33]
4883; GENERIC-NEXT:    decw (%rsi) # sched: [7:1.00]
4884; GENERIC-NEXT:    #NO_APP
4885; GENERIC-NEXT:    retq # sched: [1:1.00]
4886;
4887; ATOM-LABEL: test_dec16:
4888; ATOM:       # %bb.0:
4889; ATOM-NEXT:    #APP
4890; ATOM-NEXT:    decw %di # sched: [1:0.50]
4891; ATOM-NEXT:    decw (%rsi) # sched: [1:1.00]
4892; ATOM-NEXT:    #NO_APP
4893; ATOM-NEXT:    retq # sched: [79:39.50]
4894;
4895; SLM-LABEL: test_dec16:
4896; SLM:       # %bb.0:
4897; SLM-NEXT:    #APP
4898; SLM-NEXT:    decw %di # sched: [1:0.50]
4899; SLM-NEXT:    decw (%rsi) # sched: [5:2.00]
4900; SLM-NEXT:    #NO_APP
4901; SLM-NEXT:    retq # sched: [4:1.00]
4902;
4903; SANDY-LABEL: test_dec16:
4904; SANDY:       # %bb.0:
4905; SANDY-NEXT:    #APP
4906; SANDY-NEXT:    decw %di # sched: [1:0.33]
4907; SANDY-NEXT:    decw (%rsi) # sched: [7:1.00]
4908; SANDY-NEXT:    #NO_APP
4909; SANDY-NEXT:    retq # sched: [1:1.00]
4910;
4911; HASWELL-LABEL: test_dec16:
4912; HASWELL:       # %bb.0:
4913; HASWELL-NEXT:    #APP
4914; HASWELL-NEXT:    decw %di # sched: [1:0.25]
4915; HASWELL-NEXT:    decw (%rsi) # sched: [7:1.00]
4916; HASWELL-NEXT:    #NO_APP
4917; HASWELL-NEXT:    retq # sched: [7:1.00]
4918;
4919; BROADWELL-LABEL: test_dec16:
4920; BROADWELL:       # %bb.0:
4921; BROADWELL-NEXT:    #APP
4922; BROADWELL-NEXT:    decw %di # sched: [1:0.25]
4923; BROADWELL-NEXT:    decw (%rsi) # sched: [7:1.00]
4924; BROADWELL-NEXT:    #NO_APP
4925; BROADWELL-NEXT:    retq # sched: [7:1.00]
4926;
4927; SKYLAKE-LABEL: test_dec16:
4928; SKYLAKE:       # %bb.0:
4929; SKYLAKE-NEXT:    #APP
4930; SKYLAKE-NEXT:    decw %di # sched: [1:0.25]
4931; SKYLAKE-NEXT:    decw (%rsi) # sched: [7:1.00]
4932; SKYLAKE-NEXT:    #NO_APP
4933; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4934;
4935; SKX-LABEL: test_dec16:
4936; SKX:       # %bb.0:
4937; SKX-NEXT:    #APP
4938; SKX-NEXT:    decw %di # sched: [1:0.25]
4939; SKX-NEXT:    decw (%rsi) # sched: [7:1.00]
4940; SKX-NEXT:    #NO_APP
4941; SKX-NEXT:    retq # sched: [7:1.00]
4942;
4943; BTVER2-LABEL: test_dec16:
4944; BTVER2:       # %bb.0:
4945; BTVER2-NEXT:    #APP
4946; BTVER2-NEXT:    decw %di # sched: [1:0.50]
4947; BTVER2-NEXT:    decw (%rsi) # sched: [5:1.00]
4948; BTVER2-NEXT:    #NO_APP
4949; BTVER2-NEXT:    retq # sched: [4:1.00]
4950;
4951; ZNVER1-LABEL: test_dec16:
4952; ZNVER1:       # %bb.0:
4953; ZNVER1-NEXT:    #APP
4954; ZNVER1-NEXT:    decw %di # sched: [1:0.25]
4955; ZNVER1-NEXT:    decw (%rsi) # sched: [5:0.50]
4956; ZNVER1-NEXT:    #NO_APP
4957; ZNVER1-NEXT:    retq # sched: [1:0.50]
4958  tail call void asm "decw $0 \0A\09 decw $1", "r,*m"(i16 %a0, i16* %a1) nounwind
4959  ret void
4960}
4961define void @test_dec32(i32 %a0, i32* %a1) optsize {
4962; GENERIC-LABEL: test_dec32:
4963; GENERIC:       # %bb.0:
4964; GENERIC-NEXT:    #APP
4965; GENERIC-NEXT:    decl %edi # sched: [1:0.33]
4966; GENERIC-NEXT:    decl (%rsi) # sched: [7:1.00]
4967; GENERIC-NEXT:    #NO_APP
4968; GENERIC-NEXT:    retq # sched: [1:1.00]
4969;
4970; ATOM-LABEL: test_dec32:
4971; ATOM:       # %bb.0:
4972; ATOM-NEXT:    #APP
4973; ATOM-NEXT:    decl %edi # sched: [1:0.50]
4974; ATOM-NEXT:    decl (%rsi) # sched: [1:1.00]
4975; ATOM-NEXT:    #NO_APP
4976; ATOM-NEXT:    retq # sched: [79:39.50]
4977;
4978; SLM-LABEL: test_dec32:
4979; SLM:       # %bb.0:
4980; SLM-NEXT:    #APP
4981; SLM-NEXT:    decl %edi # sched: [1:0.50]
4982; SLM-NEXT:    decl (%rsi) # sched: [5:2.00]
4983; SLM-NEXT:    #NO_APP
4984; SLM-NEXT:    retq # sched: [4:1.00]
4985;
4986; SANDY-LABEL: test_dec32:
4987; SANDY:       # %bb.0:
4988; SANDY-NEXT:    #APP
4989; SANDY-NEXT:    decl %edi # sched: [1:0.33]
4990; SANDY-NEXT:    decl (%rsi) # sched: [7:1.00]
4991; SANDY-NEXT:    #NO_APP
4992; SANDY-NEXT:    retq # sched: [1:1.00]
4993;
4994; HASWELL-LABEL: test_dec32:
4995; HASWELL:       # %bb.0:
4996; HASWELL-NEXT:    #APP
4997; HASWELL-NEXT:    decl %edi # sched: [1:0.25]
4998; HASWELL-NEXT:    decl (%rsi) # sched: [7:1.00]
4999; HASWELL-NEXT:    #NO_APP
5000; HASWELL-NEXT:    retq # sched: [7:1.00]
5001;
5002; BROADWELL-LABEL: test_dec32:
5003; BROADWELL:       # %bb.0:
5004; BROADWELL-NEXT:    #APP
5005; BROADWELL-NEXT:    decl %edi # sched: [1:0.25]
5006; BROADWELL-NEXT:    decl (%rsi) # sched: [7:1.00]
5007; BROADWELL-NEXT:    #NO_APP
5008; BROADWELL-NEXT:    retq # sched: [7:1.00]
5009;
5010; SKYLAKE-LABEL: test_dec32:
5011; SKYLAKE:       # %bb.0:
5012; SKYLAKE-NEXT:    #APP
5013; SKYLAKE-NEXT:    decl %edi # sched: [1:0.25]
5014; SKYLAKE-NEXT:    decl (%rsi) # sched: [7:1.00]
5015; SKYLAKE-NEXT:    #NO_APP
5016; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5017;
5018; SKX-LABEL: test_dec32:
5019; SKX:       # %bb.0:
5020; SKX-NEXT:    #APP
5021; SKX-NEXT:    decl %edi # sched: [1:0.25]
5022; SKX-NEXT:    decl (%rsi) # sched: [7:1.00]
5023; SKX-NEXT:    #NO_APP
5024; SKX-NEXT:    retq # sched: [7:1.00]
5025;
5026; BTVER2-LABEL: test_dec32:
5027; BTVER2:       # %bb.0:
5028; BTVER2-NEXT:    #APP
5029; BTVER2-NEXT:    decl %edi # sched: [1:0.50]
5030; BTVER2-NEXT:    decl (%rsi) # sched: [5:1.00]
5031; BTVER2-NEXT:    #NO_APP
5032; BTVER2-NEXT:    retq # sched: [4:1.00]
5033;
5034; ZNVER1-LABEL: test_dec32:
5035; ZNVER1:       # %bb.0:
5036; ZNVER1-NEXT:    #APP
5037; ZNVER1-NEXT:    decl %edi # sched: [1:0.25]
5038; ZNVER1-NEXT:    decl (%rsi) # sched: [5:0.50]
5039; ZNVER1-NEXT:    #NO_APP
5040; ZNVER1-NEXT:    retq # sched: [1:0.50]
5041  tail call void asm "decl $0 \0A\09 decl $1", "r,*m"(i32 %a0, i32* %a1) nounwind
5042  ret void
5043}
5044define void @test_dec64(i64 %a0, i64* %a1) optsize {
5045; GENERIC-LABEL: test_dec64:
5046; GENERIC:       # %bb.0:
5047; GENERIC-NEXT:    #APP
5048; GENERIC-NEXT:    decq %rdi # sched: [1:0.33]
5049; GENERIC-NEXT:    decq (%rsi) # sched: [7:1.00]
5050; GENERIC-NEXT:    #NO_APP
5051; GENERIC-NEXT:    retq # sched: [1:1.00]
5052;
5053; ATOM-LABEL: test_dec64:
5054; ATOM:       # %bb.0:
5055; ATOM-NEXT:    #APP
5056; ATOM-NEXT:    decq %rdi # sched: [1:0.50]
5057; ATOM-NEXT:    decq (%rsi) # sched: [1:1.00]
5058; ATOM-NEXT:    #NO_APP
5059; ATOM-NEXT:    retq # sched: [79:39.50]
5060;
5061; SLM-LABEL: test_dec64:
5062; SLM:       # %bb.0:
5063; SLM-NEXT:    #APP
5064; SLM-NEXT:    decq %rdi # sched: [1:0.50]
5065; SLM-NEXT:    decq (%rsi) # sched: [5:2.00]
5066; SLM-NEXT:    #NO_APP
5067; SLM-NEXT:    retq # sched: [4:1.00]
5068;
5069; SANDY-LABEL: test_dec64:
5070; SANDY:       # %bb.0:
5071; SANDY-NEXT:    #APP
5072; SANDY-NEXT:    decq %rdi # sched: [1:0.33]
5073; SANDY-NEXT:    decq (%rsi) # sched: [7:1.00]
5074; SANDY-NEXT:    #NO_APP
5075; SANDY-NEXT:    retq # sched: [1:1.00]
5076;
5077; HASWELL-LABEL: test_dec64:
5078; HASWELL:       # %bb.0:
5079; HASWELL-NEXT:    #APP
5080; HASWELL-NEXT:    decq %rdi # sched: [1:0.25]
5081; HASWELL-NEXT:    decq (%rsi) # sched: [7:1.00]
5082; HASWELL-NEXT:    #NO_APP
5083; HASWELL-NEXT:    retq # sched: [7:1.00]
5084;
5085; BROADWELL-LABEL: test_dec64:
5086; BROADWELL:       # %bb.0:
5087; BROADWELL-NEXT:    #APP
5088; BROADWELL-NEXT:    decq %rdi # sched: [1:0.25]
5089; BROADWELL-NEXT:    decq (%rsi) # sched: [7:1.00]
5090; BROADWELL-NEXT:    #NO_APP
5091; BROADWELL-NEXT:    retq # sched: [7:1.00]
5092;
5093; SKYLAKE-LABEL: test_dec64:
5094; SKYLAKE:       # %bb.0:
5095; SKYLAKE-NEXT:    #APP
5096; SKYLAKE-NEXT:    decq %rdi # sched: [1:0.25]
5097; SKYLAKE-NEXT:    decq (%rsi) # sched: [7:1.00]
5098; SKYLAKE-NEXT:    #NO_APP
5099; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5100;
5101; SKX-LABEL: test_dec64:
5102; SKX:       # %bb.0:
5103; SKX-NEXT:    #APP
5104; SKX-NEXT:    decq %rdi # sched: [1:0.25]
5105; SKX-NEXT:    decq (%rsi) # sched: [7:1.00]
5106; SKX-NEXT:    #NO_APP
5107; SKX-NEXT:    retq # sched: [7:1.00]
5108;
5109; BTVER2-LABEL: test_dec64:
5110; BTVER2:       # %bb.0:
5111; BTVER2-NEXT:    #APP
5112; BTVER2-NEXT:    decq %rdi # sched: [1:0.50]
5113; BTVER2-NEXT:    decq (%rsi) # sched: [5:1.00]
5114; BTVER2-NEXT:    #NO_APP
5115; BTVER2-NEXT:    retq # sched: [4:1.00]
5116;
5117; ZNVER1-LABEL: test_dec64:
5118; ZNVER1:       # %bb.0:
5119; ZNVER1-NEXT:    #APP
5120; ZNVER1-NEXT:    decq %rdi # sched: [1:0.25]
5121; ZNVER1-NEXT:    decq (%rsi) # sched: [5:0.50]
5122; ZNVER1-NEXT:    #NO_APP
5123; ZNVER1-NEXT:    retq # sched: [1:0.50]
5124  tail call void asm "decq $0 \0A\09 decq $1", "r,*m"(i64 %a0, i64* %a1) nounwind
5125  ret void
5126}
5127
5128define void @test_div(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
5129; GENERIC-LABEL: test_div:
5130; GENERIC:       # %bb.0:
5131; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5132; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5133; GENERIC-NEXT:    #APP
5134; GENERIC-NEXT:    divb %dil # sched: [25:10.00]
5135; GENERIC-NEXT:    divb (%r8) # sched: [30:10.00]
5136; GENERIC-NEXT:    divw %si # sched: [25:10.00]
5137; GENERIC-NEXT:    divw (%r9) # sched: [30:10.00]
5138; GENERIC-NEXT:    divl %edx # sched: [25:10.00]
5139; GENERIC-NEXT:    divl (%rax) # sched: [30:10.00]
5140; GENERIC-NEXT:    divq %rcx # sched: [25:10.00]
5141; GENERIC-NEXT:    divq (%r10) # sched: [30:10.00]
5142; GENERIC-NEXT:    #NO_APP
5143; GENERIC-NEXT:    retq # sched: [1:1.00]
5144;
5145; ATOM-LABEL: test_div:
5146; ATOM:       # %bb.0:
5147; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
5148; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
5149; ATOM-NEXT:    #APP
5150; ATOM-NEXT:    divb %dil # sched: [50:25.00]
5151; ATOM-NEXT:    divb (%r8) # sched: [68:34.00]
5152; ATOM-NEXT:    divw %si # sched: [50:25.00]
5153; ATOM-NEXT:    divw (%r9) # sched: [50:25.00]
5154; ATOM-NEXT:    divl %edx # sched: [50:25.00]
5155; ATOM-NEXT:    divl (%rax) # sched: [50:25.00]
5156; ATOM-NEXT:    divq %rcx # sched: [130:65.00]
5157; ATOM-NEXT:    divq (%r10) # sched: [130:65.00]
5158; ATOM-NEXT:    #NO_APP
5159; ATOM-NEXT:    retq # sched: [79:39.50]
5160;
5161; SLM-LABEL: test_div:
5162; SLM:       # %bb.0:
5163; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
5164; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
5165; SLM-NEXT:    #APP
5166; SLM-NEXT:    divb %dil # sched: [25:25.00]
5167; SLM-NEXT:    divb (%r8) # sched: [29:25.00]
5168; SLM-NEXT:    divw %si # sched: [25:25.00]
5169; SLM-NEXT:    divw (%r9) # sched: [29:25.00]
5170; SLM-NEXT:    divl %edx # sched: [25:25.00]
5171; SLM-NEXT:    divl (%rax) # sched: [29:25.00]
5172; SLM-NEXT:    divq %rcx # sched: [25:25.00]
5173; SLM-NEXT:    divq (%r10) # sched: [29:25.00]
5174; SLM-NEXT:    #NO_APP
5175; SLM-NEXT:    retq # sched: [4:1.00]
5176;
5177; SANDY-LABEL: test_div:
5178; SANDY:       # %bb.0:
5179; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5180; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5181; SANDY-NEXT:    #APP
5182; SANDY-NEXT:    divb %dil # sched: [25:10.00]
5183; SANDY-NEXT:    divb (%r8) # sched: [30:10.00]
5184; SANDY-NEXT:    divw %si # sched: [25:10.00]
5185; SANDY-NEXT:    divw (%r9) # sched: [30:10.00]
5186; SANDY-NEXT:    divl %edx # sched: [25:10.00]
5187; SANDY-NEXT:    divl (%rax) # sched: [30:10.00]
5188; SANDY-NEXT:    divq %rcx # sched: [25:10.00]
5189; SANDY-NEXT:    divq (%r10) # sched: [30:10.00]
5190; SANDY-NEXT:    #NO_APP
5191; SANDY-NEXT:    retq # sched: [1:1.00]
5192;
5193; HASWELL-LABEL: test_div:
5194; HASWELL:       # %bb.0:
5195; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5196; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5197; HASWELL-NEXT:    #APP
5198; HASWELL-NEXT:    divb %dil # sched: [22:1.00]
5199; HASWELL-NEXT:    divb (%r8) # sched: [29:10.00]
5200; HASWELL-NEXT:    divw %si # sched: [98:8.00]
5201; HASWELL-NEXT:    divw (%r9) # sched: [29:10.00]
5202; HASWELL-NEXT:    divl %edx # sched: [98:8.00]
5203; HASWELL-NEXT:    divl (%rax) # sched: [29:10.00]
5204; HASWELL-NEXT:    divq %rcx # sched: [98:8.00]
5205; HASWELL-NEXT:    divq (%r10) # sched: [29:10.00]
5206; HASWELL-NEXT:    #NO_APP
5207; HASWELL-NEXT:    retq # sched: [7:1.00]
5208;
5209; BROADWELL-LABEL: test_div:
5210; BROADWELL:       # %bb.0:
5211; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5212; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5213; BROADWELL-NEXT:    #APP
5214; BROADWELL-NEXT:    divb %dil # sched: [25:10.00]
5215; BROADWELL-NEXT:    divb (%r8) # sched: [34:2.00]
5216; BROADWELL-NEXT:    divw %si # sched: [80:8.00]
5217; BROADWELL-NEXT:    divw (%r9) # sched: [34:2.00]
5218; BROADWELL-NEXT:    divl %edx # sched: [80:8.00]
5219; BROADWELL-NEXT:    divl (%rax) # sched: [34:2.00]
5220; BROADWELL-NEXT:    divq %rcx # sched: [80:8.00]
5221; BROADWELL-NEXT:    divq (%r10) # sched: [34:2.00]
5222; BROADWELL-NEXT:    #NO_APP
5223; BROADWELL-NEXT:    retq # sched: [7:1.00]
5224;
5225; SKYLAKE-LABEL: test_div:
5226; SKYLAKE:       # %bb.0:
5227; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5228; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5229; SKYLAKE-NEXT:    #APP
5230; SKYLAKE-NEXT:    divb %dil # sched: [25:10.00]
5231; SKYLAKE-NEXT:    divb (%r8) # sched: [29:10.00]
5232; SKYLAKE-NEXT:    divw %si # sched: [76:8.00]
5233; SKYLAKE-NEXT:    divw (%r9) # sched: [29:10.00]
5234; SKYLAKE-NEXT:    divl %edx # sched: [76:8.00]
5235; SKYLAKE-NEXT:    divl (%rax) # sched: [29:10.00]
5236; SKYLAKE-NEXT:    divq %rcx # sched: [76:8.00]
5237; SKYLAKE-NEXT:    divq (%r10) # sched: [29:10.00]
5238; SKYLAKE-NEXT:    #NO_APP
5239; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5240;
5241; SKX-LABEL: test_div:
5242; SKX:       # %bb.0:
5243; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5244; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5245; SKX-NEXT:    #APP
5246; SKX-NEXT:    divb %dil # sched: [25:10.00]
5247; SKX-NEXT:    divb (%r8) # sched: [29:10.00]
5248; SKX-NEXT:    divw %si # sched: [76:8.00]
5249; SKX-NEXT:    divw (%r9) # sched: [29:10.00]
5250; SKX-NEXT:    divl %edx # sched: [76:8.00]
5251; SKX-NEXT:    divl (%rax) # sched: [29:10.00]
5252; SKX-NEXT:    divq %rcx # sched: [76:8.00]
5253; SKX-NEXT:    divq (%r10) # sched: [29:10.00]
5254; SKX-NEXT:    #NO_APP
5255; SKX-NEXT:    retq # sched: [7:1.00]
5256;
5257; BTVER2-LABEL: test_div:
5258; BTVER2:       # %bb.0:
5259; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
5260; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
5261; BTVER2-NEXT:    #APP
5262; BTVER2-NEXT:    divb %dil # sched: [12:12.00]
5263; BTVER2-NEXT:    divb (%r8) # sched: [15:12.00]
5264; BTVER2-NEXT:    divw %si # sched: [17:17.00]
5265; BTVER2-NEXT:    divw (%r9) # sched: [20:17.00]
5266; BTVER2-NEXT:    divl %edx # sched: [25:25.00]
5267; BTVER2-NEXT:    divl (%rax) # sched: [28:25.00]
5268; BTVER2-NEXT:    divq %rcx # sched: [41:41.00]
5269; BTVER2-NEXT:    divq (%r10) # sched: [44:41.00]
5270; BTVER2-NEXT:    #NO_APP
5271; BTVER2-NEXT:    retq # sched: [4:1.00]
5272;
5273; ZNVER1-LABEL: test_div:
5274; ZNVER1:       # %bb.0:
5275; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
5276; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
5277; ZNVER1-NEXT:    #APP
5278; ZNVER1-NEXT:    divb %dil # sched: [15:15.00]
5279; ZNVER1-NEXT:    divb (%r8) # sched: [19:15.00]
5280; ZNVER1-NEXT:    divw %si # sched: [17:17.00]
5281; ZNVER1-NEXT:    divw (%r9) # sched: [21:17.00]
5282; ZNVER1-NEXT:    divl %edx # sched: [25:25.00]
5283; ZNVER1-NEXT:    divl (%rax) # sched: [29:25.00]
5284; ZNVER1-NEXT:    divq %rcx # sched: [41:41.00]
5285; ZNVER1-NEXT:    divq (%r10) # sched: [45:41.00]
5286; ZNVER1-NEXT:    #NO_APP
5287; ZNVER1-NEXT:    retq # sched: [1:0.50]
5288  tail call void asm "divb $0 \0A\09 divb $4 \0A\09 divw $1 \0A\09 divw $5 \0A\09 divl $2 \0A\09 divl $6 \0A\09 divq $3 \0A\09 divq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
5289  ret void
5290}
5291
5292define void @test_enter() optsize {
5293; GENERIC-LABEL: test_enter:
5294; GENERIC:       # %bb.0:
5295; GENERIC-NEXT:    #APP
5296; GENERIC-NEXT:    enter $7, $4095 # imm = 0xFFF
5297; GENERIC-NEXT:    # sched: [100:0.33]
5298; GENERIC-NEXT:    #NO_APP
5299; GENERIC-NEXT:    retq # sched: [1:1.00]
5300;
5301; ATOM-LABEL: test_enter:
5302; ATOM:       # %bb.0:
5303; ATOM-NEXT:    #APP
5304; ATOM-NEXT:    enter $7, $4095 # imm = 0xFFF
5305; ATOM-NEXT:    # sched: [32:16.00]
5306; ATOM-NEXT:    #NO_APP
5307; ATOM-NEXT:    retq # sched: [79:39.50]
5308;
5309; SLM-LABEL: test_enter:
5310; SLM:       # %bb.0:
5311; SLM-NEXT:    #APP
5312; SLM-NEXT:    enter $7, $4095 # imm = 0xFFF
5313; SLM-NEXT:    # sched: [100:1.00]
5314; SLM-NEXT:    #NO_APP
5315; SLM-NEXT:    retq # sched: [4:1.00]
5316;
5317; SANDY-LABEL: test_enter:
5318; SANDY:       # %bb.0:
5319; SANDY-NEXT:    #APP
5320; SANDY-NEXT:    enter $7, $4095 # imm = 0xFFF
5321; SANDY-NEXT:    # sched: [100:0.33]
5322; SANDY-NEXT:    #NO_APP
5323; SANDY-NEXT:    retq # sched: [1:1.00]
5324;
5325; HASWELL-LABEL: test_enter:
5326; HASWELL:       # %bb.0:
5327; HASWELL-NEXT:    #APP
5328; HASWELL-NEXT:    enter $7, $4095 # imm = 0xFFF
5329; HASWELL-NEXT:    # sched: [100:0.25]
5330; HASWELL-NEXT:    #NO_APP
5331; HASWELL-NEXT:    retq # sched: [7:1.00]
5332;
5333; BROADWELL-LABEL: test_enter:
5334; BROADWELL:       # %bb.0:
5335; BROADWELL-NEXT:    #APP
5336; BROADWELL-NEXT:    enter $7, $4095 # imm = 0xFFF
5337; BROADWELL-NEXT:    # sched: [100:0.25]
5338; BROADWELL-NEXT:    #NO_APP
5339; BROADWELL-NEXT:    retq # sched: [7:1.00]
5340;
5341; SKYLAKE-LABEL: test_enter:
5342; SKYLAKE:       # %bb.0:
5343; SKYLAKE-NEXT:    #APP
5344; SKYLAKE-NEXT:    enter $7, $4095 # imm = 0xFFF
5345; SKYLAKE-NEXT:    # sched: [100:0.25]
5346; SKYLAKE-NEXT:    #NO_APP
5347; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5348;
5349; SKX-LABEL: test_enter:
5350; SKX:       # %bb.0:
5351; SKX-NEXT:    #APP
5352; SKX-NEXT:    enter $7, $4095 # imm = 0xFFF
5353; SKX-NEXT:    # sched: [100:0.25]
5354; SKX-NEXT:    #NO_APP
5355; SKX-NEXT:    retq # sched: [7:1.00]
5356;
5357; BTVER2-LABEL: test_enter:
5358; BTVER2:       # %bb.0:
5359; BTVER2-NEXT:    #APP
5360; BTVER2-NEXT:    enter $7, $4095 # imm = 0xFFF
5361; BTVER2-NEXT:    # sched: [100:0.50]
5362; BTVER2-NEXT:    #NO_APP
5363; BTVER2-NEXT:    retq # sched: [4:1.00]
5364;
5365; ZNVER1-LABEL: test_enter:
5366; ZNVER1:       # %bb.0:
5367; ZNVER1-NEXT:    #APP
5368; ZNVER1-NEXT:    enter $7, $4095 # imm = 0xFFF
5369; ZNVER1-NEXT:    # sched: [100:0.25]
5370; ZNVER1-NEXT:    #NO_APP
5371; ZNVER1-NEXT:    retq # sched: [1:0.50]
5372  tail call void asm "enter $0, $1", "i,i"(i8 7, i16 4095) nounwind
5373  ret void
5374}
5375
5376define void @test_idiv(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
5377; GENERIC-LABEL: test_idiv:
5378; GENERIC:       # %bb.0:
5379; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5380; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5381; GENERIC-NEXT:    #APP
5382; GENERIC-NEXT:    idivb %dil # sched: [25:10.00]
5383; GENERIC-NEXT:    idivb (%r8) # sched: [30:10.00]
5384; GENERIC-NEXT:    idivw %si # sched: [25:10.00]
5385; GENERIC-NEXT:    idivw (%r9) # sched: [30:10.00]
5386; GENERIC-NEXT:    idivl %edx # sched: [25:10.00]
5387; GENERIC-NEXT:    idivl (%rax) # sched: [30:10.00]
5388; GENERIC-NEXT:    idivq %rcx # sched: [25:10.00]
5389; GENERIC-NEXT:    idivq (%r10) # sched: [30:10.00]
5390; GENERIC-NEXT:    #NO_APP
5391; GENERIC-NEXT:    retq # sched: [1:1.00]
5392;
5393; ATOM-LABEL: test_idiv:
5394; ATOM:       # %bb.0:
5395; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
5396; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
5397; ATOM-NEXT:    #APP
5398; ATOM-NEXT:    idivb %dil # sched: [62:31.00]
5399; ATOM-NEXT:    idivb (%r8) # sched: [62:31.00]
5400; ATOM-NEXT:    idivw %si # sched: [62:31.00]
5401; ATOM-NEXT:    idivw (%r9) # sched: [62:31.00]
5402; ATOM-NEXT:    idivl %edx # sched: [62:31.00]
5403; ATOM-NEXT:    idivl (%rax) # sched: [62:31.00]
5404; ATOM-NEXT:    idivq %rcx # sched: [130:65.00]
5405; ATOM-NEXT:    idivq (%r10) # sched: [130:65.00]
5406; ATOM-NEXT:    #NO_APP
5407; ATOM-NEXT:    retq # sched: [79:39.50]
5408;
5409; SLM-LABEL: test_idiv:
5410; SLM:       # %bb.0:
5411; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
5412; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
5413; SLM-NEXT:    #APP
5414; SLM-NEXT:    idivb %dil # sched: [25:25.00]
5415; SLM-NEXT:    idivb (%r8) # sched: [29:25.00]
5416; SLM-NEXT:    idivw %si # sched: [25:25.00]
5417; SLM-NEXT:    idivw (%r9) # sched: [29:25.00]
5418; SLM-NEXT:    idivl %edx # sched: [25:25.00]
5419; SLM-NEXT:    idivl (%rax) # sched: [29:25.00]
5420; SLM-NEXT:    idivq %rcx # sched: [25:25.00]
5421; SLM-NEXT:    idivq (%r10) # sched: [29:25.00]
5422; SLM-NEXT:    #NO_APP
5423; SLM-NEXT:    retq # sched: [4:1.00]
5424;
5425; SANDY-LABEL: test_idiv:
5426; SANDY:       # %bb.0:
5427; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5428; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5429; SANDY-NEXT:    #APP
5430; SANDY-NEXT:    idivb %dil # sched: [25:10.00]
5431; SANDY-NEXT:    idivb (%r8) # sched: [30:10.00]
5432; SANDY-NEXT:    idivw %si # sched: [25:10.00]
5433; SANDY-NEXT:    idivw (%r9) # sched: [30:10.00]
5434; SANDY-NEXT:    idivl %edx # sched: [25:10.00]
5435; SANDY-NEXT:    idivl (%rax) # sched: [30:10.00]
5436; SANDY-NEXT:    idivq %rcx # sched: [25:10.00]
5437; SANDY-NEXT:    idivq (%r10) # sched: [30:10.00]
5438; SANDY-NEXT:    #NO_APP
5439; SANDY-NEXT:    retq # sched: [1:1.00]
5440;
5441; HASWELL-LABEL: test_idiv:
5442; HASWELL:       # %bb.0:
5443; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5444; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5445; HASWELL-NEXT:    #APP
5446; HASWELL-NEXT:    idivb %dil # sched: [23:1.00]
5447; HASWELL-NEXT:    idivb (%r8) # sched: [29:10.00]
5448; HASWELL-NEXT:    idivw %si # sched: [112:16.50]
5449; HASWELL-NEXT:    idivw (%r9) # sched: [29:10.00]
5450; HASWELL-NEXT:    idivl %edx # sched: [112:16.50]
5451; HASWELL-NEXT:    idivl (%rax) # sched: [29:10.00]
5452; HASWELL-NEXT:    idivq %rcx # sched: [112:16.50]
5453; HASWELL-NEXT:    idivq (%r10) # sched: [29:10.00]
5454; HASWELL-NEXT:    #NO_APP
5455; HASWELL-NEXT:    retq # sched: [7:1.00]
5456;
5457; BROADWELL-LABEL: test_idiv:
5458; BROADWELL:       # %bb.0:
5459; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5460; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5461; BROADWELL-NEXT:    #APP
5462; BROADWELL-NEXT:    idivb %dil # sched: [25:10.00]
5463; BROADWELL-NEXT:    idivb (%r8) # sched: [35:2.00]
5464; BROADWELL-NEXT:    idivw %si # sched: [25:10.00]
5465; BROADWELL-NEXT:    idivw (%r9) # sched: [35:2.00]
5466; BROADWELL-NEXT:    idivl %edx # sched: [25:10.00]
5467; BROADWELL-NEXT:    idivl (%rax) # sched: [35:2.00]
5468; BROADWELL-NEXT:    idivq %rcx # sched: [25:10.00]
5469; BROADWELL-NEXT:    idivq (%r10) # sched: [35:2.00]
5470; BROADWELL-NEXT:    #NO_APP
5471; BROADWELL-NEXT:    retq # sched: [7:1.00]
5472;
5473; SKYLAKE-LABEL: test_idiv:
5474; SKYLAKE:       # %bb.0:
5475; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5476; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5477; SKYLAKE-NEXT:    #APP
5478; SKYLAKE-NEXT:    idivb %dil # sched: [25:10.00]
5479; SKYLAKE-NEXT:    idivb (%r8) # sched: [28:4.00]
5480; SKYLAKE-NEXT:    idivw %si # sched: [102:16.50]
5481; SKYLAKE-NEXT:    idivw (%r9) # sched: [28:4.00]
5482; SKYLAKE-NEXT:    idivl %edx # sched: [102:16.50]
5483; SKYLAKE-NEXT:    idivl (%rax) # sched: [28:4.00]
5484; SKYLAKE-NEXT:    idivq %rcx # sched: [102:16.50]
5485; SKYLAKE-NEXT:    idivq (%r10) # sched: [28:4.00]
5486; SKYLAKE-NEXT:    #NO_APP
5487; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5488;
5489; SKX-LABEL: test_idiv:
5490; SKX:       # %bb.0:
5491; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
5492; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
5493; SKX-NEXT:    #APP
5494; SKX-NEXT:    idivb %dil # sched: [25:10.00]
5495; SKX-NEXT:    idivb (%r8) # sched: [28:4.00]
5496; SKX-NEXT:    idivw %si # sched: [102:16.50]
5497; SKX-NEXT:    idivw (%r9) # sched: [28:4.00]
5498; SKX-NEXT:    idivl %edx # sched: [102:16.50]
5499; SKX-NEXT:    idivl (%rax) # sched: [28:4.00]
5500; SKX-NEXT:    idivq %rcx # sched: [102:16.50]
5501; SKX-NEXT:    idivq (%r10) # sched: [28:4.00]
5502; SKX-NEXT:    #NO_APP
5503; SKX-NEXT:    retq # sched: [7:1.00]
5504;
5505; BTVER2-LABEL: test_idiv:
5506; BTVER2:       # %bb.0:
5507; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
5508; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
5509; BTVER2-NEXT:    #APP
5510; BTVER2-NEXT:    idivb %dil # sched: [12:12.00]
5511; BTVER2-NEXT:    idivb (%r8) # sched: [15:12.00]
5512; BTVER2-NEXT:    idivw %si # sched: [17:17.00]
5513; BTVER2-NEXT:    idivw (%r9) # sched: [20:17.00]
5514; BTVER2-NEXT:    idivl %edx # sched: [25:25.00]
5515; BTVER2-NEXT:    idivl (%rax) # sched: [28:25.00]
5516; BTVER2-NEXT:    idivq %rcx # sched: [41:41.00]
5517; BTVER2-NEXT:    idivq (%r10) # sched: [44:41.00]
5518; BTVER2-NEXT:    #NO_APP
5519; BTVER2-NEXT:    retq # sched: [4:1.00]
5520;
5521; ZNVER1-LABEL: test_idiv:
5522; ZNVER1:       # %bb.0:
5523; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
5524; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
5525; ZNVER1-NEXT:    #APP
5526; ZNVER1-NEXT:    idivb %dil # sched: [15:15.00]
5527; ZNVER1-NEXT:    idivb (%r8) # sched: [19:15.00]
5528; ZNVER1-NEXT:    idivw %si # sched: [17:17.00]
5529; ZNVER1-NEXT:    idivw (%r9) # sched: [21:17.00]
5530; ZNVER1-NEXT:    idivl %edx # sched: [25:25.00]
5531; ZNVER1-NEXT:    idivl (%rax) # sched: [29:25.00]
5532; ZNVER1-NEXT:    idivq %rcx # sched: [41:41.00]
5533; ZNVER1-NEXT:    idivq (%r10) # sched: [45:41.00]
5534; ZNVER1-NEXT:    #NO_APP
5535; ZNVER1-NEXT:    retq # sched: [1:0.50]
5536  tail call void asm "idivb $0 \0A\09 idivb $4 \0A\09 idivw $1 \0A\09 idivw $5 \0A\09 idivl $2 \0A\09 idivl $6 \0A\09 idivq $3 \0A\09 idivq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
5537  ret void
5538}
5539
5540define void @test_imul_8(i8 %a0, i8* %a1) optsize {
5541; GENERIC-LABEL: test_imul_8:
5542; GENERIC:       # %bb.0:
5543; GENERIC-NEXT:    #APP
5544; GENERIC-NEXT:    imulb %dil # sched: [3:1.00]
5545; GENERIC-NEXT:    imulb (%rsi) # sched: [8:1.00]
5546; GENERIC-NEXT:    #NO_APP
5547; GENERIC-NEXT:    retq # sched: [1:1.00]
5548;
5549; ATOM-LABEL: test_imul_8:
5550; ATOM:       # %bb.0:
5551; ATOM-NEXT:    #APP
5552; ATOM-NEXT:    imulb %dil # sched: [7:3.50]
5553; ATOM-NEXT:    imulb (%rsi) # sched: [7:3.50]
5554; ATOM-NEXT:    #NO_APP
5555; ATOM-NEXT:    retq # sched: [79:39.50]
5556;
5557; SLM-LABEL: test_imul_8:
5558; SLM:       # %bb.0:
5559; SLM-NEXT:    #APP
5560; SLM-NEXT:    imulb %dil # sched: [3:1.00]
5561; SLM-NEXT:    imulb (%rsi) # sched: [6:1.00]
5562; SLM-NEXT:    #NO_APP
5563; SLM-NEXT:    retq # sched: [4:1.00]
5564;
5565; SANDY-LABEL: test_imul_8:
5566; SANDY:       # %bb.0:
5567; SANDY-NEXT:    #APP
5568; SANDY-NEXT:    imulb %dil # sched: [3:1.00]
5569; SANDY-NEXT:    imulb (%rsi) # sched: [8:1.00]
5570; SANDY-NEXT:    #NO_APP
5571; SANDY-NEXT:    retq # sched: [1:1.00]
5572;
5573; HASWELL-LABEL: test_imul_8:
5574; HASWELL:       # %bb.0:
5575; HASWELL-NEXT:    #APP
5576; HASWELL-NEXT:    imulb %dil # sched: [3:1.00]
5577; HASWELL-NEXT:    imulb (%rsi) # sched: [8:1.00]
5578; HASWELL-NEXT:    #NO_APP
5579; HASWELL-NEXT:    retq # sched: [7:1.00]
5580;
5581; BROADWELL-LABEL: test_imul_8:
5582; BROADWELL:       # %bb.0:
5583; BROADWELL-NEXT:    #APP
5584; BROADWELL-NEXT:    imulb %dil # sched: [3:1.00]
5585; BROADWELL-NEXT:    imulb (%rsi) # sched: [8:1.00]
5586; BROADWELL-NEXT:    #NO_APP
5587; BROADWELL-NEXT:    retq # sched: [7:1.00]
5588;
5589; SKYLAKE-LABEL: test_imul_8:
5590; SKYLAKE:       # %bb.0:
5591; SKYLAKE-NEXT:    #APP
5592; SKYLAKE-NEXT:    imulb %dil # sched: [3:1.00]
5593; SKYLAKE-NEXT:    imulb (%rsi) # sched: [8:1.00]
5594; SKYLAKE-NEXT:    #NO_APP
5595; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5596;
5597; SKX-LABEL: test_imul_8:
5598; SKX:       # %bb.0:
5599; SKX-NEXT:    #APP
5600; SKX-NEXT:    imulb %dil # sched: [3:1.00]
5601; SKX-NEXT:    imulb (%rsi) # sched: [8:1.00]
5602; SKX-NEXT:    #NO_APP
5603; SKX-NEXT:    retq # sched: [7:1.00]
5604;
5605; BTVER2-LABEL: test_imul_8:
5606; BTVER2:       # %bb.0:
5607; BTVER2-NEXT:    #APP
5608; BTVER2-NEXT:    imulb %dil # sched: [3:1.00]
5609; BTVER2-NEXT:    imulb (%rsi) # sched: [6:1.00]
5610; BTVER2-NEXT:    #NO_APP
5611; BTVER2-NEXT:    retq # sched: [4:1.00]
5612;
5613; ZNVER1-LABEL: test_imul_8:
5614; ZNVER1:       # %bb.0:
5615; ZNVER1-NEXT:    #APP
5616; ZNVER1-NEXT:    imulb %dil # sched: [4:1.00]
5617; ZNVER1-NEXT:    imulb (%rsi) # sched: [8:1.00]
5618; ZNVER1-NEXT:    #NO_APP
5619; ZNVER1-NEXT:    retq # sched: [1:0.50]
5620  tail call void asm "imulb $0 \0A\09 imulb $1", "r,*m"(i8 %a0, i8* %a1) nounwind
5621  ret void
5622}
5623define void @test_imul_16(i16 %a0, i16* %a1, i16 %a2) optsize {
5624; GENERIC-LABEL: test_imul_16:
5625; GENERIC:       # %bb.0:
5626; GENERIC-NEXT:    #APP
5627; GENERIC-NEXT:    imulw %di # sched: [4:1.33]
5628; GENERIC-NEXT:    imulw (%rsi) # sched: [9:1.33]
5629; GENERIC-NEXT:    imulw %dx, %di # sched: [3:1.00]
5630; GENERIC-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
5631; GENERIC-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5632; GENERIC-NEXT:    # sched: [4:1.00]
5633; GENERIC-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5634; GENERIC-NEXT:    # sched: [8:1.00]
5635; GENERIC-NEXT:    imulw $7, %di, %di # sched: [4:1.00]
5636; GENERIC-NEXT:    imulw $7, (%rsi), %di # sched: [8:1.00]
5637; GENERIC-NEXT:    #NO_APP
5638; GENERIC-NEXT:    retq # sched: [1:1.00]
5639;
5640; ATOM-LABEL: test_imul_16:
5641; ATOM:       # %bb.0:
5642; ATOM-NEXT:    #APP
5643; ATOM-NEXT:    imulw %di # sched: [7:3.50]
5644; ATOM-NEXT:    imulw (%rsi) # sched: [8:4.00]
5645; ATOM-NEXT:    imulw %dx, %di # sched: [6:3.00]
5646; ATOM-NEXT:    imulw (%rsi), %di # sched: [7:3.50]
5647; ATOM-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5648; ATOM-NEXT:    # sched: [6:3.00]
5649; ATOM-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5650; ATOM-NEXT:    # sched: [7:3.50]
5651; ATOM-NEXT:    imulw $7, %di, %di # sched: [6:3.00]
5652; ATOM-NEXT:    imulw $7, (%rsi), %di # sched: [7:3.50]
5653; ATOM-NEXT:    #NO_APP
5654; ATOM-NEXT:    retq # sched: [79:39.50]
5655;
5656; SLM-LABEL: test_imul_16:
5657; SLM:       # %bb.0:
5658; SLM-NEXT:    #APP
5659; SLM-NEXT:    imulw %di # sched: [3:1.00]
5660; SLM-NEXT:    imulw (%rsi) # sched: [6:1.00]
5661; SLM-NEXT:    imulw %dx, %di # sched: [3:1.00]
5662; SLM-NEXT:    imulw (%rsi), %di # sched: [6:1.00]
5663; SLM-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5664; SLM-NEXT:    # sched: [3:1.00]
5665; SLM-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5666; SLM-NEXT:    # sched: [6:1.00]
5667; SLM-NEXT:    imulw $7, %di, %di # sched: [3:1.00]
5668; SLM-NEXT:    imulw $7, (%rsi), %di # sched: [6:1.00]
5669; SLM-NEXT:    #NO_APP
5670; SLM-NEXT:    retq # sched: [4:1.00]
5671;
5672; SANDY-LABEL: test_imul_16:
5673; SANDY:       # %bb.0:
5674; SANDY-NEXT:    #APP
5675; SANDY-NEXT:    imulw %di # sched: [4:1.33]
5676; SANDY-NEXT:    imulw (%rsi) # sched: [9:1.33]
5677; SANDY-NEXT:    imulw %dx, %di # sched: [3:1.00]
5678; SANDY-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
5679; SANDY-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5680; SANDY-NEXT:    # sched: [4:1.00]
5681; SANDY-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5682; SANDY-NEXT:    # sched: [8:1.00]
5683; SANDY-NEXT:    imulw $7, %di, %di # sched: [4:1.00]
5684; SANDY-NEXT:    imulw $7, (%rsi), %di # sched: [8:1.00]
5685; SANDY-NEXT:    #NO_APP
5686; SANDY-NEXT:    retq # sched: [1:1.00]
5687;
5688; HASWELL-LABEL: test_imul_16:
5689; HASWELL:       # %bb.0:
5690; HASWELL-NEXT:    #APP
5691; HASWELL-NEXT:    imulw %di # sched: [4:1.00]
5692; HASWELL-NEXT:    imulw (%rsi) # sched: [9:1.00]
5693; HASWELL-NEXT:    imulw %dx, %di # sched: [3:1.00]
5694; HASWELL-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
5695; HASWELL-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5696; HASWELL-NEXT:    # sched: [4:1.00]
5697; HASWELL-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5698; HASWELL-NEXT:    # sched: [8:1.00]
5699; HASWELL-NEXT:    imulw $7, %di, %di # sched: [4:1.00]
5700; HASWELL-NEXT:    imulw $7, (%rsi), %di # sched: [8:1.00]
5701; HASWELL-NEXT:    #NO_APP
5702; HASWELL-NEXT:    retq # sched: [7:1.00]
5703;
5704; BROADWELL-LABEL: test_imul_16:
5705; BROADWELL:       # %bb.0:
5706; BROADWELL-NEXT:    #APP
5707; BROADWELL-NEXT:    imulw %di # sched: [4:1.00]
5708; BROADWELL-NEXT:    imulw (%rsi) # sched: [9:1.00]
5709; BROADWELL-NEXT:    imulw %dx, %di # sched: [3:1.00]
5710; BROADWELL-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
5711; BROADWELL-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5712; BROADWELL-NEXT:    # sched: [4:1.00]
5713; BROADWELL-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5714; BROADWELL-NEXT:    # sched: [8:1.00]
5715; BROADWELL-NEXT:    imulw $7, %di, %di # sched: [4:1.00]
5716; BROADWELL-NEXT:    imulw $7, (%rsi), %di # sched: [8:1.00]
5717; BROADWELL-NEXT:    #NO_APP
5718; BROADWELL-NEXT:    retq # sched: [7:1.00]
5719;
5720; SKYLAKE-LABEL: test_imul_16:
5721; SKYLAKE:       # %bb.0:
5722; SKYLAKE-NEXT:    #APP
5723; SKYLAKE-NEXT:    imulw %di # sched: [4:1.00]
5724; SKYLAKE-NEXT:    imulw (%rsi) # sched: [9:1.00]
5725; SKYLAKE-NEXT:    imulw %dx, %di # sched: [3:1.00]
5726; SKYLAKE-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
5727; SKYLAKE-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5728; SKYLAKE-NEXT:    # sched: [4:1.00]
5729; SKYLAKE-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5730; SKYLAKE-NEXT:    # sched: [8:1.00]
5731; SKYLAKE-NEXT:    imulw $7, %di, %di # sched: [4:1.00]
5732; SKYLAKE-NEXT:    imulw $7, (%rsi), %di # sched: [8:1.00]
5733; SKYLAKE-NEXT:    #NO_APP
5734; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5735;
5736; SKX-LABEL: test_imul_16:
5737; SKX:       # %bb.0:
5738; SKX-NEXT:    #APP
5739; SKX-NEXT:    imulw %di # sched: [4:1.00]
5740; SKX-NEXT:    imulw (%rsi) # sched: [9:1.00]
5741; SKX-NEXT:    imulw %dx, %di # sched: [3:1.00]
5742; SKX-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
5743; SKX-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5744; SKX-NEXT:    # sched: [4:1.00]
5745; SKX-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5746; SKX-NEXT:    # sched: [8:1.00]
5747; SKX-NEXT:    imulw $7, %di, %di # sched: [4:1.00]
5748; SKX-NEXT:    imulw $7, (%rsi), %di # sched: [8:1.00]
5749; SKX-NEXT:    #NO_APP
5750; SKX-NEXT:    retq # sched: [7:1.00]
5751;
5752; BTVER2-LABEL: test_imul_16:
5753; BTVER2:       # %bb.0:
5754; BTVER2-NEXT:    #APP
5755; BTVER2-NEXT:    imulw %di # sched: [3:1.00]
5756; BTVER2-NEXT:    imulw (%rsi) # sched: [6:1.00]
5757; BTVER2-NEXT:    imulw %dx, %di # sched: [3:1.00]
5758; BTVER2-NEXT:    imulw (%rsi), %di # sched: [6:1.00]
5759; BTVER2-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5760; BTVER2-NEXT:    # sched: [3:1.00]
5761; BTVER2-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5762; BTVER2-NEXT:    # sched: [6:1.00]
5763; BTVER2-NEXT:    imulw $7, %di, %di # sched: [3:1.00]
5764; BTVER2-NEXT:    imulw $7, (%rsi), %di # sched: [6:1.00]
5765; BTVER2-NEXT:    #NO_APP
5766; BTVER2-NEXT:    retq # sched: [4:1.00]
5767;
5768; ZNVER1-LABEL: test_imul_16:
5769; ZNVER1:       # %bb.0:
5770; ZNVER1-NEXT:    #APP
5771; ZNVER1-NEXT:    imulw %di # sched: [3:1.00]
5772; ZNVER1-NEXT:    imulw (%rsi) # sched: [8:1.00]
5773; ZNVER1-NEXT:    imulw %dx, %di # sched: [3:1.00]
5774; ZNVER1-NEXT:    imulw (%rsi), %di # sched: [3:1.00]
5775; ZNVER1-NEXT:    imulw $511, %di, %di # imm = 0x1FF
5776; ZNVER1-NEXT:    # sched: [3:1.00]
5777; ZNVER1-NEXT:    imulw $511, (%rsi), %di # imm = 0x1FF
5778; ZNVER1-NEXT:    # sched: [3:1.00]
5779; ZNVER1-NEXT:    imulw $7, %di, %di # sched: [3:1.00]
5780; ZNVER1-NEXT:    imulw $7, (%rsi), %di # sched: [3:1.00]
5781; ZNVER1-NEXT:    #NO_APP
5782; ZNVER1-NEXT:    retq # sched: [1:0.50]
5783  tail call void asm "imulw $0 \0A\09 imulw $2 \0A\09 imulw $1, $0 \0A\09 imulw $2, $0 \0A\09 imulw $3, $0, $0 \0A\09 imulw $3, $2, $0 \0A\09 imulw $4, $0, $0 \0A\09 imulw $4, $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
5784  ret void
5785}
5786define void @test_imul_32(i32 %a0, i32* %a1, i32 %a2) optsize {
5787; GENERIC-LABEL: test_imul_32:
5788; GENERIC:       # %bb.0:
5789; GENERIC-NEXT:    #APP
5790; GENERIC-NEXT:    imull %edi # sched: [4:1.00]
5791; GENERIC-NEXT:    imull (%rsi) # sched: [9:1.00]
5792; GENERIC-NEXT:    imull %edx, %edi # sched: [3:1.00]
5793; GENERIC-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
5794; GENERIC-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5795; GENERIC-NEXT:    # sched: [3:1.00]
5796; GENERIC-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5797; GENERIC-NEXT:    # sched: [8:1.00]
5798; GENERIC-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5799; GENERIC-NEXT:    imull $7, (%rsi), %edi # sched: [8:1.00]
5800; GENERIC-NEXT:    #NO_APP
5801; GENERIC-NEXT:    retq # sched: [1:1.00]
5802;
5803; ATOM-LABEL: test_imul_32:
5804; ATOM:       # %bb.0:
5805; ATOM-NEXT:    #APP
5806; ATOM-NEXT:    imull %edi # sched: [6:3.00]
5807; ATOM-NEXT:    imull (%rsi) # sched: [7:3.50]
5808; ATOM-NEXT:    imull %edx, %edi # sched: [5:5.00]
5809; ATOM-NEXT:    imull (%rsi), %edi # sched: [5:5.00]
5810; ATOM-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5811; ATOM-NEXT:    # sched: [5:5.00]
5812; ATOM-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5813; ATOM-NEXT:    # sched: [5:5.00]
5814; ATOM-NEXT:    imull $7, %edi, %edi # sched: [5:5.00]
5815; ATOM-NEXT:    imull $7, (%rsi), %edi # sched: [5:5.00]
5816; ATOM-NEXT:    #NO_APP
5817; ATOM-NEXT:    retq # sched: [79:39.50]
5818;
5819; SLM-LABEL: test_imul_32:
5820; SLM:       # %bb.0:
5821; SLM-NEXT:    #APP
5822; SLM-NEXT:    imull %edi # sched: [3:1.00]
5823; SLM-NEXT:    imull (%rsi) # sched: [6:1.00]
5824; SLM-NEXT:    imull %edx, %edi # sched: [3:1.00]
5825; SLM-NEXT:    imull (%rsi), %edi # sched: [6:1.00]
5826; SLM-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5827; SLM-NEXT:    # sched: [3:1.00]
5828; SLM-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5829; SLM-NEXT:    # sched: [6:1.00]
5830; SLM-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5831; SLM-NEXT:    imull $7, (%rsi), %edi # sched: [6:1.00]
5832; SLM-NEXT:    #NO_APP
5833; SLM-NEXT:    retq # sched: [4:1.00]
5834;
5835; SANDY-LABEL: test_imul_32:
5836; SANDY:       # %bb.0:
5837; SANDY-NEXT:    #APP
5838; SANDY-NEXT:    imull %edi # sched: [4:1.00]
5839; SANDY-NEXT:    imull (%rsi) # sched: [9:1.00]
5840; SANDY-NEXT:    imull %edx, %edi # sched: [3:1.00]
5841; SANDY-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
5842; SANDY-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5843; SANDY-NEXT:    # sched: [3:1.00]
5844; SANDY-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5845; SANDY-NEXT:    # sched: [8:1.00]
5846; SANDY-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5847; SANDY-NEXT:    imull $7, (%rsi), %edi # sched: [8:1.00]
5848; SANDY-NEXT:    #NO_APP
5849; SANDY-NEXT:    retq # sched: [1:1.00]
5850;
5851; HASWELL-LABEL: test_imul_32:
5852; HASWELL:       # %bb.0:
5853; HASWELL-NEXT:    #APP
5854; HASWELL-NEXT:    imull %edi # sched: [4:1.00]
5855; HASWELL-NEXT:    imull (%rsi) # sched: [9:1.00]
5856; HASWELL-NEXT:    imull %edx, %edi # sched: [3:1.00]
5857; HASWELL-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
5858; HASWELL-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5859; HASWELL-NEXT:    # sched: [3:1.00]
5860; HASWELL-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5861; HASWELL-NEXT:    # sched: [8:1.00]
5862; HASWELL-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5863; HASWELL-NEXT:    imull $7, (%rsi), %edi # sched: [8:1.00]
5864; HASWELL-NEXT:    #NO_APP
5865; HASWELL-NEXT:    retq # sched: [7:1.00]
5866;
5867; BROADWELL-LABEL: test_imul_32:
5868; BROADWELL:       # %bb.0:
5869; BROADWELL-NEXT:    #APP
5870; BROADWELL-NEXT:    imull %edi # sched: [4:1.00]
5871; BROADWELL-NEXT:    imull (%rsi) # sched: [9:1.00]
5872; BROADWELL-NEXT:    imull %edx, %edi # sched: [3:1.00]
5873; BROADWELL-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
5874; BROADWELL-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5875; BROADWELL-NEXT:    # sched: [3:1.00]
5876; BROADWELL-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5877; BROADWELL-NEXT:    # sched: [8:1.00]
5878; BROADWELL-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5879; BROADWELL-NEXT:    imull $7, (%rsi), %edi # sched: [8:1.00]
5880; BROADWELL-NEXT:    #NO_APP
5881; BROADWELL-NEXT:    retq # sched: [7:1.00]
5882;
5883; SKYLAKE-LABEL: test_imul_32:
5884; SKYLAKE:       # %bb.0:
5885; SKYLAKE-NEXT:    #APP
5886; SKYLAKE-NEXT:    imull %edi # sched: [4:1.00]
5887; SKYLAKE-NEXT:    imull (%rsi) # sched: [9:1.00]
5888; SKYLAKE-NEXT:    imull %edx, %edi # sched: [3:1.00]
5889; SKYLAKE-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
5890; SKYLAKE-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5891; SKYLAKE-NEXT:    # sched: [3:1.00]
5892; SKYLAKE-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5893; SKYLAKE-NEXT:    # sched: [8:1.00]
5894; SKYLAKE-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5895; SKYLAKE-NEXT:    imull $7, (%rsi), %edi # sched: [8:1.00]
5896; SKYLAKE-NEXT:    #NO_APP
5897; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5898;
5899; SKX-LABEL: test_imul_32:
5900; SKX:       # %bb.0:
5901; SKX-NEXT:    #APP
5902; SKX-NEXT:    imull %edi # sched: [4:1.00]
5903; SKX-NEXT:    imull (%rsi) # sched: [9:1.00]
5904; SKX-NEXT:    imull %edx, %edi # sched: [3:1.00]
5905; SKX-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
5906; SKX-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5907; SKX-NEXT:    # sched: [3:1.00]
5908; SKX-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5909; SKX-NEXT:    # sched: [8:1.00]
5910; SKX-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5911; SKX-NEXT:    imull $7, (%rsi), %edi # sched: [8:1.00]
5912; SKX-NEXT:    #NO_APP
5913; SKX-NEXT:    retq # sched: [7:1.00]
5914;
5915; BTVER2-LABEL: test_imul_32:
5916; BTVER2:       # %bb.0:
5917; BTVER2-NEXT:    #APP
5918; BTVER2-NEXT:    imull %edi # sched: [3:1.00]
5919; BTVER2-NEXT:    imull (%rsi) # sched: [6:1.00]
5920; BTVER2-NEXT:    imull %edx, %edi # sched: [3:1.00]
5921; BTVER2-NEXT:    imull (%rsi), %edi # sched: [6:1.00]
5922; BTVER2-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5923; BTVER2-NEXT:    # sched: [3:1.00]
5924; BTVER2-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5925; BTVER2-NEXT:    # sched: [6:1.00]
5926; BTVER2-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5927; BTVER2-NEXT:    imull $7, (%rsi), %edi # sched: [6:1.00]
5928; BTVER2-NEXT:    #NO_APP
5929; BTVER2-NEXT:    retq # sched: [4:1.00]
5930;
5931; ZNVER1-LABEL: test_imul_32:
5932; ZNVER1:       # %bb.0:
5933; ZNVER1-NEXT:    #APP
5934; ZNVER1-NEXT:    imull %edi # sched: [3:1.00]
5935; ZNVER1-NEXT:    imull (%rsi) # sched: [8:1.00]
5936; ZNVER1-NEXT:    imull %edx, %edi # sched: [3:1.00]
5937; ZNVER1-NEXT:    imull (%rsi), %edi # sched: [3:1.00]
5938; ZNVER1-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
5939; ZNVER1-NEXT:    # sched: [3:1.00]
5940; ZNVER1-NEXT:    imull $665536, (%rsi), %edi # imm = 0xA27C0
5941; ZNVER1-NEXT:    # sched: [3:1.00]
5942; ZNVER1-NEXT:    imull $7, %edi, %edi # sched: [3:1.00]
5943; ZNVER1-NEXT:    imull $7, (%rsi), %edi # sched: [3:1.00]
5944; ZNVER1-NEXT:    #NO_APP
5945; ZNVER1-NEXT:    retq # sched: [1:0.50]
5946  tail call void asm "imull $0 \0A\09 imull $2 \0A\09 imull $1, $0 \0A\09 imull $2, $0 \0A\09 imull $3, $0, $0 \0A\09 imull $3, $2, $0 \0A\09 imull $4, $0, $0 \0A\09 imull $4, $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
5947  ret void
5948}
5949define void @test_imul_64(i64 %a0, i64* %a1, i64 %a2) optsize {
5950; GENERIC-LABEL: test_imul_64:
5951; GENERIC:       # %bb.0:
5952; GENERIC-NEXT:    #APP
5953; GENERIC-NEXT:    imulq %rdi # sched: [4:1.00]
5954; GENERIC-NEXT:    imulq (%rsi) # sched: [9:1.00]
5955; GENERIC-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
5956; GENERIC-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
5957; GENERIC-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
5958; GENERIC-NEXT:    # sched: [3:1.00]
5959; GENERIC-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
5960; GENERIC-NEXT:    # sched: [8:1.00]
5961; GENERIC-NEXT:    imulq $7, %rdi, %rdi # sched: [3:1.00]
5962; GENERIC-NEXT:    imulq $7, (%rsi), %rdi # sched: [8:1.00]
5963; GENERIC-NEXT:    #NO_APP
5964; GENERIC-NEXT:    retq # sched: [1:1.00]
5965;
5966; ATOM-LABEL: test_imul_64:
5967; ATOM:       # %bb.0:
5968; ATOM-NEXT:    #APP
5969; ATOM-NEXT:    imulq %rdi # sched: [12:6.00]
5970; ATOM-NEXT:    imulq (%rsi) # sched: [12:6.00]
5971; ATOM-NEXT:    imulq %rdx, %rdi # sched: [12:6.00]
5972; ATOM-NEXT:    imulq (%rsi), %rdi # sched: [12:6.00]
5973; ATOM-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
5974; ATOM-NEXT:    # sched: [14:7.00]
5975; ATOM-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
5976; ATOM-NEXT:    # sched: [14:7.00]
5977; ATOM-NEXT:    imulq $7, %rdi, %rdi # sched: [14:7.00]
5978; ATOM-NEXT:    imulq $7, (%rsi), %rdi # sched: [14:7.00]
5979; ATOM-NEXT:    #NO_APP
5980; ATOM-NEXT:    retq # sched: [79:39.50]
5981;
5982; SLM-LABEL: test_imul_64:
5983; SLM:       # %bb.0:
5984; SLM-NEXT:    #APP
5985; SLM-NEXT:    imulq %rdi # sched: [3:1.00]
5986; SLM-NEXT:    imulq (%rsi) # sched: [6:1.00]
5987; SLM-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
5988; SLM-NEXT:    imulq (%rsi), %rdi # sched: [6:1.00]
5989; SLM-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
5990; SLM-NEXT:    # sched: [3:1.00]
5991; SLM-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
5992; SLM-NEXT:    # sched: [6:1.00]
5993; SLM-NEXT:    imulq $7, %rdi, %rdi # sched: [3:1.00]
5994; SLM-NEXT:    imulq $7, (%rsi), %rdi # sched: [6:1.00]
5995; SLM-NEXT:    #NO_APP
5996; SLM-NEXT:    retq # sched: [4:1.00]
5997;
5998; SANDY-LABEL: test_imul_64:
5999; SANDY:       # %bb.0:
6000; SANDY-NEXT:    #APP
6001; SANDY-NEXT:    imulq %rdi # sched: [4:1.00]
6002; SANDY-NEXT:    imulq (%rsi) # sched: [9:1.00]
6003; SANDY-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
6004; SANDY-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
6005; SANDY-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
6006; SANDY-NEXT:    # sched: [3:1.00]
6007; SANDY-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
6008; SANDY-NEXT:    # sched: [8:1.00]
6009; SANDY-NEXT:    imulq $7, %rdi, %rdi # sched: [3:1.00]
6010; SANDY-NEXT:    imulq $7, (%rsi), %rdi # sched: [8:1.00]
6011; SANDY-NEXT:    #NO_APP
6012; SANDY-NEXT:    retq # sched: [1:1.00]
6013;
6014; HASWELL-LABEL: test_imul_64:
6015; HASWELL:       # %bb.0:
6016; HASWELL-NEXT:    #APP
6017; HASWELL-NEXT:    imulq %rdi # sched: [4:1.00]
6018; HASWELL-NEXT:    imulq (%rsi) # sched: [9:1.00]
6019; HASWELL-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
6020; HASWELL-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
6021; HASWELL-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
6022; HASWELL-NEXT:    # sched: [3:1.00]
6023; HASWELL-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
6024; HASWELL-NEXT:    # sched: [8:1.00]
6025; HASWELL-NEXT:    imulq $7, %rdi, %rdi # sched: [3:1.00]
6026; HASWELL-NEXT:    imulq $7, (%rsi), %rdi # sched: [8:1.00]
6027; HASWELL-NEXT:    #NO_APP
6028; HASWELL-NEXT:    retq # sched: [7:1.00]
6029;
6030; BROADWELL-LABEL: test_imul_64:
6031; BROADWELL:       # %bb.0:
6032; BROADWELL-NEXT:    #APP
6033; BROADWELL-NEXT:    imulq %rdi # sched: [4:1.00]
6034; BROADWELL-NEXT:    imulq (%rsi) # sched: [9:1.00]
6035; BROADWELL-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
6036; BROADWELL-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
6037; BROADWELL-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
6038; BROADWELL-NEXT:    # sched: [3:1.00]
6039; BROADWELL-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
6040; BROADWELL-NEXT:    # sched: [8:1.00]
6041; BROADWELL-NEXT:    imulq $7, %rdi, %rdi # sched: [3:1.00]
6042; BROADWELL-NEXT:    imulq $7, (%rsi), %rdi # sched: [8:1.00]
6043; BROADWELL-NEXT:    #NO_APP
6044; BROADWELL-NEXT:    retq # sched: [7:1.00]
6045;
6046; SKYLAKE-LABEL: test_imul_64:
6047; SKYLAKE:       # %bb.0:
6048; SKYLAKE-NEXT:    #APP
6049; SKYLAKE-NEXT:    imulq %rdi # sched: [4:1.00]
6050; SKYLAKE-NEXT:    imulq (%rsi) # sched: [9:1.00]
6051; SKYLAKE-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
6052; SKYLAKE-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
6053; SKYLAKE-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
6054; SKYLAKE-NEXT:    # sched: [3:1.00]
6055; SKYLAKE-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
6056; SKYLAKE-NEXT:    # sched: [8:1.00]
6057; SKYLAKE-NEXT:    imulq $7, %rdi, %rdi # sched: [3:1.00]
6058; SKYLAKE-NEXT:    imulq $7, (%rsi), %rdi # sched: [8:1.00]
6059; SKYLAKE-NEXT:    #NO_APP
6060; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6061;
6062; SKX-LABEL: test_imul_64:
6063; SKX:       # %bb.0:
6064; SKX-NEXT:    #APP
6065; SKX-NEXT:    imulq %rdi # sched: [4:1.00]
6066; SKX-NEXT:    imulq (%rsi) # sched: [9:1.00]
6067; SKX-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
6068; SKX-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
6069; SKX-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
6070; SKX-NEXT:    # sched: [3:1.00]
6071; SKX-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
6072; SKX-NEXT:    # sched: [8:1.00]
6073; SKX-NEXT:    imulq $7, %rdi, %rdi # sched: [3:1.00]
6074; SKX-NEXT:    imulq $7, (%rsi), %rdi # sched: [8:1.00]
6075; SKX-NEXT:    #NO_APP
6076; SKX-NEXT:    retq # sched: [7:1.00]
6077;
6078; BTVER2-LABEL: test_imul_64:
6079; BTVER2:       # %bb.0:
6080; BTVER2-NEXT:    #APP
6081; BTVER2-NEXT:    imulq %rdi # sched: [6:4.00]
6082; BTVER2-NEXT:    imulq (%rsi) # sched: [9:4.00]
6083; BTVER2-NEXT:    imulq %rdx, %rdi # sched: [6:4.00]
6084; BTVER2-NEXT:    imulq (%rsi), %rdi # sched: [9:4.00]
6085; BTVER2-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
6086; BTVER2-NEXT:    # sched: [6:4.00]
6087; BTVER2-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
6088; BTVER2-NEXT:    # sched: [9:4.00]
6089; BTVER2-NEXT:    imulq $7, %rdi, %rdi # sched: [6:4.00]
6090; BTVER2-NEXT:    imulq $7, (%rsi), %rdi # sched: [9:4.00]
6091; BTVER2-NEXT:    #NO_APP
6092; BTVER2-NEXT:    retq # sched: [4:1.00]
6093;
6094; ZNVER1-LABEL: test_imul_64:
6095; ZNVER1:       # %bb.0:
6096; ZNVER1-NEXT:    #APP
6097; ZNVER1-NEXT:    imulq %rdi # sched: [4:1.00]
6098; ZNVER1-NEXT:    imulq (%rsi) # sched: [9:1.00]
6099; ZNVER1-NEXT:    imulq %rdx, %rdi # sched: [4:1.00]
6100; ZNVER1-NEXT:    imulq (%rsi), %rdi # sched: [4:1.00]
6101; ZNVER1-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
6102; ZNVER1-NEXT:    # sched: [4:1.00]
6103; ZNVER1-NEXT:    imulq $665536, (%rsi), %rdi # imm = 0xA27C0
6104; ZNVER1-NEXT:    # sched: [4:1.00]
6105; ZNVER1-NEXT:    imulq $7, %rdi, %rdi # sched: [4:1.00]
6106; ZNVER1-NEXT:    imulq $7, (%rsi), %rdi # sched: [4:1.00]
6107; ZNVER1-NEXT:    #NO_APP
6108; ZNVER1-NEXT:    retq # sched: [1:0.50]
6109  tail call void asm "imulq $0 \0A\09 imulq $2 \0A\09 imulq $1, $0 \0A\09 imulq $2, $0 \0A\09 imulq $3, $0, $0 \0A\09 imulq $3, $2, $0 \0A\09 imulq $4, $0, $0 \0A\09 imulq $4, $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
6110  ret void
6111}
6112
6113define void @test_in() optsize {
6114; GENERIC-LABEL: test_in:
6115; GENERIC:       # %bb.0:
6116; GENERIC-NEXT:    #APP
6117; GENERIC-NEXT:    inb $7, %al # sched: [100:0.33]
6118; GENERIC-NEXT:    inw $7, %ax # sched: [100:0.33]
6119; GENERIC-NEXT:    inl $7, %eax # sched: [100:0.33]
6120; GENERIC-NEXT:    inb %dx, %al # sched: [100:0.33]
6121; GENERIC-NEXT:    inw %dx, %ax # sched: [100:0.33]
6122; GENERIC-NEXT:    inl %dx, %eax # sched: [100:0.33]
6123; GENERIC-NEXT:    #NO_APP
6124; GENERIC-NEXT:    retq # sched: [1:1.00]
6125;
6126; ATOM-LABEL: test_in:
6127; ATOM:       # %bb.0:
6128; ATOM-NEXT:    #APP
6129; ATOM-NEXT:    inb $7, %al # sched: [92:46.00]
6130; ATOM-NEXT:    inw $7, %ax # sched: [92:46.00]
6131; ATOM-NEXT:    inl $7, %eax # sched: [92:46.00]
6132; ATOM-NEXT:    inb %dx, %al # sched: [94:47.00]
6133; ATOM-NEXT:    inw %dx, %ax # sched: [94:47.00]
6134; ATOM-NEXT:    inl %dx, %eax # sched: [94:47.00]
6135; ATOM-NEXT:    #NO_APP
6136; ATOM-NEXT:    retq # sched: [79:39.50]
6137;
6138; SLM-LABEL: test_in:
6139; SLM:       # %bb.0:
6140; SLM-NEXT:    #APP
6141; SLM-NEXT:    inb $7, %al # sched: [100:1.00]
6142; SLM-NEXT:    inw $7, %ax # sched: [100:1.00]
6143; SLM-NEXT:    inl $7, %eax # sched: [100:1.00]
6144; SLM-NEXT:    inb %dx, %al # sched: [100:1.00]
6145; SLM-NEXT:    inw %dx, %ax # sched: [100:1.00]
6146; SLM-NEXT:    inl %dx, %eax # sched: [100:1.00]
6147; SLM-NEXT:    #NO_APP
6148; SLM-NEXT:    retq # sched: [4:1.00]
6149;
6150; SANDY-LABEL: test_in:
6151; SANDY:       # %bb.0:
6152; SANDY-NEXT:    #APP
6153; SANDY-NEXT:    inb $7, %al # sched: [100:0.33]
6154; SANDY-NEXT:    inw $7, %ax # sched: [100:0.33]
6155; SANDY-NEXT:    inl $7, %eax # sched: [100:0.33]
6156; SANDY-NEXT:    inb %dx, %al # sched: [100:0.33]
6157; SANDY-NEXT:    inw %dx, %ax # sched: [100:0.33]
6158; SANDY-NEXT:    inl %dx, %eax # sched: [100:0.33]
6159; SANDY-NEXT:    #NO_APP
6160; SANDY-NEXT:    retq # sched: [1:1.00]
6161;
6162; HASWELL-LABEL: test_in:
6163; HASWELL:       # %bb.0:
6164; HASWELL-NEXT:    #APP
6165; HASWELL-NEXT:    inb $7, %al # sched: [35:5.00]
6166; HASWELL-NEXT:    inw $7, %ax # sched: [35:5.00]
6167; HASWELL-NEXT:    inl $7, %eax # sched: [35:5.00]
6168; HASWELL-NEXT:    inb %dx, %al # sched: [35:5.00]
6169; HASWELL-NEXT:    inw %dx, %ax # sched: [35:5.00]
6170; HASWELL-NEXT:    inl %dx, %eax # sched: [35:5.00]
6171; HASWELL-NEXT:    #NO_APP
6172; HASWELL-NEXT:    retq # sched: [7:1.00]
6173;
6174; BROADWELL-LABEL: test_in:
6175; BROADWELL:       # %bb.0:
6176; BROADWELL-NEXT:    #APP
6177; BROADWELL-NEXT:    inb $7, %al # sched: [34:5.00]
6178; BROADWELL-NEXT:    inw $7, %ax # sched: [34:5.00]
6179; BROADWELL-NEXT:    inl $7, %eax # sched: [34:5.00]
6180; BROADWELL-NEXT:    inb %dx, %al # sched: [34:5.00]
6181; BROADWELL-NEXT:    inw %dx, %ax # sched: [34:5.00]
6182; BROADWELL-NEXT:    inl %dx, %eax # sched: [34:5.00]
6183; BROADWELL-NEXT:    #NO_APP
6184; BROADWELL-NEXT:    retq # sched: [7:1.00]
6185;
6186; SKYLAKE-LABEL: test_in:
6187; SKYLAKE:       # %bb.0:
6188; SKYLAKE-NEXT:    #APP
6189; SKYLAKE-NEXT:    inb $7, %al # sched: [35:5.00]
6190; SKYLAKE-NEXT:    inw $7, %ax # sched: [35:5.00]
6191; SKYLAKE-NEXT:    inl $7, %eax # sched: [35:5.00]
6192; SKYLAKE-NEXT:    inb %dx, %al # sched: [35:5.00]
6193; SKYLAKE-NEXT:    inw %dx, %ax # sched: [35:5.00]
6194; SKYLAKE-NEXT:    inl %dx, %eax # sched: [35:5.00]
6195; SKYLAKE-NEXT:    #NO_APP
6196; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6197;
6198; SKX-LABEL: test_in:
6199; SKX:       # %bb.0:
6200; SKX-NEXT:    #APP
6201; SKX-NEXT:    inb $7, %al # sched: [35:5.00]
6202; SKX-NEXT:    inw $7, %ax # sched: [35:5.00]
6203; SKX-NEXT:    inl $7, %eax # sched: [35:5.00]
6204; SKX-NEXT:    inb %dx, %al # sched: [35:5.00]
6205; SKX-NEXT:    inw %dx, %ax # sched: [35:5.00]
6206; SKX-NEXT:    inl %dx, %eax # sched: [35:5.00]
6207; SKX-NEXT:    #NO_APP
6208; SKX-NEXT:    retq # sched: [7:1.00]
6209;
6210; BTVER2-LABEL: test_in:
6211; BTVER2:       # %bb.0:
6212; BTVER2-NEXT:    #APP
6213; BTVER2-NEXT:    inb $7, %al # sched: [100:0.50]
6214; BTVER2-NEXT:    inw $7, %ax # sched: [100:0.50]
6215; BTVER2-NEXT:    inl $7, %eax # sched: [100:0.50]
6216; BTVER2-NEXT:    inb %dx, %al # sched: [100:0.50]
6217; BTVER2-NEXT:    inw %dx, %ax # sched: [100:0.50]
6218; BTVER2-NEXT:    inl %dx, %eax # sched: [100:0.50]
6219; BTVER2-NEXT:    #NO_APP
6220; BTVER2-NEXT:    retq # sched: [4:1.00]
6221;
6222; ZNVER1-LABEL: test_in:
6223; ZNVER1:       # %bb.0:
6224; ZNVER1-NEXT:    #APP
6225; ZNVER1-NEXT:    inb $7, %al # sched: [100:0.25]
6226; ZNVER1-NEXT:    inw $7, %ax # sched: [100:0.25]
6227; ZNVER1-NEXT:    inl $7, %eax # sched: [100:0.25]
6228; ZNVER1-NEXT:    inb %dx, %al # sched: [100:0.25]
6229; ZNVER1-NEXT:    inw %dx, %ax # sched: [100:0.25]
6230; ZNVER1-NEXT:    inl %dx, %eax # sched: [100:0.25]
6231; ZNVER1-NEXT:    #NO_APP
6232; ZNVER1-NEXT:    retq # sched: [1:0.50]
6233  tail call void asm "inb $0, %AL \0A\09 inw $0, %AX \0A\09 inl $0, %EAX \0A\09 inb %DX, %AL \0A\09 inw %DX, %AX \0A\09 inl %DX, %EAX", "i"(i8 7) nounwind
6234  ret void
6235}
6236
6237define void @test_inc8(i8 %a0, i8* %a1) optsize {
6238; GENERIC-LABEL: test_inc8:
6239; GENERIC:       # %bb.0:
6240; GENERIC-NEXT:    #APP
6241; GENERIC-NEXT:    incb %dil # sched: [1:0.33]
6242; GENERIC-NEXT:    incb (%rsi) # sched: [7:1.00]
6243; GENERIC-NEXT:    #NO_APP
6244; GENERIC-NEXT:    retq # sched: [1:1.00]
6245;
6246; ATOM-LABEL: test_inc8:
6247; ATOM:       # %bb.0:
6248; ATOM-NEXT:    #APP
6249; ATOM-NEXT:    incb %dil # sched: [1:0.50]
6250; ATOM-NEXT:    incb (%rsi) # sched: [1:1.00]
6251; ATOM-NEXT:    #NO_APP
6252; ATOM-NEXT:    retq # sched: [79:39.50]
6253;
6254; SLM-LABEL: test_inc8:
6255; SLM:       # %bb.0:
6256; SLM-NEXT:    #APP
6257; SLM-NEXT:    incb %dil # sched: [1:0.50]
6258; SLM-NEXT:    incb (%rsi) # sched: [5:2.00]
6259; SLM-NEXT:    #NO_APP
6260; SLM-NEXT:    retq # sched: [4:1.00]
6261;
6262; SANDY-LABEL: test_inc8:
6263; SANDY:       # %bb.0:
6264; SANDY-NEXT:    #APP
6265; SANDY-NEXT:    incb %dil # sched: [1:0.33]
6266; SANDY-NEXT:    incb (%rsi) # sched: [7:1.00]
6267; SANDY-NEXT:    #NO_APP
6268; SANDY-NEXT:    retq # sched: [1:1.00]
6269;
6270; HASWELL-LABEL: test_inc8:
6271; HASWELL:       # %bb.0:
6272; HASWELL-NEXT:    #APP
6273; HASWELL-NEXT:    incb %dil # sched: [1:0.25]
6274; HASWELL-NEXT:    incb (%rsi) # sched: [7:1.00]
6275; HASWELL-NEXT:    #NO_APP
6276; HASWELL-NEXT:    retq # sched: [7:1.00]
6277;
6278; BROADWELL-LABEL: test_inc8:
6279; BROADWELL:       # %bb.0:
6280; BROADWELL-NEXT:    #APP
6281; BROADWELL-NEXT:    incb %dil # sched: [1:0.25]
6282; BROADWELL-NEXT:    incb (%rsi) # sched: [7:1.00]
6283; BROADWELL-NEXT:    #NO_APP
6284; BROADWELL-NEXT:    retq # sched: [7:1.00]
6285;
6286; SKYLAKE-LABEL: test_inc8:
6287; SKYLAKE:       # %bb.0:
6288; SKYLAKE-NEXT:    #APP
6289; SKYLAKE-NEXT:    incb %dil # sched: [1:0.25]
6290; SKYLAKE-NEXT:    incb (%rsi) # sched: [7:1.00]
6291; SKYLAKE-NEXT:    #NO_APP
6292; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6293;
6294; SKX-LABEL: test_inc8:
6295; SKX:       # %bb.0:
6296; SKX-NEXT:    #APP
6297; SKX-NEXT:    incb %dil # sched: [1:0.25]
6298; SKX-NEXT:    incb (%rsi) # sched: [7:1.00]
6299; SKX-NEXT:    #NO_APP
6300; SKX-NEXT:    retq # sched: [7:1.00]
6301;
6302; BTVER2-LABEL: test_inc8:
6303; BTVER2:       # %bb.0:
6304; BTVER2-NEXT:    #APP
6305; BTVER2-NEXT:    incb %dil # sched: [1:0.50]
6306; BTVER2-NEXT:    incb (%rsi) # sched: [5:1.00]
6307; BTVER2-NEXT:    #NO_APP
6308; BTVER2-NEXT:    retq # sched: [4:1.00]
6309;
6310; ZNVER1-LABEL: test_inc8:
6311; ZNVER1:       # %bb.0:
6312; ZNVER1-NEXT:    #APP
6313; ZNVER1-NEXT:    incb %dil # sched: [1:0.25]
6314; ZNVER1-NEXT:    incb (%rsi) # sched: [5:0.50]
6315; ZNVER1-NEXT:    #NO_APP
6316; ZNVER1-NEXT:    retq # sched: [1:0.50]
6317  tail call void asm "incb $0 \0A\09 incb $1", "r,*m"(i8 %a0, i8* %a1) nounwind
6318  ret void
6319}
6320define void @test_inc16(i16 %a0, i16* %a1) optsize {
6321; GENERIC-LABEL: test_inc16:
6322; GENERIC:       # %bb.0:
6323; GENERIC-NEXT:    #APP
6324; GENERIC-NEXT:    incw %di # sched: [1:0.33]
6325; GENERIC-NEXT:    incw (%rsi) # sched: [7:1.00]
6326; GENERIC-NEXT:    #NO_APP
6327; GENERIC-NEXT:    retq # sched: [1:1.00]
6328;
6329; ATOM-LABEL: test_inc16:
6330; ATOM:       # %bb.0:
6331; ATOM-NEXT:    #APP
6332; ATOM-NEXT:    incw %di # sched: [1:0.50]
6333; ATOM-NEXT:    incw (%rsi) # sched: [1:1.00]
6334; ATOM-NEXT:    #NO_APP
6335; ATOM-NEXT:    retq # sched: [79:39.50]
6336;
6337; SLM-LABEL: test_inc16:
6338; SLM:       # %bb.0:
6339; SLM-NEXT:    #APP
6340; SLM-NEXT:    incw %di # sched: [1:0.50]
6341; SLM-NEXT:    incw (%rsi) # sched: [5:2.00]
6342; SLM-NEXT:    #NO_APP
6343; SLM-NEXT:    retq # sched: [4:1.00]
6344;
6345; SANDY-LABEL: test_inc16:
6346; SANDY:       # %bb.0:
6347; SANDY-NEXT:    #APP
6348; SANDY-NEXT:    incw %di # sched: [1:0.33]
6349; SANDY-NEXT:    incw (%rsi) # sched: [7:1.00]
6350; SANDY-NEXT:    #NO_APP
6351; SANDY-NEXT:    retq # sched: [1:1.00]
6352;
6353; HASWELL-LABEL: test_inc16:
6354; HASWELL:       # %bb.0:
6355; HASWELL-NEXT:    #APP
6356; HASWELL-NEXT:    incw %di # sched: [1:0.25]
6357; HASWELL-NEXT:    incw (%rsi) # sched: [7:1.00]
6358; HASWELL-NEXT:    #NO_APP
6359; HASWELL-NEXT:    retq # sched: [7:1.00]
6360;
6361; BROADWELL-LABEL: test_inc16:
6362; BROADWELL:       # %bb.0:
6363; BROADWELL-NEXT:    #APP
6364; BROADWELL-NEXT:    incw %di # sched: [1:0.25]
6365; BROADWELL-NEXT:    incw (%rsi) # sched: [7:1.00]
6366; BROADWELL-NEXT:    #NO_APP
6367; BROADWELL-NEXT:    retq # sched: [7:1.00]
6368;
6369; SKYLAKE-LABEL: test_inc16:
6370; SKYLAKE:       # %bb.0:
6371; SKYLAKE-NEXT:    #APP
6372; SKYLAKE-NEXT:    incw %di # sched: [1:0.25]
6373; SKYLAKE-NEXT:    incw (%rsi) # sched: [7:1.00]
6374; SKYLAKE-NEXT:    #NO_APP
6375; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6376;
6377; SKX-LABEL: test_inc16:
6378; SKX:       # %bb.0:
6379; SKX-NEXT:    #APP
6380; SKX-NEXT:    incw %di # sched: [1:0.25]
6381; SKX-NEXT:    incw (%rsi) # sched: [7:1.00]
6382; SKX-NEXT:    #NO_APP
6383; SKX-NEXT:    retq # sched: [7:1.00]
6384;
6385; BTVER2-LABEL: test_inc16:
6386; BTVER2:       # %bb.0:
6387; BTVER2-NEXT:    #APP
6388; BTVER2-NEXT:    incw %di # sched: [1:0.50]
6389; BTVER2-NEXT:    incw (%rsi) # sched: [5:1.00]
6390; BTVER2-NEXT:    #NO_APP
6391; BTVER2-NEXT:    retq # sched: [4:1.00]
6392;
6393; ZNVER1-LABEL: test_inc16:
6394; ZNVER1:       # %bb.0:
6395; ZNVER1-NEXT:    #APP
6396; ZNVER1-NEXT:    incw %di # sched: [1:0.25]
6397; ZNVER1-NEXT:    incw (%rsi) # sched: [5:0.50]
6398; ZNVER1-NEXT:    #NO_APP
6399; ZNVER1-NEXT:    retq # sched: [1:0.50]
6400  tail call void asm "incw $0 \0A\09 incw $1", "r,*m"(i16 %a0, i16* %a1) nounwind
6401  ret void
6402}
6403define void @test_inc32(i32 %a0, i32* %a1) optsize {
6404; GENERIC-LABEL: test_inc32:
6405; GENERIC:       # %bb.0:
6406; GENERIC-NEXT:    #APP
6407; GENERIC-NEXT:    incl %edi # sched: [1:0.33]
6408; GENERIC-NEXT:    incl (%rsi) # sched: [7:1.00]
6409; GENERIC-NEXT:    #NO_APP
6410; GENERIC-NEXT:    retq # sched: [1:1.00]
6411;
6412; ATOM-LABEL: test_inc32:
6413; ATOM:       # %bb.0:
6414; ATOM-NEXT:    #APP
6415; ATOM-NEXT:    incl %edi # sched: [1:0.50]
6416; ATOM-NEXT:    incl (%rsi) # sched: [1:1.00]
6417; ATOM-NEXT:    #NO_APP
6418; ATOM-NEXT:    retq # sched: [79:39.50]
6419;
6420; SLM-LABEL: test_inc32:
6421; SLM:       # %bb.0:
6422; SLM-NEXT:    #APP
6423; SLM-NEXT:    incl %edi # sched: [1:0.50]
6424; SLM-NEXT:    incl (%rsi) # sched: [5:2.00]
6425; SLM-NEXT:    #NO_APP
6426; SLM-NEXT:    retq # sched: [4:1.00]
6427;
6428; SANDY-LABEL: test_inc32:
6429; SANDY:       # %bb.0:
6430; SANDY-NEXT:    #APP
6431; SANDY-NEXT:    incl %edi # sched: [1:0.33]
6432; SANDY-NEXT:    incl (%rsi) # sched: [7:1.00]
6433; SANDY-NEXT:    #NO_APP
6434; SANDY-NEXT:    retq # sched: [1:1.00]
6435;
6436; HASWELL-LABEL: test_inc32:
6437; HASWELL:       # %bb.0:
6438; HASWELL-NEXT:    #APP
6439; HASWELL-NEXT:    incl %edi # sched: [1:0.25]
6440; HASWELL-NEXT:    incl (%rsi) # sched: [7:1.00]
6441; HASWELL-NEXT:    #NO_APP
6442; HASWELL-NEXT:    retq # sched: [7:1.00]
6443;
6444; BROADWELL-LABEL: test_inc32:
6445; BROADWELL:       # %bb.0:
6446; BROADWELL-NEXT:    #APP
6447; BROADWELL-NEXT:    incl %edi # sched: [1:0.25]
6448; BROADWELL-NEXT:    incl (%rsi) # sched: [7:1.00]
6449; BROADWELL-NEXT:    #NO_APP
6450; BROADWELL-NEXT:    retq # sched: [7:1.00]
6451;
6452; SKYLAKE-LABEL: test_inc32:
6453; SKYLAKE:       # %bb.0:
6454; SKYLAKE-NEXT:    #APP
6455; SKYLAKE-NEXT:    incl %edi # sched: [1:0.25]
6456; SKYLAKE-NEXT:    incl (%rsi) # sched: [7:1.00]
6457; SKYLAKE-NEXT:    #NO_APP
6458; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6459;
6460; SKX-LABEL: test_inc32:
6461; SKX:       # %bb.0:
6462; SKX-NEXT:    #APP
6463; SKX-NEXT:    incl %edi # sched: [1:0.25]
6464; SKX-NEXT:    incl (%rsi) # sched: [7:1.00]
6465; SKX-NEXT:    #NO_APP
6466; SKX-NEXT:    retq # sched: [7:1.00]
6467;
6468; BTVER2-LABEL: test_inc32:
6469; BTVER2:       # %bb.0:
6470; BTVER2-NEXT:    #APP
6471; BTVER2-NEXT:    incl %edi # sched: [1:0.50]
6472; BTVER2-NEXT:    incl (%rsi) # sched: [5:1.00]
6473; BTVER2-NEXT:    #NO_APP
6474; BTVER2-NEXT:    retq # sched: [4:1.00]
6475;
6476; ZNVER1-LABEL: test_inc32:
6477; ZNVER1:       # %bb.0:
6478; ZNVER1-NEXT:    #APP
6479; ZNVER1-NEXT:    incl %edi # sched: [1:0.25]
6480; ZNVER1-NEXT:    incl (%rsi) # sched: [5:0.50]
6481; ZNVER1-NEXT:    #NO_APP
6482; ZNVER1-NEXT:    retq # sched: [1:0.50]
6483  tail call void asm "incl $0 \0A\09 incl $1", "r,*m"(i32 %a0, i32* %a1) nounwind
6484  ret void
6485}
6486define void @test_inc64(i64 %a0, i64* %a1) optsize {
6487; GENERIC-LABEL: test_inc64:
6488; GENERIC:       # %bb.0:
6489; GENERIC-NEXT:    #APP
6490; GENERIC-NEXT:    incq %rdi # sched: [1:0.33]
6491; GENERIC-NEXT:    incq (%rsi) # sched: [7:1.00]
6492; GENERIC-NEXT:    #NO_APP
6493; GENERIC-NEXT:    retq # sched: [1:1.00]
6494;
6495; ATOM-LABEL: test_inc64:
6496; ATOM:       # %bb.0:
6497; ATOM-NEXT:    #APP
6498; ATOM-NEXT:    incq %rdi # sched: [1:0.50]
6499; ATOM-NEXT:    incq (%rsi) # sched: [1:1.00]
6500; ATOM-NEXT:    #NO_APP
6501; ATOM-NEXT:    retq # sched: [79:39.50]
6502;
6503; SLM-LABEL: test_inc64:
6504; SLM:       # %bb.0:
6505; SLM-NEXT:    #APP
6506; SLM-NEXT:    incq %rdi # sched: [1:0.50]
6507; SLM-NEXT:    incq (%rsi) # sched: [5:2.00]
6508; SLM-NEXT:    #NO_APP
6509; SLM-NEXT:    retq # sched: [4:1.00]
6510;
6511; SANDY-LABEL: test_inc64:
6512; SANDY:       # %bb.0:
6513; SANDY-NEXT:    #APP
6514; SANDY-NEXT:    incq %rdi # sched: [1:0.33]
6515; SANDY-NEXT:    incq (%rsi) # sched: [7:1.00]
6516; SANDY-NEXT:    #NO_APP
6517; SANDY-NEXT:    retq # sched: [1:1.00]
6518;
6519; HASWELL-LABEL: test_inc64:
6520; HASWELL:       # %bb.0:
6521; HASWELL-NEXT:    #APP
6522; HASWELL-NEXT:    incq %rdi # sched: [1:0.25]
6523; HASWELL-NEXT:    incq (%rsi) # sched: [7:1.00]
6524; HASWELL-NEXT:    #NO_APP
6525; HASWELL-NEXT:    retq # sched: [7:1.00]
6526;
6527; BROADWELL-LABEL: test_inc64:
6528; BROADWELL:       # %bb.0:
6529; BROADWELL-NEXT:    #APP
6530; BROADWELL-NEXT:    incq %rdi # sched: [1:0.25]
6531; BROADWELL-NEXT:    incq (%rsi) # sched: [7:1.00]
6532; BROADWELL-NEXT:    #NO_APP
6533; BROADWELL-NEXT:    retq # sched: [7:1.00]
6534;
6535; SKYLAKE-LABEL: test_inc64:
6536; SKYLAKE:       # %bb.0:
6537; SKYLAKE-NEXT:    #APP
6538; SKYLAKE-NEXT:    incq %rdi # sched: [1:0.25]
6539; SKYLAKE-NEXT:    incq (%rsi) # sched: [7:1.00]
6540; SKYLAKE-NEXT:    #NO_APP
6541; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6542;
6543; SKX-LABEL: test_inc64:
6544; SKX:       # %bb.0:
6545; SKX-NEXT:    #APP
6546; SKX-NEXT:    incq %rdi # sched: [1:0.25]
6547; SKX-NEXT:    incq (%rsi) # sched: [7:1.00]
6548; SKX-NEXT:    #NO_APP
6549; SKX-NEXT:    retq # sched: [7:1.00]
6550;
6551; BTVER2-LABEL: test_inc64:
6552; BTVER2:       # %bb.0:
6553; BTVER2-NEXT:    #APP
6554; BTVER2-NEXT:    incq %rdi # sched: [1:0.50]
6555; BTVER2-NEXT:    incq (%rsi) # sched: [5:1.00]
6556; BTVER2-NEXT:    #NO_APP
6557; BTVER2-NEXT:    retq # sched: [4:1.00]
6558;
6559; ZNVER1-LABEL: test_inc64:
6560; ZNVER1:       # %bb.0:
6561; ZNVER1-NEXT:    #APP
6562; ZNVER1-NEXT:    incq %rdi # sched: [1:0.25]
6563; ZNVER1-NEXT:    incq (%rsi) # sched: [5:0.50]
6564; ZNVER1-NEXT:    #NO_APP
6565; ZNVER1-NEXT:    retq # sched: [1:0.50]
6566  tail call void asm "incq $0 \0A\09 incq $1", "r,*m"(i64 %a0, i64* %a1) nounwind
6567  ret void
6568}
6569
6570define void @test_ins() optsize {
6571; GENERIC-LABEL: test_ins:
6572; GENERIC:       # %bb.0:
6573; GENERIC-NEXT:    #APP
6574; GENERIC-NEXT:    insb %dx, %es:(%rdi) # sched: [100:0.33]
6575; GENERIC-NEXT:    insw %dx, %es:(%rdi) # sched: [100:0.33]
6576; GENERIC-NEXT:    insl %dx, %es:(%rdi) # sched: [100:0.33]
6577; GENERIC-NEXT:    #NO_APP
6578; GENERIC-NEXT:    retq # sched: [1:1.00]
6579;
6580; ATOM-LABEL: test_ins:
6581; ATOM:       # %bb.0:
6582; ATOM-NEXT:    #APP
6583; ATOM-NEXT:    insb %dx, %es:(%rdi) # sched: [59:29.50]
6584; ATOM-NEXT:    insw %dx, %es:(%rdi) # sched: [59:29.50]
6585; ATOM-NEXT:    insl %dx, %es:(%rdi) # sched: [59:29.50]
6586; ATOM-NEXT:    #NO_APP
6587; ATOM-NEXT:    retq # sched: [79:39.50]
6588;
6589; SLM-LABEL: test_ins:
6590; SLM:       # %bb.0:
6591; SLM-NEXT:    #APP
6592; SLM-NEXT:    insb %dx, %es:(%rdi) # sched: [100:1.00]
6593; SLM-NEXT:    insw %dx, %es:(%rdi) # sched: [100:1.00]
6594; SLM-NEXT:    insl %dx, %es:(%rdi) # sched: [100:1.00]
6595; SLM-NEXT:    #NO_APP
6596; SLM-NEXT:    retq # sched: [4:1.00]
6597;
6598; SANDY-LABEL: test_ins:
6599; SANDY:       # %bb.0:
6600; SANDY-NEXT:    #APP
6601; SANDY-NEXT:    insb %dx, %es:(%rdi) # sched: [100:0.33]
6602; SANDY-NEXT:    insw %dx, %es:(%rdi) # sched: [100:0.33]
6603; SANDY-NEXT:    insl %dx, %es:(%rdi) # sched: [100:0.33]
6604; SANDY-NEXT:    #NO_APP
6605; SANDY-NEXT:    retq # sched: [1:1.00]
6606;
6607; HASWELL-LABEL: test_ins:
6608; HASWELL:       # %bb.0:
6609; HASWELL-NEXT:    #APP
6610; HASWELL-NEXT:    insb %dx, %es:(%rdi) # sched: [21:1.25]
6611; HASWELL-NEXT:    insw %dx, %es:(%rdi) # sched: [21:1.25]
6612; HASWELL-NEXT:    insl %dx, %es:(%rdi) # sched: [21:1.25]
6613; HASWELL-NEXT:    #NO_APP
6614; HASWELL-NEXT:    retq # sched: [7:1.00]
6615;
6616; BROADWELL-LABEL: test_ins:
6617; BROADWELL:       # %bb.0:
6618; BROADWELL-NEXT:    #APP
6619; BROADWELL-NEXT:    insb %dx, %es:(%rdi) # sched: [20:1.25]
6620; BROADWELL-NEXT:    insw %dx, %es:(%rdi) # sched: [20:1.25]
6621; BROADWELL-NEXT:    insl %dx, %es:(%rdi) # sched: [20:1.25]
6622; BROADWELL-NEXT:    #NO_APP
6623; BROADWELL-NEXT:    retq # sched: [7:1.00]
6624;
6625; SKYLAKE-LABEL: test_ins:
6626; SKYLAKE:       # %bb.0:
6627; SKYLAKE-NEXT:    #APP
6628; SKYLAKE-NEXT:    insb %dx, %es:(%rdi) # sched: [20:1.25]
6629; SKYLAKE-NEXT:    insw %dx, %es:(%rdi) # sched: [20:1.25]
6630; SKYLAKE-NEXT:    insl %dx, %es:(%rdi) # sched: [20:1.25]
6631; SKYLAKE-NEXT:    #NO_APP
6632; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6633;
6634; SKX-LABEL: test_ins:
6635; SKX:       # %bb.0:
6636; SKX-NEXT:    #APP
6637; SKX-NEXT:    insb %dx, %es:(%rdi) # sched: [20:1.25]
6638; SKX-NEXT:    insw %dx, %es:(%rdi) # sched: [20:1.25]
6639; SKX-NEXT:    insl %dx, %es:(%rdi) # sched: [20:1.25]
6640; SKX-NEXT:    #NO_APP
6641; SKX-NEXT:    retq # sched: [7:1.00]
6642;
6643; BTVER2-LABEL: test_ins:
6644; BTVER2:       # %bb.0:
6645; BTVER2-NEXT:    #APP
6646; BTVER2-NEXT:    insb %dx, %es:(%rdi) # sched: [100:0.50]
6647; BTVER2-NEXT:    insw %dx, %es:(%rdi) # sched: [100:0.50]
6648; BTVER2-NEXT:    insl %dx, %es:(%rdi) # sched: [100:0.50]
6649; BTVER2-NEXT:    #NO_APP
6650; BTVER2-NEXT:    retq # sched: [4:1.00]
6651;
6652; ZNVER1-LABEL: test_ins:
6653; ZNVER1:       # %bb.0:
6654; ZNVER1-NEXT:    #APP
6655; ZNVER1-NEXT:    insb %dx, %es:(%rdi) # sched: [100:0.25]
6656; ZNVER1-NEXT:    insw %dx, %es:(%rdi) # sched: [100:0.25]
6657; ZNVER1-NEXT:    insl %dx, %es:(%rdi) # sched: [100:0.25]
6658; ZNVER1-NEXT:    #NO_APP
6659; ZNVER1-NEXT:    retq # sched: [1:0.50]
6660  call void asm sideeffect "insb \0A\09 insw \0A\09 insl", ""()
6661  ret void
6662}
6663
6664define void @test_int() optsize {
6665; GENERIC-LABEL: test_int:
6666; GENERIC:       # %bb.0:
6667; GENERIC-NEXT:    #APP
6668; GENERIC-NEXT:    int $7 # sched: [100:0.33]
6669; GENERIC-NEXT:    #NO_APP
6670; GENERIC-NEXT:    retq # sched: [1:1.00]
6671;
6672; ATOM-LABEL: test_int:
6673; ATOM:       # %bb.0:
6674; ATOM-NEXT:    #APP
6675; ATOM-NEXT:    int $7 # sched: [127:63.50]
6676; ATOM-NEXT:    #NO_APP
6677; ATOM-NEXT:    retq # sched: [79:39.50]
6678;
6679; SLM-LABEL: test_int:
6680; SLM:       # %bb.0:
6681; SLM-NEXT:    #APP
6682; SLM-NEXT:    int $7 # sched: [100:1.00]
6683; SLM-NEXT:    #NO_APP
6684; SLM-NEXT:    retq # sched: [4:1.00]
6685;
6686; SANDY-LABEL: test_int:
6687; SANDY:       # %bb.0:
6688; SANDY-NEXT:    #APP
6689; SANDY-NEXT:    int $7 # sched: [100:0.33]
6690; SANDY-NEXT:    #NO_APP
6691; SANDY-NEXT:    retq # sched: [1:1.00]
6692;
6693; HASWELL-LABEL: test_int:
6694; HASWELL:       # %bb.0:
6695; HASWELL-NEXT:    #APP
6696; HASWELL-NEXT:    int $7 # sched: [100:0.25]
6697; HASWELL-NEXT:    #NO_APP
6698; HASWELL-NEXT:    retq # sched: [7:1.00]
6699;
6700; BROADWELL-LABEL: test_int:
6701; BROADWELL:       # %bb.0:
6702; BROADWELL-NEXT:    #APP
6703; BROADWELL-NEXT:    int $7 # sched: [100:0.25]
6704; BROADWELL-NEXT:    #NO_APP
6705; BROADWELL-NEXT:    retq # sched: [7:1.00]
6706;
6707; SKYLAKE-LABEL: test_int:
6708; SKYLAKE:       # %bb.0:
6709; SKYLAKE-NEXT:    #APP
6710; SKYLAKE-NEXT:    int $7 # sched: [100:0.25]
6711; SKYLAKE-NEXT:    #NO_APP
6712; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6713;
6714; SKX-LABEL: test_int:
6715; SKX:       # %bb.0:
6716; SKX-NEXT:    #APP
6717; SKX-NEXT:    int $7 # sched: [100:0.25]
6718; SKX-NEXT:    #NO_APP
6719; SKX-NEXT:    retq # sched: [7:1.00]
6720;
6721; BTVER2-LABEL: test_int:
6722; BTVER2:       # %bb.0:
6723; BTVER2-NEXT:    #APP
6724; BTVER2-NEXT:    int $7 # sched: [100:0.50]
6725; BTVER2-NEXT:    #NO_APP
6726; BTVER2-NEXT:    retq # sched: [4:1.00]
6727;
6728; ZNVER1-LABEL: test_int:
6729; ZNVER1:       # %bb.0:
6730; ZNVER1-NEXT:    #APP
6731; ZNVER1-NEXT:    int $7 # sched: [100:0.25]
6732; ZNVER1-NEXT:    #NO_APP
6733; ZNVER1-NEXT:    retq # sched: [1:0.50]
6734  call void asm sideeffect "int $0", "i"(i8 7)
6735  ret void
6736}
6737
6738define void @test_invlpg_invlpga(i8 *%a0) optsize {
6739; GENERIC-LABEL: test_invlpg_invlpga:
6740; GENERIC:       # %bb.0:
6741; GENERIC-NEXT:    #APP
6742; GENERIC-NEXT:    invlpg (%rdi) # sched: [100:0.33]
6743; GENERIC-NEXT:    invlpga %rax, %ecx # sched: [100:0.33]
6744; GENERIC-NEXT:    #NO_APP
6745; GENERIC-NEXT:    retq # sched: [1:1.00]
6746;
6747; ATOM-LABEL: test_invlpg_invlpga:
6748; ATOM:       # %bb.0:
6749; ATOM-NEXT:    #APP
6750; ATOM-NEXT:    invlpg (%rdi) # sched: [71:35.50]
6751; ATOM-NEXT:    invlpga %rax, %ecx # sched: [71:35.50]
6752; ATOM-NEXT:    #NO_APP
6753; ATOM-NEXT:    retq # sched: [79:39.50]
6754;
6755; SLM-LABEL: test_invlpg_invlpga:
6756; SLM:       # %bb.0:
6757; SLM-NEXT:    #APP
6758; SLM-NEXT:    invlpg (%rdi) # sched: [100:1.00]
6759; SLM-NEXT:    invlpga %rax, %ecx # sched: [100:1.00]
6760; SLM-NEXT:    #NO_APP
6761; SLM-NEXT:    retq # sched: [4:1.00]
6762;
6763; SANDY-LABEL: test_invlpg_invlpga:
6764; SANDY:       # %bb.0:
6765; SANDY-NEXT:    #APP
6766; SANDY-NEXT:    invlpg (%rdi) # sched: [100:0.33]
6767; SANDY-NEXT:    invlpga %rax, %ecx # sched: [100:0.33]
6768; SANDY-NEXT:    #NO_APP
6769; SANDY-NEXT:    retq # sched: [1:1.00]
6770;
6771; HASWELL-LABEL: test_invlpg_invlpga:
6772; HASWELL:       # %bb.0:
6773; HASWELL-NEXT:    #APP
6774; HASWELL-NEXT:    invlpg (%rdi) # sched: [100:0.25]
6775; HASWELL-NEXT:    invlpga %rax, %ecx # sched: [100:0.25]
6776; HASWELL-NEXT:    #NO_APP
6777; HASWELL-NEXT:    retq # sched: [7:1.00]
6778;
6779; BROADWELL-LABEL: test_invlpg_invlpga:
6780; BROADWELL:       # %bb.0:
6781; BROADWELL-NEXT:    #APP
6782; BROADWELL-NEXT:    invlpg (%rdi) # sched: [100:0.25]
6783; BROADWELL-NEXT:    invlpga %rax, %ecx # sched: [100:0.25]
6784; BROADWELL-NEXT:    #NO_APP
6785; BROADWELL-NEXT:    retq # sched: [7:1.00]
6786;
6787; SKYLAKE-LABEL: test_invlpg_invlpga:
6788; SKYLAKE:       # %bb.0:
6789; SKYLAKE-NEXT:    #APP
6790; SKYLAKE-NEXT:    invlpg (%rdi) # sched: [100:0.25]
6791; SKYLAKE-NEXT:    invlpga %rax, %ecx # sched: [100:0.25]
6792; SKYLAKE-NEXT:    #NO_APP
6793; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6794;
6795; SKX-LABEL: test_invlpg_invlpga:
6796; SKX:       # %bb.0:
6797; SKX-NEXT:    #APP
6798; SKX-NEXT:    invlpg (%rdi) # sched: [100:0.25]
6799; SKX-NEXT:    invlpga %rax, %ecx # sched: [100:0.25]
6800; SKX-NEXT:    #NO_APP
6801; SKX-NEXT:    retq # sched: [7:1.00]
6802;
6803; BTVER2-LABEL: test_invlpg_invlpga:
6804; BTVER2:       # %bb.0:
6805; BTVER2-NEXT:    #APP
6806; BTVER2-NEXT:    invlpg (%rdi) # sched: [100:0.50]
6807; BTVER2-NEXT:    invlpga %rax, %ecx # sched: [100:0.50]
6808; BTVER2-NEXT:    #NO_APP
6809; BTVER2-NEXT:    retq # sched: [4:1.00]
6810;
6811; ZNVER1-LABEL: test_invlpg_invlpga:
6812; ZNVER1:       # %bb.0:
6813; ZNVER1-NEXT:    #APP
6814; ZNVER1-NEXT:    invlpg (%rdi) # sched: [100:0.25]
6815; ZNVER1-NEXT:    invlpga %rax, %ecx # sched: [100:0.25]
6816; ZNVER1-NEXT:    #NO_APP
6817; ZNVER1-NEXT:    retq # sched: [1:0.50]
6818  tail call void asm sideeffect "invlpg $0 \0A\09 invlpga %rax, %ecx", "*m"(i8 *%a0) nounwind
6819  ret void
6820}
6821
6822define void @test_jcc() optsize {
6823; GENERIC-LABEL: test_jcc:
6824; GENERIC:       # %bb.0:
6825; GENERIC-NEXT:    #APP
6826; GENERIC-NEXT:  JCCTGT:
6827; GENERIC-NEXT:    jo JCCTGT # sched: [1:1.00]
6828; GENERIC-NEXT:    jno JCCTGT # sched: [1:1.00]
6829; GENERIC-NEXT:    jb JCCTGT # sched: [1:1.00]
6830; GENERIC-NEXT:    jb JCCTGT # sched: [1:1.00]
6831; GENERIC-NEXT:    jb JCCTGT # sched: [1:1.00]
6832; GENERIC-NEXT:    jae JCCTGT # sched: [1:1.00]
6833; GENERIC-NEXT:    jae JCCTGT # sched: [1:1.00]
6834; GENERIC-NEXT:    jae JCCTGT # sched: [1:1.00]
6835; GENERIC-NEXT:    je JCCTGT # sched: [1:1.00]
6836; GENERIC-NEXT:    je JCCTGT # sched: [1:1.00]
6837; GENERIC-NEXT:    jne JCCTGT # sched: [1:1.00]
6838; GENERIC-NEXT:    jne JCCTGT # sched: [1:1.00]
6839; GENERIC-NEXT:    jbe JCCTGT # sched: [1:1.00]
6840; GENERIC-NEXT:    jbe JCCTGT # sched: [1:1.00]
6841; GENERIC-NEXT:    ja JCCTGT # sched: [1:1.00]
6842; GENERIC-NEXT:    ja JCCTGT # sched: [1:1.00]
6843; GENERIC-NEXT:    js JCCTGT # sched: [1:1.00]
6844; GENERIC-NEXT:    jns JCCTGT # sched: [1:1.00]
6845; GENERIC-NEXT:    jp JCCTGT # sched: [1:1.00]
6846; GENERIC-NEXT:    jp JCCTGT # sched: [1:1.00]
6847; GENERIC-NEXT:    jnp JCCTGT # sched: [1:1.00]
6848; GENERIC-NEXT:    jnp JCCTGT # sched: [1:1.00]
6849; GENERIC-NEXT:    jl JCCTGT # sched: [1:1.00]
6850; GENERIC-NEXT:    jl JCCTGT # sched: [1:1.00]
6851; GENERIC-NEXT:    jge JCCTGT # sched: [1:1.00]
6852; GENERIC-NEXT:    jge JCCTGT # sched: [1:1.00]
6853; GENERIC-NEXT:    jle JCCTGT # sched: [1:1.00]
6854; GENERIC-NEXT:    jle JCCTGT # sched: [1:1.00]
6855; GENERIC-NEXT:    jg JCCTGT # sched: [1:1.00]
6856; GENERIC-NEXT:    jg JCCTGT # sched: [1:1.00]
6857; GENERIC-NEXT:    #NO_APP
6858; GENERIC-NEXT:    retq # sched: [1:1.00]
6859;
6860; ATOM-LABEL: test_jcc:
6861; ATOM:       # %bb.0:
6862; ATOM-NEXT:    #APP
6863; ATOM-NEXT:  JCCTGT:
6864; ATOM-NEXT:    jo JCCTGT # sched: [1:1.00]
6865; ATOM-NEXT:    jno JCCTGT # sched: [1:1.00]
6866; ATOM-NEXT:    jb JCCTGT # sched: [1:1.00]
6867; ATOM-NEXT:    jb JCCTGT # sched: [1:1.00]
6868; ATOM-NEXT:    jb JCCTGT # sched: [1:1.00]
6869; ATOM-NEXT:    jae JCCTGT # sched: [1:1.00]
6870; ATOM-NEXT:    jae JCCTGT # sched: [1:1.00]
6871; ATOM-NEXT:    jae JCCTGT # sched: [1:1.00]
6872; ATOM-NEXT:    je JCCTGT # sched: [1:1.00]
6873; ATOM-NEXT:    je JCCTGT # sched: [1:1.00]
6874; ATOM-NEXT:    jne JCCTGT # sched: [1:1.00]
6875; ATOM-NEXT:    jne JCCTGT # sched: [1:1.00]
6876; ATOM-NEXT:    jbe JCCTGT # sched: [1:1.00]
6877; ATOM-NEXT:    jbe JCCTGT # sched: [1:1.00]
6878; ATOM-NEXT:    ja JCCTGT # sched: [1:1.00]
6879; ATOM-NEXT:    ja JCCTGT # sched: [1:1.00]
6880; ATOM-NEXT:    js JCCTGT # sched: [1:1.00]
6881; ATOM-NEXT:    jns JCCTGT # sched: [1:1.00]
6882; ATOM-NEXT:    jp JCCTGT # sched: [1:1.00]
6883; ATOM-NEXT:    jp JCCTGT # sched: [1:1.00]
6884; ATOM-NEXT:    jnp JCCTGT # sched: [1:1.00]
6885; ATOM-NEXT:    jnp JCCTGT # sched: [1:1.00]
6886; ATOM-NEXT:    jl JCCTGT # sched: [1:1.00]
6887; ATOM-NEXT:    jl JCCTGT # sched: [1:1.00]
6888; ATOM-NEXT:    jge JCCTGT # sched: [1:1.00]
6889; ATOM-NEXT:    jge JCCTGT # sched: [1:1.00]
6890; ATOM-NEXT:    jle JCCTGT # sched: [1:1.00]
6891; ATOM-NEXT:    jle JCCTGT # sched: [1:1.00]
6892; ATOM-NEXT:    jg JCCTGT # sched: [1:1.00]
6893; ATOM-NEXT:    jg JCCTGT # sched: [1:1.00]
6894; ATOM-NEXT:    #NO_APP
6895; ATOM-NEXT:    retq # sched: [79:39.50]
6896;
6897; SLM-LABEL: test_jcc:
6898; SLM:       # %bb.0:
6899; SLM-NEXT:    #APP
6900; SLM-NEXT:  JCCTGT:
6901; SLM-NEXT:    jo JCCTGT # sched: [1:1.00]
6902; SLM-NEXT:    jno JCCTGT # sched: [1:1.00]
6903; SLM-NEXT:    jb JCCTGT # sched: [1:1.00]
6904; SLM-NEXT:    jb JCCTGT # sched: [1:1.00]
6905; SLM-NEXT:    jb JCCTGT # sched: [1:1.00]
6906; SLM-NEXT:    jae JCCTGT # sched: [1:1.00]
6907; SLM-NEXT:    jae JCCTGT # sched: [1:1.00]
6908; SLM-NEXT:    jae JCCTGT # sched: [1:1.00]
6909; SLM-NEXT:    je JCCTGT # sched: [1:1.00]
6910; SLM-NEXT:    je JCCTGT # sched: [1:1.00]
6911; SLM-NEXT:    jne JCCTGT # sched: [1:1.00]
6912; SLM-NEXT:    jne JCCTGT # sched: [1:1.00]
6913; SLM-NEXT:    jbe JCCTGT # sched: [1:1.00]
6914; SLM-NEXT:    jbe JCCTGT # sched: [1:1.00]
6915; SLM-NEXT:    ja JCCTGT # sched: [1:1.00]
6916; SLM-NEXT:    ja JCCTGT # sched: [1:1.00]
6917; SLM-NEXT:    js JCCTGT # sched: [1:1.00]
6918; SLM-NEXT:    jns JCCTGT # sched: [1:1.00]
6919; SLM-NEXT:    jp JCCTGT # sched: [1:1.00]
6920; SLM-NEXT:    jp JCCTGT # sched: [1:1.00]
6921; SLM-NEXT:    jnp JCCTGT # sched: [1:1.00]
6922; SLM-NEXT:    jnp JCCTGT # sched: [1:1.00]
6923; SLM-NEXT:    jl JCCTGT # sched: [1:1.00]
6924; SLM-NEXT:    jl JCCTGT # sched: [1:1.00]
6925; SLM-NEXT:    jge JCCTGT # sched: [1:1.00]
6926; SLM-NEXT:    jge JCCTGT # sched: [1:1.00]
6927; SLM-NEXT:    jle JCCTGT # sched: [1:1.00]
6928; SLM-NEXT:    jle JCCTGT # sched: [1:1.00]
6929; SLM-NEXT:    jg JCCTGT # sched: [1:1.00]
6930; SLM-NEXT:    jg JCCTGT # sched: [1:1.00]
6931; SLM-NEXT:    #NO_APP
6932; SLM-NEXT:    retq # sched: [4:1.00]
6933;
6934; SANDY-LABEL: test_jcc:
6935; SANDY:       # %bb.0:
6936; SANDY-NEXT:    #APP
6937; SANDY-NEXT:  JCCTGT:
6938; SANDY-NEXT:    jo JCCTGT # sched: [1:1.00]
6939; SANDY-NEXT:    jno JCCTGT # sched: [1:1.00]
6940; SANDY-NEXT:    jb JCCTGT # sched: [1:1.00]
6941; SANDY-NEXT:    jb JCCTGT # sched: [1:1.00]
6942; SANDY-NEXT:    jb JCCTGT # sched: [1:1.00]
6943; SANDY-NEXT:    jae JCCTGT # sched: [1:1.00]
6944; SANDY-NEXT:    jae JCCTGT # sched: [1:1.00]
6945; SANDY-NEXT:    jae JCCTGT # sched: [1:1.00]
6946; SANDY-NEXT:    je JCCTGT # sched: [1:1.00]
6947; SANDY-NEXT:    je JCCTGT # sched: [1:1.00]
6948; SANDY-NEXT:    jne JCCTGT # sched: [1:1.00]
6949; SANDY-NEXT:    jne JCCTGT # sched: [1:1.00]
6950; SANDY-NEXT:    jbe JCCTGT # sched: [1:1.00]
6951; SANDY-NEXT:    jbe JCCTGT # sched: [1:1.00]
6952; SANDY-NEXT:    ja JCCTGT # sched: [1:1.00]
6953; SANDY-NEXT:    ja JCCTGT # sched: [1:1.00]
6954; SANDY-NEXT:    js JCCTGT # sched: [1:1.00]
6955; SANDY-NEXT:    jns JCCTGT # sched: [1:1.00]
6956; SANDY-NEXT:    jp JCCTGT # sched: [1:1.00]
6957; SANDY-NEXT:    jp JCCTGT # sched: [1:1.00]
6958; SANDY-NEXT:    jnp JCCTGT # sched: [1:1.00]
6959; SANDY-NEXT:    jnp JCCTGT # sched: [1:1.00]
6960; SANDY-NEXT:    jl JCCTGT # sched: [1:1.00]
6961; SANDY-NEXT:    jl JCCTGT # sched: [1:1.00]
6962; SANDY-NEXT:    jge JCCTGT # sched: [1:1.00]
6963; SANDY-NEXT:    jge JCCTGT # sched: [1:1.00]
6964; SANDY-NEXT:    jle JCCTGT # sched: [1:1.00]
6965; SANDY-NEXT:    jle JCCTGT # sched: [1:1.00]
6966; SANDY-NEXT:    jg JCCTGT # sched: [1:1.00]
6967; SANDY-NEXT:    jg JCCTGT # sched: [1:1.00]
6968; SANDY-NEXT:    #NO_APP
6969; SANDY-NEXT:    retq # sched: [1:1.00]
6970;
6971; HASWELL-LABEL: test_jcc:
6972; HASWELL:       # %bb.0:
6973; HASWELL-NEXT:    #APP
6974; HASWELL-NEXT:  JCCTGT:
6975; HASWELL-NEXT:    jo JCCTGT # sched: [1:0.50]
6976; HASWELL-NEXT:    jno JCCTGT # sched: [1:0.50]
6977; HASWELL-NEXT:    jb JCCTGT # sched: [1:0.50]
6978; HASWELL-NEXT:    jb JCCTGT # sched: [1:0.50]
6979; HASWELL-NEXT:    jb JCCTGT # sched: [1:0.50]
6980; HASWELL-NEXT:    jae JCCTGT # sched: [1:0.50]
6981; HASWELL-NEXT:    jae JCCTGT # sched: [1:0.50]
6982; HASWELL-NEXT:    jae JCCTGT # sched: [1:0.50]
6983; HASWELL-NEXT:    je JCCTGT # sched: [1:0.50]
6984; HASWELL-NEXT:    je JCCTGT # sched: [1:0.50]
6985; HASWELL-NEXT:    jne JCCTGT # sched: [1:0.50]
6986; HASWELL-NEXT:    jne JCCTGT # sched: [1:0.50]
6987; HASWELL-NEXT:    jbe JCCTGT # sched: [1:0.50]
6988; HASWELL-NEXT:    jbe JCCTGT # sched: [1:0.50]
6989; HASWELL-NEXT:    ja JCCTGT # sched: [1:0.50]
6990; HASWELL-NEXT:    ja JCCTGT # sched: [1:0.50]
6991; HASWELL-NEXT:    js JCCTGT # sched: [1:0.50]
6992; HASWELL-NEXT:    jns JCCTGT # sched: [1:0.50]
6993; HASWELL-NEXT:    jp JCCTGT # sched: [1:0.50]
6994; HASWELL-NEXT:    jp JCCTGT # sched: [1:0.50]
6995; HASWELL-NEXT:    jnp JCCTGT # sched: [1:0.50]
6996; HASWELL-NEXT:    jnp JCCTGT # sched: [1:0.50]
6997; HASWELL-NEXT:    jl JCCTGT # sched: [1:0.50]
6998; HASWELL-NEXT:    jl JCCTGT # sched: [1:0.50]
6999; HASWELL-NEXT:    jge JCCTGT # sched: [1:0.50]
7000; HASWELL-NEXT:    jge JCCTGT # sched: [1:0.50]
7001; HASWELL-NEXT:    jle JCCTGT # sched: [1:0.50]
7002; HASWELL-NEXT:    jle JCCTGT # sched: [1:0.50]
7003; HASWELL-NEXT:    jg JCCTGT # sched: [1:0.50]
7004; HASWELL-NEXT:    jg JCCTGT # sched: [1:0.50]
7005; HASWELL-NEXT:    #NO_APP
7006; HASWELL-NEXT:    retq # sched: [7:1.00]
7007;
7008; BROADWELL-LABEL: test_jcc:
7009; BROADWELL:       # %bb.0:
7010; BROADWELL-NEXT:    #APP
7011; BROADWELL-NEXT:  JCCTGT:
7012; BROADWELL-NEXT:    jo JCCTGT # sched: [1:0.50]
7013; BROADWELL-NEXT:    jno JCCTGT # sched: [1:0.50]
7014; BROADWELL-NEXT:    jb JCCTGT # sched: [1:0.50]
7015; BROADWELL-NEXT:    jb JCCTGT # sched: [1:0.50]
7016; BROADWELL-NEXT:    jb JCCTGT # sched: [1:0.50]
7017; BROADWELL-NEXT:    jae JCCTGT # sched: [1:0.50]
7018; BROADWELL-NEXT:    jae JCCTGT # sched: [1:0.50]
7019; BROADWELL-NEXT:    jae JCCTGT # sched: [1:0.50]
7020; BROADWELL-NEXT:    je JCCTGT # sched: [1:0.50]
7021; BROADWELL-NEXT:    je JCCTGT # sched: [1:0.50]
7022; BROADWELL-NEXT:    jne JCCTGT # sched: [1:0.50]
7023; BROADWELL-NEXT:    jne JCCTGT # sched: [1:0.50]
7024; BROADWELL-NEXT:    jbe JCCTGT # sched: [1:0.50]
7025; BROADWELL-NEXT:    jbe JCCTGT # sched: [1:0.50]
7026; BROADWELL-NEXT:    ja JCCTGT # sched: [1:0.50]
7027; BROADWELL-NEXT:    ja JCCTGT # sched: [1:0.50]
7028; BROADWELL-NEXT:    js JCCTGT # sched: [1:0.50]
7029; BROADWELL-NEXT:    jns JCCTGT # sched: [1:0.50]
7030; BROADWELL-NEXT:    jp JCCTGT # sched: [1:0.50]
7031; BROADWELL-NEXT:    jp JCCTGT # sched: [1:0.50]
7032; BROADWELL-NEXT:    jnp JCCTGT # sched: [1:0.50]
7033; BROADWELL-NEXT:    jnp JCCTGT # sched: [1:0.50]
7034; BROADWELL-NEXT:    jl JCCTGT # sched: [1:0.50]
7035; BROADWELL-NEXT:    jl JCCTGT # sched: [1:0.50]
7036; BROADWELL-NEXT:    jge JCCTGT # sched: [1:0.50]
7037; BROADWELL-NEXT:    jge JCCTGT # sched: [1:0.50]
7038; BROADWELL-NEXT:    jle JCCTGT # sched: [1:0.50]
7039; BROADWELL-NEXT:    jle JCCTGT # sched: [1:0.50]
7040; BROADWELL-NEXT:    jg JCCTGT # sched: [1:0.50]
7041; BROADWELL-NEXT:    jg JCCTGT # sched: [1:0.50]
7042; BROADWELL-NEXT:    #NO_APP
7043; BROADWELL-NEXT:    retq # sched: [7:1.00]
7044;
7045; SKYLAKE-LABEL: test_jcc:
7046; SKYLAKE:       # %bb.0:
7047; SKYLAKE-NEXT:    #APP
7048; SKYLAKE-NEXT:  JCCTGT:
7049; SKYLAKE-NEXT:    jo JCCTGT # sched: [1:0.50]
7050; SKYLAKE-NEXT:    jno JCCTGT # sched: [1:0.50]
7051; SKYLAKE-NEXT:    jb JCCTGT # sched: [1:0.50]
7052; SKYLAKE-NEXT:    jb JCCTGT # sched: [1:0.50]
7053; SKYLAKE-NEXT:    jb JCCTGT # sched: [1:0.50]
7054; SKYLAKE-NEXT:    jae JCCTGT # sched: [1:0.50]
7055; SKYLAKE-NEXT:    jae JCCTGT # sched: [1:0.50]
7056; SKYLAKE-NEXT:    jae JCCTGT # sched: [1:0.50]
7057; SKYLAKE-NEXT:    je JCCTGT # sched: [1:0.50]
7058; SKYLAKE-NEXT:    je JCCTGT # sched: [1:0.50]
7059; SKYLAKE-NEXT:    jne JCCTGT # sched: [1:0.50]
7060; SKYLAKE-NEXT:    jne JCCTGT # sched: [1:0.50]
7061; SKYLAKE-NEXT:    jbe JCCTGT # sched: [1:0.50]
7062; SKYLAKE-NEXT:    jbe JCCTGT # sched: [1:0.50]
7063; SKYLAKE-NEXT:    ja JCCTGT # sched: [1:0.50]
7064; SKYLAKE-NEXT:    ja JCCTGT # sched: [1:0.50]
7065; SKYLAKE-NEXT:    js JCCTGT # sched: [1:0.50]
7066; SKYLAKE-NEXT:    jns JCCTGT # sched: [1:0.50]
7067; SKYLAKE-NEXT:    jp JCCTGT # sched: [1:0.50]
7068; SKYLAKE-NEXT:    jp JCCTGT # sched: [1:0.50]
7069; SKYLAKE-NEXT:    jnp JCCTGT # sched: [1:0.50]
7070; SKYLAKE-NEXT:    jnp JCCTGT # sched: [1:0.50]
7071; SKYLAKE-NEXT:    jl JCCTGT # sched: [1:0.50]
7072; SKYLAKE-NEXT:    jl JCCTGT # sched: [1:0.50]
7073; SKYLAKE-NEXT:    jge JCCTGT # sched: [1:0.50]
7074; SKYLAKE-NEXT:    jge JCCTGT # sched: [1:0.50]
7075; SKYLAKE-NEXT:    jle JCCTGT # sched: [1:0.50]
7076; SKYLAKE-NEXT:    jle JCCTGT # sched: [1:0.50]
7077; SKYLAKE-NEXT:    jg JCCTGT # sched: [1:0.50]
7078; SKYLAKE-NEXT:    jg JCCTGT # sched: [1:0.50]
7079; SKYLAKE-NEXT:    #NO_APP
7080; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7081;
7082; SKX-LABEL: test_jcc:
7083; SKX:       # %bb.0:
7084; SKX-NEXT:    #APP
7085; SKX-NEXT:  JCCTGT:
7086; SKX-NEXT:    jo JCCTGT # sched: [1:0.50]
7087; SKX-NEXT:    jno JCCTGT # sched: [1:0.50]
7088; SKX-NEXT:    jb JCCTGT # sched: [1:0.50]
7089; SKX-NEXT:    jb JCCTGT # sched: [1:0.50]
7090; SKX-NEXT:    jb JCCTGT # sched: [1:0.50]
7091; SKX-NEXT:    jae JCCTGT # sched: [1:0.50]
7092; SKX-NEXT:    jae JCCTGT # sched: [1:0.50]
7093; SKX-NEXT:    jae JCCTGT # sched: [1:0.50]
7094; SKX-NEXT:    je JCCTGT # sched: [1:0.50]
7095; SKX-NEXT:    je JCCTGT # sched: [1:0.50]
7096; SKX-NEXT:    jne JCCTGT # sched: [1:0.50]
7097; SKX-NEXT:    jne JCCTGT # sched: [1:0.50]
7098; SKX-NEXT:    jbe JCCTGT # sched: [1:0.50]
7099; SKX-NEXT:    jbe JCCTGT # sched: [1:0.50]
7100; SKX-NEXT:    ja JCCTGT # sched: [1:0.50]
7101; SKX-NEXT:    ja JCCTGT # sched: [1:0.50]
7102; SKX-NEXT:    js JCCTGT # sched: [1:0.50]
7103; SKX-NEXT:    jns JCCTGT # sched: [1:0.50]
7104; SKX-NEXT:    jp JCCTGT # sched: [1:0.50]
7105; SKX-NEXT:    jp JCCTGT # sched: [1:0.50]
7106; SKX-NEXT:    jnp JCCTGT # sched: [1:0.50]
7107; SKX-NEXT:    jnp JCCTGT # sched: [1:0.50]
7108; SKX-NEXT:    jl JCCTGT # sched: [1:0.50]
7109; SKX-NEXT:    jl JCCTGT # sched: [1:0.50]
7110; SKX-NEXT:    jge JCCTGT # sched: [1:0.50]
7111; SKX-NEXT:    jge JCCTGT # sched: [1:0.50]
7112; SKX-NEXT:    jle JCCTGT # sched: [1:0.50]
7113; SKX-NEXT:    jle JCCTGT # sched: [1:0.50]
7114; SKX-NEXT:    jg JCCTGT # sched: [1:0.50]
7115; SKX-NEXT:    jg JCCTGT # sched: [1:0.50]
7116; SKX-NEXT:    #NO_APP
7117; SKX-NEXT:    retq # sched: [7:1.00]
7118;
7119; BTVER2-LABEL: test_jcc:
7120; BTVER2:       # %bb.0:
7121; BTVER2-NEXT:    #APP
7122; BTVER2-NEXT:  JCCTGT:
7123; BTVER2-NEXT:    jo JCCTGT # sched: [1:0.50]
7124; BTVER2-NEXT:    jno JCCTGT # sched: [1:0.50]
7125; BTVER2-NEXT:    jb JCCTGT # sched: [1:0.50]
7126; BTVER2-NEXT:    jb JCCTGT # sched: [1:0.50]
7127; BTVER2-NEXT:    jb JCCTGT # sched: [1:0.50]
7128; BTVER2-NEXT:    jae JCCTGT # sched: [1:0.50]
7129; BTVER2-NEXT:    jae JCCTGT # sched: [1:0.50]
7130; BTVER2-NEXT:    jae JCCTGT # sched: [1:0.50]
7131; BTVER2-NEXT:    je JCCTGT # sched: [1:0.50]
7132; BTVER2-NEXT:    je JCCTGT # sched: [1:0.50]
7133; BTVER2-NEXT:    jne JCCTGT # sched: [1:0.50]
7134; BTVER2-NEXT:    jne JCCTGT # sched: [1:0.50]
7135; BTVER2-NEXT:    jbe JCCTGT # sched: [1:0.50]
7136; BTVER2-NEXT:    jbe JCCTGT # sched: [1:0.50]
7137; BTVER2-NEXT:    ja JCCTGT # sched: [1:0.50]
7138; BTVER2-NEXT:    ja JCCTGT # sched: [1:0.50]
7139; BTVER2-NEXT:    js JCCTGT # sched: [1:0.50]
7140; BTVER2-NEXT:    jns JCCTGT # sched: [1:0.50]
7141; BTVER2-NEXT:    jp JCCTGT # sched: [1:0.50]
7142; BTVER2-NEXT:    jp JCCTGT # sched: [1:0.50]
7143; BTVER2-NEXT:    jnp JCCTGT # sched: [1:0.50]
7144; BTVER2-NEXT:    jnp JCCTGT # sched: [1:0.50]
7145; BTVER2-NEXT:    jl JCCTGT # sched: [1:0.50]
7146; BTVER2-NEXT:    jl JCCTGT # sched: [1:0.50]
7147; BTVER2-NEXT:    jge JCCTGT # sched: [1:0.50]
7148; BTVER2-NEXT:    jge JCCTGT # sched: [1:0.50]
7149; BTVER2-NEXT:    jle JCCTGT # sched: [1:0.50]
7150; BTVER2-NEXT:    jle JCCTGT # sched: [1:0.50]
7151; BTVER2-NEXT:    jg JCCTGT # sched: [1:0.50]
7152; BTVER2-NEXT:    jg JCCTGT # sched: [1:0.50]
7153; BTVER2-NEXT:    #NO_APP
7154; BTVER2-NEXT:    retq # sched: [4:1.00]
7155;
7156; ZNVER1-LABEL: test_jcc:
7157; ZNVER1:       # %bb.0:
7158; ZNVER1-NEXT:    #APP
7159; ZNVER1-NEXT:  JCCTGT:
7160; ZNVER1-NEXT:    jo JCCTGT # sched: [1:0.25]
7161; ZNVER1-NEXT:    jno JCCTGT # sched: [1:0.25]
7162; ZNVER1-NEXT:    jb JCCTGT # sched: [1:0.25]
7163; ZNVER1-NEXT:    jb JCCTGT # sched: [1:0.25]
7164; ZNVER1-NEXT:    jb JCCTGT # sched: [1:0.25]
7165; ZNVER1-NEXT:    jae JCCTGT # sched: [1:0.25]
7166; ZNVER1-NEXT:    jae JCCTGT # sched: [1:0.25]
7167; ZNVER1-NEXT:    jae JCCTGT # sched: [1:0.25]
7168; ZNVER1-NEXT:    je JCCTGT # sched: [1:0.25]
7169; ZNVER1-NEXT:    je JCCTGT # sched: [1:0.25]
7170; ZNVER1-NEXT:    jne JCCTGT # sched: [1:0.25]
7171; ZNVER1-NEXT:    jne JCCTGT # sched: [1:0.25]
7172; ZNVER1-NEXT:    jbe JCCTGT # sched: [1:0.25]
7173; ZNVER1-NEXT:    jbe JCCTGT # sched: [1:0.25]
7174; ZNVER1-NEXT:    ja JCCTGT # sched: [1:0.25]
7175; ZNVER1-NEXT:    ja JCCTGT # sched: [1:0.25]
7176; ZNVER1-NEXT:    js JCCTGT # sched: [1:0.25]
7177; ZNVER1-NEXT:    jns JCCTGT # sched: [1:0.25]
7178; ZNVER1-NEXT:    jp JCCTGT # sched: [1:0.25]
7179; ZNVER1-NEXT:    jp JCCTGT # sched: [1:0.25]
7180; ZNVER1-NEXT:    jnp JCCTGT # sched: [1:0.25]
7181; ZNVER1-NEXT:    jnp JCCTGT # sched: [1:0.25]
7182; ZNVER1-NEXT:    jl JCCTGT # sched: [1:0.25]
7183; ZNVER1-NEXT:    jl JCCTGT # sched: [1:0.25]
7184; ZNVER1-NEXT:    jge JCCTGT # sched: [1:0.25]
7185; ZNVER1-NEXT:    jge JCCTGT # sched: [1:0.25]
7186; ZNVER1-NEXT:    jle JCCTGT # sched: [1:0.25]
7187; ZNVER1-NEXT:    jle JCCTGT # sched: [1:0.25]
7188; ZNVER1-NEXT:    jg JCCTGT # sched: [1:0.25]
7189; ZNVER1-NEXT:    jg JCCTGT # sched: [1:0.25]
7190; ZNVER1-NEXT:    #NO_APP
7191; ZNVER1-NEXT:    retq # sched: [1:0.50]
7192  call void asm sideeffect "JCCTGT: \0A\09 jo JCCTGT \0A\09 jno JCCTGT \0A\09 jb JCCTGT \0A\09 jc JCCTGT \0A\09 jnae JCCTGT \0A\09 jnb JCCTGT \0A\09 jnc JCCTGT \0A\09 jae JCCTGT \0A\09 jz JCCTGT \0A\09 je JCCTGT \0A\09 jnz JCCTGT \0A\09 jne JCCTGT \0A\09 jbe JCCTGT \0A\09 jna JCCTGT \0A\09 jnbe JCCTGT \0A\09 ja JCCTGT \0A\09 js JCCTGT \0A\09 jns JCCTGT \0A\09 jp JCCTGT \0A\09 jpe JCCTGT \0A\09 jnp JCCTGT \0A\09 jpo JCCTGT \0A\09 jl JCCTGT \0A\09 jnge JCCTGT \0A\09 jnl JCCTGT \0A\09 jge JCCTGT \0A\09 jle JCCTGT \0A\09 jng JCCTGT \0A\09 jnle JCCTGT \0A\09 jg JCCTGT", ""()
7193  ret void
7194}
7195
7196define void @test_jecxz_jrcxz() optsize {
7197; GENERIC-LABEL: test_jecxz_jrcxz:
7198; GENERIC:       # %bb.0:
7199; GENERIC-NEXT:    #APP
7200; GENERIC-NEXT:  JXTGT:
7201; GENERIC-NEXT:    jecxz JXTGT # sched: [2:1.00]
7202; GENERIC-NEXT:    jrcxz JXTGT # sched: [2:1.00]
7203; GENERIC-NEXT:    #NO_APP
7204; GENERIC-NEXT:    retq # sched: [1:1.00]
7205;
7206; ATOM-LABEL: test_jecxz_jrcxz:
7207; ATOM:       # %bb.0:
7208; ATOM-NEXT:    #APP
7209; ATOM-NEXT:  JXTGT:
7210; ATOM-NEXT:    jecxz JXTGT # sched: [4:2.00]
7211; ATOM-NEXT:    jrcxz JXTGT # sched: [4:2.00]
7212; ATOM-NEXT:    #NO_APP
7213; ATOM-NEXT:    retq # sched: [79:39.50]
7214;
7215; SLM-LABEL: test_jecxz_jrcxz:
7216; SLM:       # %bb.0:
7217; SLM-NEXT:    #APP
7218; SLM-NEXT:  JXTGT:
7219; SLM-NEXT:    jecxz JXTGT # sched: [1:1.00]
7220; SLM-NEXT:    jrcxz JXTGT # sched: [1:1.00]
7221; SLM-NEXT:    #NO_APP
7222; SLM-NEXT:    retq # sched: [4:1.00]
7223;
7224; SANDY-LABEL: test_jecxz_jrcxz:
7225; SANDY:       # %bb.0:
7226; SANDY-NEXT:    #APP
7227; SANDY-NEXT:  JXTGT:
7228; SANDY-NEXT:    jecxz JXTGT # sched: [2:1.00]
7229; SANDY-NEXT:    jrcxz JXTGT # sched: [2:1.00]
7230; SANDY-NEXT:    #NO_APP
7231; SANDY-NEXT:    retq # sched: [1:1.00]
7232;
7233; HASWELL-LABEL: test_jecxz_jrcxz:
7234; HASWELL:       # %bb.0:
7235; HASWELL-NEXT:    #APP
7236; HASWELL-NEXT:  JXTGT:
7237; HASWELL-NEXT:    jecxz JXTGT # sched: [2:0.50]
7238; HASWELL-NEXT:    jrcxz JXTGT # sched: [2:0.50]
7239; HASWELL-NEXT:    #NO_APP
7240; HASWELL-NEXT:    retq # sched: [7:1.00]
7241;
7242; BROADWELL-LABEL: test_jecxz_jrcxz:
7243; BROADWELL:       # %bb.0:
7244; BROADWELL-NEXT:    #APP
7245; BROADWELL-NEXT:  JXTGT:
7246; BROADWELL-NEXT:    jecxz JXTGT # sched: [2:0.50]
7247; BROADWELL-NEXT:    jrcxz JXTGT # sched: [2:0.50]
7248; BROADWELL-NEXT:    #NO_APP
7249; BROADWELL-NEXT:    retq # sched: [7:1.00]
7250;
7251; SKYLAKE-LABEL: test_jecxz_jrcxz:
7252; SKYLAKE:       # %bb.0:
7253; SKYLAKE-NEXT:    #APP
7254; SKYLAKE-NEXT:  JXTGT:
7255; SKYLAKE-NEXT:    jecxz JXTGT # sched: [2:0.50]
7256; SKYLAKE-NEXT:    jrcxz JXTGT # sched: [2:0.50]
7257; SKYLAKE-NEXT:    #NO_APP
7258; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7259;
7260; SKX-LABEL: test_jecxz_jrcxz:
7261; SKX:       # %bb.0:
7262; SKX-NEXT:    #APP
7263; SKX-NEXT:  JXTGT:
7264; SKX-NEXT:    jecxz JXTGT # sched: [2:0.50]
7265; SKX-NEXT:    jrcxz JXTGT # sched: [2:0.50]
7266; SKX-NEXT:    #NO_APP
7267; SKX-NEXT:    retq # sched: [7:1.00]
7268;
7269; BTVER2-LABEL: test_jecxz_jrcxz:
7270; BTVER2:       # %bb.0:
7271; BTVER2-NEXT:    #APP
7272; BTVER2-NEXT:  JXTGT:
7273; BTVER2-NEXT:    jecxz JXTGT # sched: [1:0.50]
7274; BTVER2-NEXT:    jrcxz JXTGT # sched: [1:0.50]
7275; BTVER2-NEXT:    #NO_APP
7276; BTVER2-NEXT:    retq # sched: [4:1.00]
7277;
7278; ZNVER1-LABEL: test_jecxz_jrcxz:
7279; ZNVER1:       # %bb.0:
7280; ZNVER1-NEXT:    #APP
7281; ZNVER1-NEXT:  JXTGT:
7282; ZNVER1-NEXT:    jecxz JXTGT # sched: [1:0.50]
7283; ZNVER1-NEXT:    jrcxz JXTGT # sched: [1:0.50]
7284; ZNVER1-NEXT:    #NO_APP
7285; ZNVER1-NEXT:    retq # sched: [1:0.50]
7286  call void asm sideeffect "JXTGT: \0A\09 jecxz JXTGT \0A\09 jrcxz JXTGT", ""()
7287  ret void
7288}
7289
7290; TODO - test_jmp
7291
7292define void @test_lahf_sahf() optsize {
7293; GENERIC-LABEL: test_lahf_sahf:
7294; GENERIC:       # %bb.0:
7295; GENERIC-NEXT:    #APP
7296; GENERIC-NEXT:    lahf # sched: [1:0.50]
7297; GENERIC-NEXT:    sahf # sched: [1:0.50]
7298; GENERIC-NEXT:    #NO_APP
7299; GENERIC-NEXT:    retq # sched: [1:1.00]
7300;
7301; ATOM-LABEL: test_lahf_sahf:
7302; ATOM:       # %bb.0:
7303; ATOM-NEXT:    #APP
7304; ATOM-NEXT:    lahf # sched: [2:1.00]
7305; ATOM-NEXT:    sahf # sched: [2:1.00]
7306; ATOM-NEXT:    #NO_APP
7307; ATOM-NEXT:    retq # sched: [79:39.50]
7308;
7309; SLM-LABEL: test_lahf_sahf:
7310; SLM:       # %bb.0:
7311; SLM-NEXT:    #APP
7312; SLM-NEXT:    lahf # sched: [1:0.50]
7313; SLM-NEXT:    sahf # sched: [1:0.50]
7314; SLM-NEXT:    #NO_APP
7315; SLM-NEXT:    retq # sched: [4:1.00]
7316;
7317; SANDY-LABEL: test_lahf_sahf:
7318; SANDY:       # %bb.0:
7319; SANDY-NEXT:    #APP
7320; SANDY-NEXT:    lahf # sched: [1:0.50]
7321; SANDY-NEXT:    sahf # sched: [1:0.50]
7322; SANDY-NEXT:    #NO_APP
7323; SANDY-NEXT:    retq # sched: [1:1.00]
7324;
7325; HASWELL-LABEL: test_lahf_sahf:
7326; HASWELL:       # %bb.0:
7327; HASWELL-NEXT:    #APP
7328; HASWELL-NEXT:    lahf # sched: [1:0.50]
7329; HASWELL-NEXT:    sahf # sched: [1:0.50]
7330; HASWELL-NEXT:    #NO_APP
7331; HASWELL-NEXT:    retq # sched: [7:1.00]
7332;
7333; BROADWELL-LABEL: test_lahf_sahf:
7334; BROADWELL:       # %bb.0:
7335; BROADWELL-NEXT:    #APP
7336; BROADWELL-NEXT:    lahf # sched: [1:0.50]
7337; BROADWELL-NEXT:    sahf # sched: [1:0.50]
7338; BROADWELL-NEXT:    #NO_APP
7339; BROADWELL-NEXT:    retq # sched: [7:1.00]
7340;
7341; SKYLAKE-LABEL: test_lahf_sahf:
7342; SKYLAKE:       # %bb.0:
7343; SKYLAKE-NEXT:    #APP
7344; SKYLAKE-NEXT:    lahf # sched: [1:0.50]
7345; SKYLAKE-NEXT:    sahf # sched: [1:0.50]
7346; SKYLAKE-NEXT:    #NO_APP
7347; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7348;
7349; SKX-LABEL: test_lahf_sahf:
7350; SKX:       # %bb.0:
7351; SKX-NEXT:    #APP
7352; SKX-NEXT:    lahf # sched: [1:0.50]
7353; SKX-NEXT:    sahf # sched: [1:0.50]
7354; SKX-NEXT:    #NO_APP
7355; SKX-NEXT:    retq # sched: [7:1.00]
7356;
7357; BTVER2-LABEL: test_lahf_sahf:
7358; BTVER2:       # %bb.0:
7359; BTVER2-NEXT:    #APP
7360; BTVER2-NEXT:    lahf # sched: [1:0.50]
7361; BTVER2-NEXT:    sahf # sched: [1:0.50]
7362; BTVER2-NEXT:    #NO_APP
7363; BTVER2-NEXT:    retq # sched: [4:1.00]
7364;
7365; ZNVER1-LABEL: test_lahf_sahf:
7366; ZNVER1:       # %bb.0:
7367; ZNVER1-NEXT:    #APP
7368; ZNVER1-NEXT:    lahf # sched: [100:0.25]
7369; ZNVER1-NEXT:    sahf # sched: [2:0.25]
7370; ZNVER1-NEXT:    #NO_APP
7371; ZNVER1-NEXT:    retq # sched: [1:0.50]
7372  tail call void asm "lahf \0A\09 sahf", ""() nounwind
7373  ret void
7374}
7375
7376; TODO - test_lds
7377; TODO - test_les
7378; TODO - test_lfs
7379; TODO - test_lgs
7380; TODO - test_lss
7381
7382; TODO - test_lea
7383
7384define void @test_leave() optsize {
7385; GENERIC-LABEL: test_leave:
7386; GENERIC:       # %bb.0:
7387; GENERIC-NEXT:    #APP
7388; GENERIC-NEXT:    leave # sched: [7:0.67]
7389; GENERIC-NEXT:    #NO_APP
7390; GENERIC-NEXT:    retq # sched: [1:1.00]
7391;
7392; ATOM-LABEL: test_leave:
7393; ATOM:       # %bb.0:
7394; ATOM-NEXT:    #APP
7395; ATOM-NEXT:    leave # sched: [2:1.00]
7396; ATOM-NEXT:    #NO_APP
7397; ATOM-NEXT:    retq # sched: [79:39.50]
7398;
7399; SLM-LABEL: test_leave:
7400; SLM:       # %bb.0:
7401; SLM-NEXT:    #APP
7402; SLM-NEXT:    leave # sched: [1:0.50]
7403; SLM-NEXT:    #NO_APP
7404; SLM-NEXT:    retq # sched: [4:1.00]
7405;
7406; SANDY-LABEL: test_leave:
7407; SANDY:       # %bb.0:
7408; SANDY-NEXT:    #APP
7409; SANDY-NEXT:    leave # sched: [7:0.67]
7410; SANDY-NEXT:    #NO_APP
7411; SANDY-NEXT:    retq # sched: [1:1.00]
7412;
7413; HASWELL-LABEL: test_leave:
7414; HASWELL:       # %bb.0:
7415; HASWELL-NEXT:    #APP
7416; HASWELL-NEXT:    leave # sched: [7:0.50]
7417; HASWELL-NEXT:    #NO_APP
7418; HASWELL-NEXT:    retq # sched: [7:1.00]
7419;
7420; BROADWELL-LABEL: test_leave:
7421; BROADWELL:       # %bb.0:
7422; BROADWELL-NEXT:    #APP
7423; BROADWELL-NEXT:    leave # sched: [7:0.50]
7424; BROADWELL-NEXT:    #NO_APP
7425; BROADWELL-NEXT:    retq # sched: [7:1.00]
7426;
7427; SKYLAKE-LABEL: test_leave:
7428; SKYLAKE:       # %bb.0:
7429; SKYLAKE-NEXT:    #APP
7430; SKYLAKE-NEXT:    leave # sched: [7:0.50]
7431; SKYLAKE-NEXT:    #NO_APP
7432; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7433;
7434; SKX-LABEL: test_leave:
7435; SKX:       # %bb.0:
7436; SKX-NEXT:    #APP
7437; SKX-NEXT:    leave # sched: [7:0.50]
7438; SKX-NEXT:    #NO_APP
7439; SKX-NEXT:    retq # sched: [7:1.00]
7440;
7441; BTVER2-LABEL: test_leave:
7442; BTVER2:       # %bb.0:
7443; BTVER2-NEXT:    #APP
7444; BTVER2-NEXT:    leave # sched: [1:0.50]
7445; BTVER2-NEXT:    #NO_APP
7446; BTVER2-NEXT:    retq # sched: [4:1.00]
7447;
7448; ZNVER1-LABEL: test_leave:
7449; ZNVER1:       # %bb.0:
7450; ZNVER1-NEXT:    #APP
7451; ZNVER1-NEXT:    leave # sched: [8:0.50]
7452; ZNVER1-NEXT:    #NO_APP
7453; ZNVER1-NEXT:    retq # sched: [1:0.50]
7454  tail call void asm "leave", ""() nounwind
7455  ret void
7456}
7457
7458define void @test_lods() optsize {
7459; GENERIC-LABEL: test_lods:
7460; GENERIC:       # %bb.0:
7461; GENERIC-NEXT:    #APP
7462; GENERIC-NEXT:    lodsb (%rsi), %al # sched: [7:0.67]
7463; GENERIC-NEXT:    lodsw (%rsi), %ax # sched: [7:0.67]
7464; GENERIC-NEXT:    lodsl (%rsi), %eax # sched: [6:0.50]
7465; GENERIC-NEXT:    lodsq (%rsi), %rax # sched: [6:0.50]
7466; GENERIC-NEXT:    #NO_APP
7467; GENERIC-NEXT:    retq # sched: [1:1.00]
7468;
7469; ATOM-LABEL: test_lods:
7470; ATOM:       # %bb.0:
7471; ATOM-NEXT:    #APP
7472; ATOM-NEXT:    lodsb (%rsi), %al # sched: [2:1.00]
7473; ATOM-NEXT:    lodsw (%rsi), %ax # sched: [2:1.00]
7474; ATOM-NEXT:    lodsl (%rsi), %eax # sched: [2:1.00]
7475; ATOM-NEXT:    lodsq (%rsi), %rax # sched: [2:1.00]
7476; ATOM-NEXT:    #NO_APP
7477; ATOM-NEXT:    retq # sched: [79:39.50]
7478;
7479; SLM-LABEL: test_lods:
7480; SLM:       # %bb.0:
7481; SLM-NEXT:    #APP
7482; SLM-NEXT:    lodsb (%rsi), %al # sched: [100:1.00]
7483; SLM-NEXT:    lodsw (%rsi), %ax # sched: [100:1.00]
7484; SLM-NEXT:    lodsl (%rsi), %eax # sched: [100:1.00]
7485; SLM-NEXT:    lodsq (%rsi), %rax # sched: [100:1.00]
7486; SLM-NEXT:    #NO_APP
7487; SLM-NEXT:    retq # sched: [4:1.00]
7488;
7489; SANDY-LABEL: test_lods:
7490; SANDY:       # %bb.0:
7491; SANDY-NEXT:    #APP
7492; SANDY-NEXT:    lodsb (%rsi), %al # sched: [7:0.67]
7493; SANDY-NEXT:    lodsw (%rsi), %ax # sched: [7:0.67]
7494; SANDY-NEXT:    lodsl (%rsi), %eax # sched: [6:0.50]
7495; SANDY-NEXT:    lodsq (%rsi), %rax # sched: [6:0.50]
7496; SANDY-NEXT:    #NO_APP
7497; SANDY-NEXT:    retq # sched: [1:1.00]
7498;
7499; HASWELL-LABEL: test_lods:
7500; HASWELL:       # %bb.0:
7501; HASWELL-NEXT:    #APP
7502; HASWELL-NEXT:    lodsb (%rsi), %al # sched: [1:0.50]
7503; HASWELL-NEXT:    lodsw (%rsi), %ax # sched: [1:0.50]
7504; HASWELL-NEXT:    lodsl (%rsi), %eax # sched: [1:0.50]
7505; HASWELL-NEXT:    lodsq (%rsi), %rax # sched: [1:0.50]
7506; HASWELL-NEXT:    #NO_APP
7507; HASWELL-NEXT:    retq # sched: [7:1.00]
7508;
7509; BROADWELL-LABEL: test_lods:
7510; BROADWELL:       # %bb.0:
7511; BROADWELL-NEXT:    #APP
7512; BROADWELL-NEXT:    lodsb (%rsi), %al # sched: [100:0.25]
7513; BROADWELL-NEXT:    lodsw (%rsi), %ax # sched: [100:0.25]
7514; BROADWELL-NEXT:    lodsl (%rsi), %eax # sched: [100:0.25]
7515; BROADWELL-NEXT:    lodsq (%rsi), %rax # sched: [100:0.25]
7516; BROADWELL-NEXT:    #NO_APP
7517; BROADWELL-NEXT:    retq # sched: [7:1.00]
7518;
7519; SKYLAKE-LABEL: test_lods:
7520; SKYLAKE:       # %bb.0:
7521; SKYLAKE-NEXT:    #APP
7522; SKYLAKE-NEXT:    lodsb (%rsi), %al # sched: [100:0.25]
7523; SKYLAKE-NEXT:    lodsw (%rsi), %ax # sched: [100:0.25]
7524; SKYLAKE-NEXT:    lodsl (%rsi), %eax # sched: [100:0.25]
7525; SKYLAKE-NEXT:    lodsq (%rsi), %rax # sched: [100:0.25]
7526; SKYLAKE-NEXT:    #NO_APP
7527; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7528;
7529; SKX-LABEL: test_lods:
7530; SKX:       # %bb.0:
7531; SKX-NEXT:    #APP
7532; SKX-NEXT:    lodsb (%rsi), %al # sched: [100:0.25]
7533; SKX-NEXT:    lodsw (%rsi), %ax # sched: [100:0.25]
7534; SKX-NEXT:    lodsl (%rsi), %eax # sched: [100:0.25]
7535; SKX-NEXT:    lodsq (%rsi), %rax # sched: [100:0.25]
7536; SKX-NEXT:    #NO_APP
7537; SKX-NEXT:    retq # sched: [7:1.00]
7538;
7539; BTVER2-LABEL: test_lods:
7540; BTVER2:       # %bb.0:
7541; BTVER2-NEXT:    #APP
7542; BTVER2-NEXT:    lodsb (%rsi), %al # sched: [100:0.50]
7543; BTVER2-NEXT:    lodsw (%rsi), %ax # sched: [100:0.50]
7544; BTVER2-NEXT:    lodsl (%rsi), %eax # sched: [100:0.50]
7545; BTVER2-NEXT:    lodsq (%rsi), %rax # sched: [100:0.50]
7546; BTVER2-NEXT:    #NO_APP
7547; BTVER2-NEXT:    retq # sched: [4:1.00]
7548;
7549; ZNVER1-LABEL: test_lods:
7550; ZNVER1:       # %bb.0:
7551; ZNVER1-NEXT:    #APP
7552; ZNVER1-NEXT:    lodsb (%rsi), %al # sched: [100:0.25]
7553; ZNVER1-NEXT:    lodsw (%rsi), %ax # sched: [100:0.25]
7554; ZNVER1-NEXT:    lodsl (%rsi), %eax # sched: [100:0.25]
7555; ZNVER1-NEXT:    lodsq (%rsi), %rax # sched: [100:0.25]
7556; ZNVER1-NEXT:    #NO_APP
7557; ZNVER1-NEXT:    retq # sched: [1:0.50]
7558  call void asm sideeffect "lodsb \0A\09 lodsw \0A\09 lodsl \0A\09 lodsq", ""()
7559  ret void
7560}
7561
7562define void @test_loop() optsize {
7563; GENERIC-LABEL: test_loop:
7564; GENERIC:       # %bb.0:
7565; GENERIC-NEXT:    #APP
7566; GENERIC-NEXT:  LTGT:
7567; GENERIC-NEXT:    loop LTGT # sched: [1:1.00]
7568; GENERIC-NEXT:    loope LTGT # sched: [1:1.00]
7569; GENERIC-NEXT:    loopne LTGT # sched: [1:1.00]
7570; GENERIC-NEXT:    #NO_APP
7571; GENERIC-NEXT:    retq # sched: [1:1.00]
7572;
7573; ATOM-LABEL: test_loop:
7574; ATOM:       # %bb.0:
7575; ATOM-NEXT:    #APP
7576; ATOM-NEXT:  LTGT:
7577; ATOM-NEXT:    loop LTGT # sched: [18:9.00]
7578; ATOM-NEXT:    loope LTGT # sched: [8:4.00]
7579; ATOM-NEXT:    loopne LTGT # sched: [17:8.50]
7580; ATOM-NEXT:    #NO_APP
7581; ATOM-NEXT:    retq # sched: [79:39.50]
7582;
7583; SLM-LABEL: test_loop:
7584; SLM:       # %bb.0:
7585; SLM-NEXT:    #APP
7586; SLM-NEXT:  LTGT:
7587; SLM-NEXT:    loop LTGT # sched: [1:1.00]
7588; SLM-NEXT:    loope LTGT # sched: [1:1.00]
7589; SLM-NEXT:    loopne LTGT # sched: [1:1.00]
7590; SLM-NEXT:    #NO_APP
7591; SLM-NEXT:    retq # sched: [4:1.00]
7592;
7593; SANDY-LABEL: test_loop:
7594; SANDY:       # %bb.0:
7595; SANDY-NEXT:    #APP
7596; SANDY-NEXT:  LTGT:
7597; SANDY-NEXT:    loop LTGT # sched: [1:1.00]
7598; SANDY-NEXT:    loope LTGT # sched: [1:1.00]
7599; SANDY-NEXT:    loopne LTGT # sched: [1:1.00]
7600; SANDY-NEXT:    #NO_APP
7601; SANDY-NEXT:    retq # sched: [1:1.00]
7602;
7603; HASWELL-LABEL: test_loop:
7604; HASWELL:       # %bb.0:
7605; HASWELL-NEXT:    #APP
7606; HASWELL-NEXT:  LTGT:
7607; HASWELL-NEXT:    loop LTGT # sched: [7:2.00]
7608; HASWELL-NEXT:    loope LTGT # sched: [11:2.75]
7609; HASWELL-NEXT:    loopne LTGT # sched: [11:2.75]
7610; HASWELL-NEXT:    #NO_APP
7611; HASWELL-NEXT:    retq # sched: [7:1.00]
7612;
7613; BROADWELL-LABEL: test_loop:
7614; BROADWELL:       # %bb.0:
7615; BROADWELL-NEXT:    #APP
7616; BROADWELL-NEXT:  LTGT:
7617; BROADWELL-NEXT:    loop LTGT # sched: [7:2.00]
7618; BROADWELL-NEXT:    loope LTGT # sched: [11:2.75]
7619; BROADWELL-NEXT:    loopne LTGT # sched: [11:2.75]
7620; BROADWELL-NEXT:    #NO_APP
7621; BROADWELL-NEXT:    retq # sched: [7:1.00]
7622;
7623; SKYLAKE-LABEL: test_loop:
7624; SKYLAKE:       # %bb.0:
7625; SKYLAKE-NEXT:    #APP
7626; SKYLAKE-NEXT:  LTGT:
7627; SKYLAKE-NEXT:    loop LTGT # sched: [7:2.00]
7628; SKYLAKE-NEXT:    loope LTGT # sched: [11:2.75]
7629; SKYLAKE-NEXT:    loopne LTGT # sched: [11:2.75]
7630; SKYLAKE-NEXT:    #NO_APP
7631; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7632;
7633; SKX-LABEL: test_loop:
7634; SKX:       # %bb.0:
7635; SKX-NEXT:    #APP
7636; SKX-NEXT:  LTGT:
7637; SKX-NEXT:    loop LTGT # sched: [7:2.00]
7638; SKX-NEXT:    loope LTGT # sched: [11:2.75]
7639; SKX-NEXT:    loopne LTGT # sched: [11:2.75]
7640; SKX-NEXT:    #NO_APP
7641; SKX-NEXT:    retq # sched: [7:1.00]
7642;
7643; BTVER2-LABEL: test_loop:
7644; BTVER2:       # %bb.0:
7645; BTVER2-NEXT:    #APP
7646; BTVER2-NEXT:  LTGT:
7647; BTVER2-NEXT:    loop LTGT # sched: [1:0.50]
7648; BTVER2-NEXT:    loope LTGT # sched: [1:0.50]
7649; BTVER2-NEXT:    loopne LTGT # sched: [1:0.50]
7650; BTVER2-NEXT:    #NO_APP
7651; BTVER2-NEXT:    retq # sched: [4:1.00]
7652;
7653; ZNVER1-LABEL: test_loop:
7654; ZNVER1:       # %bb.0:
7655; ZNVER1-NEXT:    #APP
7656; ZNVER1-NEXT:  LTGT:
7657; ZNVER1-NEXT:    loop LTGT # sched: [1:0.50]
7658; ZNVER1-NEXT:    loope LTGT # sched: [1:0.50]
7659; ZNVER1-NEXT:    loopne LTGT # sched: [1:0.50]
7660; ZNVER1-NEXT:    #NO_APP
7661; ZNVER1-NEXT:    retq # sched: [1:0.50]
7662  call void asm sideeffect "LTGT: \0A\09 loop LTGT \0A\09 loope LTGT \0A\09 loopne LTGT", ""()
7663  ret void
7664}
7665
7666; TODO - test_mov
7667
7668define void @test_movnti(i32 %a0, i32 *%a1, i64 %a2, i64 *%a3) optsize {
7669; GENERIC-LABEL: test_movnti:
7670; GENERIC:       # %bb.0:
7671; GENERIC-NEXT:    #APP
7672; GENERIC-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7673; GENERIC-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7674; GENERIC-NEXT:    #NO_APP
7675; GENERIC-NEXT:    retq # sched: [1:1.00]
7676;
7677; ATOM-LABEL: test_movnti:
7678; ATOM:       # %bb.0:
7679; ATOM-NEXT:    #APP
7680; ATOM-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7681; ATOM-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7682; ATOM-NEXT:    #NO_APP
7683; ATOM-NEXT:    retq # sched: [79:39.50]
7684;
7685; SLM-LABEL: test_movnti:
7686; SLM:       # %bb.0:
7687; SLM-NEXT:    #APP
7688; SLM-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7689; SLM-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7690; SLM-NEXT:    #NO_APP
7691; SLM-NEXT:    retq # sched: [4:1.00]
7692;
7693; SANDY-LABEL: test_movnti:
7694; SANDY:       # %bb.0:
7695; SANDY-NEXT:    #APP
7696; SANDY-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7697; SANDY-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7698; SANDY-NEXT:    #NO_APP
7699; SANDY-NEXT:    retq # sched: [1:1.00]
7700;
7701; HASWELL-LABEL: test_movnti:
7702; HASWELL:       # %bb.0:
7703; HASWELL-NEXT:    #APP
7704; HASWELL-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7705; HASWELL-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7706; HASWELL-NEXT:    #NO_APP
7707; HASWELL-NEXT:    retq # sched: [7:1.00]
7708;
7709; BROADWELL-LABEL: test_movnti:
7710; BROADWELL:       # %bb.0:
7711; BROADWELL-NEXT:    #APP
7712; BROADWELL-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7713; BROADWELL-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7714; BROADWELL-NEXT:    #NO_APP
7715; BROADWELL-NEXT:    retq # sched: [7:1.00]
7716;
7717; SKYLAKE-LABEL: test_movnti:
7718; SKYLAKE:       # %bb.0:
7719; SKYLAKE-NEXT:    #APP
7720; SKYLAKE-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7721; SKYLAKE-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7722; SKYLAKE-NEXT:    #NO_APP
7723; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7724;
7725; SKX-LABEL: test_movnti:
7726; SKX:       # %bb.0:
7727; SKX-NEXT:    #APP
7728; SKX-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7729; SKX-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7730; SKX-NEXT:    #NO_APP
7731; SKX-NEXT:    retq # sched: [7:1.00]
7732;
7733; BTVER2-LABEL: test_movnti:
7734; BTVER2:       # %bb.0:
7735; BTVER2-NEXT:    #APP
7736; BTVER2-NEXT:    movntil %edi, (%rsi) # sched: [1:1.00]
7737; BTVER2-NEXT:    movntiq %rdx, (%rcx) # sched: [1:1.00]
7738; BTVER2-NEXT:    #NO_APP
7739; BTVER2-NEXT:    retq # sched: [4:1.00]
7740;
7741; ZNVER1-LABEL: test_movnti:
7742; ZNVER1:       # %bb.0:
7743; ZNVER1-NEXT:    #APP
7744; ZNVER1-NEXT:    movntil %edi, (%rsi) # sched: [1:0.50]
7745; ZNVER1-NEXT:    movntiq %rdx, (%rcx) # sched: [1:0.50]
7746; ZNVER1-NEXT:    #NO_APP
7747; ZNVER1-NEXT:    retq # sched: [1:0.50]
7748  call void asm sideeffect "movnti $0, $1 \0A\09 movnti $2, $3", "r,*m,r,*m"(i32 %a0, i32 *%a1, i64 %a2, i64 *%a3)
7749  ret void
7750}
7751
7752define void @test_movs() optsize {
7753; GENERIC-LABEL: test_movs:
7754; GENERIC:       # %bb.0:
7755; GENERIC-NEXT:    #APP
7756; GENERIC-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [8:1.00]
7757; GENERIC-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [8:1.00]
7758; GENERIC-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [8:1.00]
7759; GENERIC-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [8:1.00]
7760; GENERIC-NEXT:    #NO_APP
7761; GENERIC-NEXT:    retq # sched: [1:1.00]
7762;
7763; ATOM-LABEL: test_movs:
7764; ATOM:       # %bb.0:
7765; ATOM-NEXT:    #APP
7766; ATOM-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [3:1.50]
7767; ATOM-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [3:1.50]
7768; ATOM-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [3:1.50]
7769; ATOM-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [3:1.50]
7770; ATOM-NEXT:    #NO_APP
7771; ATOM-NEXT:    retq # sched: [79:39.50]
7772;
7773; SLM-LABEL: test_movs:
7774; SLM:       # %bb.0:
7775; SLM-NEXT:    #APP
7776; SLM-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [100:1.00]
7777; SLM-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [100:1.00]
7778; SLM-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [100:1.00]
7779; SLM-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [100:1.00]
7780; SLM-NEXT:    #NO_APP
7781; SLM-NEXT:    retq # sched: [4:1.00]
7782;
7783; SANDY-LABEL: test_movs:
7784; SANDY:       # %bb.0:
7785; SANDY-NEXT:    #APP
7786; SANDY-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [8:1.00]
7787; SANDY-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [8:1.00]
7788; SANDY-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [8:1.00]
7789; SANDY-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [8:1.00]
7790; SANDY-NEXT:    #NO_APP
7791; SANDY-NEXT:    retq # sched: [1:1.00]
7792;
7793; HASWELL-LABEL: test_movs:
7794; HASWELL:       # %bb.0:
7795; HASWELL-NEXT:    #APP
7796; HASWELL-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [4:1.00]
7797; HASWELL-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [4:1.00]
7798; HASWELL-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [4:1.00]
7799; HASWELL-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [4:1.00]
7800; HASWELL-NEXT:    #NO_APP
7801; HASWELL-NEXT:    retq # sched: [7:1.00]
7802;
7803; BROADWELL-LABEL: test_movs:
7804; BROADWELL:       # %bb.0:
7805; BROADWELL-NEXT:    #APP
7806; BROADWELL-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [100:0.25]
7807; BROADWELL-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [100:0.25]
7808; BROADWELL-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [100:0.25]
7809; BROADWELL-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [100:0.25]
7810; BROADWELL-NEXT:    #NO_APP
7811; BROADWELL-NEXT:    retq # sched: [7:1.00]
7812;
7813; SKYLAKE-LABEL: test_movs:
7814; SKYLAKE:       # %bb.0:
7815; SKYLAKE-NEXT:    #APP
7816; SKYLAKE-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [100:0.25]
7817; SKYLAKE-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [100:0.25]
7818; SKYLAKE-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [100:0.25]
7819; SKYLAKE-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [100:0.25]
7820; SKYLAKE-NEXT:    #NO_APP
7821; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7822;
7823; SKX-LABEL: test_movs:
7824; SKX:       # %bb.0:
7825; SKX-NEXT:    #APP
7826; SKX-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [100:0.25]
7827; SKX-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [100:0.25]
7828; SKX-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [100:0.25]
7829; SKX-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [100:0.25]
7830; SKX-NEXT:    #NO_APP
7831; SKX-NEXT:    retq # sched: [7:1.00]
7832;
7833; BTVER2-LABEL: test_movs:
7834; BTVER2:       # %bb.0:
7835; BTVER2-NEXT:    #APP
7836; BTVER2-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [100:0.50]
7837; BTVER2-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [100:0.50]
7838; BTVER2-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [100:0.50]
7839; BTVER2-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [100:0.50]
7840; BTVER2-NEXT:    #NO_APP
7841; BTVER2-NEXT:    retq # sched: [4:1.00]
7842;
7843; ZNVER1-LABEL: test_movs:
7844; ZNVER1:       # %bb.0:
7845; ZNVER1-NEXT:    #APP
7846; ZNVER1-NEXT:    movsb (%rsi), %es:(%rdi) # sched: [100:0.25]
7847; ZNVER1-NEXT:    movsw (%rsi), %es:(%rdi) # sched: [100:0.25]
7848; ZNVER1-NEXT:    movsl (%rsi), %es:(%rdi) # sched: [100:0.25]
7849; ZNVER1-NEXT:    movsq (%rsi), %es:(%rdi) # sched: [100:0.25]
7850; ZNVER1-NEXT:    #NO_APP
7851; ZNVER1-NEXT:    retq # sched: [1:0.50]
7852  call void asm sideeffect "movsb \0A\09 movsw \0A\09 movsl \0A\09 movsq", ""()
7853  ret void
7854}
7855
7856; TODO - test_movsx
7857; TODO - test_movzx
7858
7859define i64 @test_movslq(i32 %a0, i32 *%a1) optsize {
7860; GENERIC-LABEL: test_movslq:
7861; GENERIC:       # %bb.0:
7862; GENERIC-NEXT:    #APP
7863; GENERIC-NEXT:    movslq %edi, %rax # sched: [1:0.33]
7864; GENERIC-NEXT:    movslq (%rsi), %rcx # sched: [5:0.50]
7865; GENERIC-NEXT:    #NO_APP
7866; GENERIC-NEXT:    orq %rcx, %rax # sched: [1:0.33]
7867; GENERIC-NEXT:    retq # sched: [1:1.00]
7868;
7869; ATOM-LABEL: test_movslq:
7870; ATOM:       # %bb.0:
7871; ATOM-NEXT:    #APP
7872; ATOM-NEXT:    movslq %edi, %rax # sched: [1:1.00]
7873; ATOM-NEXT:    movslq (%rsi), %rcx # sched: [1:1.00]
7874; ATOM-NEXT:    #NO_APP
7875; ATOM-NEXT:    orq %rcx, %rax # sched: [1:0.50]
7876; ATOM-NEXT:    retq # sched: [79:39.50]
7877;
7878; SLM-LABEL: test_movslq:
7879; SLM:       # %bb.0:
7880; SLM-NEXT:    #APP
7881; SLM-NEXT:    movslq %edi, %rax # sched: [1:0.50]
7882; SLM-NEXT:    movslq (%rsi), %rcx # sched: [4:1.00]
7883; SLM-NEXT:    #NO_APP
7884; SLM-NEXT:    orq %rcx, %rax # sched: [1:0.50]
7885; SLM-NEXT:    retq # sched: [4:1.00]
7886;
7887; SANDY-LABEL: test_movslq:
7888; SANDY:       # %bb.0:
7889; SANDY-NEXT:    #APP
7890; SANDY-NEXT:    movslq %edi, %rax # sched: [1:0.33]
7891; SANDY-NEXT:    movslq (%rsi), %rcx # sched: [5:0.50]
7892; SANDY-NEXT:    #NO_APP
7893; SANDY-NEXT:    orq %rcx, %rax # sched: [1:0.33]
7894; SANDY-NEXT:    retq # sched: [1:1.00]
7895;
7896; HASWELL-LABEL: test_movslq:
7897; HASWELL:       # %bb.0:
7898; HASWELL-NEXT:    #APP
7899; HASWELL-NEXT:    movslq %edi, %rax # sched: [1:0.25]
7900; HASWELL-NEXT:    movslq (%rsi), %rcx # sched: [5:0.50]
7901; HASWELL-NEXT:    #NO_APP
7902; HASWELL-NEXT:    orq %rcx, %rax # sched: [1:0.25]
7903; HASWELL-NEXT:    retq # sched: [7:1.00]
7904;
7905; BROADWELL-LABEL: test_movslq:
7906; BROADWELL:       # %bb.0:
7907; BROADWELL-NEXT:    #APP
7908; BROADWELL-NEXT:    movslq %edi, %rax # sched: [1:0.25]
7909; BROADWELL-NEXT:    movslq (%rsi), %rcx # sched: [5:0.50]
7910; BROADWELL-NEXT:    #NO_APP
7911; BROADWELL-NEXT:    orq %rcx, %rax # sched: [1:0.25]
7912; BROADWELL-NEXT:    retq # sched: [7:1.00]
7913;
7914; SKYLAKE-LABEL: test_movslq:
7915; SKYLAKE:       # %bb.0:
7916; SKYLAKE-NEXT:    #APP
7917; SKYLAKE-NEXT:    movslq %edi, %rax # sched: [1:0.25]
7918; SKYLAKE-NEXT:    movslq (%rsi), %rcx # sched: [5:0.50]
7919; SKYLAKE-NEXT:    #NO_APP
7920; SKYLAKE-NEXT:    orq %rcx, %rax # sched: [1:0.25]
7921; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7922;
7923; SKX-LABEL: test_movslq:
7924; SKX:       # %bb.0:
7925; SKX-NEXT:    #APP
7926; SKX-NEXT:    movslq %edi, %rax # sched: [1:0.25]
7927; SKX-NEXT:    movslq (%rsi), %rcx # sched: [5:0.50]
7928; SKX-NEXT:    #NO_APP
7929; SKX-NEXT:    orq %rcx, %rax # sched: [1:0.25]
7930; SKX-NEXT:    retq # sched: [7:1.00]
7931;
7932; BTVER2-LABEL: test_movslq:
7933; BTVER2:       # %bb.0:
7934; BTVER2-NEXT:    #APP
7935; BTVER2-NEXT:    movslq %edi, %rax # sched: [1:0.50]
7936; BTVER2-NEXT:    movslq (%rsi), %rcx # sched: [4:1.00]
7937; BTVER2-NEXT:    #NO_APP
7938; BTVER2-NEXT:    orq %rcx, %rax # sched: [1:0.50]
7939; BTVER2-NEXT:    retq # sched: [4:1.00]
7940;
7941; ZNVER1-LABEL: test_movslq:
7942; ZNVER1:       # %bb.0:
7943; ZNVER1-NEXT:    #APP
7944; ZNVER1-NEXT:    movslq %edi, %rax # sched: [1:0.25]
7945; ZNVER1-NEXT:    movslq (%rsi), %rcx # sched: [5:0.50]
7946; ZNVER1-NEXT:    #NO_APP
7947; ZNVER1-NEXT:    orq %rcx, %rax # sched: [1:0.25]
7948; ZNVER1-NEXT:    retq # sched: [1:0.50]
7949  %1 = call { i64, i64 } asm sideeffect "movslq $2, $0 \0A\09 movslq $3, $1", "=r,=r,r,*m"(i32 %a0, i32 *%a1)
7950  %2 = extractvalue { i64, i64 } %1, 0
7951  %3 = extractvalue { i64, i64 } %1, 1
7952  %4 = or i64 %2, %3
7953  ret i64 %4
7954}
7955
7956define void @test_mul(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
7957; GENERIC-LABEL: test_mul:
7958; GENERIC:       # %bb.0:
7959; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
7960; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
7961; GENERIC-NEXT:    #APP
7962; GENERIC-NEXT:    mulb %dil # sched: [3:1.00]
7963; GENERIC-NEXT:    mulb (%r8) # sched: [8:1.00]
7964; GENERIC-NEXT:    mulw %si # sched: [4:1.33]
7965; GENERIC-NEXT:    mulw (%r9) # sched: [9:1.33]
7966; GENERIC-NEXT:    mull %edx # sched: [4:1.00]
7967; GENERIC-NEXT:    mull (%rax) # sched: [9:1.00]
7968; GENERIC-NEXT:    mulq %rcx # sched: [4:1.00]
7969; GENERIC-NEXT:    mulq (%r10) # sched: [9:1.00]
7970; GENERIC-NEXT:    #NO_APP
7971; GENERIC-NEXT:    retq # sched: [1:1.00]
7972;
7973; ATOM-LABEL: test_mul:
7974; ATOM:       # %bb.0:
7975; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
7976; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
7977; ATOM-NEXT:    #APP
7978; ATOM-NEXT:    mulb %dil # sched: [7:3.50]
7979; ATOM-NEXT:    mulb (%r8) # sched: [7:3.50]
7980; ATOM-NEXT:    mulw %si # sched: [7:3.50]
7981; ATOM-NEXT:    mulw (%r9) # sched: [8:4.00]
7982; ATOM-NEXT:    mull %edx # sched: [6:3.00]
7983; ATOM-NEXT:    mull (%rax) # sched: [7:3.50]
7984; ATOM-NEXT:    mulq %rcx # sched: [12:6.00]
7985; ATOM-NEXT:    mulq (%r10) # sched: [12:6.00]
7986; ATOM-NEXT:    #NO_APP
7987; ATOM-NEXT:    retq # sched: [79:39.50]
7988;
7989; SLM-LABEL: test_mul:
7990; SLM:       # %bb.0:
7991; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
7992; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
7993; SLM-NEXT:    #APP
7994; SLM-NEXT:    mulb %dil # sched: [3:1.00]
7995; SLM-NEXT:    mulb (%r8) # sched: [6:1.00]
7996; SLM-NEXT:    mulw %si # sched: [3:1.00]
7997; SLM-NEXT:    mulw (%r9) # sched: [6:1.00]
7998; SLM-NEXT:    mull %edx # sched: [3:1.00]
7999; SLM-NEXT:    mull (%rax) # sched: [6:1.00]
8000; SLM-NEXT:    mulq %rcx # sched: [3:1.00]
8001; SLM-NEXT:    mulq (%r10) # sched: [6:1.00]
8002; SLM-NEXT:    #NO_APP
8003; SLM-NEXT:    retq # sched: [4:1.00]
8004;
8005; SANDY-LABEL: test_mul:
8006; SANDY:       # %bb.0:
8007; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8008; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8009; SANDY-NEXT:    #APP
8010; SANDY-NEXT:    mulb %dil # sched: [3:1.00]
8011; SANDY-NEXT:    mulb (%r8) # sched: [8:1.00]
8012; SANDY-NEXT:    mulw %si # sched: [4:1.33]
8013; SANDY-NEXT:    mulw (%r9) # sched: [9:1.33]
8014; SANDY-NEXT:    mull %edx # sched: [4:1.00]
8015; SANDY-NEXT:    mull (%rax) # sched: [9:1.00]
8016; SANDY-NEXT:    mulq %rcx # sched: [4:1.00]
8017; SANDY-NEXT:    mulq (%r10) # sched: [9:1.00]
8018; SANDY-NEXT:    #NO_APP
8019; SANDY-NEXT:    retq # sched: [1:1.00]
8020;
8021; HASWELL-LABEL: test_mul:
8022; HASWELL:       # %bb.0:
8023; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8024; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8025; HASWELL-NEXT:    #APP
8026; HASWELL-NEXT:    mulb %dil # sched: [3:1.00]
8027; HASWELL-NEXT:    mulb (%r8) # sched: [8:1.00]
8028; HASWELL-NEXT:    mulw %si # sched: [4:1.00]
8029; HASWELL-NEXT:    mulw (%r9) # sched: [9:1.00]
8030; HASWELL-NEXT:    mull %edx # sched: [4:1.00]
8031; HASWELL-NEXT:    mull (%rax) # sched: [9:1.00]
8032; HASWELL-NEXT:    mulq %rcx # sched: [4:1.00]
8033; HASWELL-NEXT:    mulq (%r10) # sched: [9:1.00]
8034; HASWELL-NEXT:    #NO_APP
8035; HASWELL-NEXT:    retq # sched: [7:1.00]
8036;
8037; BROADWELL-LABEL: test_mul:
8038; BROADWELL:       # %bb.0:
8039; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8040; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8041; BROADWELL-NEXT:    #APP
8042; BROADWELL-NEXT:    mulb %dil # sched: [3:1.00]
8043; BROADWELL-NEXT:    mulb (%r8) # sched: [8:1.00]
8044; BROADWELL-NEXT:    mulw %si # sched: [4:1.00]
8045; BROADWELL-NEXT:    mulw (%r9) # sched: [9:1.00]
8046; BROADWELL-NEXT:    mull %edx # sched: [4:1.00]
8047; BROADWELL-NEXT:    mull (%rax) # sched: [9:1.00]
8048; BROADWELL-NEXT:    mulq %rcx # sched: [4:1.00]
8049; BROADWELL-NEXT:    mulq (%r10) # sched: [9:1.00]
8050; BROADWELL-NEXT:    #NO_APP
8051; BROADWELL-NEXT:    retq # sched: [7:1.00]
8052;
8053; SKYLAKE-LABEL: test_mul:
8054; SKYLAKE:       # %bb.0:
8055; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8056; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8057; SKYLAKE-NEXT:    #APP
8058; SKYLAKE-NEXT:    mulb %dil # sched: [3:1.00]
8059; SKYLAKE-NEXT:    mulb (%r8) # sched: [8:1.00]
8060; SKYLAKE-NEXT:    mulw %si # sched: [4:1.00]
8061; SKYLAKE-NEXT:    mulw (%r9) # sched: [9:1.00]
8062; SKYLAKE-NEXT:    mull %edx # sched: [4:1.00]
8063; SKYLAKE-NEXT:    mull (%rax) # sched: [9:1.00]
8064; SKYLAKE-NEXT:    mulq %rcx # sched: [4:1.00]
8065; SKYLAKE-NEXT:    mulq (%r10) # sched: [9:1.00]
8066; SKYLAKE-NEXT:    #NO_APP
8067; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8068;
8069; SKX-LABEL: test_mul:
8070; SKX:       # %bb.0:
8071; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8072; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8073; SKX-NEXT:    #APP
8074; SKX-NEXT:    mulb %dil # sched: [3:1.00]
8075; SKX-NEXT:    mulb (%r8) # sched: [8:1.00]
8076; SKX-NEXT:    mulw %si # sched: [4:1.00]
8077; SKX-NEXT:    mulw (%r9) # sched: [9:1.00]
8078; SKX-NEXT:    mull %edx # sched: [4:1.00]
8079; SKX-NEXT:    mull (%rax) # sched: [9:1.00]
8080; SKX-NEXT:    mulq %rcx # sched: [4:1.00]
8081; SKX-NEXT:    mulq (%r10) # sched: [9:1.00]
8082; SKX-NEXT:    #NO_APP
8083; SKX-NEXT:    retq # sched: [7:1.00]
8084;
8085; BTVER2-LABEL: test_mul:
8086; BTVER2:       # %bb.0:
8087; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
8088; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
8089; BTVER2-NEXT:    #APP
8090; BTVER2-NEXT:    mulb %dil # sched: [3:1.00]
8091; BTVER2-NEXT:    mulb (%r8) # sched: [6:1.00]
8092; BTVER2-NEXT:    mulw %si # sched: [3:1.00]
8093; BTVER2-NEXT:    mulw (%r9) # sched: [6:1.00]
8094; BTVER2-NEXT:    mull %edx # sched: [3:1.00]
8095; BTVER2-NEXT:    mull (%rax) # sched: [6:1.00]
8096; BTVER2-NEXT:    mulq %rcx # sched: [6:4.00]
8097; BTVER2-NEXT:    mulq (%r10) # sched: [9:4.00]
8098; BTVER2-NEXT:    #NO_APP
8099; BTVER2-NEXT:    retq # sched: [4:1.00]
8100;
8101; ZNVER1-LABEL: test_mul:
8102; ZNVER1:       # %bb.0:
8103; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
8104; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
8105; ZNVER1-NEXT:    #APP
8106; ZNVER1-NEXT:    mulb %dil # sched: [4:1.00]
8107; ZNVER1-NEXT:    mulb (%r8) # sched: [8:1.00]
8108; ZNVER1-NEXT:    mulw %si # sched: [3:1.00]
8109; ZNVER1-NEXT:    mulw (%r9) # sched: [8:1.00]
8110; ZNVER1-NEXT:    mull %edx # sched: [3:1.00]
8111; ZNVER1-NEXT:    mull (%rax) # sched: [8:1.00]
8112; ZNVER1-NEXT:    mulq %rcx # sched: [4:1.00]
8113; ZNVER1-NEXT:    mulq (%r10) # sched: [9:1.00]
8114; ZNVER1-NEXT:    #NO_APP
8115; ZNVER1-NEXT:    retq # sched: [1:0.50]
8116  tail call void asm "mulb $0 \0A\09 mulb $4 \0A\09 mulw $1 \0A\09 mulw $5 \0A\09 mull $2 \0A\09 mull $6 \0A\09 mulq $3 \0A\09 mulq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
8117  ret void
8118}
8119
8120define void @test_neg(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
8121; GENERIC-LABEL: test_neg:
8122; GENERIC:       # %bb.0:
8123; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8124; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8125; GENERIC-NEXT:    #APP
8126; GENERIC-NEXT:    negb %dil # sched: [1:0.33]
8127; GENERIC-NEXT:    negb (%r8) # sched: [7:1.00]
8128; GENERIC-NEXT:    negw %si # sched: [1:0.33]
8129; GENERIC-NEXT:    negw (%r9) # sched: [7:1.00]
8130; GENERIC-NEXT:    negl %edx # sched: [1:0.33]
8131; GENERIC-NEXT:    negl (%rax) # sched: [7:1.00]
8132; GENERIC-NEXT:    negq %rcx # sched: [1:0.33]
8133; GENERIC-NEXT:    negq (%r10) # sched: [7:1.00]
8134; GENERIC-NEXT:    #NO_APP
8135; GENERIC-NEXT:    retq # sched: [1:1.00]
8136;
8137; ATOM-LABEL: test_neg:
8138; ATOM:       # %bb.0:
8139; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
8140; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
8141; ATOM-NEXT:    #APP
8142; ATOM-NEXT:    negb %dil # sched: [1:0.50]
8143; ATOM-NEXT:    negb (%r8) # sched: [1:1.00]
8144; ATOM-NEXT:    negw %si # sched: [1:0.50]
8145; ATOM-NEXT:    negw (%r9) # sched: [1:1.00]
8146; ATOM-NEXT:    negl %edx # sched: [1:0.50]
8147; ATOM-NEXT:    negl (%rax) # sched: [1:1.00]
8148; ATOM-NEXT:    negq %rcx # sched: [1:0.50]
8149; ATOM-NEXT:    negq (%r10) # sched: [1:1.00]
8150; ATOM-NEXT:    #NO_APP
8151; ATOM-NEXT:    retq # sched: [79:39.50]
8152;
8153; SLM-LABEL: test_neg:
8154; SLM:       # %bb.0:
8155; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
8156; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
8157; SLM-NEXT:    #APP
8158; SLM-NEXT:    negb %dil # sched: [1:0.50]
8159; SLM-NEXT:    negb (%r8) # sched: [5:2.00]
8160; SLM-NEXT:    negw %si # sched: [1:0.50]
8161; SLM-NEXT:    negw (%r9) # sched: [5:2.00]
8162; SLM-NEXT:    negl %edx # sched: [1:0.50]
8163; SLM-NEXT:    negl (%rax) # sched: [5:2.00]
8164; SLM-NEXT:    negq %rcx # sched: [1:0.50]
8165; SLM-NEXT:    negq (%r10) # sched: [5:2.00]
8166; SLM-NEXT:    #NO_APP
8167; SLM-NEXT:    retq # sched: [4:1.00]
8168;
8169; SANDY-LABEL: test_neg:
8170; SANDY:       # %bb.0:
8171; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8172; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8173; SANDY-NEXT:    #APP
8174; SANDY-NEXT:    negb %dil # sched: [1:0.33]
8175; SANDY-NEXT:    negb (%r8) # sched: [7:1.00]
8176; SANDY-NEXT:    negw %si # sched: [1:0.33]
8177; SANDY-NEXT:    negw (%r9) # sched: [7:1.00]
8178; SANDY-NEXT:    negl %edx # sched: [1:0.33]
8179; SANDY-NEXT:    negl (%rax) # sched: [7:1.00]
8180; SANDY-NEXT:    negq %rcx # sched: [1:0.33]
8181; SANDY-NEXT:    negq (%r10) # sched: [7:1.00]
8182; SANDY-NEXT:    #NO_APP
8183; SANDY-NEXT:    retq # sched: [1:1.00]
8184;
8185; HASWELL-LABEL: test_neg:
8186; HASWELL:       # %bb.0:
8187; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8188; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8189; HASWELL-NEXT:    #APP
8190; HASWELL-NEXT:    negb %dil # sched: [1:0.25]
8191; HASWELL-NEXT:    negb (%r8) # sched: [7:1.00]
8192; HASWELL-NEXT:    negw %si # sched: [1:0.25]
8193; HASWELL-NEXT:    negw (%r9) # sched: [7:1.00]
8194; HASWELL-NEXT:    negl %edx # sched: [1:0.25]
8195; HASWELL-NEXT:    negl (%rax) # sched: [7:1.00]
8196; HASWELL-NEXT:    negq %rcx # sched: [1:0.25]
8197; HASWELL-NEXT:    negq (%r10) # sched: [7:1.00]
8198; HASWELL-NEXT:    #NO_APP
8199; HASWELL-NEXT:    retq # sched: [7:1.00]
8200;
8201; BROADWELL-LABEL: test_neg:
8202; BROADWELL:       # %bb.0:
8203; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8204; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8205; BROADWELL-NEXT:    #APP
8206; BROADWELL-NEXT:    negb %dil # sched: [1:0.25]
8207; BROADWELL-NEXT:    negb (%r8) # sched: [7:1.00]
8208; BROADWELL-NEXT:    negw %si # sched: [1:0.25]
8209; BROADWELL-NEXT:    negw (%r9) # sched: [7:1.00]
8210; BROADWELL-NEXT:    negl %edx # sched: [1:0.25]
8211; BROADWELL-NEXT:    negl (%rax) # sched: [7:1.00]
8212; BROADWELL-NEXT:    negq %rcx # sched: [1:0.25]
8213; BROADWELL-NEXT:    negq (%r10) # sched: [7:1.00]
8214; BROADWELL-NEXT:    #NO_APP
8215; BROADWELL-NEXT:    retq # sched: [7:1.00]
8216;
8217; SKYLAKE-LABEL: test_neg:
8218; SKYLAKE:       # %bb.0:
8219; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8220; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8221; SKYLAKE-NEXT:    #APP
8222; SKYLAKE-NEXT:    negb %dil # sched: [1:0.25]
8223; SKYLAKE-NEXT:    negb (%r8) # sched: [7:1.00]
8224; SKYLAKE-NEXT:    negw %si # sched: [1:0.25]
8225; SKYLAKE-NEXT:    negw (%r9) # sched: [7:1.00]
8226; SKYLAKE-NEXT:    negl %edx # sched: [1:0.25]
8227; SKYLAKE-NEXT:    negl (%rax) # sched: [7:1.00]
8228; SKYLAKE-NEXT:    negq %rcx # sched: [1:0.25]
8229; SKYLAKE-NEXT:    negq (%r10) # sched: [7:1.00]
8230; SKYLAKE-NEXT:    #NO_APP
8231; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8232;
8233; SKX-LABEL: test_neg:
8234; SKX:       # %bb.0:
8235; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8236; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8237; SKX-NEXT:    #APP
8238; SKX-NEXT:    negb %dil # sched: [1:0.25]
8239; SKX-NEXT:    negb (%r8) # sched: [7:1.00]
8240; SKX-NEXT:    negw %si # sched: [1:0.25]
8241; SKX-NEXT:    negw (%r9) # sched: [7:1.00]
8242; SKX-NEXT:    negl %edx # sched: [1:0.25]
8243; SKX-NEXT:    negl (%rax) # sched: [7:1.00]
8244; SKX-NEXT:    negq %rcx # sched: [1:0.25]
8245; SKX-NEXT:    negq (%r10) # sched: [7:1.00]
8246; SKX-NEXT:    #NO_APP
8247; SKX-NEXT:    retq # sched: [7:1.00]
8248;
8249; BTVER2-LABEL: test_neg:
8250; BTVER2:       # %bb.0:
8251; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
8252; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
8253; BTVER2-NEXT:    #APP
8254; BTVER2-NEXT:    negb %dil # sched: [1:0.50]
8255; BTVER2-NEXT:    negb (%r8) # sched: [5:1.00]
8256; BTVER2-NEXT:    negw %si # sched: [1:0.50]
8257; BTVER2-NEXT:    negw (%r9) # sched: [5:1.00]
8258; BTVER2-NEXT:    negl %edx # sched: [1:0.50]
8259; BTVER2-NEXT:    negl (%rax) # sched: [5:1.00]
8260; BTVER2-NEXT:    negq %rcx # sched: [1:0.50]
8261; BTVER2-NEXT:    negq (%r10) # sched: [5:1.00]
8262; BTVER2-NEXT:    #NO_APP
8263; BTVER2-NEXT:    retq # sched: [4:1.00]
8264;
8265; ZNVER1-LABEL: test_neg:
8266; ZNVER1:       # %bb.0:
8267; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
8268; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
8269; ZNVER1-NEXT:    #APP
8270; ZNVER1-NEXT:    negb %dil # sched: [1:0.25]
8271; ZNVER1-NEXT:    negb (%r8) # sched: [5:0.50]
8272; ZNVER1-NEXT:    negw %si # sched: [1:0.25]
8273; ZNVER1-NEXT:    negw (%r9) # sched: [5:0.50]
8274; ZNVER1-NEXT:    negl %edx # sched: [1:0.25]
8275; ZNVER1-NEXT:    negl (%rax) # sched: [5:0.50]
8276; ZNVER1-NEXT:    negq %rcx # sched: [1:0.25]
8277; ZNVER1-NEXT:    negq (%r10) # sched: [5:0.50]
8278; ZNVER1-NEXT:    #NO_APP
8279; ZNVER1-NEXT:    retq # sched: [1:0.50]
8280  tail call void asm "negb $0 \0A\09 negb $4 \0A\09 negw $1 \0A\09 negw $5 \0A\09 negl $2 \0A\09 negl $6 \0A\09 negq $3 \0A\09 negq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
8281  ret void
8282}
8283
8284define void @test_nop(i16 %a0, i32 %a1, i64 %a2, i16 *%p0, i32 *%p1, i64 *%p2) optsize {
8285; GENERIC-LABEL: test_nop:
8286; GENERIC:       # %bb.0:
8287; GENERIC-NEXT:    #APP
8288; GENERIC-NEXT:    nop # sched: [1:0.25]
8289; GENERIC-NEXT:    nopw %di # sched: [1:0.25]
8290; GENERIC-NEXT:    nopw (%rcx) # sched: [1:0.25]
8291; GENERIC-NEXT:    nopl %esi # sched: [1:0.25]
8292; GENERIC-NEXT:    nopl (%r8) # sched: [1:0.25]
8293; GENERIC-NEXT:    nopq %rdx # sched: [1:0.25]
8294; GENERIC-NEXT:    nopq (%r9) # sched: [1:0.25]
8295; GENERIC-NEXT:    #NO_APP
8296; GENERIC-NEXT:    retq # sched: [1:1.00]
8297;
8298; ATOM-LABEL: test_nop:
8299; ATOM:       # %bb.0:
8300; ATOM-NEXT:    #APP
8301; ATOM-NEXT:    nop # sched: [1:0.50]
8302; ATOM-NEXT:    nopw %di # sched: [1:0.50]
8303; ATOM-NEXT:    nopw (%rcx) # sched: [1:0.50]
8304; ATOM-NEXT:    nopl %esi # sched: [1:0.50]
8305; ATOM-NEXT:    nopl (%r8) # sched: [1:0.50]
8306; ATOM-NEXT:    nopq %rdx # sched: [1:0.50]
8307; ATOM-NEXT:    nopq (%r9) # sched: [1:0.50]
8308; ATOM-NEXT:    #NO_APP
8309; ATOM-NEXT:    retq # sched: [79:39.50]
8310;
8311; SLM-LABEL: test_nop:
8312; SLM:       # %bb.0:
8313; SLM-NEXT:    #APP
8314; SLM-NEXT:    nop # sched: [1:0.50]
8315; SLM-NEXT:    nopw %di # sched: [1:0.50]
8316; SLM-NEXT:    nopw (%rcx) # sched: [1:0.50]
8317; SLM-NEXT:    nopl %esi # sched: [1:0.50]
8318; SLM-NEXT:    nopl (%r8) # sched: [1:0.50]
8319; SLM-NEXT:    nopq %rdx # sched: [1:0.50]
8320; SLM-NEXT:    nopq (%r9) # sched: [1:0.50]
8321; SLM-NEXT:    #NO_APP
8322; SLM-NEXT:    retq # sched: [4:1.00]
8323;
8324; SANDY-LABEL: test_nop:
8325; SANDY:       # %bb.0:
8326; SANDY-NEXT:    #APP
8327; SANDY-NEXT:    nop # sched: [1:0.25]
8328; SANDY-NEXT:    nopw %di # sched: [1:0.25]
8329; SANDY-NEXT:    nopw (%rcx) # sched: [1:0.25]
8330; SANDY-NEXT:    nopl %esi # sched: [1:0.25]
8331; SANDY-NEXT:    nopl (%r8) # sched: [1:0.25]
8332; SANDY-NEXT:    nopq %rdx # sched: [1:0.25]
8333; SANDY-NEXT:    nopq (%r9) # sched: [1:0.25]
8334; SANDY-NEXT:    #NO_APP
8335; SANDY-NEXT:    retq # sched: [1:1.00]
8336;
8337; HASWELL-LABEL: test_nop:
8338; HASWELL:       # %bb.0:
8339; HASWELL-NEXT:    #APP
8340; HASWELL-NEXT:    nop # sched: [1:0.25]
8341; HASWELL-NEXT:    nopw %di # sched: [1:0.25]
8342; HASWELL-NEXT:    nopw (%rcx) # sched: [1:0.25]
8343; HASWELL-NEXT:    nopl %esi # sched: [1:0.25]
8344; HASWELL-NEXT:    nopl (%r8) # sched: [1:0.25]
8345; HASWELL-NEXT:    nopq %rdx # sched: [1:0.25]
8346; HASWELL-NEXT:    nopq (%r9) # sched: [1:0.25]
8347; HASWELL-NEXT:    #NO_APP
8348; HASWELL-NEXT:    retq # sched: [7:1.00]
8349;
8350; BROADWELL-LABEL: test_nop:
8351; BROADWELL:       # %bb.0:
8352; BROADWELL-NEXT:    #APP
8353; BROADWELL-NEXT:    nop # sched: [1:0.25]
8354; BROADWELL-NEXT:    nopw %di # sched: [1:0.25]
8355; BROADWELL-NEXT:    nopw (%rcx) # sched: [1:0.25]
8356; BROADWELL-NEXT:    nopl %esi # sched: [1:0.25]
8357; BROADWELL-NEXT:    nopl (%r8) # sched: [1:0.25]
8358; BROADWELL-NEXT:    nopq %rdx # sched: [1:0.25]
8359; BROADWELL-NEXT:    nopq (%r9) # sched: [1:0.25]
8360; BROADWELL-NEXT:    #NO_APP
8361; BROADWELL-NEXT:    retq # sched: [7:1.00]
8362;
8363; SKYLAKE-LABEL: test_nop:
8364; SKYLAKE:       # %bb.0:
8365; SKYLAKE-NEXT:    #APP
8366; SKYLAKE-NEXT:    nop # sched: [1:0.17]
8367; SKYLAKE-NEXT:    nopw %di # sched: [1:0.17]
8368; SKYLAKE-NEXT:    nopw (%rcx) # sched: [1:0.17]
8369; SKYLAKE-NEXT:    nopl %esi # sched: [1:0.17]
8370; SKYLAKE-NEXT:    nopl (%r8) # sched: [1:0.17]
8371; SKYLAKE-NEXT:    nopq %rdx # sched: [1:0.17]
8372; SKYLAKE-NEXT:    nopq (%r9) # sched: [1:0.17]
8373; SKYLAKE-NEXT:    #NO_APP
8374; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8375;
8376; SKX-LABEL: test_nop:
8377; SKX:       # %bb.0:
8378; SKX-NEXT:    #APP
8379; SKX-NEXT:    nop # sched: [1:0.17]
8380; SKX-NEXT:    nopw %di # sched: [1:0.17]
8381; SKX-NEXT:    nopw (%rcx) # sched: [1:0.17]
8382; SKX-NEXT:    nopl %esi # sched: [1:0.17]
8383; SKX-NEXT:    nopl (%r8) # sched: [1:0.17]
8384; SKX-NEXT:    nopq %rdx # sched: [1:0.17]
8385; SKX-NEXT:    nopq (%r9) # sched: [1:0.17]
8386; SKX-NEXT:    #NO_APP
8387; SKX-NEXT:    retq # sched: [7:1.00]
8388;
8389; BTVER2-LABEL: test_nop:
8390; BTVER2:       # %bb.0:
8391; BTVER2-NEXT:    #APP
8392; BTVER2-NEXT:    nop # sched: [1:0.50]
8393; BTVER2-NEXT:    nopw %di # sched: [1:0.50]
8394; BTVER2-NEXT:    nopw (%rcx) # sched: [1:0.50]
8395; BTVER2-NEXT:    nopl %esi # sched: [1:0.50]
8396; BTVER2-NEXT:    nopl (%r8) # sched: [1:0.50]
8397; BTVER2-NEXT:    nopq %rdx # sched: [1:0.50]
8398; BTVER2-NEXT:    nopq (%r9) # sched: [1:0.50]
8399; BTVER2-NEXT:    #NO_APP
8400; BTVER2-NEXT:    retq # sched: [4:1.00]
8401;
8402; ZNVER1-LABEL: test_nop:
8403; ZNVER1:       # %bb.0:
8404; ZNVER1-NEXT:    #APP
8405; ZNVER1-NEXT:    nop # sched: [1:0.25]
8406; ZNVER1-NEXT:    nopw %di # sched: [1:0.25]
8407; ZNVER1-NEXT:    nopw (%rcx) # sched: [1:0.25]
8408; ZNVER1-NEXT:    nopl %esi # sched: [1:0.25]
8409; ZNVER1-NEXT:    nopl (%r8) # sched: [1:0.25]
8410; ZNVER1-NEXT:    nopq %rdx # sched: [1:0.25]
8411; ZNVER1-NEXT:    nopq (%r9) # sched: [1:0.25]
8412; ZNVER1-NEXT:    #NO_APP
8413; ZNVER1-NEXT:    retq # sched: [1:0.50]
8414  tail call void asm "nop \0A\09 nopw $0 \0A\09 nopw $3 \0A\09 nopl $1 \0A\09 nopl $4 \0A\09 nopq $2 \0A\09 nopq $5", "r,r,r,*m,*m,*m"(i16 %a0, i32 %a1, i64 %a2, i16 *%p0, i32 *%p1, i64 *%p2) nounwind
8415  ret void
8416}
8417
8418define void @test_not(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
8419; GENERIC-LABEL: test_not:
8420; GENERIC:       # %bb.0:
8421; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8422; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8423; GENERIC-NEXT:    #APP
8424; GENERIC-NEXT:    notb %dil # sched: [1:0.33]
8425; GENERIC-NEXT:    notb (%r8) # sched: [7:1.00]
8426; GENERIC-NEXT:    notw %si # sched: [1:0.33]
8427; GENERIC-NEXT:    notw (%r9) # sched: [7:1.00]
8428; GENERIC-NEXT:    notl %edx # sched: [1:0.33]
8429; GENERIC-NEXT:    notl (%rax) # sched: [7:1.00]
8430; GENERIC-NEXT:    notq %rcx # sched: [1:0.33]
8431; GENERIC-NEXT:    notq (%r10) # sched: [7:1.00]
8432; GENERIC-NEXT:    #NO_APP
8433; GENERIC-NEXT:    retq # sched: [1:1.00]
8434;
8435; ATOM-LABEL: test_not:
8436; ATOM:       # %bb.0:
8437; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
8438; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
8439; ATOM-NEXT:    #APP
8440; ATOM-NEXT:    notb %dil # sched: [1:0.50]
8441; ATOM-NEXT:    notb (%r8) # sched: [1:1.00]
8442; ATOM-NEXT:    notw %si # sched: [1:0.50]
8443; ATOM-NEXT:    notw (%r9) # sched: [1:1.00]
8444; ATOM-NEXT:    notl %edx # sched: [1:0.50]
8445; ATOM-NEXT:    notl (%rax) # sched: [1:1.00]
8446; ATOM-NEXT:    notq %rcx # sched: [1:0.50]
8447; ATOM-NEXT:    notq (%r10) # sched: [1:1.00]
8448; ATOM-NEXT:    #NO_APP
8449; ATOM-NEXT:    retq # sched: [79:39.50]
8450;
8451; SLM-LABEL: test_not:
8452; SLM:       # %bb.0:
8453; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
8454; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
8455; SLM-NEXT:    #APP
8456; SLM-NEXT:    notb %dil # sched: [1:0.50]
8457; SLM-NEXT:    notb (%r8) # sched: [5:2.00]
8458; SLM-NEXT:    notw %si # sched: [1:0.50]
8459; SLM-NEXT:    notw (%r9) # sched: [5:2.00]
8460; SLM-NEXT:    notl %edx # sched: [1:0.50]
8461; SLM-NEXT:    notl (%rax) # sched: [5:2.00]
8462; SLM-NEXT:    notq %rcx # sched: [1:0.50]
8463; SLM-NEXT:    notq (%r10) # sched: [5:2.00]
8464; SLM-NEXT:    #NO_APP
8465; SLM-NEXT:    retq # sched: [4:1.00]
8466;
8467; SANDY-LABEL: test_not:
8468; SANDY:       # %bb.0:
8469; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8470; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8471; SANDY-NEXT:    #APP
8472; SANDY-NEXT:    notb %dil # sched: [1:0.33]
8473; SANDY-NEXT:    notb (%r8) # sched: [7:1.00]
8474; SANDY-NEXT:    notw %si # sched: [1:0.33]
8475; SANDY-NEXT:    notw (%r9) # sched: [7:1.00]
8476; SANDY-NEXT:    notl %edx # sched: [1:0.33]
8477; SANDY-NEXT:    notl (%rax) # sched: [7:1.00]
8478; SANDY-NEXT:    notq %rcx # sched: [1:0.33]
8479; SANDY-NEXT:    notq (%r10) # sched: [7:1.00]
8480; SANDY-NEXT:    #NO_APP
8481; SANDY-NEXT:    retq # sched: [1:1.00]
8482;
8483; HASWELL-LABEL: test_not:
8484; HASWELL:       # %bb.0:
8485; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8486; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8487; HASWELL-NEXT:    #APP
8488; HASWELL-NEXT:    notb %dil # sched: [1:0.25]
8489; HASWELL-NEXT:    notb (%r8) # sched: [7:1.00]
8490; HASWELL-NEXT:    notw %si # sched: [1:0.25]
8491; HASWELL-NEXT:    notw (%r9) # sched: [7:1.00]
8492; HASWELL-NEXT:    notl %edx # sched: [1:0.25]
8493; HASWELL-NEXT:    notl (%rax) # sched: [7:1.00]
8494; HASWELL-NEXT:    notq %rcx # sched: [1:0.25]
8495; HASWELL-NEXT:    notq (%r10) # sched: [7:1.00]
8496; HASWELL-NEXT:    #NO_APP
8497; HASWELL-NEXT:    retq # sched: [7:1.00]
8498;
8499; BROADWELL-LABEL: test_not:
8500; BROADWELL:       # %bb.0:
8501; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8502; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8503; BROADWELL-NEXT:    #APP
8504; BROADWELL-NEXT:    notb %dil # sched: [1:0.25]
8505; BROADWELL-NEXT:    notb (%r8) # sched: [7:1.00]
8506; BROADWELL-NEXT:    notw %si # sched: [1:0.25]
8507; BROADWELL-NEXT:    notw (%r9) # sched: [7:1.00]
8508; BROADWELL-NEXT:    notl %edx # sched: [1:0.25]
8509; BROADWELL-NEXT:    notl (%rax) # sched: [7:1.00]
8510; BROADWELL-NEXT:    notq %rcx # sched: [1:0.25]
8511; BROADWELL-NEXT:    notq (%r10) # sched: [7:1.00]
8512; BROADWELL-NEXT:    #NO_APP
8513; BROADWELL-NEXT:    retq # sched: [7:1.00]
8514;
8515; SKYLAKE-LABEL: test_not:
8516; SKYLAKE:       # %bb.0:
8517; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8518; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8519; SKYLAKE-NEXT:    #APP
8520; SKYLAKE-NEXT:    notb %dil # sched: [1:0.25]
8521; SKYLAKE-NEXT:    notb (%r8) # sched: [7:1.00]
8522; SKYLAKE-NEXT:    notw %si # sched: [1:0.25]
8523; SKYLAKE-NEXT:    notw (%r9) # sched: [7:1.00]
8524; SKYLAKE-NEXT:    notl %edx # sched: [1:0.25]
8525; SKYLAKE-NEXT:    notl (%rax) # sched: [7:1.00]
8526; SKYLAKE-NEXT:    notq %rcx # sched: [1:0.25]
8527; SKYLAKE-NEXT:    notq (%r10) # sched: [7:1.00]
8528; SKYLAKE-NEXT:    #NO_APP
8529; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8530;
8531; SKX-LABEL: test_not:
8532; SKX:       # %bb.0:
8533; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
8534; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
8535; SKX-NEXT:    #APP
8536; SKX-NEXT:    notb %dil # sched: [1:0.25]
8537; SKX-NEXT:    notb (%r8) # sched: [7:1.00]
8538; SKX-NEXT:    notw %si # sched: [1:0.25]
8539; SKX-NEXT:    notw (%r9) # sched: [7:1.00]
8540; SKX-NEXT:    notl %edx # sched: [1:0.25]
8541; SKX-NEXT:    notl (%rax) # sched: [7:1.00]
8542; SKX-NEXT:    notq %rcx # sched: [1:0.25]
8543; SKX-NEXT:    notq (%r10) # sched: [7:1.00]
8544; SKX-NEXT:    #NO_APP
8545; SKX-NEXT:    retq # sched: [7:1.00]
8546;
8547; BTVER2-LABEL: test_not:
8548; BTVER2:       # %bb.0:
8549; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
8550; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
8551; BTVER2-NEXT:    #APP
8552; BTVER2-NEXT:    notb %dil # sched: [1:0.50]
8553; BTVER2-NEXT:    notb (%r8) # sched: [5:1.00]
8554; BTVER2-NEXT:    notw %si # sched: [1:0.50]
8555; BTVER2-NEXT:    notw (%r9) # sched: [5:1.00]
8556; BTVER2-NEXT:    notl %edx # sched: [1:0.50]
8557; BTVER2-NEXT:    notl (%rax) # sched: [5:1.00]
8558; BTVER2-NEXT:    notq %rcx # sched: [1:0.50]
8559; BTVER2-NEXT:    notq (%r10) # sched: [5:1.00]
8560; BTVER2-NEXT:    #NO_APP
8561; BTVER2-NEXT:    retq # sched: [4:1.00]
8562;
8563; ZNVER1-LABEL: test_not:
8564; ZNVER1:       # %bb.0:
8565; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
8566; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
8567; ZNVER1-NEXT:    #APP
8568; ZNVER1-NEXT:    notb %dil # sched: [1:0.25]
8569; ZNVER1-NEXT:    notb (%r8) # sched: [5:0.50]
8570; ZNVER1-NEXT:    notw %si # sched: [1:0.25]
8571; ZNVER1-NEXT:    notw (%r9) # sched: [5:0.50]
8572; ZNVER1-NEXT:    notl %edx # sched: [1:0.25]
8573; ZNVER1-NEXT:    notl (%rax) # sched: [5:0.50]
8574; ZNVER1-NEXT:    notq %rcx # sched: [1:0.25]
8575; ZNVER1-NEXT:    notq (%r10) # sched: [5:0.50]
8576; ZNVER1-NEXT:    #NO_APP
8577; ZNVER1-NEXT:    retq # sched: [1:0.50]
8578  tail call void asm "notb $0 \0A\09 notb $4 \0A\09 notw $1 \0A\09 notw $5 \0A\09 notl $2 \0A\09 notl $6 \0A\09 notq $3 \0A\09 notq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
8579  ret void
8580}
8581
8582define void @test_or_8(i8 %a0, i8* %a1, i8 %a2) optsize {
8583; GENERIC-LABEL: test_or_8:
8584; GENERIC:       # %bb.0:
8585; GENERIC-NEXT:    #APP
8586; GENERIC-NEXT:    orb $7, %al # sched: [1:0.33]
8587; GENERIC-NEXT:    orb $7, %dil # sched: [1:0.33]
8588; GENERIC-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
8589; GENERIC-NEXT:    orb %dl, %dil # sched: [1:0.33]
8590; GENERIC-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
8591; GENERIC-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
8592; GENERIC-NEXT:    #NO_APP
8593; GENERIC-NEXT:    retq # sched: [1:1.00]
8594;
8595; ATOM-LABEL: test_or_8:
8596; ATOM:       # %bb.0:
8597; ATOM-NEXT:    #APP
8598; ATOM-NEXT:    orb $7, %al # sched: [1:0.50]
8599; ATOM-NEXT:    orb $7, %dil # sched: [1:0.50]
8600; ATOM-NEXT:    orb $7, (%rsi) # sched: [1:1.00]
8601; ATOM-NEXT:    orb %dl, %dil # sched: [1:0.50]
8602; ATOM-NEXT:    orb %dil, (%rsi) # sched: [1:1.00]
8603; ATOM-NEXT:    orb (%rsi), %dil # sched: [1:1.00]
8604; ATOM-NEXT:    #NO_APP
8605; ATOM-NEXT:    retq # sched: [79:39.50]
8606;
8607; SLM-LABEL: test_or_8:
8608; SLM:       # %bb.0:
8609; SLM-NEXT:    #APP
8610; SLM-NEXT:    orb $7, %al # sched: [1:0.50]
8611; SLM-NEXT:    orb $7, %dil # sched: [1:0.50]
8612; SLM-NEXT:    orb $7, (%rsi) # sched: [5:2.00]
8613; SLM-NEXT:    orb %dl, %dil # sched: [1:0.50]
8614; SLM-NEXT:    orb %dil, (%rsi) # sched: [5:2.00]
8615; SLM-NEXT:    orb (%rsi), %dil # sched: [4:1.00]
8616; SLM-NEXT:    #NO_APP
8617; SLM-NEXT:    retq # sched: [4:1.00]
8618;
8619; SANDY-LABEL: test_or_8:
8620; SANDY:       # %bb.0:
8621; SANDY-NEXT:    #APP
8622; SANDY-NEXT:    orb $7, %al # sched: [1:0.33]
8623; SANDY-NEXT:    orb $7, %dil # sched: [1:0.33]
8624; SANDY-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
8625; SANDY-NEXT:    orb %dl, %dil # sched: [1:0.33]
8626; SANDY-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
8627; SANDY-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
8628; SANDY-NEXT:    #NO_APP
8629; SANDY-NEXT:    retq # sched: [1:1.00]
8630;
8631; HASWELL-LABEL: test_or_8:
8632; HASWELL:       # %bb.0:
8633; HASWELL-NEXT:    #APP
8634; HASWELL-NEXT:    orb $7, %al # sched: [1:0.25]
8635; HASWELL-NEXT:    orb $7, %dil # sched: [1:0.25]
8636; HASWELL-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
8637; HASWELL-NEXT:    orb %dl, %dil # sched: [1:0.25]
8638; HASWELL-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
8639; HASWELL-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
8640; HASWELL-NEXT:    #NO_APP
8641; HASWELL-NEXT:    retq # sched: [7:1.00]
8642;
8643; BROADWELL-LABEL: test_or_8:
8644; BROADWELL:       # %bb.0:
8645; BROADWELL-NEXT:    #APP
8646; BROADWELL-NEXT:    orb $7, %al # sched: [1:0.25]
8647; BROADWELL-NEXT:    orb $7, %dil # sched: [1:0.25]
8648; BROADWELL-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
8649; BROADWELL-NEXT:    orb %dl, %dil # sched: [1:0.25]
8650; BROADWELL-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
8651; BROADWELL-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
8652; BROADWELL-NEXT:    #NO_APP
8653; BROADWELL-NEXT:    retq # sched: [7:1.00]
8654;
8655; SKYLAKE-LABEL: test_or_8:
8656; SKYLAKE:       # %bb.0:
8657; SKYLAKE-NEXT:    #APP
8658; SKYLAKE-NEXT:    orb $7, %al # sched: [1:0.25]
8659; SKYLAKE-NEXT:    orb $7, %dil # sched: [1:0.25]
8660; SKYLAKE-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
8661; SKYLAKE-NEXT:    orb %dl, %dil # sched: [1:0.25]
8662; SKYLAKE-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
8663; SKYLAKE-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
8664; SKYLAKE-NEXT:    #NO_APP
8665; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8666;
8667; SKX-LABEL: test_or_8:
8668; SKX:       # %bb.0:
8669; SKX-NEXT:    #APP
8670; SKX-NEXT:    orb $7, %al # sched: [1:0.25]
8671; SKX-NEXT:    orb $7, %dil # sched: [1:0.25]
8672; SKX-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
8673; SKX-NEXT:    orb %dl, %dil # sched: [1:0.25]
8674; SKX-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
8675; SKX-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
8676; SKX-NEXT:    #NO_APP
8677; SKX-NEXT:    retq # sched: [7:1.00]
8678;
8679; BTVER2-LABEL: test_or_8:
8680; BTVER2:       # %bb.0:
8681; BTVER2-NEXT:    #APP
8682; BTVER2-NEXT:    orb $7, %al # sched: [1:0.50]
8683; BTVER2-NEXT:    orb $7, %dil # sched: [1:0.50]
8684; BTVER2-NEXT:    orb $7, (%rsi) # sched: [5:1.00]
8685; BTVER2-NEXT:    orb %dl, %dil # sched: [1:0.50]
8686; BTVER2-NEXT:    orb %dil, (%rsi) # sched: [5:1.00]
8687; BTVER2-NEXT:    orb (%rsi), %dil # sched: [4:1.00]
8688; BTVER2-NEXT:    #NO_APP
8689; BTVER2-NEXT:    retq # sched: [4:1.00]
8690;
8691; ZNVER1-LABEL: test_or_8:
8692; ZNVER1:       # %bb.0:
8693; ZNVER1-NEXT:    #APP
8694; ZNVER1-NEXT:    orb $7, %al # sched: [1:0.25]
8695; ZNVER1-NEXT:    orb $7, %dil # sched: [1:0.25]
8696; ZNVER1-NEXT:    orb $7, (%rsi) # sched: [5:0.50]
8697; ZNVER1-NEXT:    orb %dl, %dil # sched: [1:0.25]
8698; ZNVER1-NEXT:    orb %dil, (%rsi) # sched: [5:0.50]
8699; ZNVER1-NEXT:    orb (%rsi), %dil # sched: [5:0.50]
8700; ZNVER1-NEXT:    #NO_APP
8701; ZNVER1-NEXT:    retq # sched: [1:0.50]
8702  tail call void asm "orb $3, %AL \0A\09 orb $3, $0 \0A\09 orb $3, $2 \0A\09 orb $1, $0 \0A\09 orb $0, $2 \0A\09 orb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
8703  ret void
8704}
8705define void @test_or_16(i16 %a0, i16* %a1, i16 %a2) optsize {
8706; GENERIC-LABEL: test_or_16:
8707; GENERIC:       # %bb.0:
8708; GENERIC-NEXT:    #APP
8709; GENERIC-NEXT:    orw $511, %ax # imm = 0x1FF
8710; GENERIC-NEXT:    # sched: [1:0.33]
8711; GENERIC-NEXT:    orw $511, %di # imm = 0x1FF
8712; GENERIC-NEXT:    # sched: [1:0.33]
8713; GENERIC-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8714; GENERIC-NEXT:    # sched: [7:1.00]
8715; GENERIC-NEXT:    orw $7, %di # sched: [1:0.33]
8716; GENERIC-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
8717; GENERIC-NEXT:    orw %dx, %di # sched: [1:0.33]
8718; GENERIC-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
8719; GENERIC-NEXT:    orw (%rsi), %di # sched: [6:0.50]
8720; GENERIC-NEXT:    #NO_APP
8721; GENERIC-NEXT:    retq # sched: [1:1.00]
8722;
8723; ATOM-LABEL: test_or_16:
8724; ATOM:       # %bb.0:
8725; ATOM-NEXT:    #APP
8726; ATOM-NEXT:    orw $511, %ax # imm = 0x1FF
8727; ATOM-NEXT:    # sched: [1:0.50]
8728; ATOM-NEXT:    orw $511, %di # imm = 0x1FF
8729; ATOM-NEXT:    # sched: [1:0.50]
8730; ATOM-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8731; ATOM-NEXT:    # sched: [1:1.00]
8732; ATOM-NEXT:    orw $7, %di # sched: [1:0.50]
8733; ATOM-NEXT:    orw $7, (%rsi) # sched: [1:1.00]
8734; ATOM-NEXT:    orw %dx, %di # sched: [1:0.50]
8735; ATOM-NEXT:    orw %di, (%rsi) # sched: [1:1.00]
8736; ATOM-NEXT:    orw (%rsi), %di # sched: [1:1.00]
8737; ATOM-NEXT:    #NO_APP
8738; ATOM-NEXT:    retq # sched: [79:39.50]
8739;
8740; SLM-LABEL: test_or_16:
8741; SLM:       # %bb.0:
8742; SLM-NEXT:    #APP
8743; SLM-NEXT:    orw $511, %ax # imm = 0x1FF
8744; SLM-NEXT:    # sched: [1:0.50]
8745; SLM-NEXT:    orw $511, %di # imm = 0x1FF
8746; SLM-NEXT:    # sched: [1:0.50]
8747; SLM-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8748; SLM-NEXT:    # sched: [5:2.00]
8749; SLM-NEXT:    orw $7, %di # sched: [1:0.50]
8750; SLM-NEXT:    orw $7, (%rsi) # sched: [5:2.00]
8751; SLM-NEXT:    orw %dx, %di # sched: [1:0.50]
8752; SLM-NEXT:    orw %di, (%rsi) # sched: [5:2.00]
8753; SLM-NEXT:    orw (%rsi), %di # sched: [4:1.00]
8754; SLM-NEXT:    #NO_APP
8755; SLM-NEXT:    retq # sched: [4:1.00]
8756;
8757; SANDY-LABEL: test_or_16:
8758; SANDY:       # %bb.0:
8759; SANDY-NEXT:    #APP
8760; SANDY-NEXT:    orw $511, %ax # imm = 0x1FF
8761; SANDY-NEXT:    # sched: [1:0.33]
8762; SANDY-NEXT:    orw $511, %di # imm = 0x1FF
8763; SANDY-NEXT:    # sched: [1:0.33]
8764; SANDY-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8765; SANDY-NEXT:    # sched: [7:1.00]
8766; SANDY-NEXT:    orw $7, %di # sched: [1:0.33]
8767; SANDY-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
8768; SANDY-NEXT:    orw %dx, %di # sched: [1:0.33]
8769; SANDY-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
8770; SANDY-NEXT:    orw (%rsi), %di # sched: [6:0.50]
8771; SANDY-NEXT:    #NO_APP
8772; SANDY-NEXT:    retq # sched: [1:1.00]
8773;
8774; HASWELL-LABEL: test_or_16:
8775; HASWELL:       # %bb.0:
8776; HASWELL-NEXT:    #APP
8777; HASWELL-NEXT:    orw $511, %ax # imm = 0x1FF
8778; HASWELL-NEXT:    # sched: [1:0.25]
8779; HASWELL-NEXT:    orw $511, %di # imm = 0x1FF
8780; HASWELL-NEXT:    # sched: [1:0.25]
8781; HASWELL-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8782; HASWELL-NEXT:    # sched: [7:1.00]
8783; HASWELL-NEXT:    orw $7, %di # sched: [1:0.25]
8784; HASWELL-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
8785; HASWELL-NEXT:    orw %dx, %di # sched: [1:0.25]
8786; HASWELL-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
8787; HASWELL-NEXT:    orw (%rsi), %di # sched: [6:0.50]
8788; HASWELL-NEXT:    #NO_APP
8789; HASWELL-NEXT:    retq # sched: [7:1.00]
8790;
8791; BROADWELL-LABEL: test_or_16:
8792; BROADWELL:       # %bb.0:
8793; BROADWELL-NEXT:    #APP
8794; BROADWELL-NEXT:    orw $511, %ax # imm = 0x1FF
8795; BROADWELL-NEXT:    # sched: [1:0.25]
8796; BROADWELL-NEXT:    orw $511, %di # imm = 0x1FF
8797; BROADWELL-NEXT:    # sched: [1:0.25]
8798; BROADWELL-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8799; BROADWELL-NEXT:    # sched: [7:1.00]
8800; BROADWELL-NEXT:    orw $7, %di # sched: [1:0.25]
8801; BROADWELL-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
8802; BROADWELL-NEXT:    orw %dx, %di # sched: [1:0.25]
8803; BROADWELL-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
8804; BROADWELL-NEXT:    orw (%rsi), %di # sched: [6:0.50]
8805; BROADWELL-NEXT:    #NO_APP
8806; BROADWELL-NEXT:    retq # sched: [7:1.00]
8807;
8808; SKYLAKE-LABEL: test_or_16:
8809; SKYLAKE:       # %bb.0:
8810; SKYLAKE-NEXT:    #APP
8811; SKYLAKE-NEXT:    orw $511, %ax # imm = 0x1FF
8812; SKYLAKE-NEXT:    # sched: [1:0.25]
8813; SKYLAKE-NEXT:    orw $511, %di # imm = 0x1FF
8814; SKYLAKE-NEXT:    # sched: [1:0.25]
8815; SKYLAKE-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8816; SKYLAKE-NEXT:    # sched: [7:1.00]
8817; SKYLAKE-NEXT:    orw $7, %di # sched: [1:0.25]
8818; SKYLAKE-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
8819; SKYLAKE-NEXT:    orw %dx, %di # sched: [1:0.25]
8820; SKYLAKE-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
8821; SKYLAKE-NEXT:    orw (%rsi), %di # sched: [6:0.50]
8822; SKYLAKE-NEXT:    #NO_APP
8823; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8824;
8825; SKX-LABEL: test_or_16:
8826; SKX:       # %bb.0:
8827; SKX-NEXT:    #APP
8828; SKX-NEXT:    orw $511, %ax # imm = 0x1FF
8829; SKX-NEXT:    # sched: [1:0.25]
8830; SKX-NEXT:    orw $511, %di # imm = 0x1FF
8831; SKX-NEXT:    # sched: [1:0.25]
8832; SKX-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8833; SKX-NEXT:    # sched: [7:1.00]
8834; SKX-NEXT:    orw $7, %di # sched: [1:0.25]
8835; SKX-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
8836; SKX-NEXT:    orw %dx, %di # sched: [1:0.25]
8837; SKX-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
8838; SKX-NEXT:    orw (%rsi), %di # sched: [6:0.50]
8839; SKX-NEXT:    #NO_APP
8840; SKX-NEXT:    retq # sched: [7:1.00]
8841;
8842; BTVER2-LABEL: test_or_16:
8843; BTVER2:       # %bb.0:
8844; BTVER2-NEXT:    #APP
8845; BTVER2-NEXT:    orw $511, %ax # imm = 0x1FF
8846; BTVER2-NEXT:    # sched: [1:0.50]
8847; BTVER2-NEXT:    orw $511, %di # imm = 0x1FF
8848; BTVER2-NEXT:    # sched: [1:0.50]
8849; BTVER2-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8850; BTVER2-NEXT:    # sched: [5:1.00]
8851; BTVER2-NEXT:    orw $7, %di # sched: [1:0.50]
8852; BTVER2-NEXT:    orw $7, (%rsi) # sched: [5:1.00]
8853; BTVER2-NEXT:    orw %dx, %di # sched: [1:0.50]
8854; BTVER2-NEXT:    orw %di, (%rsi) # sched: [5:1.00]
8855; BTVER2-NEXT:    orw (%rsi), %di # sched: [4:1.00]
8856; BTVER2-NEXT:    #NO_APP
8857; BTVER2-NEXT:    retq # sched: [4:1.00]
8858;
8859; ZNVER1-LABEL: test_or_16:
8860; ZNVER1:       # %bb.0:
8861; ZNVER1-NEXT:    #APP
8862; ZNVER1-NEXT:    orw $511, %ax # imm = 0x1FF
8863; ZNVER1-NEXT:    # sched: [1:0.25]
8864; ZNVER1-NEXT:    orw $511, %di # imm = 0x1FF
8865; ZNVER1-NEXT:    # sched: [1:0.25]
8866; ZNVER1-NEXT:    orw $511, (%rsi) # imm = 0x1FF
8867; ZNVER1-NEXT:    # sched: [5:0.50]
8868; ZNVER1-NEXT:    orw $7, %di # sched: [1:0.25]
8869; ZNVER1-NEXT:    orw $7, (%rsi) # sched: [5:0.50]
8870; ZNVER1-NEXT:    orw %dx, %di # sched: [1:0.25]
8871; ZNVER1-NEXT:    orw %di, (%rsi) # sched: [5:0.50]
8872; ZNVER1-NEXT:    orw (%rsi), %di # sched: [5:0.50]
8873; ZNVER1-NEXT:    #NO_APP
8874; ZNVER1-NEXT:    retq # sched: [1:0.50]
8875  tail call void asm "orw $3, %AX \0A\09 orw $3, $0 \0A\09 orw $3, $2 \0A\09 orw $4, $0 \0A\09 orw $4, $2 \0A\09 orw $1, $0 \0A\09 orw $0, $2 \0A\09 orw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
8876  ret void
8877}
8878define void @test_or_32(i32 %a0, i32* %a1, i32 %a2) optsize {
8879; GENERIC-LABEL: test_or_32:
8880; GENERIC:       # %bb.0:
8881; GENERIC-NEXT:    #APP
8882; GENERIC-NEXT:    orl $665536, %eax # imm = 0xA27C0
8883; GENERIC-NEXT:    # sched: [1:0.33]
8884; GENERIC-NEXT:    orl $665536, %edi # imm = 0xA27C0
8885; GENERIC-NEXT:    # sched: [1:0.33]
8886; GENERIC-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
8887; GENERIC-NEXT:    # sched: [7:1.00]
8888; GENERIC-NEXT:    orl $7, %edi # sched: [1:0.33]
8889; GENERIC-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
8890; GENERIC-NEXT:    orl %edx, %edi # sched: [1:0.33]
8891; GENERIC-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
8892; GENERIC-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
8893; GENERIC-NEXT:    #NO_APP
8894; GENERIC-NEXT:    retq # sched: [1:1.00]
8895;
8896; ATOM-LABEL: test_or_32:
8897; ATOM:       # %bb.0:
8898; ATOM-NEXT:    #APP
8899; ATOM-NEXT:    orl $665536, %eax # imm = 0xA27C0
8900; ATOM-NEXT:    # sched: [1:0.50]
8901; ATOM-NEXT:    orl $665536, %edi # imm = 0xA27C0
8902; ATOM-NEXT:    # sched: [1:0.50]
8903; ATOM-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
8904; ATOM-NEXT:    # sched: [1:1.00]
8905; ATOM-NEXT:    orl $7, %edi # sched: [1:0.50]
8906; ATOM-NEXT:    orl $7, (%rsi) # sched: [1:1.00]
8907; ATOM-NEXT:    orl %edx, %edi # sched: [1:0.50]
8908; ATOM-NEXT:    orl %edi, (%rsi) # sched: [1:1.00]
8909; ATOM-NEXT:    orl (%rsi), %edi # sched: [1:1.00]
8910; ATOM-NEXT:    #NO_APP
8911; ATOM-NEXT:    retq # sched: [79:39.50]
8912;
8913; SLM-LABEL: test_or_32:
8914; SLM:       # %bb.0:
8915; SLM-NEXT:    #APP
8916; SLM-NEXT:    orl $665536, %eax # imm = 0xA27C0
8917; SLM-NEXT:    # sched: [1:0.50]
8918; SLM-NEXT:    orl $665536, %edi # imm = 0xA27C0
8919; SLM-NEXT:    # sched: [1:0.50]
8920; SLM-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
8921; SLM-NEXT:    # sched: [5:2.00]
8922; SLM-NEXT:    orl $7, %edi # sched: [1:0.50]
8923; SLM-NEXT:    orl $7, (%rsi) # sched: [5:2.00]
8924; SLM-NEXT:    orl %edx, %edi # sched: [1:0.50]
8925; SLM-NEXT:    orl %edi, (%rsi) # sched: [5:2.00]
8926; SLM-NEXT:    orl (%rsi), %edi # sched: [4:1.00]
8927; SLM-NEXT:    #NO_APP
8928; SLM-NEXT:    retq # sched: [4:1.00]
8929;
8930; SANDY-LABEL: test_or_32:
8931; SANDY:       # %bb.0:
8932; SANDY-NEXT:    #APP
8933; SANDY-NEXT:    orl $665536, %eax # imm = 0xA27C0
8934; SANDY-NEXT:    # sched: [1:0.33]
8935; SANDY-NEXT:    orl $665536, %edi # imm = 0xA27C0
8936; SANDY-NEXT:    # sched: [1:0.33]
8937; SANDY-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
8938; SANDY-NEXT:    # sched: [7:1.00]
8939; SANDY-NEXT:    orl $7, %edi # sched: [1:0.33]
8940; SANDY-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
8941; SANDY-NEXT:    orl %edx, %edi # sched: [1:0.33]
8942; SANDY-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
8943; SANDY-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
8944; SANDY-NEXT:    #NO_APP
8945; SANDY-NEXT:    retq # sched: [1:1.00]
8946;
8947; HASWELL-LABEL: test_or_32:
8948; HASWELL:       # %bb.0:
8949; HASWELL-NEXT:    #APP
8950; HASWELL-NEXT:    orl $665536, %eax # imm = 0xA27C0
8951; HASWELL-NEXT:    # sched: [1:0.25]
8952; HASWELL-NEXT:    orl $665536, %edi # imm = 0xA27C0
8953; HASWELL-NEXT:    # sched: [1:0.25]
8954; HASWELL-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
8955; HASWELL-NEXT:    # sched: [7:1.00]
8956; HASWELL-NEXT:    orl $7, %edi # sched: [1:0.25]
8957; HASWELL-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
8958; HASWELL-NEXT:    orl %edx, %edi # sched: [1:0.25]
8959; HASWELL-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
8960; HASWELL-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
8961; HASWELL-NEXT:    #NO_APP
8962; HASWELL-NEXT:    retq # sched: [7:1.00]
8963;
8964; BROADWELL-LABEL: test_or_32:
8965; BROADWELL:       # %bb.0:
8966; BROADWELL-NEXT:    #APP
8967; BROADWELL-NEXT:    orl $665536, %eax # imm = 0xA27C0
8968; BROADWELL-NEXT:    # sched: [1:0.25]
8969; BROADWELL-NEXT:    orl $665536, %edi # imm = 0xA27C0
8970; BROADWELL-NEXT:    # sched: [1:0.25]
8971; BROADWELL-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
8972; BROADWELL-NEXT:    # sched: [7:1.00]
8973; BROADWELL-NEXT:    orl $7, %edi # sched: [1:0.25]
8974; BROADWELL-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
8975; BROADWELL-NEXT:    orl %edx, %edi # sched: [1:0.25]
8976; BROADWELL-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
8977; BROADWELL-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
8978; BROADWELL-NEXT:    #NO_APP
8979; BROADWELL-NEXT:    retq # sched: [7:1.00]
8980;
8981; SKYLAKE-LABEL: test_or_32:
8982; SKYLAKE:       # %bb.0:
8983; SKYLAKE-NEXT:    #APP
8984; SKYLAKE-NEXT:    orl $665536, %eax # imm = 0xA27C0
8985; SKYLAKE-NEXT:    # sched: [1:0.25]
8986; SKYLAKE-NEXT:    orl $665536, %edi # imm = 0xA27C0
8987; SKYLAKE-NEXT:    # sched: [1:0.25]
8988; SKYLAKE-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
8989; SKYLAKE-NEXT:    # sched: [7:1.00]
8990; SKYLAKE-NEXT:    orl $7, %edi # sched: [1:0.25]
8991; SKYLAKE-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
8992; SKYLAKE-NEXT:    orl %edx, %edi # sched: [1:0.25]
8993; SKYLAKE-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
8994; SKYLAKE-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
8995; SKYLAKE-NEXT:    #NO_APP
8996; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8997;
8998; SKX-LABEL: test_or_32:
8999; SKX:       # %bb.0:
9000; SKX-NEXT:    #APP
9001; SKX-NEXT:    orl $665536, %eax # imm = 0xA27C0
9002; SKX-NEXT:    # sched: [1:0.25]
9003; SKX-NEXT:    orl $665536, %edi # imm = 0xA27C0
9004; SKX-NEXT:    # sched: [1:0.25]
9005; SKX-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
9006; SKX-NEXT:    # sched: [7:1.00]
9007; SKX-NEXT:    orl $7, %edi # sched: [1:0.25]
9008; SKX-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
9009; SKX-NEXT:    orl %edx, %edi # sched: [1:0.25]
9010; SKX-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
9011; SKX-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
9012; SKX-NEXT:    #NO_APP
9013; SKX-NEXT:    retq # sched: [7:1.00]
9014;
9015; BTVER2-LABEL: test_or_32:
9016; BTVER2:       # %bb.0:
9017; BTVER2-NEXT:    #APP
9018; BTVER2-NEXT:    orl $665536, %eax # imm = 0xA27C0
9019; BTVER2-NEXT:    # sched: [1:0.50]
9020; BTVER2-NEXT:    orl $665536, %edi # imm = 0xA27C0
9021; BTVER2-NEXT:    # sched: [1:0.50]
9022; BTVER2-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
9023; BTVER2-NEXT:    # sched: [5:1.00]
9024; BTVER2-NEXT:    orl $7, %edi # sched: [1:0.50]
9025; BTVER2-NEXT:    orl $7, (%rsi) # sched: [5:1.00]
9026; BTVER2-NEXT:    orl %edx, %edi # sched: [1:0.50]
9027; BTVER2-NEXT:    orl %edi, (%rsi) # sched: [5:1.00]
9028; BTVER2-NEXT:    orl (%rsi), %edi # sched: [4:1.00]
9029; BTVER2-NEXT:    #NO_APP
9030; BTVER2-NEXT:    retq # sched: [4:1.00]
9031;
9032; ZNVER1-LABEL: test_or_32:
9033; ZNVER1:       # %bb.0:
9034; ZNVER1-NEXT:    #APP
9035; ZNVER1-NEXT:    orl $665536, %eax # imm = 0xA27C0
9036; ZNVER1-NEXT:    # sched: [1:0.25]
9037; ZNVER1-NEXT:    orl $665536, %edi # imm = 0xA27C0
9038; ZNVER1-NEXT:    # sched: [1:0.25]
9039; ZNVER1-NEXT:    orl $665536, (%rsi) # imm = 0xA27C0
9040; ZNVER1-NEXT:    # sched: [5:0.50]
9041; ZNVER1-NEXT:    orl $7, %edi # sched: [1:0.25]
9042; ZNVER1-NEXT:    orl $7, (%rsi) # sched: [5:0.50]
9043; ZNVER1-NEXT:    orl %edx, %edi # sched: [1:0.25]
9044; ZNVER1-NEXT:    orl %edi, (%rsi) # sched: [5:0.50]
9045; ZNVER1-NEXT:    orl (%rsi), %edi # sched: [5:0.50]
9046; ZNVER1-NEXT:    #NO_APP
9047; ZNVER1-NEXT:    retq # sched: [1:0.50]
9048  tail call void asm "orl $3, %EAX \0A\09 orl $3, $0 \0A\09 orl $3, $2 \0A\09 orl $4, $0 \0A\09 orl $4, $2 \0A\09 orl $1, $0 \0A\09 orl $0, $2 \0A\09 orl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
9049  ret void
9050}
9051define void @test_or_64(i64 %a0, i64* %a1, i64 %a2) optsize {
9052; GENERIC-LABEL: test_or_64:
9053; GENERIC:       # %bb.0:
9054; GENERIC-NEXT:    #APP
9055; GENERIC-NEXT:    orq $665536, %rax # imm = 0xA27C0
9056; GENERIC-NEXT:    # sched: [1:0.33]
9057; GENERIC-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9058; GENERIC-NEXT:    # sched: [1:0.33]
9059; GENERIC-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9060; GENERIC-NEXT:    # sched: [7:1.00]
9061; GENERIC-NEXT:    orq $7, %rdi # sched: [1:0.33]
9062; GENERIC-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
9063; GENERIC-NEXT:    orq %rdx, %rdi # sched: [1:0.33]
9064; GENERIC-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
9065; GENERIC-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
9066; GENERIC-NEXT:    #NO_APP
9067; GENERIC-NEXT:    retq # sched: [1:1.00]
9068;
9069; ATOM-LABEL: test_or_64:
9070; ATOM:       # %bb.0:
9071; ATOM-NEXT:    #APP
9072; ATOM-NEXT:    orq $665536, %rax # imm = 0xA27C0
9073; ATOM-NEXT:    # sched: [1:0.50]
9074; ATOM-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9075; ATOM-NEXT:    # sched: [1:0.50]
9076; ATOM-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9077; ATOM-NEXT:    # sched: [1:1.00]
9078; ATOM-NEXT:    orq $7, %rdi # sched: [1:0.50]
9079; ATOM-NEXT:    orq $7, (%rsi) # sched: [1:1.00]
9080; ATOM-NEXT:    orq %rdx, %rdi # sched: [1:0.50]
9081; ATOM-NEXT:    orq %rdi, (%rsi) # sched: [1:1.00]
9082; ATOM-NEXT:    orq (%rsi), %rdi # sched: [1:1.00]
9083; ATOM-NEXT:    #NO_APP
9084; ATOM-NEXT:    retq # sched: [79:39.50]
9085;
9086; SLM-LABEL: test_or_64:
9087; SLM:       # %bb.0:
9088; SLM-NEXT:    #APP
9089; SLM-NEXT:    orq $665536, %rax # imm = 0xA27C0
9090; SLM-NEXT:    # sched: [1:0.50]
9091; SLM-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9092; SLM-NEXT:    # sched: [1:0.50]
9093; SLM-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9094; SLM-NEXT:    # sched: [5:2.00]
9095; SLM-NEXT:    orq $7, %rdi # sched: [1:0.50]
9096; SLM-NEXT:    orq $7, (%rsi) # sched: [5:2.00]
9097; SLM-NEXT:    orq %rdx, %rdi # sched: [1:0.50]
9098; SLM-NEXT:    orq %rdi, (%rsi) # sched: [5:2.00]
9099; SLM-NEXT:    orq (%rsi), %rdi # sched: [4:1.00]
9100; SLM-NEXT:    #NO_APP
9101; SLM-NEXT:    retq # sched: [4:1.00]
9102;
9103; SANDY-LABEL: test_or_64:
9104; SANDY:       # %bb.0:
9105; SANDY-NEXT:    #APP
9106; SANDY-NEXT:    orq $665536, %rax # imm = 0xA27C0
9107; SANDY-NEXT:    # sched: [1:0.33]
9108; SANDY-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9109; SANDY-NEXT:    # sched: [1:0.33]
9110; SANDY-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9111; SANDY-NEXT:    # sched: [7:1.00]
9112; SANDY-NEXT:    orq $7, %rdi # sched: [1:0.33]
9113; SANDY-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
9114; SANDY-NEXT:    orq %rdx, %rdi # sched: [1:0.33]
9115; SANDY-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
9116; SANDY-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
9117; SANDY-NEXT:    #NO_APP
9118; SANDY-NEXT:    retq # sched: [1:1.00]
9119;
9120; HASWELL-LABEL: test_or_64:
9121; HASWELL:       # %bb.0:
9122; HASWELL-NEXT:    #APP
9123; HASWELL-NEXT:    orq $665536, %rax # imm = 0xA27C0
9124; HASWELL-NEXT:    # sched: [1:0.25]
9125; HASWELL-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9126; HASWELL-NEXT:    # sched: [1:0.25]
9127; HASWELL-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9128; HASWELL-NEXT:    # sched: [7:1.00]
9129; HASWELL-NEXT:    orq $7, %rdi # sched: [1:0.25]
9130; HASWELL-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
9131; HASWELL-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
9132; HASWELL-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
9133; HASWELL-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
9134; HASWELL-NEXT:    #NO_APP
9135; HASWELL-NEXT:    retq # sched: [7:1.00]
9136;
9137; BROADWELL-LABEL: test_or_64:
9138; BROADWELL:       # %bb.0:
9139; BROADWELL-NEXT:    #APP
9140; BROADWELL-NEXT:    orq $665536, %rax # imm = 0xA27C0
9141; BROADWELL-NEXT:    # sched: [1:0.25]
9142; BROADWELL-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9143; BROADWELL-NEXT:    # sched: [1:0.25]
9144; BROADWELL-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9145; BROADWELL-NEXT:    # sched: [7:1.00]
9146; BROADWELL-NEXT:    orq $7, %rdi # sched: [1:0.25]
9147; BROADWELL-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
9148; BROADWELL-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
9149; BROADWELL-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
9150; BROADWELL-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
9151; BROADWELL-NEXT:    #NO_APP
9152; BROADWELL-NEXT:    retq # sched: [7:1.00]
9153;
9154; SKYLAKE-LABEL: test_or_64:
9155; SKYLAKE:       # %bb.0:
9156; SKYLAKE-NEXT:    #APP
9157; SKYLAKE-NEXT:    orq $665536, %rax # imm = 0xA27C0
9158; SKYLAKE-NEXT:    # sched: [1:0.25]
9159; SKYLAKE-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9160; SKYLAKE-NEXT:    # sched: [1:0.25]
9161; SKYLAKE-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9162; SKYLAKE-NEXT:    # sched: [7:1.00]
9163; SKYLAKE-NEXT:    orq $7, %rdi # sched: [1:0.25]
9164; SKYLAKE-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
9165; SKYLAKE-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
9166; SKYLAKE-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
9167; SKYLAKE-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
9168; SKYLAKE-NEXT:    #NO_APP
9169; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9170;
9171; SKX-LABEL: test_or_64:
9172; SKX:       # %bb.0:
9173; SKX-NEXT:    #APP
9174; SKX-NEXT:    orq $665536, %rax # imm = 0xA27C0
9175; SKX-NEXT:    # sched: [1:0.25]
9176; SKX-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9177; SKX-NEXT:    # sched: [1:0.25]
9178; SKX-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9179; SKX-NEXT:    # sched: [7:1.00]
9180; SKX-NEXT:    orq $7, %rdi # sched: [1:0.25]
9181; SKX-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
9182; SKX-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
9183; SKX-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
9184; SKX-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
9185; SKX-NEXT:    #NO_APP
9186; SKX-NEXT:    retq # sched: [7:1.00]
9187;
9188; BTVER2-LABEL: test_or_64:
9189; BTVER2:       # %bb.0:
9190; BTVER2-NEXT:    #APP
9191; BTVER2-NEXT:    orq $665536, %rax # imm = 0xA27C0
9192; BTVER2-NEXT:    # sched: [1:0.50]
9193; BTVER2-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9194; BTVER2-NEXT:    # sched: [1:0.50]
9195; BTVER2-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9196; BTVER2-NEXT:    # sched: [5:1.00]
9197; BTVER2-NEXT:    orq $7, %rdi # sched: [1:0.50]
9198; BTVER2-NEXT:    orq $7, (%rsi) # sched: [5:1.00]
9199; BTVER2-NEXT:    orq %rdx, %rdi # sched: [1:0.50]
9200; BTVER2-NEXT:    orq %rdi, (%rsi) # sched: [5:1.00]
9201; BTVER2-NEXT:    orq (%rsi), %rdi # sched: [4:1.00]
9202; BTVER2-NEXT:    #NO_APP
9203; BTVER2-NEXT:    retq # sched: [4:1.00]
9204;
9205; ZNVER1-LABEL: test_or_64:
9206; ZNVER1:       # %bb.0:
9207; ZNVER1-NEXT:    #APP
9208; ZNVER1-NEXT:    orq $665536, %rax # imm = 0xA27C0
9209; ZNVER1-NEXT:    # sched: [1:0.25]
9210; ZNVER1-NEXT:    orq $665536, %rdi # imm = 0xA27C0
9211; ZNVER1-NEXT:    # sched: [1:0.25]
9212; ZNVER1-NEXT:    orq $665536, (%rsi) # imm = 0xA27C0
9213; ZNVER1-NEXT:    # sched: [5:0.50]
9214; ZNVER1-NEXT:    orq $7, %rdi # sched: [1:0.25]
9215; ZNVER1-NEXT:    orq $7, (%rsi) # sched: [5:0.50]
9216; ZNVER1-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
9217; ZNVER1-NEXT:    orq %rdi, (%rsi) # sched: [5:0.50]
9218; ZNVER1-NEXT:    orq (%rsi), %rdi # sched: [5:0.50]
9219; ZNVER1-NEXT:    #NO_APP
9220; ZNVER1-NEXT:    retq # sched: [1:0.50]
9221  tail call void asm "orq $3, %RAX \0A\09 orq $3, $0 \0A\09 orq $3, $2 \0A\09 orq $4, $0 \0A\09 orq $4, $2 \0A\09 orq $1, $0 \0A\09 orq $0, $2 \0A\09 orq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
9222  ret void
9223}
9224
9225define void @test_out() optsize {
9226; GENERIC-LABEL: test_out:
9227; GENERIC:       # %bb.0:
9228; GENERIC-NEXT:    #APP
9229; GENERIC-NEXT:    outb %al, $7 # sched: [100:0.33]
9230; GENERIC-NEXT:    outw %ax, $7 # sched: [100:0.33]
9231; GENERIC-NEXT:    outl %eax, $7 # sched: [100:0.33]
9232; GENERIC-NEXT:    outb %al, %dx # sched: [100:0.33]
9233; GENERIC-NEXT:    outw %ax, %dx # sched: [100:0.33]
9234; GENERIC-NEXT:    outl %eax, %dx # sched: [100:0.33]
9235; GENERIC-NEXT:    #NO_APP
9236; GENERIC-NEXT:    retq # sched: [1:1.00]
9237;
9238; ATOM-LABEL: test_out:
9239; ATOM:       # %bb.0:
9240; ATOM-NEXT:    #APP
9241; ATOM-NEXT:    outb %al, $7 # sched: [72:36.00]
9242; ATOM-NEXT:    outw %ax, $7 # sched: [72:36.00]
9243; ATOM-NEXT:    outl %eax, $7 # sched: [72:36.00]
9244; ATOM-NEXT:    outb %al, %dx # sched: [68:34.00]
9245; ATOM-NEXT:    outw %ax, %dx # sched: [68:34.00]
9246; ATOM-NEXT:    outl %eax, %dx # sched: [68:34.00]
9247; ATOM-NEXT:    #NO_APP
9248; ATOM-NEXT:    retq # sched: [79:39.50]
9249;
9250; SLM-LABEL: test_out:
9251; SLM:       # %bb.0:
9252; SLM-NEXT:    #APP
9253; SLM-NEXT:    outb %al, $7 # sched: [100:1.00]
9254; SLM-NEXT:    outw %ax, $7 # sched: [100:1.00]
9255; SLM-NEXT:    outl %eax, $7 # sched: [100:1.00]
9256; SLM-NEXT:    outb %al, %dx # sched: [100:1.00]
9257; SLM-NEXT:    outw %ax, %dx # sched: [100:1.00]
9258; SLM-NEXT:    outl %eax, %dx # sched: [100:1.00]
9259; SLM-NEXT:    #NO_APP
9260; SLM-NEXT:    retq # sched: [4:1.00]
9261;
9262; SANDY-LABEL: test_out:
9263; SANDY:       # %bb.0:
9264; SANDY-NEXT:    #APP
9265; SANDY-NEXT:    outb %al, $7 # sched: [100:0.33]
9266; SANDY-NEXT:    outw %ax, $7 # sched: [100:0.33]
9267; SANDY-NEXT:    outl %eax, $7 # sched: [100:0.33]
9268; SANDY-NEXT:    outb %al, %dx # sched: [100:0.33]
9269; SANDY-NEXT:    outw %ax, %dx # sched: [100:0.33]
9270; SANDY-NEXT:    outl %eax, %dx # sched: [100:0.33]
9271; SANDY-NEXT:    #NO_APP
9272; SANDY-NEXT:    retq # sched: [1:1.00]
9273;
9274; HASWELL-LABEL: test_out:
9275; HASWELL:       # %bb.0:
9276; HASWELL-NEXT:    #APP
9277; HASWELL-NEXT:    outb %al, $7 # sched: [36:5.00]
9278; HASWELL-NEXT:    outw %ax, $7 # sched: [36:5.00]
9279; HASWELL-NEXT:    outl %eax, $7 # sched: [36:5.00]
9280; HASWELL-NEXT:    outb %al, %dx # sched: [36:5.00]
9281; HASWELL-NEXT:    outw %ax, %dx # sched: [36:5.00]
9282; HASWELL-NEXT:    outl %eax, %dx # sched: [36:5.00]
9283; HASWELL-NEXT:    #NO_APP
9284; HASWELL-NEXT:    retq # sched: [7:1.00]
9285;
9286; BROADWELL-LABEL: test_out:
9287; BROADWELL:       # %bb.0:
9288; BROADWELL-NEXT:    #APP
9289; BROADWELL-NEXT:    outb %al, $7 # sched: [35:5.00]
9290; BROADWELL-NEXT:    outw %ax, $7 # sched: [35:5.00]
9291; BROADWELL-NEXT:    outl %eax, $7 # sched: [35:5.00]
9292; BROADWELL-NEXT:    outb %al, %dx # sched: [35:5.00]
9293; BROADWELL-NEXT:    outw %ax, %dx # sched: [35:5.00]
9294; BROADWELL-NEXT:    outl %eax, %dx # sched: [35:5.00]
9295; BROADWELL-NEXT:    #NO_APP
9296; BROADWELL-NEXT:    retq # sched: [7:1.00]
9297;
9298; SKYLAKE-LABEL: test_out:
9299; SKYLAKE:       # %bb.0:
9300; SKYLAKE-NEXT:    #APP
9301; SKYLAKE-NEXT:    outb %al, $7 # sched: [35:5.00]
9302; SKYLAKE-NEXT:    outw %ax, $7 # sched: [35:5.00]
9303; SKYLAKE-NEXT:    outl %eax, $7 # sched: [35:5.00]
9304; SKYLAKE-NEXT:    outb %al, %dx # sched: [35:5.00]
9305; SKYLAKE-NEXT:    outw %ax, %dx # sched: [35:5.00]
9306; SKYLAKE-NEXT:    outl %eax, %dx # sched: [35:5.00]
9307; SKYLAKE-NEXT:    #NO_APP
9308; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9309;
9310; SKX-LABEL: test_out:
9311; SKX:       # %bb.0:
9312; SKX-NEXT:    #APP
9313; SKX-NEXT:    outb %al, $7 # sched: [35:5.00]
9314; SKX-NEXT:    outw %ax, $7 # sched: [35:5.00]
9315; SKX-NEXT:    outl %eax, $7 # sched: [35:5.00]
9316; SKX-NEXT:    outb %al, %dx # sched: [35:5.00]
9317; SKX-NEXT:    outw %ax, %dx # sched: [35:5.00]
9318; SKX-NEXT:    outl %eax, %dx # sched: [35:5.00]
9319; SKX-NEXT:    #NO_APP
9320; SKX-NEXT:    retq # sched: [7:1.00]
9321;
9322; BTVER2-LABEL: test_out:
9323; BTVER2:       # %bb.0:
9324; BTVER2-NEXT:    #APP
9325; BTVER2-NEXT:    outb %al, $7 # sched: [100:0.50]
9326; BTVER2-NEXT:    outw %ax, $7 # sched: [100:0.50]
9327; BTVER2-NEXT:    outl %eax, $7 # sched: [100:0.50]
9328; BTVER2-NEXT:    outb %al, %dx # sched: [100:0.50]
9329; BTVER2-NEXT:    outw %ax, %dx # sched: [100:0.50]
9330; BTVER2-NEXT:    outl %eax, %dx # sched: [100:0.50]
9331; BTVER2-NEXT:    #NO_APP
9332; BTVER2-NEXT:    retq # sched: [4:1.00]
9333;
9334; ZNVER1-LABEL: test_out:
9335; ZNVER1:       # %bb.0:
9336; ZNVER1-NEXT:    #APP
9337; ZNVER1-NEXT:    outb %al, $7 # sched: [100:0.25]
9338; ZNVER1-NEXT:    outw %ax, $7 # sched: [100:0.25]
9339; ZNVER1-NEXT:    outl %eax, $7 # sched: [100:0.25]
9340; ZNVER1-NEXT:    outb %al, %dx # sched: [100:0.25]
9341; ZNVER1-NEXT:    outw %ax, %dx # sched: [100:0.25]
9342; ZNVER1-NEXT:    outl %eax, %dx # sched: [100:0.25]
9343; ZNVER1-NEXT:    #NO_APP
9344; ZNVER1-NEXT:    retq # sched: [1:0.50]
9345  tail call void asm "outb %AL, $0 \0A\09 outw %AX, $0 \0A\09 outl %EAX, $0 \0A\09 outb %AL, %DX \0A\09 outw %AX, %DX \0A\09 outl %EAX, %DX", "i"(i8 7) nounwind
9346  ret void
9347}
9348
9349define void @test_outs() optsize {
9350; GENERIC-LABEL: test_outs:
9351; GENERIC:       # %bb.0:
9352; GENERIC-NEXT:    #APP
9353; GENERIC-NEXT:    outsb (%rsi), %dx # sched: [100:0.33]
9354; GENERIC-NEXT:    outsw (%rsi), %dx # sched: [100:0.33]
9355; GENERIC-NEXT:    outsl (%rsi), %dx # sched: [100:0.33]
9356; GENERIC-NEXT:    #NO_APP
9357; GENERIC-NEXT:    retq # sched: [1:1.00]
9358;
9359; ATOM-LABEL: test_outs:
9360; ATOM:       # %bb.0:
9361; ATOM-NEXT:    #APP
9362; ATOM-NEXT:    outsb (%rsi), %dx # sched: [74:37.00]
9363; ATOM-NEXT:    outsw (%rsi), %dx # sched: [74:37.00]
9364; ATOM-NEXT:    outsl (%rsi), %dx # sched: [74:37.00]
9365; ATOM-NEXT:    #NO_APP
9366; ATOM-NEXT:    retq # sched: [79:39.50]
9367;
9368; SLM-LABEL: test_outs:
9369; SLM:       # %bb.0:
9370; SLM-NEXT:    #APP
9371; SLM-NEXT:    outsb (%rsi), %dx # sched: [100:1.00]
9372; SLM-NEXT:    outsw (%rsi), %dx # sched: [100:1.00]
9373; SLM-NEXT:    outsl (%rsi), %dx # sched: [100:1.00]
9374; SLM-NEXT:    #NO_APP
9375; SLM-NEXT:    retq # sched: [4:1.00]
9376;
9377; SANDY-LABEL: test_outs:
9378; SANDY:       # %bb.0:
9379; SANDY-NEXT:    #APP
9380; SANDY-NEXT:    outsb (%rsi), %dx # sched: [100:0.33]
9381; SANDY-NEXT:    outsw (%rsi), %dx # sched: [100:0.33]
9382; SANDY-NEXT:    outsl (%rsi), %dx # sched: [100:0.33]
9383; SANDY-NEXT:    #NO_APP
9384; SANDY-NEXT:    retq # sched: [1:1.00]
9385;
9386; HASWELL-LABEL: test_outs:
9387; HASWELL:       # %bb.0:
9388; HASWELL-NEXT:    #APP
9389; HASWELL-NEXT:    outsb (%rsi), %dx # sched: [100:0.25]
9390; HASWELL-NEXT:    outsw (%rsi), %dx # sched: [100:0.25]
9391; HASWELL-NEXT:    outsl (%rsi), %dx # sched: [100:0.25]
9392; HASWELL-NEXT:    #NO_APP
9393; HASWELL-NEXT:    retq # sched: [7:1.00]
9394;
9395; BROADWELL-LABEL: test_outs:
9396; BROADWELL:       # %bb.0:
9397; BROADWELL-NEXT:    #APP
9398; BROADWELL-NEXT:    outsb (%rsi), %dx # sched: [100:0.25]
9399; BROADWELL-NEXT:    outsw (%rsi), %dx # sched: [100:0.25]
9400; BROADWELL-NEXT:    outsl (%rsi), %dx # sched: [100:0.25]
9401; BROADWELL-NEXT:    #NO_APP
9402; BROADWELL-NEXT:    retq # sched: [7:1.00]
9403;
9404; SKYLAKE-LABEL: test_outs:
9405; SKYLAKE:       # %bb.0:
9406; SKYLAKE-NEXT:    #APP
9407; SKYLAKE-NEXT:    outsb (%rsi), %dx # sched: [100:0.25]
9408; SKYLAKE-NEXT:    outsw (%rsi), %dx # sched: [100:0.25]
9409; SKYLAKE-NEXT:    outsl (%rsi), %dx # sched: [100:0.25]
9410; SKYLAKE-NEXT:    #NO_APP
9411; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9412;
9413; SKX-LABEL: test_outs:
9414; SKX:       # %bb.0:
9415; SKX-NEXT:    #APP
9416; SKX-NEXT:    outsb (%rsi), %dx # sched: [100:0.25]
9417; SKX-NEXT:    outsw (%rsi), %dx # sched: [100:0.25]
9418; SKX-NEXT:    outsl (%rsi), %dx # sched: [100:0.25]
9419; SKX-NEXT:    #NO_APP
9420; SKX-NEXT:    retq # sched: [7:1.00]
9421;
9422; BTVER2-LABEL: test_outs:
9423; BTVER2:       # %bb.0:
9424; BTVER2-NEXT:    #APP
9425; BTVER2-NEXT:    outsb (%rsi), %dx # sched: [100:0.50]
9426; BTVER2-NEXT:    outsw (%rsi), %dx # sched: [100:0.50]
9427; BTVER2-NEXT:    outsl (%rsi), %dx # sched: [100:0.50]
9428; BTVER2-NEXT:    #NO_APP
9429; BTVER2-NEXT:    retq # sched: [4:1.00]
9430;
9431; ZNVER1-LABEL: test_outs:
9432; ZNVER1:       # %bb.0:
9433; ZNVER1-NEXT:    #APP
9434; ZNVER1-NEXT:    outsb (%rsi), %dx # sched: [100:0.25]
9435; ZNVER1-NEXT:    outsw (%rsi), %dx # sched: [100:0.25]
9436; ZNVER1-NEXT:    outsl (%rsi), %dx # sched: [100:0.25]
9437; ZNVER1-NEXT:    #NO_APP
9438; ZNVER1-NEXT:    retq # sched: [1:0.50]
9439  call void asm sideeffect "outsb \0A\09 outsw \0A\09 outsl", ""()
9440  ret void
9441}
9442
9443define void @test_pause() optsize {
9444; GENERIC-LABEL: test_pause:
9445; GENERIC:       # %bb.0:
9446; GENERIC-NEXT:    #APP
9447; GENERIC-NEXT:    pause # sched: [4:1.33]
9448; GENERIC-NEXT:    #NO_APP
9449; GENERIC-NEXT:    retq # sched: [1:1.00]
9450;
9451; ATOM-LABEL: test_pause:
9452; ATOM:       # %bb.0:
9453; ATOM-NEXT:    #APP
9454; ATOM-NEXT:    pause # sched: [17:8.50]
9455; ATOM-NEXT:    #NO_APP
9456; ATOM-NEXT:    retq # sched: [79:39.50]
9457;
9458; SLM-LABEL: test_pause:
9459; SLM:       # %bb.0:
9460; SLM-NEXT:    #APP
9461; SLM-NEXT:    pause # sched: [1:0.50]
9462; SLM-NEXT:    #NO_APP
9463; SLM-NEXT:    retq # sched: [4:1.00]
9464;
9465; SANDY-LABEL: test_pause:
9466; SANDY:       # %bb.0:
9467; SANDY-NEXT:    #APP
9468; SANDY-NEXT:    pause # sched: [4:1.33]
9469; SANDY-NEXT:    #NO_APP
9470; SANDY-NEXT:    retq # sched: [1:1.00]
9471;
9472; HASWELL-LABEL: test_pause:
9473; HASWELL:       # %bb.0:
9474; HASWELL-NEXT:    #APP
9475; HASWELL-NEXT:    pause # sched: [5:1.25]
9476; HASWELL-NEXT:    #NO_APP
9477; HASWELL-NEXT:    retq # sched: [7:1.00]
9478;
9479; BROADWELL-LABEL: test_pause:
9480; BROADWELL:       # %bb.0:
9481; BROADWELL-NEXT:    #APP
9482; BROADWELL-NEXT:    pause # sched: [5:1.25]
9483; BROADWELL-NEXT:    #NO_APP
9484; BROADWELL-NEXT:    retq # sched: [7:1.00]
9485;
9486; SKYLAKE-LABEL: test_pause:
9487; SKYLAKE:       # %bb.0:
9488; SKYLAKE-NEXT:    #APP
9489; SKYLAKE-NEXT:    pause # sched: [4:1.00]
9490; SKYLAKE-NEXT:    #NO_APP
9491; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9492;
9493; SKX-LABEL: test_pause:
9494; SKX:       # %bb.0:
9495; SKX-NEXT:    #APP
9496; SKX-NEXT:    pause # sched: [140:1.00]
9497; SKX-NEXT:    #NO_APP
9498; SKX-NEXT:    retq # sched: [7:1.00]
9499;
9500; BTVER2-LABEL: test_pause:
9501; BTVER2:       # %bb.0:
9502; BTVER2-NEXT:    #APP
9503; BTVER2-NEXT:    pause # sched: [1:0.50]
9504; BTVER2-NEXT:    #NO_APP
9505; BTVER2-NEXT:    retq # sched: [4:1.00]
9506;
9507; ZNVER1-LABEL: test_pause:
9508; ZNVER1:       # %bb.0:
9509; ZNVER1-NEXT:    #APP
9510; ZNVER1-NEXT:    pause # sched: [100:0.25]
9511; ZNVER1-NEXT:    #NO_APP
9512; ZNVER1-NEXT:    retq # sched: [1:0.50]
9513  call void asm sideeffect "pause", ""()
9514  ret void
9515}
9516
9517define void @test_pop_push() optsize {
9518; GENERIC-LABEL: test_pop_push:
9519; GENERIC:       # %bb.0:
9520; GENERIC-NEXT:    #APP
9521; GENERIC-NEXT:    popq %fs # sched: [100:0.33]
9522; GENERIC-NEXT:    popq %gs # sched: [100:0.33]
9523; GENERIC-NEXT:    pushq %fs # sched: [3:1.00]
9524; GENERIC-NEXT:    pushq %gs # sched: [5:1.00]
9525; GENERIC-NEXT:    #NO_APP
9526; GENERIC-NEXT:    retq # sched: [1:1.00]
9527;
9528; ATOM-LABEL: test_pop_push:
9529; ATOM:       # %bb.0:
9530; ATOM-NEXT:    #APP
9531; ATOM-NEXT:    popq %fs # sched: [29:14.50]
9532; ATOM-NEXT:    popq %gs # sched: [29:14.50]
9533; ATOM-NEXT:    pushq %fs # sched: [2:1.00]
9534; ATOM-NEXT:    pushq %gs # sched: [2:1.00]
9535; ATOM-NEXT:    #NO_APP
9536; ATOM-NEXT:    retq # sched: [79:39.50]
9537;
9538; SLM-LABEL: test_pop_push:
9539; SLM:       # %bb.0:
9540; SLM-NEXT:    #APP
9541; SLM-NEXT:    popq %fs # sched: [100:1.00]
9542; SLM-NEXT:    popq %gs # sched: [100:1.00]
9543; SLM-NEXT:    pushq %fs # sched: [100:1.00]
9544; SLM-NEXT:    pushq %gs # sched: [100:1.00]
9545; SLM-NEXT:    #NO_APP
9546; SLM-NEXT:    retq # sched: [4:1.00]
9547;
9548; SANDY-LABEL: test_pop_push:
9549; SANDY:       # %bb.0:
9550; SANDY-NEXT:    #APP
9551; SANDY-NEXT:    popq %fs # sched: [100:0.33]
9552; SANDY-NEXT:    popq %gs # sched: [100:0.33]
9553; SANDY-NEXT:    pushq %fs # sched: [3:1.00]
9554; SANDY-NEXT:    pushq %gs # sched: [5:1.00]
9555; SANDY-NEXT:    #NO_APP
9556; SANDY-NEXT:    retq # sched: [1:1.00]
9557;
9558; HASWELL-LABEL: test_pop_push:
9559; HASWELL:       # %bb.0:
9560; HASWELL-NEXT:    #APP
9561; HASWELL-NEXT:    popq %fs # sched: [100:0.25]
9562; HASWELL-NEXT:    popq %gs # sched: [100:0.25]
9563; HASWELL-NEXT:    pushq %fs # sched: [100:0.25]
9564; HASWELL-NEXT:    pushq %gs # sched: [100:0.25]
9565; HASWELL-NEXT:    #NO_APP
9566; HASWELL-NEXT:    retq # sched: [7:1.00]
9567;
9568; BROADWELL-LABEL: test_pop_push:
9569; BROADWELL:       # %bb.0:
9570; BROADWELL-NEXT:    #APP
9571; BROADWELL-NEXT:    popq %fs # sched: [100:0.25]
9572; BROADWELL-NEXT:    popq %gs # sched: [100:0.25]
9573; BROADWELL-NEXT:    pushq %fs # sched: [100:0.25]
9574; BROADWELL-NEXT:    pushq %gs # sched: [100:0.25]
9575; BROADWELL-NEXT:    #NO_APP
9576; BROADWELL-NEXT:    retq # sched: [7:1.00]
9577;
9578; SKYLAKE-LABEL: test_pop_push:
9579; SKYLAKE:       # %bb.0:
9580; SKYLAKE-NEXT:    #APP
9581; SKYLAKE-NEXT:    popq %fs # sched: [100:0.25]
9582; SKYLAKE-NEXT:    popq %gs # sched: [100:0.25]
9583; SKYLAKE-NEXT:    pushq %fs # sched: [100:0.25]
9584; SKYLAKE-NEXT:    pushq %gs # sched: [100:0.25]
9585; SKYLAKE-NEXT:    #NO_APP
9586; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9587;
9588; SKX-LABEL: test_pop_push:
9589; SKX:       # %bb.0:
9590; SKX-NEXT:    #APP
9591; SKX-NEXT:    popq %fs # sched: [100:0.25]
9592; SKX-NEXT:    popq %gs # sched: [100:0.25]
9593; SKX-NEXT:    pushq %fs # sched: [100:0.25]
9594; SKX-NEXT:    pushq %gs # sched: [100:0.25]
9595; SKX-NEXT:    #NO_APP
9596; SKX-NEXT:    retq # sched: [7:1.00]
9597;
9598; BTVER2-LABEL: test_pop_push:
9599; BTVER2:       # %bb.0:
9600; BTVER2-NEXT:    #APP
9601; BTVER2-NEXT:    popq %fs # sched: [100:0.50]
9602; BTVER2-NEXT:    popq %gs # sched: [100:0.50]
9603; BTVER2-NEXT:    pushq %fs # sched: [100:0.50]
9604; BTVER2-NEXT:    pushq %gs # sched: [100:0.50]
9605; BTVER2-NEXT:    #NO_APP
9606; BTVER2-NEXT:    retq # sched: [4:1.00]
9607;
9608; ZNVER1-LABEL: test_pop_push:
9609; ZNVER1:       # %bb.0:
9610; ZNVER1-NEXT:    #APP
9611; ZNVER1-NEXT:    popq %fs # sched: [100:0.25]
9612; ZNVER1-NEXT:    popq %gs # sched: [100:0.25]
9613; ZNVER1-NEXT:    pushq %fs # sched: [100:0.25]
9614; ZNVER1-NEXT:    pushq %gs # sched: [100:0.25]
9615; ZNVER1-NEXT:    #NO_APP
9616; ZNVER1-NEXT:    retq # sched: [1:0.50]
9617  call void asm sideeffect "pop %FS \0A\09 pop %GS \0A\09 push %FS \0A\09 push %GS", ""()
9618  ret void
9619}
9620define i16 @test_pop_push_16(i16 %a0, i16 *%a1) optsize {
9621; GENERIC-LABEL: test_pop_push_16:
9622; GENERIC:       # %bb.0:
9623; GENERIC-NEXT:    #APP
9624; GENERIC-NEXT:    popw %ax # sched: [6:0.50]
9625; GENERIC-NEXT:    popw (%rsi) # sched: [6:0.50]
9626; GENERIC-NEXT:    pushw %di # sched: [5:1.00]
9627; GENERIC-NEXT:    pushw (%rsi) # sched: [5:1.00]
9628; GENERIC-NEXT:    pushw $4095 # imm = 0xFFF
9629; GENERIC-NEXT:    # sched: [1:1.00]
9630; GENERIC-NEXT:    pushw $7 # sched: [1:1.00]
9631; GENERIC-NEXT:    #NO_APP
9632; GENERIC-NEXT:    retq # sched: [1:1.00]
9633;
9634; ATOM-LABEL: test_pop_push_16:
9635; ATOM:       # %bb.0:
9636; ATOM-NEXT:    #APP
9637; ATOM-NEXT:    popw %ax # sched: [2:1.00]
9638; ATOM-NEXT:    popw (%rsi) # sched: [3:1.50]
9639; ATOM-NEXT:    pushw %di # sched: [1:1.00]
9640; ATOM-NEXT:    pushw (%rsi) # sched: [2:1.00]
9641; ATOM-NEXT:    pushw $4095 # imm = 0xFFF
9642; ATOM-NEXT:    # sched: [1:1.00]
9643; ATOM-NEXT:    pushw $7 # sched: [1:1.00]
9644; ATOM-NEXT:    #NO_APP
9645; ATOM-NEXT:    retq # sched: [79:39.50]
9646;
9647; SLM-LABEL: test_pop_push_16:
9648; SLM:       # %bb.0:
9649; SLM-NEXT:    #APP
9650; SLM-NEXT:    popw %ax # sched: [3:1.00]
9651; SLM-NEXT:    popw (%rsi) # sched: [1:1.00]
9652; SLM-NEXT:    pushw %di # sched: [1:1.00]
9653; SLM-NEXT:    pushw (%rsi) # sched: [1:1.00]
9654; SLM-NEXT:    pushw $4095 # imm = 0xFFF
9655; SLM-NEXT:    # sched: [1:1.00]
9656; SLM-NEXT:    pushw $7 # sched: [1:1.00]
9657; SLM-NEXT:    #NO_APP
9658; SLM-NEXT:    retq # sched: [4:1.00]
9659;
9660; SANDY-LABEL: test_pop_push_16:
9661; SANDY:       # %bb.0:
9662; SANDY-NEXT:    #APP
9663; SANDY-NEXT:    popw %ax # sched: [6:0.50]
9664; SANDY-NEXT:    popw (%rsi) # sched: [6:0.50]
9665; SANDY-NEXT:    pushw %di # sched: [5:1.00]
9666; SANDY-NEXT:    pushw (%rsi) # sched: [5:1.00]
9667; SANDY-NEXT:    pushw $4095 # imm = 0xFFF
9668; SANDY-NEXT:    # sched: [1:1.00]
9669; SANDY-NEXT:    pushw $7 # sched: [1:1.00]
9670; SANDY-NEXT:    #NO_APP
9671; SANDY-NEXT:    retq # sched: [1:1.00]
9672;
9673; HASWELL-LABEL: test_pop_push_16:
9674; HASWELL:       # %bb.0:
9675; HASWELL-NEXT:    #APP
9676; HASWELL-NEXT:    popw %ax # sched: [6:0.50]
9677; HASWELL-NEXT:    popw (%rsi) # sched: [7:1.00]
9678; HASWELL-NEXT:    pushw %di # sched: [2:1.00]
9679; HASWELL-NEXT:    pushw (%rsi) # sched: [7:1.00]
9680; HASWELL-NEXT:    pushw $4095 # imm = 0xFFF
9681; HASWELL-NEXT:    # sched: [1:1.00]
9682; HASWELL-NEXT:    pushw $7 # sched: [1:1.00]
9683; HASWELL-NEXT:    #NO_APP
9684; HASWELL-NEXT:    retq # sched: [7:1.00]
9685;
9686; BROADWELL-LABEL: test_pop_push_16:
9687; BROADWELL:       # %bb.0:
9688; BROADWELL-NEXT:    #APP
9689; BROADWELL-NEXT:    popw %ax # sched: [6:0.50]
9690; BROADWELL-NEXT:    popw (%rsi) # sched: [6:1.00]
9691; BROADWELL-NEXT:    pushw %di # sched: [2:1.00]
9692; BROADWELL-NEXT:    pushw (%rsi) # sched: [6:1.00]
9693; BROADWELL-NEXT:    pushw $4095 # imm = 0xFFF
9694; BROADWELL-NEXT:    # sched: [1:1.00]
9695; BROADWELL-NEXT:    pushw $7 # sched: [1:1.00]
9696; BROADWELL-NEXT:    #NO_APP
9697; BROADWELL-NEXT:    retq # sched: [7:1.00]
9698;
9699; SKYLAKE-LABEL: test_pop_push_16:
9700; SKYLAKE:       # %bb.0:
9701; SKYLAKE-NEXT:    #APP
9702; SKYLAKE-NEXT:    popw %ax # sched: [6:0.50]
9703; SKYLAKE-NEXT:    popw (%rsi) # sched: [6:1.00]
9704; SKYLAKE-NEXT:    pushw %di # sched: [2:1.00]
9705; SKYLAKE-NEXT:    pushw (%rsi) # sched: [6:1.00]
9706; SKYLAKE-NEXT:    pushw $4095 # imm = 0xFFF
9707; SKYLAKE-NEXT:    # sched: [1:1.00]
9708; SKYLAKE-NEXT:    pushw $7 # sched: [1:1.00]
9709; SKYLAKE-NEXT:    #NO_APP
9710; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9711;
9712; SKX-LABEL: test_pop_push_16:
9713; SKX:       # %bb.0:
9714; SKX-NEXT:    #APP
9715; SKX-NEXT:    popw %ax # sched: [6:0.50]
9716; SKX-NEXT:    popw (%rsi) # sched: [6:1.00]
9717; SKX-NEXT:    pushw %di # sched: [2:1.00]
9718; SKX-NEXT:    pushw (%rsi) # sched: [6:1.00]
9719; SKX-NEXT:    pushw $4095 # imm = 0xFFF
9720; SKX-NEXT:    # sched: [1:1.00]
9721; SKX-NEXT:    pushw $7 # sched: [1:1.00]
9722; SKX-NEXT:    #NO_APP
9723; SKX-NEXT:    retq # sched: [7:1.00]
9724;
9725; BTVER2-LABEL: test_pop_push_16:
9726; BTVER2:       # %bb.0:
9727; BTVER2-NEXT:    #APP
9728; BTVER2-NEXT:    popw %ax # sched: [5:1.00]
9729; BTVER2-NEXT:    popw (%rsi) # sched: [1:1.00]
9730; BTVER2-NEXT:    pushw %di # sched: [1:1.00]
9731; BTVER2-NEXT:    pushw (%rsi) # sched: [1:1.00]
9732; BTVER2-NEXT:    pushw $4095 # imm = 0xFFF
9733; BTVER2-NEXT:    # sched: [1:1.00]
9734; BTVER2-NEXT:    pushw $7 # sched: [1:1.00]
9735; BTVER2-NEXT:    #NO_APP
9736; BTVER2-NEXT:    retq # sched: [4:1.00]
9737;
9738; ZNVER1-LABEL: test_pop_push_16:
9739; ZNVER1:       # %bb.0:
9740; ZNVER1-NEXT:    #APP
9741; ZNVER1-NEXT:    popw %ax # sched: [8:0.50]
9742; ZNVER1-NEXT:    popw (%rsi) # sched: [5:0.50]
9743; ZNVER1-NEXT:    pushw %di # sched: [1:0.50]
9744; ZNVER1-NEXT:    pushw (%rsi) # sched: [4:0.50]
9745; ZNVER1-NEXT:    pushw $4095 # imm = 0xFFF
9746; ZNVER1-NEXT:    # sched: [1:0.50]
9747; ZNVER1-NEXT:    pushw $7 # sched: [1:0.50]
9748; ZNVER1-NEXT:    #NO_APP
9749; ZNVER1-NEXT:    retq # sched: [1:0.50]
9750  %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)
9751  ret i16 %1
9752}
9753define i64 @test_pop_push_64(i64 %a0, i64 *%a1) optsize {
9754; GENERIC-LABEL: test_pop_push_64:
9755; GENERIC:       # %bb.0:
9756; GENERIC-NEXT:    #APP
9757; GENERIC-NEXT:    popq %rax # sched: [6:0.50]
9758; GENERIC-NEXT:    popq (%rsi) # sched: [6:0.50]
9759; GENERIC-NEXT:    pushq %rdi # sched: [5:1.00]
9760; GENERIC-NEXT:    pushq (%rsi) # sched: [5:1.00]
9761; GENERIC-NEXT:    pushq $4095 # imm = 0xFFF
9762; GENERIC-NEXT:    # sched: [1:1.00]
9763; GENERIC-NEXT:    pushq $7 # sched: [5:1.00]
9764; GENERIC-NEXT:    #NO_APP
9765; GENERIC-NEXT:    retq # sched: [1:1.00]
9766;
9767; ATOM-LABEL: test_pop_push_64:
9768; ATOM:       # %bb.0:
9769; ATOM-NEXT:    #APP
9770; ATOM-NEXT:    popq %rax # sched: [1:1.00]
9771; ATOM-NEXT:    popq (%rsi) # sched: [3:1.50]
9772; ATOM-NEXT:    pushq %rdi # sched: [1:1.00]
9773; ATOM-NEXT:    pushq (%rsi) # sched: [2:1.00]
9774; ATOM-NEXT:    pushq $4095 # imm = 0xFFF
9775; ATOM-NEXT:    # sched: [1:1.00]
9776; ATOM-NEXT:    pushq $7 # sched: [1:1.00]
9777; ATOM-NEXT:    #NO_APP
9778; ATOM-NEXT:    retq # sched: [79:39.50]
9779;
9780; SLM-LABEL: test_pop_push_64:
9781; SLM:       # %bb.0:
9782; SLM-NEXT:    #APP
9783; SLM-NEXT:    popq %rax # sched: [3:1.00]
9784; SLM-NEXT:    popq (%rsi) # sched: [1:1.00]
9785; SLM-NEXT:    pushq %rdi # sched: [1:1.00]
9786; SLM-NEXT:    pushq (%rsi) # sched: [1:1.00]
9787; SLM-NEXT:    pushq $4095 # imm = 0xFFF
9788; SLM-NEXT:    # sched: [1:1.00]
9789; SLM-NEXT:    pushq $7 # sched: [1:1.00]
9790; SLM-NEXT:    #NO_APP
9791; SLM-NEXT:    retq # sched: [4:1.00]
9792;
9793; SANDY-LABEL: test_pop_push_64:
9794; SANDY:       # %bb.0:
9795; SANDY-NEXT:    #APP
9796; SANDY-NEXT:    popq %rax # sched: [6:0.50]
9797; SANDY-NEXT:    popq (%rsi) # sched: [6:0.50]
9798; SANDY-NEXT:    pushq %rdi # sched: [5:1.00]
9799; SANDY-NEXT:    pushq (%rsi) # sched: [5:1.00]
9800; SANDY-NEXT:    pushq $4095 # imm = 0xFFF
9801; SANDY-NEXT:    # sched: [1:1.00]
9802; SANDY-NEXT:    pushq $7 # sched: [5:1.00]
9803; SANDY-NEXT:    #NO_APP
9804; SANDY-NEXT:    retq # sched: [1:1.00]
9805;
9806; HASWELL-LABEL: test_pop_push_64:
9807; HASWELL:       # %bb.0:
9808; HASWELL-NEXT:    #APP
9809; HASWELL-NEXT:    popq %rax # sched: [6:0.50]
9810; HASWELL-NEXT:    popq (%rsi) # sched: [7:1.00]
9811; HASWELL-NEXT:    pushq %rdi # sched: [2:1.00]
9812; HASWELL-NEXT:    pushq (%rsi) # sched: [7:1.00]
9813; HASWELL-NEXT:    pushq $4095 # imm = 0xFFF
9814; HASWELL-NEXT:    # sched: [1:1.00]
9815; HASWELL-NEXT:    pushq $7 # sched: [2:1.00]
9816; HASWELL-NEXT:    #NO_APP
9817; HASWELL-NEXT:    retq # sched: [7:1.00]
9818;
9819; BROADWELL-LABEL: test_pop_push_64:
9820; BROADWELL:       # %bb.0:
9821; BROADWELL-NEXT:    #APP
9822; BROADWELL-NEXT:    popq %rax # sched: [6:0.50]
9823; BROADWELL-NEXT:    popq (%rsi) # sched: [6:1.00]
9824; BROADWELL-NEXT:    pushq %rdi # sched: [2:1.00]
9825; BROADWELL-NEXT:    pushq (%rsi) # sched: [6:1.00]
9826; BROADWELL-NEXT:    pushq $4095 # imm = 0xFFF
9827; BROADWELL-NEXT:    # sched: [1:1.00]
9828; BROADWELL-NEXT:    pushq $7 # sched: [2:1.00]
9829; BROADWELL-NEXT:    #NO_APP
9830; BROADWELL-NEXT:    retq # sched: [7:1.00]
9831;
9832; SKYLAKE-LABEL: test_pop_push_64:
9833; SKYLAKE:       # %bb.0:
9834; SKYLAKE-NEXT:    #APP
9835; SKYLAKE-NEXT:    popq %rax # sched: [6:0.50]
9836; SKYLAKE-NEXT:    popq (%rsi) # sched: [6:1.00]
9837; SKYLAKE-NEXT:    pushq %rdi # sched: [2:1.00]
9838; SKYLAKE-NEXT:    pushq (%rsi) # sched: [6:1.00]
9839; SKYLAKE-NEXT:    pushq $4095 # imm = 0xFFF
9840; SKYLAKE-NEXT:    # sched: [1:1.00]
9841; SKYLAKE-NEXT:    pushq $7 # sched: [2:1.00]
9842; SKYLAKE-NEXT:    #NO_APP
9843; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9844;
9845; SKX-LABEL: test_pop_push_64:
9846; SKX:       # %bb.0:
9847; SKX-NEXT:    #APP
9848; SKX-NEXT:    popq %rax # sched: [6:0.50]
9849; SKX-NEXT:    popq (%rsi) # sched: [6:1.00]
9850; SKX-NEXT:    pushq %rdi # sched: [2:1.00]
9851; SKX-NEXT:    pushq (%rsi) # sched: [6:1.00]
9852; SKX-NEXT:    pushq $4095 # imm = 0xFFF
9853; SKX-NEXT:    # sched: [1:1.00]
9854; SKX-NEXT:    pushq $7 # sched: [2:1.00]
9855; SKX-NEXT:    #NO_APP
9856; SKX-NEXT:    retq # sched: [7:1.00]
9857;
9858; BTVER2-LABEL: test_pop_push_64:
9859; BTVER2:       # %bb.0:
9860; BTVER2-NEXT:    #APP
9861; BTVER2-NEXT:    popq %rax # sched: [5:1.00]
9862; BTVER2-NEXT:    popq (%rsi) # sched: [1:1.00]
9863; BTVER2-NEXT:    pushq %rdi # sched: [1:1.00]
9864; BTVER2-NEXT:    pushq (%rsi) # sched: [1:1.00]
9865; BTVER2-NEXT:    pushq $4095 # imm = 0xFFF
9866; BTVER2-NEXT:    # sched: [1:1.00]
9867; BTVER2-NEXT:    pushq $7 # sched: [1:1.00]
9868; BTVER2-NEXT:    #NO_APP
9869; BTVER2-NEXT:    retq # sched: [4:1.00]
9870;
9871; ZNVER1-LABEL: test_pop_push_64:
9872; ZNVER1:       # %bb.0:
9873; ZNVER1-NEXT:    #APP
9874; ZNVER1-NEXT:    popq %rax # sched: [8:0.50]
9875; ZNVER1-NEXT:    popq (%rsi) # sched: [1:0.50]
9876; ZNVER1-NEXT:    pushq %rdi # sched: [1:0.50]
9877; ZNVER1-NEXT:    pushq (%rsi) # sched: [1:0.50]
9878; ZNVER1-NEXT:    pushq $4095 # imm = 0xFFF
9879; ZNVER1-NEXT:    # sched: [1:0.50]
9880; ZNVER1-NEXT:    pushq $7 # sched: [1:0.50]
9881; ZNVER1-NEXT:    #NO_APP
9882; ZNVER1-NEXT:    retq # sched: [1:0.50]
9883  %1 = call i64 asm sideeffect "popq $0 \0A\09 popq $2 \0A\09 pushq $1 \0A\09 pushq $2 \0A\09 pushq $3 \0A\09 pushq $4", "=r,r,*m,i,i"(i64 %a0, i64 *%a1, i64 4095, i8 7)
9884  ret i64 %1
9885}
9886
9887define void @test_popf_pushf() optsize {
9888; GENERIC-LABEL: test_popf_pushf:
9889; GENERIC:       # %bb.0:
9890; GENERIC-NEXT:    #APP
9891; GENERIC-NEXT:    popfq # sched: [5:0.50]
9892; GENERIC-NEXT:    pushfq # sched: [5:1.00]
9893; GENERIC-NEXT:    #NO_APP
9894; GENERIC-NEXT:    retq # sched: [1:1.00]
9895;
9896; ATOM-LABEL: test_popf_pushf:
9897; ATOM:       # %bb.0:
9898; ATOM-NEXT:    #APP
9899; ATOM-NEXT:    popfq # sched: [26:13.00]
9900; ATOM-NEXT:    pushfq # sched: [9:4.50]
9901; ATOM-NEXT:    #NO_APP
9902; ATOM-NEXT:    retq # sched: [79:39.50]
9903;
9904; SLM-LABEL: test_popf_pushf:
9905; SLM:       # %bb.0:
9906; SLM-NEXT:    #APP
9907; SLM-NEXT:    popfq # sched: [3:1.00]
9908; SLM-NEXT:    pushfq # sched: [1:1.00]
9909; SLM-NEXT:    #NO_APP
9910; SLM-NEXT:    retq # sched: [4:1.00]
9911;
9912; SANDY-LABEL: test_popf_pushf:
9913; SANDY:       # %bb.0:
9914; SANDY-NEXT:    #APP
9915; SANDY-NEXT:    popfq # sched: [5:0.50]
9916; SANDY-NEXT:    pushfq # sched: [5:1.00]
9917; SANDY-NEXT:    #NO_APP
9918; SANDY-NEXT:    retq # sched: [1:1.00]
9919;
9920; HASWELL-LABEL: test_popf_pushf:
9921; HASWELL:       # %bb.0:
9922; HASWELL-NEXT:    #APP
9923; HASWELL-NEXT:    popfq # sched: [5:0.50]
9924; HASWELL-NEXT:    pushfq # sched: [5:1.00]
9925; HASWELL-NEXT:    #NO_APP
9926; HASWELL-NEXT:    retq # sched: [7:1.00]
9927;
9928; BROADWELL-LABEL: test_popf_pushf:
9929; BROADWELL:       # %bb.0:
9930; BROADWELL-NEXT:    #APP
9931; BROADWELL-NEXT:    popfq # sched: [22:4.25]
9932; BROADWELL-NEXT:    pushfq # sched: [5:1.00]
9933; BROADWELL-NEXT:    #NO_APP
9934; BROADWELL-NEXT:    retq # sched: [7:1.00]
9935;
9936; SKYLAKE-LABEL: test_popf_pushf:
9937; SKYLAKE:       # %bb.0:
9938; SKYLAKE-NEXT:    #APP
9939; SKYLAKE-NEXT:    popfq # sched: [5:0.50]
9940; SKYLAKE-NEXT:    pushfq # sched: [5:1.00]
9941; SKYLAKE-NEXT:    #NO_APP
9942; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9943;
9944; SKX-LABEL: test_popf_pushf:
9945; SKX:       # %bb.0:
9946; SKX-NEXT:    #APP
9947; SKX-NEXT:    popfq # sched: [5:0.50]
9948; SKX-NEXT:    pushfq # sched: [5:1.00]
9949; SKX-NEXT:    #NO_APP
9950; SKX-NEXT:    retq # sched: [7:1.00]
9951;
9952; BTVER2-LABEL: test_popf_pushf:
9953; BTVER2:       # %bb.0:
9954; BTVER2-NEXT:    #APP
9955; BTVER2-NEXT:    popfq # sched: [5:1.00]
9956; BTVER2-NEXT:    pushfq # sched: [1:1.00]
9957; BTVER2-NEXT:    #NO_APP
9958; BTVER2-NEXT:    retq # sched: [4:1.00]
9959;
9960; ZNVER1-LABEL: test_popf_pushf:
9961; ZNVER1:       # %bb.0:
9962; ZNVER1-NEXT:    #APP
9963; ZNVER1-NEXT:    popfq # sched: [8:0.50]
9964; ZNVER1-NEXT:    pushfq # sched: [1:0.50]
9965; ZNVER1-NEXT:    #NO_APP
9966; ZNVER1-NEXT:    retq # sched: [1:0.50]
9967  call void asm sideeffect "popf \0A\09 pushf", ""()
9968  ret void
9969}
9970
9971define void @test_rcl_rcr_8(i8 %a0, i8 %a1, i8 *%a2) optsize {
9972; GENERIC-LABEL: test_rcl_rcr_8:
9973; GENERIC:       # %bb.0:
9974; GENERIC-NEXT:    #APP
9975; GENERIC-NEXT:    rclb %dil # sched: [1:0.50]
9976; GENERIC-NEXT:    rcrb %dil # sched: [1:0.50]
9977; GENERIC-NEXT:    rclb (%rdx) # sched: [6:1.00]
9978; GENERIC-NEXT:    rcrb (%rdx) # sched: [6:1.00]
9979; GENERIC-NEXT:    rclb $7, %dil # sched: [1:0.50]
9980; GENERIC-NEXT:    rcrb $7, %dil # sched: [1:0.50]
9981; GENERIC-NEXT:    rclb $7, (%rdx) # sched: [6:1.00]
9982; GENERIC-NEXT:    rcrb $7, (%rdx) # sched: [6:1.00]
9983; GENERIC-NEXT:    rclb %cl, %dil # sched: [1:0.50]
9984; GENERIC-NEXT:    rcrb %cl, %dil # sched: [1:0.50]
9985; GENERIC-NEXT:    rclb %cl, (%rdx) # sched: [6:1.00]
9986; GENERIC-NEXT:    rcrb %cl, (%rdx) # sched: [6:1.00]
9987; GENERIC-NEXT:    #NO_APP
9988; GENERIC-NEXT:    retq # sched: [1:1.00]
9989;
9990; ATOM-LABEL: test_rcl_rcr_8:
9991; ATOM:       # %bb.0:
9992; ATOM-NEXT:    #APP
9993; ATOM-NEXT:    rclb %dil # sched: [1:1.00]
9994; ATOM-NEXT:    rcrb %dil # sched: [1:1.00]
9995; ATOM-NEXT:    rclb (%rdx) # sched: [1:1.00]
9996; ATOM-NEXT:    rcrb (%rdx) # sched: [1:1.00]
9997; ATOM-NEXT:    rclb $7, %dil # sched: [1:1.00]
9998; ATOM-NEXT:    rcrb $7, %dil # sched: [1:1.00]
9999; ATOM-NEXT:    rclb $7, (%rdx) # sched: [1:1.00]
10000; ATOM-NEXT:    rcrb $7, (%rdx) # sched: [1:1.00]
10001; ATOM-NEXT:    rclb %cl, %dil # sched: [1:1.00]
10002; ATOM-NEXT:    rcrb %cl, %dil # sched: [1:1.00]
10003; ATOM-NEXT:    rclb %cl, (%rdx) # sched: [1:1.00]
10004; ATOM-NEXT:    rcrb %cl, (%rdx) # sched: [1:1.00]
10005; ATOM-NEXT:    #NO_APP
10006; ATOM-NEXT:    retq # sched: [79:39.50]
10007;
10008; SLM-LABEL: test_rcl_rcr_8:
10009; SLM:       # %bb.0:
10010; SLM-NEXT:    #APP
10011; SLM-NEXT:    rclb %dil # sched: [1:1.00]
10012; SLM-NEXT:    rcrb %dil # sched: [1:1.00]
10013; SLM-NEXT:    rclb (%rdx) # sched: [4:2.00]
10014; SLM-NEXT:    rcrb (%rdx) # sched: [4:2.00]
10015; SLM-NEXT:    rclb $7, %dil # sched: [1:1.00]
10016; SLM-NEXT:    rcrb $7, %dil # sched: [1:1.00]
10017; SLM-NEXT:    rclb $7, (%rdx) # sched: [4:2.00]
10018; SLM-NEXT:    rcrb $7, (%rdx) # sched: [4:2.00]
10019; SLM-NEXT:    rclb %cl, %dil # sched: [1:1.00]
10020; SLM-NEXT:    rcrb %cl, %dil # sched: [1:1.00]
10021; SLM-NEXT:    rclb %cl, (%rdx) # sched: [4:2.00]
10022; SLM-NEXT:    rcrb %cl, (%rdx) # sched: [4:2.00]
10023; SLM-NEXT:    #NO_APP
10024; SLM-NEXT:    retq # sched: [4:1.00]
10025;
10026; SANDY-LABEL: test_rcl_rcr_8:
10027; SANDY:       # %bb.0:
10028; SANDY-NEXT:    #APP
10029; SANDY-NEXT:    rclb %dil # sched: [1:0.50]
10030; SANDY-NEXT:    rcrb %dil # sched: [1:0.50]
10031; SANDY-NEXT:    rclb (%rdx) # sched: [6:1.00]
10032; SANDY-NEXT:    rcrb (%rdx) # sched: [6:1.00]
10033; SANDY-NEXT:    rclb $7, %dil # sched: [1:0.50]
10034; SANDY-NEXT:    rcrb $7, %dil # sched: [1:0.50]
10035; SANDY-NEXT:    rclb $7, (%rdx) # sched: [6:1.00]
10036; SANDY-NEXT:    rcrb $7, (%rdx) # sched: [6:1.00]
10037; SANDY-NEXT:    rclb %cl, %dil # sched: [1:0.50]
10038; SANDY-NEXT:    rcrb %cl, %dil # sched: [1:0.50]
10039; SANDY-NEXT:    rclb %cl, (%rdx) # sched: [6:1.00]
10040; SANDY-NEXT:    rcrb %cl, (%rdx) # sched: [6:1.00]
10041; SANDY-NEXT:    #NO_APP
10042; SANDY-NEXT:    retq # sched: [1:1.00]
10043;
10044; HASWELL-LABEL: test_rcl_rcr_8:
10045; HASWELL:       # %bb.0:
10046; HASWELL-NEXT:    #APP
10047; HASWELL-NEXT:    rclb %dil # sched: [3:0.75]
10048; HASWELL-NEXT:    rcrb %dil # sched: [3:0.75]
10049; HASWELL-NEXT:    rclb (%rdx) # sched: [9:0.75]
10050; HASWELL-NEXT:    rcrb (%rdx) # sched: [9:0.75]
10051; HASWELL-NEXT:    rclb $7, %dil # sched: [3:0.75]
10052; HASWELL-NEXT:    rcrb $7, %dil # sched: [3:0.75]
10053; HASWELL-NEXT:    rclb $7, (%rdx) # sched: [9:0.75]
10054; HASWELL-NEXT:    rcrb $7, (%rdx) # sched: [9:0.75]
10055; HASWELL-NEXT:    rclb %cl, %dil # sched: [11:2.25]
10056; HASWELL-NEXT:    rcrb %cl, %dil # sched: [14:2.50]
10057; HASWELL-NEXT:    rclb %cl, (%rdx) # sched: [16:2.00]
10058; HASWELL-NEXT:    rcrb %cl, (%rdx) # sched: [19:2.25]
10059; HASWELL-NEXT:    #NO_APP
10060; HASWELL-NEXT:    retq # sched: [7:1.00]
10061;
10062; BROADWELL-LABEL: test_rcl_rcr_8:
10063; BROADWELL:       # %bb.0:
10064; BROADWELL-NEXT:    #APP
10065; BROADWELL-NEXT:    rclb %dil # sched: [3:0.75]
10066; BROADWELL-NEXT:    rcrb %dil # sched: [3:0.75]
10067; BROADWELL-NEXT:    rclb (%rdx) # sched: [8:0.75]
10068; BROADWELL-NEXT:    rcrb (%rdx) # sched: [8:0.75]
10069; BROADWELL-NEXT:    rclb $7, %dil # sched: [3:0.75]
10070; BROADWELL-NEXT:    rcrb $7, %dil # sched: [3:0.75]
10071; BROADWELL-NEXT:    rclb $7, (%rdx) # sched: [8:0.75]
10072; BROADWELL-NEXT:    rcrb $7, (%rdx) # sched: [8:0.75]
10073; BROADWELL-NEXT:    rclb %cl, %dil # sched: [11:2.25]
10074; BROADWELL-NEXT:    rcrb %cl, %dil # sched: [14:2.50]
10075; BROADWELL-NEXT:    rclb %cl, (%rdx) # sched: [15:2.00]
10076; BROADWELL-NEXT:    rcrb %cl, (%rdx) # sched: [18:2.25]
10077; BROADWELL-NEXT:    #NO_APP
10078; BROADWELL-NEXT:    retq # sched: [7:1.00]
10079;
10080; SKYLAKE-LABEL: test_rcl_rcr_8:
10081; SKYLAKE:       # %bb.0:
10082; SKYLAKE-NEXT:    #APP
10083; SKYLAKE-NEXT:    rclb %dil # sched: [3:0.75]
10084; SKYLAKE-NEXT:    rcrb %dil # sched: [3:0.75]
10085; SKYLAKE-NEXT:    rclb (%rdx) # sched: [8:0.75]
10086; SKYLAKE-NEXT:    rcrb (%rdx) # sched: [8:0.75]
10087; SKYLAKE-NEXT:    rclb $7, %dil # sched: [3:0.75]
10088; SKYLAKE-NEXT:    rcrb $7, %dil # sched: [3:0.75]
10089; SKYLAKE-NEXT:    rclb $7, (%rdx) # sched: [8:0.75]
10090; SKYLAKE-NEXT:    rcrb $7, (%rdx) # sched: [8:0.75]
10091; SKYLAKE-NEXT:    rclb %cl, %dil # sched: [11:2.50]
10092; SKYLAKE-NEXT:    rcrb %cl, %dil # sched: [14:2.50]
10093; SKYLAKE-NEXT:    rclb %cl, (%rdx) # sched: [15:2.50]
10094; SKYLAKE-NEXT:    rcrb %cl, (%rdx) # sched: [18:2.25]
10095; SKYLAKE-NEXT:    #NO_APP
10096; SKYLAKE-NEXT:    retq # sched: [7:1.00]
10097;
10098; SKX-LABEL: test_rcl_rcr_8:
10099; SKX:       # %bb.0:
10100; SKX-NEXT:    #APP
10101; SKX-NEXT:    rclb %dil # sched: [3:0.75]
10102; SKX-NEXT:    rcrb %dil # sched: [3:0.75]
10103; SKX-NEXT:    rclb (%rdx) # sched: [8:0.75]
10104; SKX-NEXT:    rcrb (%rdx) # sched: [8:0.75]
10105; SKX-NEXT:    rclb $7, %dil # sched: [3:0.75]
10106; SKX-NEXT:    rcrb $7, %dil # sched: [3:0.75]
10107; SKX-NEXT:    rclb $7, (%rdx) # sched: [8:0.75]
10108; SKX-NEXT:    rcrb $7, (%rdx) # sched: [8:0.75]
10109; SKX-NEXT:    rclb %cl, %dil # sched: [11:2.50]
10110; SKX-NEXT:    rcrb %cl, %dil # sched: [14:2.50]
10111; SKX-NEXT:    rclb %cl, (%rdx) # sched: [15:2.50]
10112; SKX-NEXT:    rcrb %cl, (%rdx) # sched: [18:2.25]
10113; SKX-NEXT:    #NO_APP
10114; SKX-NEXT:    retq # sched: [7:1.00]
10115;
10116; BTVER2-LABEL: test_rcl_rcr_8:
10117; BTVER2:       # %bb.0:
10118; BTVER2-NEXT:    #APP
10119; BTVER2-NEXT:    rclb %dil # sched: [1:0.50]
10120; BTVER2-NEXT:    rcrb %dil # sched: [1:0.50]
10121; BTVER2-NEXT:    rclb (%rdx) # sched: [4:1.00]
10122; BTVER2-NEXT:    rcrb (%rdx) # sched: [4:1.00]
10123; BTVER2-NEXT:    rclb $7, %dil # sched: [1:0.50]
10124; BTVER2-NEXT:    rcrb $7, %dil # sched: [1:0.50]
10125; BTVER2-NEXT:    rclb $7, (%rdx) # sched: [4:1.00]
10126; BTVER2-NEXT:    rcrb $7, (%rdx) # sched: [4:1.00]
10127; BTVER2-NEXT:    rclb %cl, %dil # sched: [1:0.50]
10128; BTVER2-NEXT:    rcrb %cl, %dil # sched: [1:0.50]
10129; BTVER2-NEXT:    rclb %cl, (%rdx) # sched: [4:1.00]
10130; BTVER2-NEXT:    rcrb %cl, (%rdx) # sched: [4:1.00]
10131; BTVER2-NEXT:    #NO_APP
10132; BTVER2-NEXT:    retq # sched: [4:1.00]
10133;
10134; ZNVER1-LABEL: test_rcl_rcr_8:
10135; ZNVER1:       # %bb.0:
10136; ZNVER1-NEXT:    #APP
10137; ZNVER1-NEXT:    rclb %dil # sched: [1:0.25]
10138; ZNVER1-NEXT:    rcrb %dil # sched: [1:0.25]
10139; ZNVER1-NEXT:    rclb (%rdx) # sched: [100:0.25]
10140; ZNVER1-NEXT:    rcrb (%rdx) # sched: [100:0.25]
10141; ZNVER1-NEXT:    rclb $7, %dil # sched: [1:0.25]
10142; ZNVER1-NEXT:    rcrb $7, %dil # sched: [1:0.25]
10143; ZNVER1-NEXT:    rclb $7, (%rdx) # sched: [100:0.25]
10144; ZNVER1-NEXT:    rcrb $7, (%rdx) # sched: [100:0.25]
10145; ZNVER1-NEXT:    rclb %cl, %dil # sched: [1:0.25]
10146; ZNVER1-NEXT:    rcrb %cl, %dil # sched: [1:0.25]
10147; ZNVER1-NEXT:    rclb %cl, (%rdx) # sched: [100:0.25]
10148; ZNVER1-NEXT:    rcrb %cl, (%rdx) # sched: [100:0.25]
10149; ZNVER1-NEXT:    #NO_APP
10150; ZNVER1-NEXT:    retq # sched: [1:0.50]
10151  call void asm sideeffect "rclb $0 \0A\09 rcrb $0 \0A\09 rclb $2 \0A\09 rcrb $2 \0A\09 rclb $3, $0 \0A\09 rcrb $3, $0 \0A\09 rclb $3, $2 \0A\09 rcrb $3, $2 \0A\09 rclb %CL, $0 \0A\09 rcrb %CL, $0 \0A\09 rclb %CL, $2 \0A\09 rcrb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7)
10152  ret void
10153}
10154define void @test_rcl_rcr_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
10155; GENERIC-LABEL: test_rcl_rcr_16:
10156; GENERIC:       # %bb.0:
10157; GENERIC-NEXT:    #APP
10158; GENERIC-NEXT:    rclw %di # sched: [1:0.50]
10159; GENERIC-NEXT:    rcrw %di # sched: [1:0.50]
10160; GENERIC-NEXT:    rclw (%rdx) # sched: [6:1.00]
10161; GENERIC-NEXT:    rcrw (%rdx) # sched: [6:1.00]
10162; GENERIC-NEXT:    rclw $7, %di # sched: [1:0.50]
10163; GENERIC-NEXT:    rcrw $7, %di # sched: [1:0.50]
10164; GENERIC-NEXT:    rclw $7, (%rdx) # sched: [6:1.00]
10165; GENERIC-NEXT:    rcrw $7, (%rdx) # sched: [6:1.00]
10166; GENERIC-NEXT:    rclw %cl, %di # sched: [1:0.50]
10167; GENERIC-NEXT:    rcrw %cl, %di # sched: [1:0.50]
10168; GENERIC-NEXT:    rclw %cl, (%rdx) # sched: [6:1.00]
10169; GENERIC-NEXT:    rcrw %cl, (%rdx) # sched: [6:1.00]
10170; GENERIC-NEXT:    #NO_APP
10171; GENERIC-NEXT:    retq # sched: [1:1.00]
10172;
10173; ATOM-LABEL: test_rcl_rcr_16:
10174; ATOM:       # %bb.0:
10175; ATOM-NEXT:    #APP
10176; ATOM-NEXT:    rclw %di # sched: [1:1.00]
10177; ATOM-NEXT:    rcrw %di # sched: [1:1.00]
10178; ATOM-NEXT:    rclw (%rdx) # sched: [1:1.00]
10179; ATOM-NEXT:    rcrw (%rdx) # sched: [1:1.00]
10180; ATOM-NEXT:    rclw $7, %di # sched: [1:1.00]
10181; ATOM-NEXT:    rcrw $7, %di # sched: [1:1.00]
10182; ATOM-NEXT:    rclw $7, (%rdx) # sched: [1:1.00]
10183; ATOM-NEXT:    rcrw $7, (%rdx) # sched: [1:1.00]
10184; ATOM-NEXT:    rclw %cl, %di # sched: [1:1.00]
10185; ATOM-NEXT:    rcrw %cl, %di # sched: [1:1.00]
10186; ATOM-NEXT:    rclw %cl, (%rdx) # sched: [1:1.00]
10187; ATOM-NEXT:    rcrw %cl, (%rdx) # sched: [1:1.00]
10188; ATOM-NEXT:    #NO_APP
10189; ATOM-NEXT:    retq # sched: [79:39.50]
10190;
10191; SLM-LABEL: test_rcl_rcr_16:
10192; SLM:       # %bb.0:
10193; SLM-NEXT:    #APP
10194; SLM-NEXT:    rclw %di # sched: [1:1.00]
10195; SLM-NEXT:    rcrw %di # sched: [1:1.00]
10196; SLM-NEXT:    rclw (%rdx) # sched: [4:2.00]
10197; SLM-NEXT:    rcrw (%rdx) # sched: [4:2.00]
10198; SLM-NEXT:    rclw $7, %di # sched: [1:1.00]
10199; SLM-NEXT:    rcrw $7, %di # sched: [1:1.00]
10200; SLM-NEXT:    rclw $7, (%rdx) # sched: [4:2.00]
10201; SLM-NEXT:    rcrw $7, (%rdx) # sched: [4:2.00]
10202; SLM-NEXT:    rclw %cl, %di # sched: [1:1.00]
10203; SLM-NEXT:    rcrw %cl, %di # sched: [1:1.00]
10204; SLM-NEXT:    rclw %cl, (%rdx) # sched: [4:2.00]
10205; SLM-NEXT:    rcrw %cl, (%rdx) # sched: [4:2.00]
10206; SLM-NEXT:    #NO_APP
10207; SLM-NEXT:    retq # sched: [4:1.00]
10208;
10209; SANDY-LABEL: test_rcl_rcr_16:
10210; SANDY:       # %bb.0:
10211; SANDY-NEXT:    #APP
10212; SANDY-NEXT:    rclw %di # sched: [1:0.50]
10213; SANDY-NEXT:    rcrw %di # sched: [1:0.50]
10214; SANDY-NEXT:    rclw (%rdx) # sched: [6:1.00]
10215; SANDY-NEXT:    rcrw (%rdx) # sched: [6:1.00]
10216; SANDY-NEXT:    rclw $7, %di # sched: [1:0.50]
10217; SANDY-NEXT:    rcrw $7, %di # sched: [1:0.50]
10218; SANDY-NEXT:    rclw $7, (%rdx) # sched: [6:1.00]
10219; SANDY-NEXT:    rcrw $7, (%rdx) # sched: [6:1.00]
10220; SANDY-NEXT:    rclw %cl, %di # sched: [1:0.50]
10221; SANDY-NEXT:    rcrw %cl, %di # sched: [1:0.50]
10222; SANDY-NEXT:    rclw %cl, (%rdx) # sched: [6:1.00]
10223; SANDY-NEXT:    rcrw %cl, (%rdx) # sched: [6:1.00]
10224; SANDY-NEXT:    #NO_APP
10225; SANDY-NEXT:    retq # sched: [1:1.00]
10226;
10227; HASWELL-LABEL: test_rcl_rcr_16:
10228; HASWELL:       # %bb.0:
10229; HASWELL-NEXT:    #APP
10230; HASWELL-NEXT:    rclw %di # sched: [3:0.75]
10231; HASWELL-NEXT:    rcrw %di # sched: [3:0.75]
10232; HASWELL-NEXT:    rclw (%rdx) # sched: [9:0.75]
10233; HASWELL-NEXT:    rcrw (%rdx) # sched: [9:0.75]
10234; HASWELL-NEXT:    rclw $7, %di # sched: [3:0.75]
10235; HASWELL-NEXT:    rcrw $7, %di # sched: [3:0.75]
10236; HASWELL-NEXT:    rclw $7, (%rdx) # sched: [9:0.75]
10237; HASWELL-NEXT:    rcrw $7, (%rdx) # sched: [9:0.75]
10238; HASWELL-NEXT:    rclw %cl, %di # sched: [11:2.00]
10239; HASWELL-NEXT:    rcrw %cl, %di # sched: [11:2.00]
10240; HASWELL-NEXT:    rclw %cl, (%rdx) # sched: [16:2.00]
10241; HASWELL-NEXT:    rcrw %cl, (%rdx) # sched: [19:2.25]
10242; HASWELL-NEXT:    #NO_APP
10243; HASWELL-NEXT:    retq # sched: [7:1.00]
10244;
10245; BROADWELL-LABEL: test_rcl_rcr_16:
10246; BROADWELL:       # %bb.0:
10247; BROADWELL-NEXT:    #APP
10248; BROADWELL-NEXT:    rclw %di # sched: [3:0.75]
10249; BROADWELL-NEXT:    rcrw %di # sched: [3:0.75]
10250; BROADWELL-NEXT:    rclw (%rdx) # sched: [8:0.75]
10251; BROADWELL-NEXT:    rcrw (%rdx) # sched: [8:0.75]
10252; BROADWELL-NEXT:    rclw $7, %di # sched: [3:0.75]
10253; BROADWELL-NEXT:    rcrw $7, %di # sched: [3:0.75]
10254; BROADWELL-NEXT:    rclw $7, (%rdx) # sched: [8:0.75]
10255; BROADWELL-NEXT:    rcrw $7, (%rdx) # sched: [8:0.75]
10256; BROADWELL-NEXT:    rclw %cl, %di # sched: [11:2.00]
10257; BROADWELL-NEXT:    rcrw %cl, %di # sched: [11:2.00]
10258; BROADWELL-NEXT:    rclw %cl, (%rdx) # sched: [15:2.00]
10259; BROADWELL-NEXT:    rcrw %cl, (%rdx) # sched: [18:2.25]
10260; BROADWELL-NEXT:    #NO_APP
10261; BROADWELL-NEXT:    retq # sched: [7:1.00]
10262;
10263; SKYLAKE-LABEL: test_rcl_rcr_16:
10264; SKYLAKE:       # %bb.0:
10265; SKYLAKE-NEXT:    #APP
10266; SKYLAKE-NEXT:    rclw %di # sched: [3:0.75]
10267; SKYLAKE-NEXT:    rcrw %di # sched: [3:0.75]
10268; SKYLAKE-NEXT:    rclw (%rdx) # sched: [8:0.75]
10269; SKYLAKE-NEXT:    rcrw (%rdx) # sched: [8:0.75]
10270; SKYLAKE-NEXT:    rclw $7, %di # sched: [3:0.75]
10271; SKYLAKE-NEXT:    rcrw $7, %di # sched: [3:0.75]
10272; SKYLAKE-NEXT:    rclw $7, (%rdx) # sched: [8:0.75]
10273; SKYLAKE-NEXT:    rcrw $7, (%rdx) # sched: [8:0.75]
10274; SKYLAKE-NEXT:    rclw %cl, %di # sched: [11:2.00]
10275; SKYLAKE-NEXT:    rcrw %cl, %di # sched: [11:2.00]
10276; SKYLAKE-NEXT:    rclw %cl, (%rdx) # sched: [15:2.50]
10277; SKYLAKE-NEXT:    rcrw %cl, (%rdx) # sched: [18:2.25]
10278; SKYLAKE-NEXT:    #NO_APP
10279; SKYLAKE-NEXT:    retq # sched: [7:1.00]
10280;
10281; SKX-LABEL: test_rcl_rcr_16:
10282; SKX:       # %bb.0:
10283; SKX-NEXT:    #APP
10284; SKX-NEXT:    rclw %di # sched: [3:0.75]
10285; SKX-NEXT:    rcrw %di # sched: [3:0.75]
10286; SKX-NEXT:    rclw (%rdx) # sched: [8:0.75]
10287; SKX-NEXT:    rcrw (%rdx) # sched: [8:0.75]
10288; SKX-NEXT:    rclw $7, %di # sched: [3:0.75]
10289; SKX-NEXT:    rcrw $7, %di # sched: [3:0.75]
10290; SKX-NEXT:    rclw $7, (%rdx) # sched: [8:0.75]
10291; SKX-NEXT:    rcrw $7, (%rdx) # sched: [8:0.75]
10292; SKX-NEXT:    rclw %cl, %di # sched: [11:2.00]
10293; SKX-NEXT:    rcrw %cl, %di # sched: [11:2.00]
10294; SKX-NEXT:    rclw %cl, (%rdx) # sched: [15:2.50]
10295; SKX-NEXT:    rcrw %cl, (%rdx) # sched: [18:2.25]
10296; SKX-NEXT:    #NO_APP
10297; SKX-NEXT:    retq # sched: [7:1.00]
10298;
10299; BTVER2-LABEL: test_rcl_rcr_16:
10300; BTVER2:       # %bb.0:
10301; BTVER2-NEXT:    #APP
10302; BTVER2-NEXT:    rclw %di # sched: [1:0.50]
10303; BTVER2-NEXT:    rcrw %di # sched: [1:0.50]
10304; BTVER2-NEXT:    rclw (%rdx) # sched: [4:1.00]
10305; BTVER2-NEXT:    rcrw (%rdx) # sched: [4:1.00]
10306; BTVER2-NEXT:    rclw $7, %di # sched: [1:0.50]
10307; BTVER2-NEXT:    rcrw $7, %di # sched: [1:0.50]
10308; BTVER2-NEXT:    rclw $7, (%rdx) # sched: [4:1.00]
10309; BTVER2-NEXT:    rcrw $7, (%rdx) # sched: [4:1.00]
10310; BTVER2-NEXT:    rclw %cl, %di # sched: [1:0.50]
10311; BTVER2-NEXT:    rcrw %cl, %di # sched: [1:0.50]
10312; BTVER2-NEXT:    rclw %cl, (%rdx) # sched: [4:1.00]
10313; BTVER2-NEXT:    rcrw %cl, (%rdx) # sched: [4:1.00]
10314; BTVER2-NEXT:    #NO_APP
10315; BTVER2-NEXT:    retq # sched: [4:1.00]
10316;
10317; ZNVER1-LABEL: test_rcl_rcr_16:
10318; ZNVER1:       # %bb.0:
10319; ZNVER1-NEXT:    #APP
10320; ZNVER1-NEXT:    rclw %di # sched: [1:0.25]
10321; ZNVER1-NEXT:    rcrw %di # sched: [1:0.25]
10322; ZNVER1-NEXT:    rclw (%rdx) # sched: [100:0.25]
10323; ZNVER1-NEXT:    rcrw (%rdx) # sched: [100:0.25]
10324; ZNVER1-NEXT:    rclw $7, %di # sched: [1:0.25]
10325; ZNVER1-NEXT:    rcrw $7, %di # sched: [1:0.25]
10326; ZNVER1-NEXT:    rclw $7, (%rdx) # sched: [100:0.25]
10327; ZNVER1-NEXT:    rcrw $7, (%rdx) # sched: [100:0.25]
10328; ZNVER1-NEXT:    rclw %cl, %di # sched: [1:0.25]
10329; ZNVER1-NEXT:    rcrw %cl, %di # sched: [1:0.25]
10330; ZNVER1-NEXT:    rclw %cl, (%rdx) # sched: [100:0.25]
10331; ZNVER1-NEXT:    rcrw %cl, (%rdx) # sched: [100:0.25]
10332; ZNVER1-NEXT:    #NO_APP
10333; ZNVER1-NEXT:    retq # sched: [1:0.50]
10334  call void asm sideeffect "rclw $0 \0A\09 rcrw $0 \0A\09 rclw $2 \0A\09 rcrw $2 \0A\09 rclw $3, $0 \0A\09 rcrw $3, $0 \0A\09 rclw $3, $2 \0A\09 rcrw $3, $2 \0A\09 rclw %CL, $0 \0A\09 rcrw %CL, $0 \0A\09 rclw %CL, $2 \0A\09 rcrw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7)
10335  ret void
10336}
10337define void @test_rcl_rcr_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
10338; GENERIC-LABEL: test_rcl_rcr_32:
10339; GENERIC:       # %bb.0:
10340; GENERIC-NEXT:    #APP
10341; GENERIC-NEXT:    rcll %edi # sched: [1:0.50]
10342; GENERIC-NEXT:    rcrl %edi # sched: [1:0.50]
10343; GENERIC-NEXT:    rcll (%rdx) # sched: [6:1.00]
10344; GENERIC-NEXT:    rcrl (%rdx) # sched: [6:1.00]
10345; GENERIC-NEXT:    rcll $7, %edi # sched: [1:0.50]
10346; GENERIC-NEXT:    rcrl $7, %edi # sched: [1:0.50]
10347; GENERIC-NEXT:    rcll $7, (%rdx) # sched: [6:1.00]
10348; GENERIC-NEXT:    rcrl $7, (%rdx) # sched: [6:1.00]
10349; GENERIC-NEXT:    rcll %cl, %edi # sched: [1:0.50]
10350; GENERIC-NEXT:    rcrl %cl, %edi # sched: [1:0.50]
10351; GENERIC-NEXT:    rcll %cl, (%rdx) # sched: [6:1.00]
10352; GENERIC-NEXT:    rcrl %cl, (%rdx) # sched: [6:1.00]
10353; GENERIC-NEXT:    #NO_APP
10354; GENERIC-NEXT:    retq # sched: [1:1.00]
10355;
10356; ATOM-LABEL: test_rcl_rcr_32:
10357; ATOM:       # %bb.0:
10358; ATOM-NEXT:    #APP
10359; ATOM-NEXT:    rcll %edi # sched: [1:1.00]
10360; ATOM-NEXT:    rcrl %edi # sched: [1:1.00]
10361; ATOM-NEXT:    rcll (%rdx) # sched: [1:1.00]
10362; ATOM-NEXT:    rcrl (%rdx) # sched: [1:1.00]
10363; ATOM-NEXT:    rcll $7, %edi # sched: [1:1.00]
10364; ATOM-NEXT:    rcrl $7, %edi # sched: [1:1.00]
10365; ATOM-NEXT:    rcll $7, (%rdx) # sched: [1:1.00]
10366; ATOM-NEXT:    rcrl $7, (%rdx) # sched: [1:1.00]
10367; ATOM-NEXT:    rcll %cl, %edi # sched: [1:1.00]
10368; ATOM-NEXT:    rcrl %cl, %edi # sched: [1:1.00]
10369; ATOM-NEXT:    rcll %cl, (%rdx) # sched: [1:1.00]
10370; ATOM-NEXT:    rcrl %cl, (%rdx) # sched: [1:1.00]
10371; ATOM-NEXT:    #NO_APP
10372; ATOM-NEXT:    retq # sched: [79:39.50]
10373;
10374; SLM-LABEL: test_rcl_rcr_32:
10375; SLM:       # %bb.0:
10376; SLM-NEXT:    #APP
10377; SLM-NEXT:    rcll %edi # sched: [1:1.00]
10378; SLM-NEXT:    rcrl %edi # sched: [1:1.00]
10379; SLM-NEXT:    rcll (%rdx) # sched: [4:2.00]
10380; SLM-NEXT:    rcrl (%rdx) # sched: [4:2.00]
10381; SLM-NEXT:    rcll $7, %edi # sched: [1:1.00]
10382; SLM-NEXT:    rcrl $7, %edi # sched: [1:1.00]
10383; SLM-NEXT:    rcll $7, (%rdx) # sched: [4:2.00]
10384; SLM-NEXT:    rcrl $7, (%rdx) # sched: [4:2.00]
10385; SLM-NEXT:    rcll %cl, %edi # sched: [1:1.00]
10386; SLM-NEXT:    rcrl %cl, %edi # sched: [1:1.00]
10387; SLM-NEXT:    rcll %cl, (%rdx) # sched: [4:2.00]
10388; SLM-NEXT:    rcrl %cl, (%rdx) # sched: [4:2.00]
10389; SLM-NEXT:    #NO_APP
10390; SLM-NEXT:    retq # sched: [4:1.00]
10391;
10392; SANDY-LABEL: test_rcl_rcr_32:
10393; SANDY:       # %bb.0:
10394; SANDY-NEXT:    #APP
10395; SANDY-NEXT:    rcll %edi # sched: [1:0.50]
10396; SANDY-NEXT:    rcrl %edi # sched: [1:0.50]
10397; SANDY-NEXT:    rcll (%rdx) # sched: [6:1.00]
10398; SANDY-NEXT:    rcrl (%rdx) # sched: [6:1.00]
10399; SANDY-NEXT:    rcll $7, %edi # sched: [1:0.50]
10400; SANDY-NEXT:    rcrl $7, %edi # sched: [1:0.50]
10401; SANDY-NEXT:    rcll $7, (%rdx) # sched: [6:1.00]
10402; SANDY-NEXT:    rcrl $7, (%rdx) # sched: [6:1.00]
10403; SANDY-NEXT:    rcll %cl, %edi # sched: [1:0.50]
10404; SANDY-NEXT:    rcrl %cl, %edi # sched: [1:0.50]
10405; SANDY-NEXT:    rcll %cl, (%rdx) # sched: [6:1.00]
10406; SANDY-NEXT:    rcrl %cl, (%rdx) # sched: [6:1.00]
10407; SANDY-NEXT:    #NO_APP
10408; SANDY-NEXT:    retq # sched: [1:1.00]
10409;
10410; HASWELL-LABEL: test_rcl_rcr_32:
10411; HASWELL:       # %bb.0:
10412; HASWELL-NEXT:    #APP
10413; HASWELL-NEXT:    rcll %edi # sched: [3:0.75]
10414; HASWELL-NEXT:    rcrl %edi # sched: [3:0.75]
10415; HASWELL-NEXT:    rcll (%rdx) # sched: [9:0.75]
10416; HASWELL-NEXT:    rcrl (%rdx) # sched: [9:0.75]
10417; HASWELL-NEXT:    rcll $7, %edi # sched: [3:0.75]
10418; HASWELL-NEXT:    rcrl $7, %edi # sched: [3:0.75]
10419; HASWELL-NEXT:    rcll $7, (%rdx) # sched: [9:0.75]
10420; HASWELL-NEXT:    rcrl $7, (%rdx) # sched: [9:0.75]
10421; HASWELL-NEXT:    rcll %cl, %edi # sched: [11:2.00]
10422; HASWELL-NEXT:    rcrl %cl, %edi # sched: [11:2.00]
10423; HASWELL-NEXT:    rcll %cl, (%rdx) # sched: [16:2.00]
10424; HASWELL-NEXT:    rcrl %cl, (%rdx) # sched: [19:2.25]
10425; HASWELL-NEXT:    #NO_APP
10426; HASWELL-NEXT:    retq # sched: [7:1.00]
10427;
10428; BROADWELL-LABEL: test_rcl_rcr_32:
10429; BROADWELL:       # %bb.0:
10430; BROADWELL-NEXT:    #APP
10431; BROADWELL-NEXT:    rcll %edi # sched: [3:0.75]
10432; BROADWELL-NEXT:    rcrl %edi # sched: [3:0.75]
10433; BROADWELL-NEXT:    rcll (%rdx) # sched: [8:0.75]
10434; BROADWELL-NEXT:    rcrl (%rdx) # sched: [8:0.75]
10435; BROADWELL-NEXT:    rcll $7, %edi # sched: [3:0.75]
10436; BROADWELL-NEXT:    rcrl $7, %edi # sched: [3:0.75]
10437; BROADWELL-NEXT:    rcll $7, (%rdx) # sched: [8:0.75]
10438; BROADWELL-NEXT:    rcrl $7, (%rdx) # sched: [8:0.75]
10439; BROADWELL-NEXT:    rcll %cl, %edi # sched: [11:2.00]
10440; BROADWELL-NEXT:    rcrl %cl, %edi # sched: [11:2.00]
10441; BROADWELL-NEXT:    rcll %cl, (%rdx) # sched: [15:2.00]
10442; BROADWELL-NEXT:    rcrl %cl, (%rdx) # sched: [18:2.25]
10443; BROADWELL-NEXT:    #NO_APP
10444; BROADWELL-NEXT:    retq # sched: [7:1.00]
10445;
10446; SKYLAKE-LABEL: test_rcl_rcr_32:
10447; SKYLAKE:       # %bb.0:
10448; SKYLAKE-NEXT:    #APP
10449; SKYLAKE-NEXT:    rcll %edi # sched: [3:0.75]
10450; SKYLAKE-NEXT:    rcrl %edi # sched: [3:0.75]
10451; SKYLAKE-NEXT:    rcll (%rdx) # sched: [8:0.75]
10452; SKYLAKE-NEXT:    rcrl (%rdx) # sched: [8:0.75]
10453; SKYLAKE-NEXT:    rcll $7, %edi # sched: [3:0.75]
10454; SKYLAKE-NEXT:    rcrl $7, %edi # sched: [3:0.75]
10455; SKYLAKE-NEXT:    rcll $7, (%rdx) # sched: [8:0.75]
10456; SKYLAKE-NEXT:    rcrl $7, (%rdx) # sched: [8:0.75]
10457; SKYLAKE-NEXT:    rcll %cl, %edi # sched: [11:2.00]
10458; SKYLAKE-NEXT:    rcrl %cl, %edi # sched: [11:2.00]
10459; SKYLAKE-NEXT:    rcll %cl, (%rdx) # sched: [15:2.50]
10460; SKYLAKE-NEXT:    rcrl %cl, (%rdx) # sched: [18:2.25]
10461; SKYLAKE-NEXT:    #NO_APP
10462; SKYLAKE-NEXT:    retq # sched: [7:1.00]
10463;
10464; SKX-LABEL: test_rcl_rcr_32:
10465; SKX:       # %bb.0:
10466; SKX-NEXT:    #APP
10467; SKX-NEXT:    rcll %edi # sched: [3:0.75]
10468; SKX-NEXT:    rcrl %edi # sched: [3:0.75]
10469; SKX-NEXT:    rcll (%rdx) # sched: [8:0.75]
10470; SKX-NEXT:    rcrl (%rdx) # sched: [8:0.75]
10471; SKX-NEXT:    rcll $7, %edi # sched: [3:0.75]
10472; SKX-NEXT:    rcrl $7, %edi # sched: [3:0.75]
10473; SKX-NEXT:    rcll $7, (%rdx) # sched: [8:0.75]
10474; SKX-NEXT:    rcrl $7, (%rdx) # sched: [8:0.75]
10475; SKX-NEXT:    rcll %cl, %edi # sched: [11:2.00]
10476; SKX-NEXT:    rcrl %cl, %edi # sched: [11:2.00]
10477; SKX-NEXT:    rcll %cl, (%rdx) # sched: [15:2.50]
10478; SKX-NEXT:    rcrl %cl, (%rdx) # sched: [18:2.25]
10479; SKX-NEXT:    #NO_APP
10480; SKX-NEXT:    retq # sched: [7:1.00]
10481;
10482; BTVER2-LABEL: test_rcl_rcr_32:
10483; BTVER2:       # %bb.0:
10484; BTVER2-NEXT:    #APP
10485; BTVER2-NEXT:    rcll %edi # sched: [1:0.50]
10486; BTVER2-NEXT:    rcrl %edi # sched: [1:0.50]
10487; BTVER2-NEXT:    rcll (%rdx) # sched: [4:1.00]
10488; BTVER2-NEXT:    rcrl (%rdx) # sched: [4:1.00]
10489; BTVER2-NEXT:    rcll $7, %edi # sched: [1:0.50]
10490; BTVER2-NEXT:    rcrl $7, %edi # sched: [1:0.50]
10491; BTVER2-NEXT:    rcll $7, (%rdx) # sched: [4:1.00]
10492; BTVER2-NEXT:    rcrl $7, (%rdx) # sched: [4:1.00]
10493; BTVER2-NEXT:    rcll %cl, %edi # sched: [1:0.50]
10494; BTVER2-NEXT:    rcrl %cl, %edi # sched: [1:0.50]
10495; BTVER2-NEXT:    rcll %cl, (%rdx) # sched: [4:1.00]
10496; BTVER2-NEXT:    rcrl %cl, (%rdx) # sched: [4:1.00]
10497; BTVER2-NEXT:    #NO_APP
10498; BTVER2-NEXT:    retq # sched: [4:1.00]
10499;
10500; ZNVER1-LABEL: test_rcl_rcr_32:
10501; ZNVER1:       # %bb.0:
10502; ZNVER1-NEXT:    #APP
10503; ZNVER1-NEXT:    rcll %edi # sched: [1:0.25]
10504; ZNVER1-NEXT:    rcrl %edi # sched: [1:0.25]
10505; ZNVER1-NEXT:    rcll (%rdx) # sched: [100:0.25]
10506; ZNVER1-NEXT:    rcrl (%rdx) # sched: [100:0.25]
10507; ZNVER1-NEXT:    rcll $7, %edi # sched: [1:0.25]
10508; ZNVER1-NEXT:    rcrl $7, %edi # sched: [1:0.25]
10509; ZNVER1-NEXT:    rcll $7, (%rdx) # sched: [100:0.25]
10510; ZNVER1-NEXT:    rcrl $7, (%rdx) # sched: [100:0.25]
10511; ZNVER1-NEXT:    rcll %cl, %edi # sched: [1:0.25]
10512; ZNVER1-NEXT:    rcrl %cl, %edi # sched: [1:0.25]
10513; ZNVER1-NEXT:    rcll %cl, (%rdx) # sched: [100:0.25]
10514; ZNVER1-NEXT:    rcrl %cl, (%rdx) # sched: [100:0.25]
10515; ZNVER1-NEXT:    #NO_APP
10516; ZNVER1-NEXT:    retq # sched: [1:0.50]
10517  call void asm sideeffect "rcll $0 \0A\09 rcrl $0 \0A\09 rcll $2 \0A\09 rcrl $2 \0A\09 rcll $3, $0 \0A\09 rcrl $3, $0 \0A\09 rcll $3, $2 \0A\09 rcrl $3, $2 \0A\09 rcll %CL, $0 \0A\09 rcrl %CL, $0 \0A\09 rcll %CL, $2 \0A\09 rcrl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7)
10518  ret void
10519}
10520define void @test_rcl_rcr_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
10521; GENERIC-LABEL: test_rcl_rcr_64:
10522; GENERIC:       # %bb.0:
10523; GENERIC-NEXT:    #APP
10524; GENERIC-NEXT:    rclq %rdi # sched: [1:0.50]
10525; GENERIC-NEXT:    rcrq %rdi # sched: [1:0.50]
10526; GENERIC-NEXT:    rclq (%rdx) # sched: [6:1.00]
10527; GENERIC-NEXT:    rcrq (%rdx) # sched: [6:1.00]
10528; GENERIC-NEXT:    rclq $7, %rdi # sched: [1:0.50]
10529; GENERIC-NEXT:    rcrq $7, %rdi # sched: [1:0.50]
10530; GENERIC-NEXT:    rclq $7, (%rdx) # sched: [6:1.00]
10531; GENERIC-NEXT:    rcrq $7, (%rdx) # sched: [6:1.00]
10532; GENERIC-NEXT:    rclq %cl, %rdi # sched: [1:0.50]
10533; GENERIC-NEXT:    rcrq %cl, %rdi # sched: [1:0.50]
10534; GENERIC-NEXT:    rclq %cl, (%rdx) # sched: [6:1.00]
10535; GENERIC-NEXT:    rcrq %cl, (%rdx) # sched: [6:1.00]
10536; GENERIC-NEXT:    #NO_APP
10537; GENERIC-NEXT:    retq # sched: [1:1.00]
10538;
10539; ATOM-LABEL: test_rcl_rcr_64:
10540; ATOM:       # %bb.0:
10541; ATOM-NEXT:    #APP
10542; ATOM-NEXT:    rclq %rdi # sched: [1:1.00]
10543; ATOM-NEXT:    rcrq %rdi # sched: [1:1.00]
10544; ATOM-NEXT:    rclq (%rdx) # sched: [1:1.00]
10545; ATOM-NEXT:    rcrq (%rdx) # sched: [1:1.00]
10546; ATOM-NEXT:    rclq $7, %rdi # sched: [1:1.00]
10547; ATOM-NEXT:    rcrq $7, %rdi # sched: [1:1.00]
10548; ATOM-NEXT:    rclq $7, (%rdx) # sched: [1:1.00]
10549; ATOM-NEXT:    rcrq $7, (%rdx) # sched: [1:1.00]
10550; ATOM-NEXT:    rclq %cl, %rdi # sched: [1:1.00]
10551; ATOM-NEXT:    rcrq %cl, %rdi # sched: [1:1.00]
10552; ATOM-NEXT:    rclq %cl, (%rdx) # sched: [1:1.00]
10553; ATOM-NEXT:    rcrq %cl, (%rdx) # sched: [1:1.00]
10554; ATOM-NEXT:    #NO_APP
10555; ATOM-NEXT:    retq # sched: [79:39.50]
10556;
10557; SLM-LABEL: test_rcl_rcr_64:
10558; SLM:       # %bb.0:
10559; SLM-NEXT:    #APP
10560; SLM-NEXT:    rclq %rdi # sched: [1:1.00]
10561; SLM-NEXT:    rcrq %rdi # sched: [1:1.00]
10562; SLM-NEXT:    rclq (%rdx) # sched: [4:2.00]
10563; SLM-NEXT:    rcrq (%rdx) # sched: [4:2.00]
10564; SLM-NEXT:    rclq $7, %rdi # sched: [1:1.00]
10565; SLM-NEXT:    rcrq $7, %rdi # sched: [1:1.00]
10566; SLM-NEXT:    rclq $7, (%rdx) # sched: [4:2.00]
10567; SLM-NEXT:    rcrq $7, (%rdx) # sched: [4:2.00]
10568; SLM-NEXT:    rclq %cl, %rdi # sched: [1:1.00]
10569; SLM-NEXT:    rcrq %cl, %rdi # sched: [1:1.00]
10570; SLM-NEXT:    rclq %cl, (%rdx) # sched: [4:2.00]
10571; SLM-NEXT:    rcrq %cl, (%rdx) # sched: [4:2.00]
10572; SLM-NEXT:    #NO_APP
10573; SLM-NEXT:    retq # sched: [4:1.00]
10574;
10575; SANDY-LABEL: test_rcl_rcr_64:
10576; SANDY:       # %bb.0:
10577; SANDY-NEXT:    #APP
10578; SANDY-NEXT:    rclq %rdi # sched: [1:0.50]
10579; SANDY-NEXT:    rcrq %rdi # sched: [1:0.50]
10580; SANDY-NEXT:    rclq (%rdx) # sched: [6:1.00]
10581; SANDY-NEXT:    rcrq (%rdx) # sched: [6:1.00]
10582; SANDY-NEXT:    rclq $7, %rdi # sched: [1:0.50]
10583; SANDY-NEXT:    rcrq $7, %rdi # sched: [1:0.50]
10584; SANDY-NEXT:    rclq $7, (%rdx) # sched: [6:1.00]
10585; SANDY-NEXT:    rcrq $7, (%rdx) # sched: [6:1.00]
10586; SANDY-NEXT:    rclq %cl, %rdi # sched: [1:0.50]
10587; SANDY-NEXT:    rcrq %cl, %rdi # sched: [1:0.50]
10588; SANDY-NEXT:    rclq %cl, (%rdx) # sched: [6:1.00]
10589; SANDY-NEXT:    rcrq %cl, (%rdx) # sched: [6:1.00]
10590; SANDY-NEXT:    #NO_APP
10591; SANDY-NEXT:    retq # sched: [1:1.00]
10592;
10593; HASWELL-LABEL: test_rcl_rcr_64:
10594; HASWELL:       # %bb.0:
10595; HASWELL-NEXT:    #APP
10596; HASWELL-NEXT:    rclq %rdi # sched: [3:0.75]
10597; HASWELL-NEXT:    rcrq %rdi # sched: [3:0.75]
10598; HASWELL-NEXT:    rclq (%rdx) # sched: [9:0.75]
10599; HASWELL-NEXT:    rcrq (%rdx) # sched: [9:0.75]
10600; HASWELL-NEXT:    rclq $7, %rdi # sched: [3:0.75]
10601; HASWELL-NEXT:    rcrq $7, %rdi # sched: [3:0.75]
10602; HASWELL-NEXT:    rclq $7, (%rdx) # sched: [9:0.75]
10603; HASWELL-NEXT:    rcrq $7, (%rdx) # sched: [9:0.75]
10604; HASWELL-NEXT:    rclq %cl, %rdi # sched: [11:2.00]
10605; HASWELL-NEXT:    rcrq %cl, %rdi # sched: [11:2.00]
10606; HASWELL-NEXT:    rclq %cl, (%rdx) # sched: [16:2.00]
10607; HASWELL-NEXT:    rcrq %cl, (%rdx) # sched: [19:2.25]
10608; HASWELL-NEXT:    #NO_APP
10609; HASWELL-NEXT:    retq # sched: [7:1.00]
10610;
10611; BROADWELL-LABEL: test_rcl_rcr_64:
10612; BROADWELL:       # %bb.0:
10613; BROADWELL-NEXT:    #APP
10614; BROADWELL-NEXT:    rclq %rdi # sched: [3:0.75]
10615; BROADWELL-NEXT:    rcrq %rdi # sched: [3:0.75]
10616; BROADWELL-NEXT:    rclq (%rdx) # sched: [8:0.75]
10617; BROADWELL-NEXT:    rcrq (%rdx) # sched: [8:0.75]
10618; BROADWELL-NEXT:    rclq $7, %rdi # sched: [3:0.75]
10619; BROADWELL-NEXT:    rcrq $7, %rdi # sched: [3:0.75]
10620; BROADWELL-NEXT:    rclq $7, (%rdx) # sched: [8:0.75]
10621; BROADWELL-NEXT:    rcrq $7, (%rdx) # sched: [8:0.75]
10622; BROADWELL-NEXT:    rclq %cl, %rdi # sched: [11:2.00]
10623; BROADWELL-NEXT:    rcrq %cl, %rdi # sched: [11:2.00]
10624; BROADWELL-NEXT:    rclq %cl, (%rdx) # sched: [15:2.00]
10625; BROADWELL-NEXT:    rcrq %cl, (%rdx) # sched: [18:2.25]
10626; BROADWELL-NEXT:    #NO_APP
10627; BROADWELL-NEXT:    retq # sched: [7:1.00]
10628;
10629; SKYLAKE-LABEL: test_rcl_rcr_64:
10630; SKYLAKE:       # %bb.0:
10631; SKYLAKE-NEXT:    #APP
10632; SKYLAKE-NEXT:    rclq %rdi # sched: [3:0.75]
10633; SKYLAKE-NEXT:    rcrq %rdi # sched: [3:0.75]
10634; SKYLAKE-NEXT:    rclq (%rdx) # sched: [8:0.75]
10635; SKYLAKE-NEXT:    rcrq (%rdx) # sched: [8:0.75]
10636; SKYLAKE-NEXT:    rclq $7, %rdi # sched: [3:0.75]
10637; SKYLAKE-NEXT:    rcrq $7, %rdi # sched: [3:0.75]
10638; SKYLAKE-NEXT:    rclq $7, (%rdx) # sched: [8:0.75]
10639; SKYLAKE-NEXT:    rcrq $7, (%rdx) # sched: [8:0.75]
10640; SKYLAKE-NEXT:    rclq %cl, %rdi # sched: [11:2.00]
10641; SKYLAKE-NEXT:    rcrq %cl, %rdi # sched: [11:2.00]
10642; SKYLAKE-NEXT:    rclq %cl, (%rdx) # sched: [15:2.50]
10643; SKYLAKE-NEXT:    rcrq %cl, (%rdx) # sched: [18:2.25]
10644; SKYLAKE-NEXT:    #NO_APP
10645; SKYLAKE-NEXT:    retq # sched: [7:1.00]
10646;
10647; SKX-LABEL: test_rcl_rcr_64:
10648; SKX:       # %bb.0:
10649; SKX-NEXT:    #APP
10650; SKX-NEXT:    rclq %rdi # sched: [3:0.75]
10651; SKX-NEXT:    rcrq %rdi # sched: [3:0.75]
10652; SKX-NEXT:    rclq (%rdx) # sched: [8:0.75]
10653; SKX-NEXT:    rcrq (%rdx) # sched: [8:0.75]
10654; SKX-NEXT:    rclq $7, %rdi # sched: [3:0.75]
10655; SKX-NEXT:    rcrq $7, %rdi # sched: [3:0.75]
10656; SKX-NEXT:    rclq $7, (%rdx) # sched: [8:0.75]
10657; SKX-NEXT:    rcrq $7, (%rdx) # sched: [8:0.75]
10658; SKX-NEXT:    rclq %cl, %rdi # sched: [11:2.00]
10659; SKX-NEXT:    rcrq %cl, %rdi # sched: [11:2.00]
10660; SKX-NEXT:    rclq %cl, (%rdx) # sched: [15:2.50]
10661; SKX-NEXT:    rcrq %cl, (%rdx) # sched: [18:2.25]
10662; SKX-NEXT:    #NO_APP
10663; SKX-NEXT:    retq # sched: [7:1.00]
10664;
10665; BTVER2-LABEL: test_rcl_rcr_64:
10666; BTVER2:       # %bb.0:
10667; BTVER2-NEXT:    #APP
10668; BTVER2-NEXT:    rclq %rdi # sched: [1:0.50]
10669; BTVER2-NEXT:    rcrq %rdi # sched: [1:0.50]
10670; BTVER2-NEXT:    rclq (%rdx) # sched: [4:1.00]
10671; BTVER2-NEXT:    rcrq (%rdx) # sched: [4:1.00]
10672; BTVER2-NEXT:    rclq $7, %rdi # sched: [1:0.50]
10673; BTVER2-NEXT:    rcrq $7, %rdi # sched: [1:0.50]
10674; BTVER2-NEXT:    rclq $7, (%rdx) # sched: [4:1.00]
10675; BTVER2-NEXT:    rcrq $7, (%rdx) # sched: [4:1.00]
10676; BTVER2-NEXT:    rclq %cl, %rdi # sched: [1:0.50]
10677; BTVER2-NEXT:    rcrq %cl, %rdi # sched: [1:0.50]
10678; BTVER2-NEXT:    rclq %cl, (%rdx) # sched: [4:1.00]
10679; BTVER2-NEXT:    rcrq %cl, (%rdx) # sched: [4:1.00]
10680; BTVER2-NEXT:    #NO_APP
10681; BTVER2-NEXT:    retq # sched: [4:1.00]
10682;
10683; ZNVER1-LABEL: test_rcl_rcr_64:
10684; ZNVER1:       # %bb.0:
10685; ZNVER1-NEXT:    #APP
10686; ZNVER1-NEXT:    rclq %rdi # sched: [1:0.25]
10687; ZNVER1-NEXT:    rcrq %rdi # sched: [1:0.25]
10688; ZNVER1-NEXT:    rclq (%rdx) # sched: [100:0.25]
10689; ZNVER1-NEXT:    rcrq (%rdx) # sched: [100:0.25]
10690; ZNVER1-NEXT:    rclq $7, %rdi # sched: [1:0.25]
10691; ZNVER1-NEXT:    rcrq $7, %rdi # sched: [1:0.25]
10692; ZNVER1-NEXT:    rclq $7, (%rdx) # sched: [100:0.25]
10693; ZNVER1-NEXT:    rcrq $7, (%rdx) # sched: [100:0.25]
10694; ZNVER1-NEXT:    rclq %cl, %rdi # sched: [1:0.25]
10695; ZNVER1-NEXT:    rcrq %cl, %rdi # sched: [1:0.25]
10696; ZNVER1-NEXT:    rclq %cl, (%rdx) # sched: [100:0.25]
10697; ZNVER1-NEXT:    rcrq %cl, (%rdx) # sched: [100:0.25]
10698; ZNVER1-NEXT:    #NO_APP
10699; ZNVER1-NEXT:    retq # sched: [1:0.50]
10700  call void asm sideeffect "rclq $0 \0A\09 rcrq $0 \0A\09 rclq $2 \0A\09 rcrq $2 \0A\09 rclq $3, $0 \0A\09 rcrq $3, $0 \0A\09 rclq $3, $2 \0A\09 rcrq $3, $2 \0A\09 rclq %CL, $0 \0A\09 rcrq %CL, $0 \0A\09 rclq %CL, $2 \0A\09 rcrq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7)
10701  ret void
10702}
10703
10704define void @test_rdmsr_wrmsr() optsize {
10705; GENERIC-LABEL: test_rdmsr_wrmsr:
10706; GENERIC:       # %bb.0:
10707; GENERIC-NEXT:    #APP
10708; GENERIC-NEXT:    rdmsr # sched: [100:0.33]
10709; GENERIC-NEXT:    wrmsr # sched: [100:0.33]
10710; GENERIC-NEXT:    #NO_APP
10711; GENERIC-NEXT:    retq # sched: [1:1.00]
10712;
10713; ATOM-LABEL: test_rdmsr_wrmsr:
10714; ATOM:       # %bb.0:
10715; ATOM-NEXT:    #APP
10716; ATOM-NEXT:    rdmsr # sched: [78:39.00]
10717; ATOM-NEXT:    wrmsr # sched: [202:101.00]
10718; ATOM-NEXT:    #NO_APP
10719; ATOM-NEXT:    retq # sched: [79:39.50]
10720;
10721; SLM-LABEL: test_rdmsr_wrmsr:
10722; SLM:       # %bb.0:
10723; SLM-NEXT:    #APP
10724; SLM-NEXT:    rdmsr # sched: [100:1.00]
10725; SLM-NEXT:    wrmsr # sched: [100:1.00]
10726; SLM-NEXT:    #NO_APP
10727; SLM-NEXT:    retq # sched: [4:1.00]
10728;
10729; SANDY-LABEL: test_rdmsr_wrmsr:
10730; SANDY:       # %bb.0:
10731; SANDY-NEXT:    #APP
10732; SANDY-NEXT:    rdmsr # sched: [100:0.33]
10733; SANDY-NEXT:    wrmsr # sched: [100:0.33]
10734; SANDY-NEXT:    #NO_APP
10735; SANDY-NEXT:    retq # sched: [1:1.00]
10736;
10737; HASWELL-LABEL: test_rdmsr_wrmsr:
10738; HASWELL:       # %bb.0:
10739; HASWELL-NEXT:    #APP
10740; HASWELL-NEXT:    rdmsr # sched: [100:0.25]
10741; HASWELL-NEXT:    wrmsr # sched: [100:0.25]
10742; HASWELL-NEXT:    #NO_APP
10743; HASWELL-NEXT:    retq # sched: [7:1.00]
10744;
10745; BROADWELL-LABEL: test_rdmsr_wrmsr:
10746; BROADWELL:       # %bb.0:
10747; BROADWELL-NEXT:    #APP
10748; BROADWELL-NEXT:    rdmsr # sched: [100:0.25]
10749; BROADWELL-NEXT:    wrmsr # sched: [100:0.25]
10750; BROADWELL-NEXT:    #NO_APP
10751; BROADWELL-NEXT:    retq # sched: [7:1.00]
10752;
10753; SKYLAKE-LABEL: test_rdmsr_wrmsr:
10754; SKYLAKE:       # %bb.0:
10755; SKYLAKE-NEXT:    #APP
10756; SKYLAKE-NEXT:    rdmsr # sched: [100:0.25]
10757; SKYLAKE-NEXT:    wrmsr # sched: [100:0.25]
10758; SKYLAKE-NEXT:    #NO_APP
10759; SKYLAKE-NEXT:    retq # sched: [7:1.00]
10760;
10761; SKX-LABEL: test_rdmsr_wrmsr:
10762; SKX:       # %bb.0:
10763; SKX-NEXT:    #APP
10764; SKX-NEXT:    rdmsr # sched: [100:0.25]
10765; SKX-NEXT:    wrmsr # sched: [100:0.25]
10766; SKX-NEXT:    #NO_APP
10767; SKX-NEXT:    retq # sched: [7:1.00]
10768;
10769; BTVER2-LABEL: test_rdmsr_wrmsr:
10770; BTVER2:       # %bb.0:
10771; BTVER2-NEXT:    #APP
10772; BTVER2-NEXT:    rdmsr # sched: [100:0.50]
10773; BTVER2-NEXT:    wrmsr # sched: [100:0.50]
10774; BTVER2-NEXT:    #NO_APP
10775; BTVER2-NEXT:    retq # sched: [4:1.00]
10776;
10777; ZNVER1-LABEL: test_rdmsr_wrmsr:
10778; ZNVER1:       # %bb.0:
10779; ZNVER1-NEXT:    #APP
10780; ZNVER1-NEXT:    rdmsr # sched: [100:0.25]
10781; ZNVER1-NEXT:    wrmsr # sched: [100:0.25]
10782; ZNVER1-NEXT:    #NO_APP
10783; ZNVER1-NEXT:    retq # sched: [1:0.50]
10784  call void asm sideeffect "rdmsr \0A\09 wrmsr", ""()
10785  ret void
10786}
10787
10788define void @test_rdpmc() optsize {
10789; GENERIC-LABEL: test_rdpmc:
10790; GENERIC:       # %bb.0:
10791; GENERIC-NEXT:    #APP
10792; GENERIC-NEXT:    rdpmc # sched: [100:0.33]
10793; GENERIC-NEXT:    #NO_APP
10794; GENERIC-NEXT:    retq # sched: [1:1.00]
10795;
10796; ATOM-LABEL: test_rdpmc:
10797; ATOM:       # %bb.0:
10798; ATOM-NEXT:    #APP
10799; ATOM-NEXT:    rdpmc # sched: [46:23.00]
10800; ATOM-NEXT:    #NO_APP
10801; ATOM-NEXT:    retq # sched: [79:39.50]
10802;
10803; SLM-LABEL: test_rdpmc:
10804; SLM:       # %bb.0:
10805; SLM-NEXT:    #APP
10806; SLM-NEXT:    rdpmc # sched: [100:1.00]
10807; SLM-NEXT:    #NO_APP
10808; SLM-NEXT:    retq # sched: [4:1.00]
10809;
10810; SANDY-LABEL: test_rdpmc:
10811; SANDY:       # %bb.0:
10812; SANDY-NEXT:    #APP
10813; SANDY-NEXT:    rdpmc # sched: [100:0.33]
10814; SANDY-NEXT:    #NO_APP
10815; SANDY-NEXT:    retq # sched: [1:1.00]
10816;
10817; HASWELL-LABEL: test_rdpmc:
10818; HASWELL:       # %bb.0:
10819; HASWELL-NEXT:    #APP
10820; HASWELL-NEXT:    rdpmc # sched: [1:8.50]
10821; HASWELL-NEXT:    #NO_APP
10822; HASWELL-NEXT:    retq # sched: [7:1.00]
10823;
10824; BROADWELL-LABEL: test_rdpmc:
10825; BROADWELL:       # %bb.0:
10826; BROADWELL-NEXT:    #APP
10827; BROADWELL-NEXT:    rdpmc # sched: [100:0.25]
10828; BROADWELL-NEXT:    #NO_APP
10829; BROADWELL-NEXT:    retq # sched: [7:1.00]
10830;
10831; SKYLAKE-LABEL: test_rdpmc:
10832; SKYLAKE:       # %bb.0:
10833; SKYLAKE-NEXT:    #APP
10834; SKYLAKE-NEXT:    rdpmc # sched: [100:0.25]
10835; SKYLAKE-NEXT:    #NO_APP
10836; SKYLAKE-NEXT:    retq # sched: [7:1.00]
10837;
10838; SKX-LABEL: test_rdpmc:
10839; SKX:       # %bb.0:
10840; SKX-NEXT:    #APP
10841; SKX-NEXT:    rdpmc # sched: [100:0.25]
10842; SKX-NEXT:    #NO_APP
10843; SKX-NEXT:    retq # sched: [7:1.00]
10844;
10845; BTVER2-LABEL: test_rdpmc:
10846; BTVER2:       # %bb.0:
10847; BTVER2-NEXT:    #APP
10848; BTVER2-NEXT:    rdpmc # sched: [100:0.50]
10849; BTVER2-NEXT:    #NO_APP
10850; BTVER2-NEXT:    retq # sched: [4:1.00]
10851;
10852; ZNVER1-LABEL: test_rdpmc:
10853; ZNVER1:       # %bb.0:
10854; ZNVER1-NEXT:    #APP
10855; ZNVER1-NEXT:    rdpmc # sched: [100:0.25]
10856; ZNVER1-NEXT:    #NO_APP
10857; ZNVER1-NEXT:    retq # sched: [1:0.50]
10858  call void asm sideeffect "rdpmc", ""()
10859  ret void
10860}
10861
10862define void @test_rdtsc_rdtscp() optsize {
10863; GENERIC-LABEL: test_rdtsc_rdtscp:
10864; GENERIC:       # %bb.0:
10865; GENERIC-NEXT:    #APP
10866; GENERIC-NEXT:    rdtsc # sched: [100:0.33]
10867; GENERIC-NEXT:    rdtscp # sched: [100:0.33]
10868; GENERIC-NEXT:    #NO_APP
10869; GENERIC-NEXT:    retq # sched: [1:1.00]
10870;
10871; ATOM-LABEL: test_rdtsc_rdtscp:
10872; ATOM:       # %bb.0:
10873; ATOM-NEXT:    #APP
10874; ATOM-NEXT:    rdtsc # sched: [30:15.00]
10875; ATOM-NEXT:    rdtscp # sched: [30:15.00]
10876; ATOM-NEXT:    #NO_APP
10877; ATOM-NEXT:    retq # sched: [79:39.50]
10878;
10879; SLM-LABEL: test_rdtsc_rdtscp:
10880; SLM:       # %bb.0:
10881; SLM-NEXT:    #APP
10882; SLM-NEXT:    rdtsc # sched: [100:1.00]
10883; SLM-NEXT:    rdtscp # sched: [100:1.00]
10884; SLM-NEXT:    #NO_APP
10885; SLM-NEXT:    retq # sched: [4:1.00]
10886;
10887; SANDY-LABEL: test_rdtsc_rdtscp:
10888; SANDY:       # %bb.0:
10889; SANDY-NEXT:    #APP
10890; SANDY-NEXT:    rdtsc # sched: [100:0.33]
10891; SANDY-NEXT:    rdtscp # sched: [100:0.33]
10892; SANDY-NEXT:    #NO_APP
10893; SANDY-NEXT:    retq # sched: [1:1.00]
10894;
10895; HASWELL-LABEL: test_rdtsc_rdtscp:
10896; HASWELL:       # %bb.0:
10897; HASWELL-NEXT:    #APP
10898; HASWELL-NEXT:    rdtsc # sched: [18:2.00]
10899; HASWELL-NEXT:    rdtscp # sched: [42:5.50]
10900; HASWELL-NEXT:    #NO_APP
10901; HASWELL-NEXT:    retq # sched: [7:1.00]
10902;
10903; BROADWELL-LABEL: test_rdtsc_rdtscp:
10904; BROADWELL:       # %bb.0:
10905; BROADWELL-NEXT:    #APP
10906; BROADWELL-NEXT:    rdtsc # sched: [18:2.00]
10907; BROADWELL-NEXT:    rdtscp # sched: [42:5.50]
10908; BROADWELL-NEXT:    #NO_APP
10909; BROADWELL-NEXT:    retq # sched: [7:1.00]
10910;
10911; SKYLAKE-LABEL: test_rdtsc_rdtscp:
10912; SKYLAKE:       # %bb.0:
10913; SKYLAKE-NEXT:    #APP
10914; SKYLAKE-NEXT:    rdtsc # sched: [18:2.00]
10915; SKYLAKE-NEXT:    rdtscp # sched: [42:5.50]
10916; SKYLAKE-NEXT:    #NO_APP
10917; SKYLAKE-NEXT:    retq # sched: [7:1.00]
10918;
10919; SKX-LABEL: test_rdtsc_rdtscp:
10920; SKX:       # %bb.0:
10921; SKX-NEXT:    #APP
10922; SKX-NEXT:    rdtsc # sched: [18:2.00]
10923; SKX-NEXT:    rdtscp # sched: [42:5.50]
10924; SKX-NEXT:    #NO_APP
10925; SKX-NEXT:    retq # sched: [7:1.00]
10926;
10927; BTVER2-LABEL: test_rdtsc_rdtscp:
10928; BTVER2:       # %bb.0:
10929; BTVER2-NEXT:    #APP
10930; BTVER2-NEXT:    rdtsc # sched: [100:0.50]
10931; BTVER2-NEXT:    rdtscp # sched: [100:0.50]
10932; BTVER2-NEXT:    #NO_APP
10933; BTVER2-NEXT:    retq # sched: [4:1.00]
10934;
10935; ZNVER1-LABEL: test_rdtsc_rdtscp:
10936; ZNVER1:       # %bb.0:
10937; ZNVER1-NEXT:    #APP
10938; ZNVER1-NEXT:    rdtsc # sched: [100:0.25]
10939; ZNVER1-NEXT:    rdtscp # sched: [100:0.25]
10940; ZNVER1-NEXT:    #NO_APP
10941; ZNVER1-NEXT:    retq # sched: [1:0.50]
10942  call void asm sideeffect "rdtsc \0A\09 rdtscp", ""()
10943  ret void
10944}
10945
10946define void @test_ret() optsize {
10947; GENERIC-LABEL: test_ret:
10948; GENERIC:       # %bb.0:
10949; GENERIC-NEXT:    #APP
10950; GENERIC-NEXT:    retq # sched: [1:1.00]
10951; GENERIC-NEXT:    retq $4095 # imm = 0xFFF
10952; GENERIC-NEXT:    # sched: [6:1.00]
10953; GENERIC-NEXT:    lretl # sched: [6:1.00]
10954; GENERIC-NEXT:    lretl $4095 # imm = 0xFFF
10955; GENERIC-NEXT:    # sched: [6:1.00]
10956; GENERIC-NEXT:    #NO_APP
10957; GENERIC-NEXT:    retq # sched: [1:1.00]
10958;
10959; ATOM-LABEL: test_ret:
10960; ATOM:       # %bb.0:
10961; ATOM-NEXT:    #APP
10962; ATOM-NEXT:    retq # sched: [79:39.50]
10963; ATOM-NEXT:    retq $4095 # imm = 0xFFF
10964; ATOM-NEXT:    # sched: [1:1.00]
10965; ATOM-NEXT:    lretl # sched: [79:39.50]
10966; ATOM-NEXT:    lretl $4095 # imm = 0xFFF
10967; ATOM-NEXT:    # sched: [79:39.50]
10968; ATOM-NEXT:    #NO_APP
10969; ATOM-NEXT:    retq # sched: [79:39.50]
10970;
10971; SLM-LABEL: test_ret:
10972; SLM:       # %bb.0:
10973; SLM-NEXT:    #APP
10974; SLM-NEXT:    retq # sched: [4:1.00]
10975; SLM-NEXT:    retq $4095 # imm = 0xFFF
10976; SLM-NEXT:    # sched: [4:1.00]
10977; SLM-NEXT:    lretl # sched: [4:1.00]
10978; SLM-NEXT:    lretl $4095 # imm = 0xFFF
10979; SLM-NEXT:    # sched: [4:1.00]
10980; SLM-NEXT:    #NO_APP
10981; SLM-NEXT:    retq # sched: [4:1.00]
10982;
10983; SANDY-LABEL: test_ret:
10984; SANDY:       # %bb.0:
10985; SANDY-NEXT:    #APP
10986; SANDY-NEXT:    retq # sched: [1:1.00]
10987; SANDY-NEXT:    retq $4095 # imm = 0xFFF
10988; SANDY-NEXT:    # sched: [6:1.00]
10989; SANDY-NEXT:    lretl # sched: [6:1.00]
10990; SANDY-NEXT:    lretl $4095 # imm = 0xFFF
10991; SANDY-NEXT:    # sched: [6:1.00]
10992; SANDY-NEXT:    #NO_APP
10993; SANDY-NEXT:    retq # sched: [1:1.00]
10994;
10995; HASWELL-LABEL: test_ret:
10996; HASWELL:       # %bb.0:
10997; HASWELL-NEXT:    #APP
10998; HASWELL-NEXT:    retq # sched: [7:1.00]
10999; HASWELL-NEXT:    retq $4095 # imm = 0xFFF
11000; HASWELL-NEXT:    # sched: [1:2.00]
11001; HASWELL-NEXT:    lretl # sched: [6:0.50]
11002; HASWELL-NEXT:    lretl $4095 # imm = 0xFFF
11003; HASWELL-NEXT:    # sched: [1:2.00]
11004; HASWELL-NEXT:    #NO_APP
11005; HASWELL-NEXT:    retq # sched: [7:1.00]
11006;
11007; BROADWELL-LABEL: test_ret:
11008; BROADWELL:       # %bb.0:
11009; BROADWELL-NEXT:    #APP
11010; BROADWELL-NEXT:    retq # sched: [7:1.00]
11011; BROADWELL-NEXT:    retq $4095 # imm = 0xFFF
11012; BROADWELL-NEXT:    # sched: [6:0.50]
11013; BROADWELL-NEXT:    lretl # sched: [6:0.50]
11014; BROADWELL-NEXT:    lretl $4095 # imm = 0xFFF
11015; BROADWELL-NEXT:    # sched: [6:0.50]
11016; BROADWELL-NEXT:    #NO_APP
11017; BROADWELL-NEXT:    retq # sched: [7:1.00]
11018;
11019; SKYLAKE-LABEL: test_ret:
11020; SKYLAKE:       # %bb.0:
11021; SKYLAKE-NEXT:    #APP
11022; SKYLAKE-NEXT:    retq # sched: [7:1.00]
11023; SKYLAKE-NEXT:    retq $4095 # imm = 0xFFF
11024; SKYLAKE-NEXT:    # sched: [6:0.50]
11025; SKYLAKE-NEXT:    lretl # sched: [6:0.50]
11026; SKYLAKE-NEXT:    lretl $4095 # imm = 0xFFF
11027; SKYLAKE-NEXT:    # sched: [6:0.50]
11028; SKYLAKE-NEXT:    #NO_APP
11029; SKYLAKE-NEXT:    retq # sched: [7:1.00]
11030;
11031; SKX-LABEL: test_ret:
11032; SKX:       # %bb.0:
11033; SKX-NEXT:    #APP
11034; SKX-NEXT:    retq # sched: [7:1.00]
11035; SKX-NEXT:    retq $4095 # imm = 0xFFF
11036; SKX-NEXT:    # sched: [6:0.50]
11037; SKX-NEXT:    lretl # sched: [6:0.50]
11038; SKX-NEXT:    lretl $4095 # imm = 0xFFF
11039; SKX-NEXT:    # sched: [6:0.50]
11040; SKX-NEXT:    #NO_APP
11041; SKX-NEXT:    retq # sched: [7:1.00]
11042;
11043; BTVER2-LABEL: test_ret:
11044; BTVER2:       # %bb.0:
11045; BTVER2-NEXT:    #APP
11046; BTVER2-NEXT:    retq # sched: [4:1.00]
11047; BTVER2-NEXT:    retq $4095 # imm = 0xFFF
11048; BTVER2-NEXT:    # sched: [4:1.00]
11049; BTVER2-NEXT:    lretl # sched: [4:1.00]
11050; BTVER2-NEXT:    lretl $4095 # imm = 0xFFF
11051; BTVER2-NEXT:    # sched: [4:1.00]
11052; BTVER2-NEXT:    #NO_APP
11053; BTVER2-NEXT:    retq # sched: [4:1.00]
11054;
11055; ZNVER1-LABEL: test_ret:
11056; ZNVER1:       # %bb.0:
11057; ZNVER1-NEXT:    #APP
11058; ZNVER1-NEXT:    retq # sched: [1:0.50]
11059; ZNVER1-NEXT:    retq $4095 # imm = 0xFFF
11060; ZNVER1-NEXT:    # sched: [5:0.50]
11061; ZNVER1-NEXT:    lretl # sched: [1:0.50]
11062; ZNVER1-NEXT:    lretl $4095 # imm = 0xFFF
11063; ZNVER1-NEXT:    # sched: [5:0.50]
11064; ZNVER1-NEXT:    #NO_APP
11065; ZNVER1-NEXT:    retq # sched: [1:0.50]
11066  call void asm sideeffect "ret \0A\09 ret $0 \0A\09 lret \0A\09 lret $0", "i"(i16 4095)
11067  ret void
11068}
11069
11070define void @test_rol_ror_8(i8 %a0, i8 %a1, i8 *%a2) optsize {
11071; GENERIC-LABEL: test_rol_ror_8:
11072; GENERIC:       # %bb.0:
11073; GENERIC-NEXT:    #APP
11074; GENERIC-NEXT:    rolb %dil # sched: [2:1.00]
11075; GENERIC-NEXT:    rorb %dil # sched: [2:1.00]
11076; GENERIC-NEXT:    rolb (%rdx) # sched: [8:1.00]
11077; GENERIC-NEXT:    rorb (%rdx) # sched: [8:1.00]
11078; GENERIC-NEXT:    rolb $7, %dil # sched: [2:1.00]
11079; GENERIC-NEXT:    rorb $7, %dil # sched: [2:1.00]
11080; GENERIC-NEXT:    rolb $7, (%rdx) # sched: [8:1.00]
11081; GENERIC-NEXT:    rorb $7, (%rdx) # sched: [8:1.00]
11082; GENERIC-NEXT:    rolb %cl, %dil # sched: [3:1.50]
11083; GENERIC-NEXT:    rorb %cl, %dil # sched: [3:1.50]
11084; GENERIC-NEXT:    rolb %cl, (%rdx) # sched: [9:1.50]
11085; GENERIC-NEXT:    rorb %cl, (%rdx) # sched: [9:1.50]
11086; GENERIC-NEXT:    #NO_APP
11087; GENERIC-NEXT:    retq # sched: [1:1.00]
11088;
11089; ATOM-LABEL: test_rol_ror_8:
11090; ATOM:       # %bb.0:
11091; ATOM-NEXT:    #APP
11092; ATOM-NEXT:    rolb %dil # sched: [1:1.00]
11093; ATOM-NEXT:    rorb %dil # sched: [1:1.00]
11094; ATOM-NEXT:    rolb (%rdx) # sched: [1:1.00]
11095; ATOM-NEXT:    rorb (%rdx) # sched: [1:1.00]
11096; ATOM-NEXT:    rolb $7, %dil # sched: [1:1.00]
11097; ATOM-NEXT:    rorb $7, %dil # sched: [1:1.00]
11098; ATOM-NEXT:    rolb $7, (%rdx) # sched: [1:1.00]
11099; ATOM-NEXT:    rorb $7, (%rdx) # sched: [1:1.00]
11100; ATOM-NEXT:    rolb %cl, %dil # sched: [1:1.00]
11101; ATOM-NEXT:    rorb %cl, %dil # sched: [1:1.00]
11102; ATOM-NEXT:    rolb %cl, (%rdx) # sched: [1:1.00]
11103; ATOM-NEXT:    rorb %cl, (%rdx) # sched: [1:1.00]
11104; ATOM-NEXT:    #NO_APP
11105; ATOM-NEXT:    retq # sched: [79:39.50]
11106;
11107; SLM-LABEL: test_rol_ror_8:
11108; SLM:       # %bb.0:
11109; SLM-NEXT:    #APP
11110; SLM-NEXT:    rolb %dil # sched: [1:1.00]
11111; SLM-NEXT:    rorb %dil # sched: [1:1.00]
11112; SLM-NEXT:    rolb (%rdx) # sched: [4:2.00]
11113; SLM-NEXT:    rorb (%rdx) # sched: [4:2.00]
11114; SLM-NEXT:    rolb $7, %dil # sched: [1:1.00]
11115; SLM-NEXT:    rorb $7, %dil # sched: [1:1.00]
11116; SLM-NEXT:    rolb $7, (%rdx) # sched: [4:2.00]
11117; SLM-NEXT:    rorb $7, (%rdx) # sched: [4:2.00]
11118; SLM-NEXT:    rolb %cl, %dil # sched: [1:1.00]
11119; SLM-NEXT:    rorb %cl, %dil # sched: [1:1.00]
11120; SLM-NEXT:    rolb %cl, (%rdx) # sched: [4:2.00]
11121; SLM-NEXT:    rorb %cl, (%rdx) # sched: [4:2.00]
11122; SLM-NEXT:    #NO_APP
11123; SLM-NEXT:    retq # sched: [4:1.00]
11124;
11125; SANDY-LABEL: test_rol_ror_8:
11126; SANDY:       # %bb.0:
11127; SANDY-NEXT:    #APP
11128; SANDY-NEXT:    rolb %dil # sched: [2:1.00]
11129; SANDY-NEXT:    rorb %dil # sched: [2:1.00]
11130; SANDY-NEXT:    rolb (%rdx) # sched: [8:1.00]
11131; SANDY-NEXT:    rorb (%rdx) # sched: [8:1.00]
11132; SANDY-NEXT:    rolb $7, %dil # sched: [2:1.00]
11133; SANDY-NEXT:    rorb $7, %dil # sched: [2:1.00]
11134; SANDY-NEXT:    rolb $7, (%rdx) # sched: [8:1.00]
11135; SANDY-NEXT:    rorb $7, (%rdx) # sched: [8:1.00]
11136; SANDY-NEXT:    rolb %cl, %dil # sched: [3:1.50]
11137; SANDY-NEXT:    rorb %cl, %dil # sched: [3:1.50]
11138; SANDY-NEXT:    rolb %cl, (%rdx) # sched: [9:1.50]
11139; SANDY-NEXT:    rorb %cl, (%rdx) # sched: [9:1.50]
11140; SANDY-NEXT:    #NO_APP
11141; SANDY-NEXT:    retq # sched: [1:1.00]
11142;
11143; HASWELL-LABEL: test_rol_ror_8:
11144; HASWELL:       # %bb.0:
11145; HASWELL-NEXT:    #APP
11146; HASWELL-NEXT:    rolb %dil # sched: [2:1.00]
11147; HASWELL-NEXT:    rorb %dil # sched: [2:1.00]
11148; HASWELL-NEXT:    rolb (%rdx) # sched: [8:1.00]
11149; HASWELL-NEXT:    rorb (%rdx) # sched: [8:1.00]
11150; HASWELL-NEXT:    rolb $7, %dil # sched: [2:1.00]
11151; HASWELL-NEXT:    rorb $7, %dil # sched: [2:1.00]
11152; HASWELL-NEXT:    rolb $7, (%rdx) # sched: [8:1.00]
11153; HASWELL-NEXT:    rorb $7, (%rdx) # sched: [8:1.00]
11154; HASWELL-NEXT:    rolb %cl, %dil # sched: [3:1.00]
11155; HASWELL-NEXT:    rorb %cl, %dil # sched: [3:1.00]
11156; HASWELL-NEXT:    rolb %cl, (%rdx) # sched: [9:1.00]
11157; HASWELL-NEXT:    rorb %cl, (%rdx) # sched: [9:1.00]
11158; HASWELL-NEXT:    #NO_APP
11159; HASWELL-NEXT:    retq # sched: [7:1.00]
11160;
11161; BROADWELL-LABEL: test_rol_ror_8:
11162; BROADWELL:       # %bb.0:
11163; BROADWELL-NEXT:    #APP
11164; BROADWELL-NEXT:    rolb %dil # sched: [2:1.00]
11165; BROADWELL-NEXT:    rorb %dil # sched: [2:1.00]
11166; BROADWELL-NEXT:    rolb (%rdx) # sched: [7:1.00]
11167; BROADWELL-NEXT:    rorb (%rdx) # sched: [7:1.00]
11168; BROADWELL-NEXT:    rolb $7, %dil # sched: [2:1.00]
11169; BROADWELL-NEXT:    rorb $7, %dil # sched: [2:1.00]
11170; BROADWELL-NEXT:    rolb $7, (%rdx) # sched: [7:1.00]
11171; BROADWELL-NEXT:    rorb $7, (%rdx) # sched: [7:1.00]
11172; BROADWELL-NEXT:    rolb %cl, %dil # sched: [3:1.00]
11173; BROADWELL-NEXT:    rorb %cl, %dil # sched: [3:1.00]
11174; BROADWELL-NEXT:    rolb %cl, (%rdx) # sched: [8:1.00]
11175; BROADWELL-NEXT:    rorb %cl, (%rdx) # sched: [8:1.00]
11176; BROADWELL-NEXT:    #NO_APP
11177; BROADWELL-NEXT:    retq # sched: [7:1.00]
11178;
11179; SKYLAKE-LABEL: test_rol_ror_8:
11180; SKYLAKE:       # %bb.0:
11181; SKYLAKE-NEXT:    #APP
11182; SKYLAKE-NEXT:    rolb %dil # sched: [2:1.00]
11183; SKYLAKE-NEXT:    rorb %dil # sched: [2:1.00]
11184; SKYLAKE-NEXT:    rolb (%rdx) # sched: [7:1.00]
11185; SKYLAKE-NEXT:    rorb (%rdx) # sched: [7:1.00]
11186; SKYLAKE-NEXT:    rolb $7, %dil # sched: [2:1.00]
11187; SKYLAKE-NEXT:    rorb $7, %dil # sched: [2:1.00]
11188; SKYLAKE-NEXT:    rolb $7, (%rdx) # sched: [7:1.00]
11189; SKYLAKE-NEXT:    rorb $7, (%rdx) # sched: [7:1.00]
11190; SKYLAKE-NEXT:    rolb %cl, %dil # sched: [3:1.50]
11191; SKYLAKE-NEXT:    rorb %cl, %dil # sched: [3:1.50]
11192; SKYLAKE-NEXT:    rolb %cl, (%rdx) # sched: [8:1.50]
11193; SKYLAKE-NEXT:    rorb %cl, (%rdx) # sched: [8:1.50]
11194; SKYLAKE-NEXT:    #NO_APP
11195; SKYLAKE-NEXT:    retq # sched: [7:1.00]
11196;
11197; SKX-LABEL: test_rol_ror_8:
11198; SKX:       # %bb.0:
11199; SKX-NEXT:    #APP
11200; SKX-NEXT:    rolb %dil # sched: [2:1.00]
11201; SKX-NEXT:    rorb %dil # sched: [2:1.00]
11202; SKX-NEXT:    rolb (%rdx) # sched: [7:1.00]
11203; SKX-NEXT:    rorb (%rdx) # sched: [7:1.00]
11204; SKX-NEXT:    rolb $7, %dil # sched: [2:1.00]
11205; SKX-NEXT:    rorb $7, %dil # sched: [2:1.00]
11206; SKX-NEXT:    rolb $7, (%rdx) # sched: [7:1.00]
11207; SKX-NEXT:    rorb $7, (%rdx) # sched: [7:1.00]
11208; SKX-NEXT:    rolb %cl, %dil # sched: [3:1.50]
11209; SKX-NEXT:    rorb %cl, %dil # sched: [3:1.50]
11210; SKX-NEXT:    rolb %cl, (%rdx) # sched: [8:1.50]
11211; SKX-NEXT:    rorb %cl, (%rdx) # sched: [8:1.50]
11212; SKX-NEXT:    #NO_APP
11213; SKX-NEXT:    retq # sched: [7:1.00]
11214;
11215; BTVER2-LABEL: test_rol_ror_8:
11216; BTVER2:       # %bb.0:
11217; BTVER2-NEXT:    #APP
11218; BTVER2-NEXT:    rolb %dil # sched: [1:0.50]
11219; BTVER2-NEXT:    rorb %dil # sched: [1:0.50]
11220; BTVER2-NEXT:    rolb (%rdx) # sched: [4:1.00]
11221; BTVER2-NEXT:    rorb (%rdx) # sched: [4:1.00]
11222; BTVER2-NEXT:    rolb $7, %dil # sched: [1:0.50]
11223; BTVER2-NEXT:    rorb $7, %dil # sched: [1:0.50]
11224; BTVER2-NEXT:    rolb $7, (%rdx) # sched: [4:1.00]
11225; BTVER2-NEXT:    rorb $7, (%rdx) # sched: [4:1.00]
11226; BTVER2-NEXT:    rolb %cl, %dil # sched: [1:0.50]
11227; BTVER2-NEXT:    rorb %cl, %dil # sched: [1:0.50]
11228; BTVER2-NEXT:    rolb %cl, (%rdx) # sched: [4:1.00]
11229; BTVER2-NEXT:    rorb %cl, (%rdx) # sched: [4:1.00]
11230; BTVER2-NEXT:    #NO_APP
11231; BTVER2-NEXT:    retq # sched: [4:1.00]
11232;
11233; ZNVER1-LABEL: test_rol_ror_8:
11234; ZNVER1:       # %bb.0:
11235; ZNVER1-NEXT:    #APP
11236; ZNVER1-NEXT:    rolb %dil # sched: [1:0.25]
11237; ZNVER1-NEXT:    rorb %dil # sched: [1:0.25]
11238; ZNVER1-NEXT:    rolb (%rdx) # sched: [5:1.00]
11239; ZNVER1-NEXT:    rorb (%rdx) # sched: [5:1.00]
11240; ZNVER1-NEXT:    rolb $7, %dil # sched: [1:0.25]
11241; ZNVER1-NEXT:    rorb $7, %dil # sched: [1:0.25]
11242; ZNVER1-NEXT:    rolb $7, (%rdx) # sched: [5:1.00]
11243; ZNVER1-NEXT:    rorb $7, (%rdx) # sched: [5:1.00]
11244; ZNVER1-NEXT:    rolb %cl, %dil # sched: [1:0.25]
11245; ZNVER1-NEXT:    rorb %cl, %dil # sched: [1:0.25]
11246; ZNVER1-NEXT:    rolb %cl, (%rdx) # sched: [5:1.00]
11247; ZNVER1-NEXT:    rorb %cl, (%rdx) # sched: [5:1.00]
11248; ZNVER1-NEXT:    #NO_APP
11249; ZNVER1-NEXT:    retq # sched: [1:0.50]
11250  call void asm sideeffect "rolb $0 \0A\09 rorb $0 \0A\09 rolb $2 \0A\09 rorb $2 \0A\09 rolb $3, $0 \0A\09 rorb $3, $0 \0A\09 rolb $3, $2 \0A\09 rorb $3, $2 \0A\09 rolb %CL, $0 \0A\09 rorb %CL, $0 \0A\09 rolb %CL, $2 \0A\09 rorb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7)
11251  ret void
11252}
11253define void @test_rol_ror_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
11254; GENERIC-LABEL: test_rol_ror_16:
11255; GENERIC:       # %bb.0:
11256; GENERIC-NEXT:    #APP
11257; GENERIC-NEXT:    rolw %di # sched: [2:1.00]
11258; GENERIC-NEXT:    rorw %di # sched: [2:1.00]
11259; GENERIC-NEXT:    rolw (%rdx) # sched: [8:1.00]
11260; GENERIC-NEXT:    rorw (%rdx) # sched: [8:1.00]
11261; GENERIC-NEXT:    rolw $7, %di # sched: [2:1.00]
11262; GENERIC-NEXT:    rorw $7, %di # sched: [2:1.00]
11263; GENERIC-NEXT:    rolw $7, (%rdx) # sched: [8:1.00]
11264; GENERIC-NEXT:    rorw $7, (%rdx) # sched: [8:1.00]
11265; GENERIC-NEXT:    rolw %cl, %di # sched: [3:1.50]
11266; GENERIC-NEXT:    rorw %cl, %di # sched: [3:1.50]
11267; GENERIC-NEXT:    rolw %cl, (%rdx) # sched: [9:1.50]
11268; GENERIC-NEXT:    rorw %cl, (%rdx) # sched: [9:1.50]
11269; GENERIC-NEXT:    #NO_APP
11270; GENERIC-NEXT:    retq # sched: [1:1.00]
11271;
11272; ATOM-LABEL: test_rol_ror_16:
11273; ATOM:       # %bb.0:
11274; ATOM-NEXT:    #APP
11275; ATOM-NEXT:    rolw %di # sched: [1:1.00]
11276; ATOM-NEXT:    rorw %di # sched: [1:1.00]
11277; ATOM-NEXT:    rolw (%rdx) # sched: [1:1.00]
11278; ATOM-NEXT:    rorw (%rdx) # sched: [1:1.00]
11279; ATOM-NEXT:    rolw $7, %di # sched: [1:1.00]
11280; ATOM-NEXT:    rorw $7, %di # sched: [1:1.00]
11281; ATOM-NEXT:    rolw $7, (%rdx) # sched: [1:1.00]
11282; ATOM-NEXT:    rorw $7, (%rdx) # sched: [1:1.00]
11283; ATOM-NEXT:    rolw %cl, %di # sched: [1:1.00]
11284; ATOM-NEXT:    rorw %cl, %di # sched: [1:1.00]
11285; ATOM-NEXT:    rolw %cl, (%rdx) # sched: [1:1.00]
11286; ATOM-NEXT:    rorw %cl, (%rdx) # sched: [1:1.00]
11287; ATOM-NEXT:    #NO_APP
11288; ATOM-NEXT:    retq # sched: [79:39.50]
11289;
11290; SLM-LABEL: test_rol_ror_16:
11291; SLM:       # %bb.0:
11292; SLM-NEXT:    #APP
11293; SLM-NEXT:    rolw %di # sched: [1:1.00]
11294; SLM-NEXT:    rorw %di # sched: [1:1.00]
11295; SLM-NEXT:    rolw (%rdx) # sched: [4:2.00]
11296; SLM-NEXT:    rorw (%rdx) # sched: [4:2.00]
11297; SLM-NEXT:    rolw $7, %di # sched: [1:1.00]
11298; SLM-NEXT:    rorw $7, %di # sched: [1:1.00]
11299; SLM-NEXT:    rolw $7, (%rdx) # sched: [4:2.00]
11300; SLM-NEXT:    rorw $7, (%rdx) # sched: [4:2.00]
11301; SLM-NEXT:    rolw %cl, %di # sched: [1:1.00]
11302; SLM-NEXT:    rorw %cl, %di # sched: [1:1.00]
11303; SLM-NEXT:    rolw %cl, (%rdx) # sched: [4:2.00]
11304; SLM-NEXT:    rorw %cl, (%rdx) # sched: [4:2.00]
11305; SLM-NEXT:    #NO_APP
11306; SLM-NEXT:    retq # sched: [4:1.00]
11307;
11308; SANDY-LABEL: test_rol_ror_16:
11309; SANDY:       # %bb.0:
11310; SANDY-NEXT:    #APP
11311; SANDY-NEXT:    rolw %di # sched: [2:1.00]
11312; SANDY-NEXT:    rorw %di # sched: [2:1.00]
11313; SANDY-NEXT:    rolw (%rdx) # sched: [8:1.00]
11314; SANDY-NEXT:    rorw (%rdx) # sched: [8:1.00]
11315; SANDY-NEXT:    rolw $7, %di # sched: [2:1.00]
11316; SANDY-NEXT:    rorw $7, %di # sched: [2:1.00]
11317; SANDY-NEXT:    rolw $7, (%rdx) # sched: [8:1.00]
11318; SANDY-NEXT:    rorw $7, (%rdx) # sched: [8:1.00]
11319; SANDY-NEXT:    rolw %cl, %di # sched: [3:1.50]
11320; SANDY-NEXT:    rorw %cl, %di # sched: [3:1.50]
11321; SANDY-NEXT:    rolw %cl, (%rdx) # sched: [9:1.50]
11322; SANDY-NEXT:    rorw %cl, (%rdx) # sched: [9:1.50]
11323; SANDY-NEXT:    #NO_APP
11324; SANDY-NEXT:    retq # sched: [1:1.00]
11325;
11326; HASWELL-LABEL: test_rol_ror_16:
11327; HASWELL:       # %bb.0:
11328; HASWELL-NEXT:    #APP
11329; HASWELL-NEXT:    rolw %di # sched: [2:1.00]
11330; HASWELL-NEXT:    rorw %di # sched: [2:1.00]
11331; HASWELL-NEXT:    rolw (%rdx) # sched: [8:1.00]
11332; HASWELL-NEXT:    rorw (%rdx) # sched: [8:1.00]
11333; HASWELL-NEXT:    rolw $7, %di # sched: [2:1.00]
11334; HASWELL-NEXT:    rorw $7, %di # sched: [2:1.00]
11335; HASWELL-NEXT:    rolw $7, (%rdx) # sched: [8:1.00]
11336; HASWELL-NEXT:    rorw $7, (%rdx) # sched: [8:1.00]
11337; HASWELL-NEXT:    rolw %cl, %di # sched: [3:1.00]
11338; HASWELL-NEXT:    rorw %cl, %di # sched: [3:1.00]
11339; HASWELL-NEXT:    rolw %cl, (%rdx) # sched: [9:1.00]
11340; HASWELL-NEXT:    rorw %cl, (%rdx) # sched: [9:1.00]
11341; HASWELL-NEXT:    #NO_APP
11342; HASWELL-NEXT:    retq # sched: [7:1.00]
11343;
11344; BROADWELL-LABEL: test_rol_ror_16:
11345; BROADWELL:       # %bb.0:
11346; BROADWELL-NEXT:    #APP
11347; BROADWELL-NEXT:    rolw %di # sched: [2:1.00]
11348; BROADWELL-NEXT:    rorw %di # sched: [2:1.00]
11349; BROADWELL-NEXT:    rolw (%rdx) # sched: [7:1.00]
11350; BROADWELL-NEXT:    rorw (%rdx) # sched: [7:1.00]
11351; BROADWELL-NEXT:    rolw $7, %di # sched: [2:1.00]
11352; BROADWELL-NEXT:    rorw $7, %di # sched: [2:1.00]
11353; BROADWELL-NEXT:    rolw $7, (%rdx) # sched: [7:1.00]
11354; BROADWELL-NEXT:    rorw $7, (%rdx) # sched: [7:1.00]
11355; BROADWELL-NEXT:    rolw %cl, %di # sched: [3:1.00]
11356; BROADWELL-NEXT:    rorw %cl, %di # sched: [3:1.00]
11357; BROADWELL-NEXT:    rolw %cl, (%rdx) # sched: [8:1.00]
11358; BROADWELL-NEXT:    rorw %cl, (%rdx) # sched: [8:1.00]
11359; BROADWELL-NEXT:    #NO_APP
11360; BROADWELL-NEXT:    retq # sched: [7:1.00]
11361;
11362; SKYLAKE-LABEL: test_rol_ror_16:
11363; SKYLAKE:       # %bb.0:
11364; SKYLAKE-NEXT:    #APP
11365; SKYLAKE-NEXT:    rolw %di # sched: [2:1.00]
11366; SKYLAKE-NEXT:    rorw %di # sched: [2:1.00]
11367; SKYLAKE-NEXT:    rolw (%rdx) # sched: [7:1.00]
11368; SKYLAKE-NEXT:    rorw (%rdx) # sched: [7:1.00]
11369; SKYLAKE-NEXT:    rolw $7, %di # sched: [2:1.00]
11370; SKYLAKE-NEXT:    rorw $7, %di # sched: [2:1.00]
11371; SKYLAKE-NEXT:    rolw $7, (%rdx) # sched: [7:1.00]
11372; SKYLAKE-NEXT:    rorw $7, (%rdx) # sched: [7:1.00]
11373; SKYLAKE-NEXT:    rolw %cl, %di # sched: [3:1.50]
11374; SKYLAKE-NEXT:    rorw %cl, %di # sched: [3:1.50]
11375; SKYLAKE-NEXT:    rolw %cl, (%rdx) # sched: [8:1.50]
11376; SKYLAKE-NEXT:    rorw %cl, (%rdx) # sched: [8:1.50]
11377; SKYLAKE-NEXT:    #NO_APP
11378; SKYLAKE-NEXT:    retq # sched: [7:1.00]
11379;
11380; SKX-LABEL: test_rol_ror_16:
11381; SKX:       # %bb.0:
11382; SKX-NEXT:    #APP
11383; SKX-NEXT:    rolw %di # sched: [2:1.00]
11384; SKX-NEXT:    rorw %di # sched: [2:1.00]
11385; SKX-NEXT:    rolw (%rdx) # sched: [7:1.00]
11386; SKX-NEXT:    rorw (%rdx) # sched: [7:1.00]
11387; SKX-NEXT:    rolw $7, %di # sched: [2:1.00]
11388; SKX-NEXT:    rorw $7, %di # sched: [2:1.00]
11389; SKX-NEXT:    rolw $7, (%rdx) # sched: [7:1.00]
11390; SKX-NEXT:    rorw $7, (%rdx) # sched: [7:1.00]
11391; SKX-NEXT:    rolw %cl, %di # sched: [3:1.50]
11392; SKX-NEXT:    rorw %cl, %di # sched: [3:1.50]
11393; SKX-NEXT:    rolw %cl, (%rdx) # sched: [8:1.50]
11394; SKX-NEXT:    rorw %cl, (%rdx) # sched: [8:1.50]
11395; SKX-NEXT:    #NO_APP
11396; SKX-NEXT:    retq # sched: [7:1.00]
11397;
11398; BTVER2-LABEL: test_rol_ror_16:
11399; BTVER2:       # %bb.0:
11400; BTVER2-NEXT:    #APP
11401; BTVER2-NEXT:    rolw %di # sched: [1:0.50]
11402; BTVER2-NEXT:    rorw %di # sched: [1:0.50]
11403; BTVER2-NEXT:    rolw (%rdx) # sched: [4:1.00]
11404; BTVER2-NEXT:    rorw (%rdx) # sched: [4:1.00]
11405; BTVER2-NEXT:    rolw $7, %di # sched: [1:0.50]
11406; BTVER2-NEXT:    rorw $7, %di # sched: [1:0.50]
11407; BTVER2-NEXT:    rolw $7, (%rdx) # sched: [4:1.00]
11408; BTVER2-NEXT:    rorw $7, (%rdx) # sched: [4:1.00]
11409; BTVER2-NEXT:    rolw %cl, %di # sched: [1:0.50]
11410; BTVER2-NEXT:    rorw %cl, %di # sched: [1:0.50]
11411; BTVER2-NEXT:    rolw %cl, (%rdx) # sched: [4:1.00]
11412; BTVER2-NEXT:    rorw %cl, (%rdx) # sched: [4:1.00]
11413; BTVER2-NEXT:    #NO_APP
11414; BTVER2-NEXT:    retq # sched: [4:1.00]
11415;
11416; ZNVER1-LABEL: test_rol_ror_16:
11417; ZNVER1:       # %bb.0:
11418; ZNVER1-NEXT:    #APP
11419; ZNVER1-NEXT:    rolw %di # sched: [1:0.25]
11420; ZNVER1-NEXT:    rorw %di # sched: [1:0.25]
11421; ZNVER1-NEXT:    rolw (%rdx) # sched: [5:1.00]
11422; ZNVER1-NEXT:    rorw (%rdx) # sched: [5:1.00]
11423; ZNVER1-NEXT:    rolw $7, %di # sched: [1:0.25]
11424; ZNVER1-NEXT:    rorw $7, %di # sched: [1:0.25]
11425; ZNVER1-NEXT:    rolw $7, (%rdx) # sched: [5:1.00]
11426; ZNVER1-NEXT:    rorw $7, (%rdx) # sched: [5:1.00]
11427; ZNVER1-NEXT:    rolw %cl, %di # sched: [1:0.25]
11428; ZNVER1-NEXT:    rorw %cl, %di # sched: [1:0.25]
11429; ZNVER1-NEXT:    rolw %cl, (%rdx) # sched: [5:1.00]
11430; ZNVER1-NEXT:    rorw %cl, (%rdx) # sched: [5:1.00]
11431; ZNVER1-NEXT:    #NO_APP
11432; ZNVER1-NEXT:    retq # sched: [1:0.50]
11433  call void asm sideeffect "rolw $0 \0A\09 rorw $0 \0A\09 rolw $2 \0A\09 rorw $2 \0A\09 rolw $3, $0 \0A\09 rorw $3, $0 \0A\09 rolw $3, $2 \0A\09 rorw $3, $2 \0A\09 rolw %CL, $0 \0A\09 rorw %CL, $0 \0A\09 rolw %CL, $2 \0A\09 rorw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7)
11434  ret void
11435}
11436define void @test_rol_ror_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
11437; GENERIC-LABEL: test_rol_ror_32:
11438; GENERIC:       # %bb.0:
11439; GENERIC-NEXT:    #APP
11440; GENERIC-NEXT:    roll %edi # sched: [2:1.00]
11441; GENERIC-NEXT:    rorl %edi # sched: [2:1.00]
11442; GENERIC-NEXT:    roll (%rdx) # sched: [8:1.00]
11443; GENERIC-NEXT:    rorl (%rdx) # sched: [8:1.00]
11444; GENERIC-NEXT:    roll $7, %edi # sched: [2:1.00]
11445; GENERIC-NEXT:    rorl $7, %edi # sched: [2:1.00]
11446; GENERIC-NEXT:    roll $7, (%rdx) # sched: [8:1.00]
11447; GENERIC-NEXT:    rorl $7, (%rdx) # sched: [8:1.00]
11448; GENERIC-NEXT:    roll %cl, %edi # sched: [3:1.50]
11449; GENERIC-NEXT:    rorl %cl, %edi # sched: [3:1.50]
11450; GENERIC-NEXT:    roll %cl, (%rdx) # sched: [9:1.50]
11451; GENERIC-NEXT:    rorl %cl, (%rdx) # sched: [9:1.50]
11452; GENERIC-NEXT:    #NO_APP
11453; GENERIC-NEXT:    retq # sched: [1:1.00]
11454;
11455; ATOM-LABEL: test_rol_ror_32:
11456; ATOM:       # %bb.0:
11457; ATOM-NEXT:    #APP
11458; ATOM-NEXT:    roll %edi # sched: [1:1.00]
11459; ATOM-NEXT:    rorl %edi # sched: [1:1.00]
11460; ATOM-NEXT:    roll (%rdx) # sched: [1:1.00]
11461; ATOM-NEXT:    rorl (%rdx) # sched: [1:1.00]
11462; ATOM-NEXT:    roll $7, %edi # sched: [1:1.00]
11463; ATOM-NEXT:    rorl $7, %edi # sched: [1:1.00]
11464; ATOM-NEXT:    roll $7, (%rdx) # sched: [1:1.00]
11465; ATOM-NEXT:    rorl $7, (%rdx) # sched: [1:1.00]
11466; ATOM-NEXT:    roll %cl, %edi # sched: [1:1.00]
11467; ATOM-NEXT:    rorl %cl, %edi # sched: [1:1.00]
11468; ATOM-NEXT:    roll %cl, (%rdx) # sched: [1:1.00]
11469; ATOM-NEXT:    rorl %cl, (%rdx) # sched: [1:1.00]
11470; ATOM-NEXT:    #NO_APP
11471; ATOM-NEXT:    retq # sched: [79:39.50]
11472;
11473; SLM-LABEL: test_rol_ror_32:
11474; SLM:       # %bb.0:
11475; SLM-NEXT:    #APP
11476; SLM-NEXT:    roll %edi # sched: [1:1.00]
11477; SLM-NEXT:    rorl %edi # sched: [1:1.00]
11478; SLM-NEXT:    roll (%rdx) # sched: [4:2.00]
11479; SLM-NEXT:    rorl (%rdx) # sched: [4:2.00]
11480; SLM-NEXT:    roll $7, %edi # sched: [1:1.00]
11481; SLM-NEXT:    rorl $7, %edi # sched: [1:1.00]
11482; SLM-NEXT:    roll $7, (%rdx) # sched: [4:2.00]
11483; SLM-NEXT:    rorl $7, (%rdx) # sched: [4:2.00]
11484; SLM-NEXT:    roll %cl, %edi # sched: [1:1.00]
11485; SLM-NEXT:    rorl %cl, %edi # sched: [1:1.00]
11486; SLM-NEXT:    roll %cl, (%rdx) # sched: [4:2.00]
11487; SLM-NEXT:    rorl %cl, (%rdx) # sched: [4:2.00]
11488; SLM-NEXT:    #NO_APP
11489; SLM-NEXT:    retq # sched: [4:1.00]
11490;
11491; SANDY-LABEL: test_rol_ror_32:
11492; SANDY:       # %bb.0:
11493; SANDY-NEXT:    #APP
11494; SANDY-NEXT:    roll %edi # sched: [2:1.00]
11495; SANDY-NEXT:    rorl %edi # sched: [2:1.00]
11496; SANDY-NEXT:    roll (%rdx) # sched: [8:1.00]
11497; SANDY-NEXT:    rorl (%rdx) # sched: [8:1.00]
11498; SANDY-NEXT:    roll $7, %edi # sched: [2:1.00]
11499; SANDY-NEXT:    rorl $7, %edi # sched: [2:1.00]
11500; SANDY-NEXT:    roll $7, (%rdx) # sched: [8:1.00]
11501; SANDY-NEXT:    rorl $7, (%rdx) # sched: [8:1.00]
11502; SANDY-NEXT:    roll %cl, %edi # sched: [3:1.50]
11503; SANDY-NEXT:    rorl %cl, %edi # sched: [3:1.50]
11504; SANDY-NEXT:    roll %cl, (%rdx) # sched: [9:1.50]
11505; SANDY-NEXT:    rorl %cl, (%rdx) # sched: [9:1.50]
11506; SANDY-NEXT:    #NO_APP
11507; SANDY-NEXT:    retq # sched: [1:1.00]
11508;
11509; HASWELL-LABEL: test_rol_ror_32:
11510; HASWELL:       # %bb.0:
11511; HASWELL-NEXT:    #APP
11512; HASWELL-NEXT:    roll %edi # sched: [2:1.00]
11513; HASWELL-NEXT:    rorl %edi # sched: [2:1.00]
11514; HASWELL-NEXT:    roll (%rdx) # sched: [8:1.00]
11515; HASWELL-NEXT:    rorl (%rdx) # sched: [8:1.00]
11516; HASWELL-NEXT:    roll $7, %edi # sched: [2:1.00]
11517; HASWELL-NEXT:    rorl $7, %edi # sched: [2:1.00]
11518; HASWELL-NEXT:    roll $7, (%rdx) # sched: [8:1.00]
11519; HASWELL-NEXT:    rorl $7, (%rdx) # sched: [8:1.00]
11520; HASWELL-NEXT:    roll %cl, %edi # sched: [3:1.00]
11521; HASWELL-NEXT:    rorl %cl, %edi # sched: [3:1.00]
11522; HASWELL-NEXT:    roll %cl, (%rdx) # sched: [9:1.00]
11523; HASWELL-NEXT:    rorl %cl, (%rdx) # sched: [9:1.00]
11524; HASWELL-NEXT:    #NO_APP
11525; HASWELL-NEXT:    retq # sched: [7:1.00]
11526;
11527; BROADWELL-LABEL: test_rol_ror_32:
11528; BROADWELL:       # %bb.0:
11529; BROADWELL-NEXT:    #APP
11530; BROADWELL-NEXT:    roll %edi # sched: [2:1.00]
11531; BROADWELL-NEXT:    rorl %edi # sched: [2:1.00]
11532; BROADWELL-NEXT:    roll (%rdx) # sched: [7:1.00]
11533; BROADWELL-NEXT:    rorl (%rdx) # sched: [7:1.00]
11534; BROADWELL-NEXT:    roll $7, %edi # sched: [2:1.00]
11535; BROADWELL-NEXT:    rorl $7, %edi # sched: [2:1.00]
11536; BROADWELL-NEXT:    roll $7, (%rdx) # sched: [7:1.00]
11537; BROADWELL-NEXT:    rorl $7, (%rdx) # sched: [7:1.00]
11538; BROADWELL-NEXT:    roll %cl, %edi # sched: [3:1.00]
11539; BROADWELL-NEXT:    rorl %cl, %edi # sched: [3:1.00]
11540; BROADWELL-NEXT:    roll %cl, (%rdx) # sched: [8:1.00]
11541; BROADWELL-NEXT:    rorl %cl, (%rdx) # sched: [8:1.00]
11542; BROADWELL-NEXT:    #NO_APP
11543; BROADWELL-NEXT:    retq # sched: [7:1.00]
11544;
11545; SKYLAKE-LABEL: test_rol_ror_32:
11546; SKYLAKE:       # %bb.0:
11547; SKYLAKE-NEXT:    #APP
11548; SKYLAKE-NEXT:    roll %edi # sched: [2:1.00]
11549; SKYLAKE-NEXT:    rorl %edi # sched: [2:1.00]
11550; SKYLAKE-NEXT:    roll (%rdx) # sched: [7:1.00]
11551; SKYLAKE-NEXT:    rorl (%rdx) # sched: [7:1.00]
11552; SKYLAKE-NEXT:    roll $7, %edi # sched: [2:1.00]
11553; SKYLAKE-NEXT:    rorl $7, %edi # sched: [2:1.00]
11554; SKYLAKE-NEXT:    roll $7, (%rdx) # sched: [7:1.00]
11555; SKYLAKE-NEXT:    rorl $7, (%rdx) # sched: [7:1.00]
11556; SKYLAKE-NEXT:    roll %cl, %edi # sched: [3:1.50]
11557; SKYLAKE-NEXT:    rorl %cl, %edi # sched: [3:1.50]
11558; SKYLAKE-NEXT:    roll %cl, (%rdx) # sched: [8:1.50]
11559; SKYLAKE-NEXT:    rorl %cl, (%rdx) # sched: [8:1.50]
11560; SKYLAKE-NEXT:    #NO_APP
11561; SKYLAKE-NEXT:    retq # sched: [7:1.00]
11562;
11563; SKX-LABEL: test_rol_ror_32:
11564; SKX:       # %bb.0:
11565; SKX-NEXT:    #APP
11566; SKX-NEXT:    roll %edi # sched: [2:1.00]
11567; SKX-NEXT:    rorl %edi # sched: [2:1.00]
11568; SKX-NEXT:    roll (%rdx) # sched: [7:1.00]
11569; SKX-NEXT:    rorl (%rdx) # sched: [7:1.00]
11570; SKX-NEXT:    roll $7, %edi # sched: [2:1.00]
11571; SKX-NEXT:    rorl $7, %edi # sched: [2:1.00]
11572; SKX-NEXT:    roll $7, (%rdx) # sched: [7:1.00]
11573; SKX-NEXT:    rorl $7, (%rdx) # sched: [7:1.00]
11574; SKX-NEXT:    roll %cl, %edi # sched: [3:1.50]
11575; SKX-NEXT:    rorl %cl, %edi # sched: [3:1.50]
11576; SKX-NEXT:    roll %cl, (%rdx) # sched: [8:1.50]
11577; SKX-NEXT:    rorl %cl, (%rdx) # sched: [8:1.50]
11578; SKX-NEXT:    #NO_APP
11579; SKX-NEXT:    retq # sched: [7:1.00]
11580;
11581; BTVER2-LABEL: test_rol_ror_32:
11582; BTVER2:       # %bb.0:
11583; BTVER2-NEXT:    #APP
11584; BTVER2-NEXT:    roll %edi # sched: [1:0.50]
11585; BTVER2-NEXT:    rorl %edi # sched: [1:0.50]
11586; BTVER2-NEXT:    roll (%rdx) # sched: [4:1.00]
11587; BTVER2-NEXT:    rorl (%rdx) # sched: [4:1.00]
11588; BTVER2-NEXT:    roll $7, %edi # sched: [1:0.50]
11589; BTVER2-NEXT:    rorl $7, %edi # sched: [1:0.50]
11590; BTVER2-NEXT:    roll $7, (%rdx) # sched: [4:1.00]
11591; BTVER2-NEXT:    rorl $7, (%rdx) # sched: [4:1.00]
11592; BTVER2-NEXT:    roll %cl, %edi # sched: [1:0.50]
11593; BTVER2-NEXT:    rorl %cl, %edi # sched: [1:0.50]
11594; BTVER2-NEXT:    roll %cl, (%rdx) # sched: [4:1.00]
11595; BTVER2-NEXT:    rorl %cl, (%rdx) # sched: [4:1.00]
11596; BTVER2-NEXT:    #NO_APP
11597; BTVER2-NEXT:    retq # sched: [4:1.00]
11598;
11599; ZNVER1-LABEL: test_rol_ror_32:
11600; ZNVER1:       # %bb.0:
11601; ZNVER1-NEXT:    #APP
11602; ZNVER1-NEXT:    roll %edi # sched: [1:0.25]
11603; ZNVER1-NEXT:    rorl %edi # sched: [1:0.25]
11604; ZNVER1-NEXT:    roll (%rdx) # sched: [5:1.00]
11605; ZNVER1-NEXT:    rorl (%rdx) # sched: [5:1.00]
11606; ZNVER1-NEXT:    roll $7, %edi # sched: [1:0.25]
11607; ZNVER1-NEXT:    rorl $7, %edi # sched: [1:0.25]
11608; ZNVER1-NEXT:    roll $7, (%rdx) # sched: [5:1.00]
11609; ZNVER1-NEXT:    rorl $7, (%rdx) # sched: [5:1.00]
11610; ZNVER1-NEXT:    roll %cl, %edi # sched: [1:0.25]
11611; ZNVER1-NEXT:    rorl %cl, %edi # sched: [1:0.25]
11612; ZNVER1-NEXT:    roll %cl, (%rdx) # sched: [5:1.00]
11613; ZNVER1-NEXT:    rorl %cl, (%rdx) # sched: [5:1.00]
11614; ZNVER1-NEXT:    #NO_APP
11615; ZNVER1-NEXT:    retq # sched: [1:0.50]
11616  call void asm sideeffect "roll $0 \0A\09 rorl $0 \0A\09 roll $2 \0A\09 rorl $2 \0A\09 roll $3, $0 \0A\09 rorl $3, $0 \0A\09 roll $3, $2 \0A\09 rorl $3, $2 \0A\09 roll %CL, $0 \0A\09 rorl %CL, $0 \0A\09 roll %CL, $2 \0A\09 rorl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7)
11617  ret void
11618}
11619define void @test_rol_ror_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
11620; GENERIC-LABEL: test_rol_ror_64:
11621; GENERIC:       # %bb.0:
11622; GENERIC-NEXT:    #APP
11623; GENERIC-NEXT:    rolq %rdi # sched: [2:1.00]
11624; GENERIC-NEXT:    rorq %rdi # sched: [2:1.00]
11625; GENERIC-NEXT:    rolq (%rdx) # sched: [8:1.00]
11626; GENERIC-NEXT:    rorq (%rdx) # sched: [8:1.00]
11627; GENERIC-NEXT:    rolq $7, %rdi # sched: [2:1.00]
11628; GENERIC-NEXT:    rorq $7, %rdi # sched: [2:1.00]
11629; GENERIC-NEXT:    rolq $7, (%rdx) # sched: [8:1.00]
11630; GENERIC-NEXT:    rorq $7, (%rdx) # sched: [8:1.00]
11631; GENERIC-NEXT:    rolq %cl, %rdi # sched: [3:1.50]
11632; GENERIC-NEXT:    rorq %cl, %rdi # sched: [3:1.50]
11633; GENERIC-NEXT:    rolq %cl, (%rdx) # sched: [9:1.50]
11634; GENERIC-NEXT:    rorq %cl, (%rdx) # sched: [9:1.50]
11635; GENERIC-NEXT:    #NO_APP
11636; GENERIC-NEXT:    retq # sched: [1:1.00]
11637;
11638; ATOM-LABEL: test_rol_ror_64:
11639; ATOM:       # %bb.0:
11640; ATOM-NEXT:    #APP
11641; ATOM-NEXT:    rolq %rdi # sched: [1:1.00]
11642; ATOM-NEXT:    rorq %rdi # sched: [1:1.00]
11643; ATOM-NEXT:    rolq (%rdx) # sched: [1:1.00]
11644; ATOM-NEXT:    rorq (%rdx) # sched: [1:1.00]
11645; ATOM-NEXT:    rolq $7, %rdi # sched: [1:1.00]
11646; ATOM-NEXT:    rorq $7, %rdi # sched: [1:1.00]
11647; ATOM-NEXT:    rolq $7, (%rdx) # sched: [1:1.00]
11648; ATOM-NEXT:    rorq $7, (%rdx) # sched: [1:1.00]
11649; ATOM-NEXT:    rolq %cl, %rdi # sched: [1:1.00]
11650; ATOM-NEXT:    rorq %cl, %rdi # sched: [1:1.00]
11651; ATOM-NEXT:    rolq %cl, (%rdx) # sched: [1:1.00]
11652; ATOM-NEXT:    rorq %cl, (%rdx) # sched: [1:1.00]
11653; ATOM-NEXT:    #NO_APP
11654; ATOM-NEXT:    retq # sched: [79:39.50]
11655;
11656; SLM-LABEL: test_rol_ror_64:
11657; SLM:       # %bb.0:
11658; SLM-NEXT:    #APP
11659; SLM-NEXT:    rolq %rdi # sched: [1:1.00]
11660; SLM-NEXT:    rorq %rdi # sched: [1:1.00]
11661; SLM-NEXT:    rolq (%rdx) # sched: [4:2.00]
11662; SLM-NEXT:    rorq (%rdx) # sched: [4:2.00]
11663; SLM-NEXT:    rolq $7, %rdi # sched: [1:1.00]
11664; SLM-NEXT:    rorq $7, %rdi # sched: [1:1.00]
11665; SLM-NEXT:    rolq $7, (%rdx) # sched: [4:2.00]
11666; SLM-NEXT:    rorq $7, (%rdx) # sched: [4:2.00]
11667; SLM-NEXT:    rolq %cl, %rdi # sched: [1:1.00]
11668; SLM-NEXT:    rorq %cl, %rdi # sched: [1:1.00]
11669; SLM-NEXT:    rolq %cl, (%rdx) # sched: [4:2.00]
11670; SLM-NEXT:    rorq %cl, (%rdx) # sched: [4:2.00]
11671; SLM-NEXT:    #NO_APP
11672; SLM-NEXT:    retq # sched: [4:1.00]
11673;
11674; SANDY-LABEL: test_rol_ror_64:
11675; SANDY:       # %bb.0:
11676; SANDY-NEXT:    #APP
11677; SANDY-NEXT:    rolq %rdi # sched: [2:1.00]
11678; SANDY-NEXT:    rorq %rdi # sched: [2:1.00]
11679; SANDY-NEXT:    rolq (%rdx) # sched: [8:1.00]
11680; SANDY-NEXT:    rorq (%rdx) # sched: [8:1.00]
11681; SANDY-NEXT:    rolq $7, %rdi # sched: [2:1.00]
11682; SANDY-NEXT:    rorq $7, %rdi # sched: [2:1.00]
11683; SANDY-NEXT:    rolq $7, (%rdx) # sched: [8:1.00]
11684; SANDY-NEXT:    rorq $7, (%rdx) # sched: [8:1.00]
11685; SANDY-NEXT:    rolq %cl, %rdi # sched: [3:1.50]
11686; SANDY-NEXT:    rorq %cl, %rdi # sched: [3:1.50]
11687; SANDY-NEXT:    rolq %cl, (%rdx) # sched: [9:1.50]
11688; SANDY-NEXT:    rorq %cl, (%rdx) # sched: [9:1.50]
11689; SANDY-NEXT:    #NO_APP
11690; SANDY-NEXT:    retq # sched: [1:1.00]
11691;
11692; HASWELL-LABEL: test_rol_ror_64:
11693; HASWELL:       # %bb.0:
11694; HASWELL-NEXT:    #APP
11695; HASWELL-NEXT:    rolq %rdi # sched: [2:1.00]
11696; HASWELL-NEXT:    rorq %rdi # sched: [2:1.00]
11697; HASWELL-NEXT:    rolq (%rdx) # sched: [8:1.00]
11698; HASWELL-NEXT:    rorq (%rdx) # sched: [8:1.00]
11699; HASWELL-NEXT:    rolq $7, %rdi # sched: [2:1.00]
11700; HASWELL-NEXT:    rorq $7, %rdi # sched: [2:1.00]
11701; HASWELL-NEXT:    rolq $7, (%rdx) # sched: [8:1.00]
11702; HASWELL-NEXT:    rorq $7, (%rdx) # sched: [8:1.00]
11703; HASWELL-NEXT:    rolq %cl, %rdi # sched: [3:1.00]
11704; HASWELL-NEXT:    rorq %cl, %rdi # sched: [3:1.00]
11705; HASWELL-NEXT:    rolq %cl, (%rdx) # sched: [9:1.00]
11706; HASWELL-NEXT:    rorq %cl, (%rdx) # sched: [9:1.00]
11707; HASWELL-NEXT:    #NO_APP
11708; HASWELL-NEXT:    retq # sched: [7:1.00]
11709;
11710; BROADWELL-LABEL: test_rol_ror_64:
11711; BROADWELL:       # %bb.0:
11712; BROADWELL-NEXT:    #APP
11713; BROADWELL-NEXT:    rolq %rdi # sched: [2:1.00]
11714; BROADWELL-NEXT:    rorq %rdi # sched: [2:1.00]
11715; BROADWELL-NEXT:    rolq (%rdx) # sched: [7:1.00]
11716; BROADWELL-NEXT:    rorq (%rdx) # sched: [7:1.00]
11717; BROADWELL-NEXT:    rolq $7, %rdi # sched: [2:1.00]
11718; BROADWELL-NEXT:    rorq $7, %rdi # sched: [2:1.00]
11719; BROADWELL-NEXT:    rolq $7, (%rdx) # sched: [7:1.00]
11720; BROADWELL-NEXT:    rorq $7, (%rdx) # sched: [7:1.00]
11721; BROADWELL-NEXT:    rolq %cl, %rdi # sched: [3:1.00]
11722; BROADWELL-NEXT:    rorq %cl, %rdi # sched: [3:1.00]
11723; BROADWELL-NEXT:    rolq %cl, (%rdx) # sched: [8:1.00]
11724; BROADWELL-NEXT:    rorq %cl, (%rdx) # sched: [8:1.00]
11725; BROADWELL-NEXT:    #NO_APP
11726; BROADWELL-NEXT:    retq # sched: [7:1.00]
11727;
11728; SKYLAKE-LABEL: test_rol_ror_64:
11729; SKYLAKE:       # %bb.0:
11730; SKYLAKE-NEXT:    #APP
11731; SKYLAKE-NEXT:    rolq %rdi # sched: [2:1.00]
11732; SKYLAKE-NEXT:    rorq %rdi # sched: [2:1.00]
11733; SKYLAKE-NEXT:    rolq (%rdx) # sched: [7:1.00]
11734; SKYLAKE-NEXT:    rorq (%rdx) # sched: [7:1.00]
11735; SKYLAKE-NEXT:    rolq $7, %rdi # sched: [2:1.00]
11736; SKYLAKE-NEXT:    rorq $7, %rdi # sched: [2:1.00]
11737; SKYLAKE-NEXT:    rolq $7, (%rdx) # sched: [7:1.00]
11738; SKYLAKE-NEXT:    rorq $7, (%rdx) # sched: [7:1.00]
11739; SKYLAKE-NEXT:    rolq %cl, %rdi # sched: [3:1.50]
11740; SKYLAKE-NEXT:    rorq %cl, %rdi # sched: [3:1.50]
11741; SKYLAKE-NEXT:    rolq %cl, (%rdx) # sched: [8:1.50]
11742; SKYLAKE-NEXT:    rorq %cl, (%rdx) # sched: [8:1.50]
11743; SKYLAKE-NEXT:    #NO_APP
11744; SKYLAKE-NEXT:    retq # sched: [7:1.00]
11745;
11746; SKX-LABEL: test_rol_ror_64:
11747; SKX:       # %bb.0:
11748; SKX-NEXT:    #APP
11749; SKX-NEXT:    rolq %rdi # sched: [2:1.00]
11750; SKX-NEXT:    rorq %rdi # sched: [2:1.00]
11751; SKX-NEXT:    rolq (%rdx) # sched: [7:1.00]
11752; SKX-NEXT:    rorq (%rdx) # sched: [7:1.00]
11753; SKX-NEXT:    rolq $7, %rdi # sched: [2:1.00]
11754; SKX-NEXT:    rorq $7, %rdi # sched: [2:1.00]
11755; SKX-NEXT:    rolq $7, (%rdx) # sched: [7:1.00]
11756; SKX-NEXT:    rorq $7, (%rdx) # sched: [7:1.00]
11757; SKX-NEXT:    rolq %cl, %rdi # sched: [3:1.50]
11758; SKX-NEXT:    rorq %cl, %rdi # sched: [3:1.50]
11759; SKX-NEXT:    rolq %cl, (%rdx) # sched: [8:1.50]
11760; SKX-NEXT:    rorq %cl, (%rdx) # sched: [8:1.50]
11761; SKX-NEXT:    #NO_APP
11762; SKX-NEXT:    retq # sched: [7:1.00]
11763;
11764; BTVER2-LABEL: test_rol_ror_64:
11765; BTVER2:       # %bb.0:
11766; BTVER2-NEXT:    #APP
11767; BTVER2-NEXT:    rolq %rdi # sched: [1:0.50]
11768; BTVER2-NEXT:    rorq %rdi # sched: [1:0.50]
11769; BTVER2-NEXT:    rolq (%rdx) # sched: [4:1.00]
11770; BTVER2-NEXT:    rorq (%rdx) # sched: [4:1.00]
11771; BTVER2-NEXT:    rolq $7, %rdi # sched: [1:0.50]
11772; BTVER2-NEXT:    rorq $7, %rdi # sched: [1:0.50]
11773; BTVER2-NEXT:    rolq $7, (%rdx) # sched: [4:1.00]
11774; BTVER2-NEXT:    rorq $7, (%rdx) # sched: [4:1.00]
11775; BTVER2-NEXT:    rolq %cl, %rdi # sched: [1:0.50]
11776; BTVER2-NEXT:    rorq %cl, %rdi # sched: [1:0.50]
11777; BTVER2-NEXT:    rolq %cl, (%rdx) # sched: [4:1.00]
11778; BTVER2-NEXT:    rorq %cl, (%rdx) # sched: [4:1.00]
11779; BTVER2-NEXT:    #NO_APP
11780; BTVER2-NEXT:    retq # sched: [4:1.00]
11781;
11782; ZNVER1-LABEL: test_rol_ror_64:
11783; ZNVER1:       # %bb.0:
11784; ZNVER1-NEXT:    #APP
11785; ZNVER1-NEXT:    rolq %rdi # sched: [1:0.25]
11786; ZNVER1-NEXT:    rorq %rdi # sched: [1:0.25]
11787; ZNVER1-NEXT:    rolq (%rdx) # sched: [5:1.00]
11788; ZNVER1-NEXT:    rorq (%rdx) # sched: [5:1.00]
11789; ZNVER1-NEXT:    rolq $7, %rdi # sched: [1:0.25]
11790; ZNVER1-NEXT:    rorq $7, %rdi # sched: [1:0.25]
11791; ZNVER1-NEXT:    rolq $7, (%rdx) # sched: [5:1.00]
11792; ZNVER1-NEXT:    rorq $7, (%rdx) # sched: [5:1.00]
11793; ZNVER1-NEXT:    rolq %cl, %rdi # sched: [1:0.25]
11794; ZNVER1-NEXT:    rorq %cl, %rdi # sched: [1:0.25]
11795; ZNVER1-NEXT:    rolq %cl, (%rdx) # sched: [5:1.00]
11796; ZNVER1-NEXT:    rorq %cl, (%rdx) # sched: [5:1.00]
11797; ZNVER1-NEXT:    #NO_APP
11798; ZNVER1-NEXT:    retq # sched: [1:0.50]
11799  call void asm sideeffect "rolq $0 \0A\09 rorq $0 \0A\09 rolq $2 \0A\09 rorq $2 \0A\09 rolq $3, $0 \0A\09 rorq $3, $0 \0A\09 rolq $3, $2 \0A\09 rorq $3, $2 \0A\09 rolq %CL, $0 \0A\09 rorq %CL, $0 \0A\09 rolq %CL, $2 \0A\09 rorq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7)
11800  ret void
11801}
11802
11803define void @test_sar_shl_shr_8(i8 %a0, i8 %a1, i8 *%a2) optsize {
11804; GENERIC-LABEL: test_sar_shl_shr_8:
11805; GENERIC:       # %bb.0:
11806; GENERIC-NEXT:    #APP
11807; GENERIC-NEXT:    sarb %dil # sched: [1:0.50]
11808; GENERIC-NEXT:    shlb %dil # sched: [1:0.50]
11809; GENERIC-NEXT:    shrb %dil # sched: [1:0.50]
11810; GENERIC-NEXT:    sarb (%rdx) # sched: [7:1.00]
11811; GENERIC-NEXT:    shlb (%rdx) # sched: [7:1.00]
11812; GENERIC-NEXT:    shrb (%rdx) # sched: [7:1.00]
11813; GENERIC-NEXT:    sarb $7, %dil # sched: [1:0.50]
11814; GENERIC-NEXT:    shlb $7, %dil # sched: [1:0.50]
11815; GENERIC-NEXT:    shrb $7, %dil # sched: [1:0.50]
11816; GENERIC-NEXT:    sarb $7, (%rdx) # sched: [7:1.00]
11817; GENERIC-NEXT:    shlb $7, (%rdx) # sched: [7:1.00]
11818; GENERIC-NEXT:    shrb $7, (%rdx) # sched: [7:1.00]
11819; GENERIC-NEXT:    sarb %cl, %dil # sched: [3:1.50]
11820; GENERIC-NEXT:    shlb %cl, %dil # sched: [3:1.50]
11821; GENERIC-NEXT:    shrb %cl, %dil # sched: [3:1.50]
11822; GENERIC-NEXT:    sarb %cl, (%rdx) # sched: [9:1.50]
11823; GENERIC-NEXT:    shlb %cl, (%rdx) # sched: [9:1.50]
11824; GENERIC-NEXT:    shrb %cl, (%rdx) # sched: [9:1.50]
11825; GENERIC-NEXT:    #NO_APP
11826; GENERIC-NEXT:    retq # sched: [1:1.00]
11827;
11828; ATOM-LABEL: test_sar_shl_shr_8:
11829; ATOM:       # %bb.0:
11830; ATOM-NEXT:    #APP
11831; ATOM-NEXT:    sarb %dil # sched: [1:1.00]
11832; ATOM-NEXT:    shlb %dil # sched: [1:1.00]
11833; ATOM-NEXT:    shrb %dil # sched: [1:1.00]
11834; ATOM-NEXT:    sarb (%rdx) # sched: [1:1.00]
11835; ATOM-NEXT:    shlb (%rdx) # sched: [1:1.00]
11836; ATOM-NEXT:    shrb (%rdx) # sched: [1:1.00]
11837; ATOM-NEXT:    sarb $7, %dil # sched: [1:1.00]
11838; ATOM-NEXT:    shlb $7, %dil # sched: [1:1.00]
11839; ATOM-NEXT:    shrb $7, %dil # sched: [1:1.00]
11840; ATOM-NEXT:    sarb $7, (%rdx) # sched: [1:1.00]
11841; ATOM-NEXT:    shlb $7, (%rdx) # sched: [1:1.00]
11842; ATOM-NEXT:    shrb $7, (%rdx) # sched: [1:1.00]
11843; ATOM-NEXT:    sarb %cl, %dil # sched: [1:1.00]
11844; ATOM-NEXT:    shlb %cl, %dil # sched: [1:1.00]
11845; ATOM-NEXT:    shrb %cl, %dil # sched: [1:1.00]
11846; ATOM-NEXT:    sarb %cl, (%rdx) # sched: [1:1.00]
11847; ATOM-NEXT:    shlb %cl, (%rdx) # sched: [1:1.00]
11848; ATOM-NEXT:    shrb %cl, (%rdx) # sched: [1:1.00]
11849; ATOM-NEXT:    #NO_APP
11850; ATOM-NEXT:    retq # sched: [79:39.50]
11851;
11852; SLM-LABEL: test_sar_shl_shr_8:
11853; SLM:       # %bb.0:
11854; SLM-NEXT:    #APP
11855; SLM-NEXT:    sarb %dil # sched: [1:1.00]
11856; SLM-NEXT:    shlb %dil # sched: [1:1.00]
11857; SLM-NEXT:    shrb %dil # sched: [1:1.00]
11858; SLM-NEXT:    sarb (%rdx) # sched: [4:2.00]
11859; SLM-NEXT:    shlb (%rdx) # sched: [4:2.00]
11860; SLM-NEXT:    shrb (%rdx) # sched: [4:2.00]
11861; SLM-NEXT:    sarb $7, %dil # sched: [1:1.00]
11862; SLM-NEXT:    shlb $7, %dil # sched: [1:1.00]
11863; SLM-NEXT:    shrb $7, %dil # sched: [1:1.00]
11864; SLM-NEXT:    sarb $7, (%rdx) # sched: [4:2.00]
11865; SLM-NEXT:    shlb $7, (%rdx) # sched: [4:2.00]
11866; SLM-NEXT:    shrb $7, (%rdx) # sched: [4:2.00]
11867; SLM-NEXT:    sarb %cl, %dil # sched: [1:1.00]
11868; SLM-NEXT:    shlb %cl, %dil # sched: [1:1.00]
11869; SLM-NEXT:    shrb %cl, %dil # sched: [1:1.00]
11870; SLM-NEXT:    sarb %cl, (%rdx) # sched: [4:2.00]
11871; SLM-NEXT:    shlb %cl, (%rdx) # sched: [4:2.00]
11872; SLM-NEXT:    shrb %cl, (%rdx) # sched: [4:2.00]
11873; SLM-NEXT:    #NO_APP
11874; SLM-NEXT:    retq # sched: [4:1.00]
11875;
11876; SANDY-LABEL: test_sar_shl_shr_8:
11877; SANDY:       # %bb.0:
11878; SANDY-NEXT:    #APP
11879; SANDY-NEXT:    sarb %dil # sched: [1:0.50]
11880; SANDY-NEXT:    shlb %dil # sched: [1:0.50]
11881; SANDY-NEXT:    shrb %dil # sched: [1:0.50]
11882; SANDY-NEXT:    sarb (%rdx) # sched: [7:1.00]
11883; SANDY-NEXT:    shlb (%rdx) # sched: [7:1.00]
11884; SANDY-NEXT:    shrb (%rdx) # sched: [7:1.00]
11885; SANDY-NEXT:    sarb $7, %dil # sched: [1:0.50]
11886; SANDY-NEXT:    shlb $7, %dil # sched: [1:0.50]
11887; SANDY-NEXT:    shrb $7, %dil # sched: [1:0.50]
11888; SANDY-NEXT:    sarb $7, (%rdx) # sched: [7:1.00]
11889; SANDY-NEXT:    shlb $7, (%rdx) # sched: [7:1.00]
11890; SANDY-NEXT:    shrb $7, (%rdx) # sched: [7:1.00]
11891; SANDY-NEXT:    sarb %cl, %dil # sched: [3:1.50]
11892; SANDY-NEXT:    shlb %cl, %dil # sched: [3:1.50]
11893; SANDY-NEXT:    shrb %cl, %dil # sched: [3:1.50]
11894; SANDY-NEXT:    sarb %cl, (%rdx) # sched: [9:1.50]
11895; SANDY-NEXT:    shlb %cl, (%rdx) # sched: [9:1.50]
11896; SANDY-NEXT:    shrb %cl, (%rdx) # sched: [9:1.50]
11897; SANDY-NEXT:    #NO_APP
11898; SANDY-NEXT:    retq # sched: [1:1.00]
11899;
11900; HASWELL-LABEL: test_sar_shl_shr_8:
11901; HASWELL:       # %bb.0:
11902; HASWELL-NEXT:    #APP
11903; HASWELL-NEXT:    sarb %dil # sched: [1:0.50]
11904; HASWELL-NEXT:    shlb %dil # sched: [1:0.50]
11905; HASWELL-NEXT:    shrb %dil # sched: [1:0.50]
11906; HASWELL-NEXT:    sarb (%rdx) # sched: [7:1.00]
11907; HASWELL-NEXT:    shlb (%rdx) # sched: [7:1.00]
11908; HASWELL-NEXT:    shrb (%rdx) # sched: [7:1.00]
11909; HASWELL-NEXT:    sarb $7, %dil # sched: [1:0.50]
11910; HASWELL-NEXT:    shlb $7, %dil # sched: [1:0.50]
11911; HASWELL-NEXT:    shrb $7, %dil # sched: [1:0.50]
11912; HASWELL-NEXT:    sarb $7, (%rdx) # sched: [7:1.00]
11913; HASWELL-NEXT:    shlb $7, (%rdx) # sched: [7:1.00]
11914; HASWELL-NEXT:    shrb $7, (%rdx) # sched: [7:1.00]
11915; HASWELL-NEXT:    sarb %cl, %dil # sched: [3:1.00]
11916; HASWELL-NEXT:    shlb %cl, %dil # sched: [3:1.00]
11917; HASWELL-NEXT:    shrb %cl, %dil # sched: [3:1.00]
11918; HASWELL-NEXT:    sarb %cl, (%rdx) # sched: [9:1.00]
11919; HASWELL-NEXT:    shlb %cl, (%rdx) # sched: [9:1.00]
11920; HASWELL-NEXT:    shrb %cl, (%rdx) # sched: [9:1.00]
11921; HASWELL-NEXT:    #NO_APP
11922; HASWELL-NEXT:    retq # sched: [7:1.00]
11923;
11924; BROADWELL-LABEL: test_sar_shl_shr_8:
11925; BROADWELL:       # %bb.0:
11926; BROADWELL-NEXT:    #APP
11927; BROADWELL-NEXT:    sarb %dil # sched: [1:0.50]
11928; BROADWELL-NEXT:    shlb %dil # sched: [1:0.50]
11929; BROADWELL-NEXT:    shrb %dil # sched: [1:0.50]
11930; BROADWELL-NEXT:    sarb (%rdx) # sched: [6:1.00]
11931; BROADWELL-NEXT:    shlb (%rdx) # sched: [6:1.00]
11932; BROADWELL-NEXT:    shrb (%rdx) # sched: [6:1.00]
11933; BROADWELL-NEXT:    sarb $7, %dil # sched: [1:0.50]
11934; BROADWELL-NEXT:    shlb $7, %dil # sched: [1:0.50]
11935; BROADWELL-NEXT:    shrb $7, %dil # sched: [1:0.50]
11936; BROADWELL-NEXT:    sarb $7, (%rdx) # sched: [6:1.00]
11937; BROADWELL-NEXT:    shlb $7, (%rdx) # sched: [6:1.00]
11938; BROADWELL-NEXT:    shrb $7, (%rdx) # sched: [6:1.00]
11939; BROADWELL-NEXT:    sarb %cl, %dil # sched: [3:1.00]
11940; BROADWELL-NEXT:    shlb %cl, %dil # sched: [3:1.00]
11941; BROADWELL-NEXT:    shrb %cl, %dil # sched: [3:1.00]
11942; BROADWELL-NEXT:    sarb %cl, (%rdx) # sched: [8:1.00]
11943; BROADWELL-NEXT:    shlb %cl, (%rdx) # sched: [8:1.00]
11944; BROADWELL-NEXT:    shrb %cl, (%rdx) # sched: [8:1.00]
11945; BROADWELL-NEXT:    #NO_APP
11946; BROADWELL-NEXT:    retq # sched: [7:1.00]
11947;
11948; SKYLAKE-LABEL: test_sar_shl_shr_8:
11949; SKYLAKE:       # %bb.0:
11950; SKYLAKE-NEXT:    #APP
11951; SKYLAKE-NEXT:    sarb %dil # sched: [1:0.50]
11952; SKYLAKE-NEXT:    shlb %dil # sched: [1:0.50]
11953; SKYLAKE-NEXT:    shrb %dil # sched: [1:0.50]
11954; SKYLAKE-NEXT:    sarb (%rdx) # sched: [6:1.00]
11955; SKYLAKE-NEXT:    shlb (%rdx) # sched: [6:1.00]
11956; SKYLAKE-NEXT:    shrb (%rdx) # sched: [6:1.00]
11957; SKYLAKE-NEXT:    sarb $7, %dil # sched: [1:0.50]
11958; SKYLAKE-NEXT:    shlb $7, %dil # sched: [1:0.50]
11959; SKYLAKE-NEXT:    shrb $7, %dil # sched: [1:0.50]
11960; SKYLAKE-NEXT:    sarb $7, (%rdx) # sched: [6:1.00]
11961; SKYLAKE-NEXT:    shlb $7, (%rdx) # sched: [6:1.00]
11962; SKYLAKE-NEXT:    shrb $7, (%rdx) # sched: [6:1.00]
11963; SKYLAKE-NEXT:    sarb %cl, %dil # sched: [3:1.50]
11964; SKYLAKE-NEXT:    shlb %cl, %dil # sched: [3:1.50]
11965; SKYLAKE-NEXT:    shrb %cl, %dil # sched: [3:1.50]
11966; SKYLAKE-NEXT:    sarb %cl, (%rdx) # sched: [8:1.50]
11967; SKYLAKE-NEXT:    shlb %cl, (%rdx) # sched: [8:1.50]
11968; SKYLAKE-NEXT:    shrb %cl, (%rdx) # sched: [8:1.50]
11969; SKYLAKE-NEXT:    #NO_APP
11970; SKYLAKE-NEXT:    retq # sched: [7:1.00]
11971;
11972; SKX-LABEL: test_sar_shl_shr_8:
11973; SKX:       # %bb.0:
11974; SKX-NEXT:    #APP
11975; SKX-NEXT:    sarb %dil # sched: [1:0.50]
11976; SKX-NEXT:    shlb %dil # sched: [1:0.50]
11977; SKX-NEXT:    shrb %dil # sched: [1:0.50]
11978; SKX-NEXT:    sarb (%rdx) # sched: [6:1.00]
11979; SKX-NEXT:    shlb (%rdx) # sched: [6:1.00]
11980; SKX-NEXT:    shrb (%rdx) # sched: [6:1.00]
11981; SKX-NEXT:    sarb $7, %dil # sched: [1:0.50]
11982; SKX-NEXT:    shlb $7, %dil # sched: [1:0.50]
11983; SKX-NEXT:    shrb $7, %dil # sched: [1:0.50]
11984; SKX-NEXT:    sarb $7, (%rdx) # sched: [6:1.00]
11985; SKX-NEXT:    shlb $7, (%rdx) # sched: [6:1.00]
11986; SKX-NEXT:    shrb $7, (%rdx) # sched: [6:1.00]
11987; SKX-NEXT:    sarb %cl, %dil # sched: [3:1.50]
11988; SKX-NEXT:    shlb %cl, %dil # sched: [3:1.50]
11989; SKX-NEXT:    shrb %cl, %dil # sched: [3:1.50]
11990; SKX-NEXT:    sarb %cl, (%rdx) # sched: [8:1.50]
11991; SKX-NEXT:    shlb %cl, (%rdx) # sched: [8:1.50]
11992; SKX-NEXT:    shrb %cl, (%rdx) # sched: [8:1.50]
11993; SKX-NEXT:    #NO_APP
11994; SKX-NEXT:    retq # sched: [7:1.00]
11995;
11996; BTVER2-LABEL: test_sar_shl_shr_8:
11997; BTVER2:       # %bb.0:
11998; BTVER2-NEXT:    #APP
11999; BTVER2-NEXT:    sarb %dil # sched: [1:0.50]
12000; BTVER2-NEXT:    shlb %dil # sched: [1:0.50]
12001; BTVER2-NEXT:    shrb %dil # sched: [1:0.50]
12002; BTVER2-NEXT:    sarb (%rdx) # sched: [4:1.00]
12003; BTVER2-NEXT:    shlb (%rdx) # sched: [4:1.00]
12004; BTVER2-NEXT:    shrb (%rdx) # sched: [4:1.00]
12005; BTVER2-NEXT:    sarb $7, %dil # sched: [1:0.50]
12006; BTVER2-NEXT:    shlb $7, %dil # sched: [1:0.50]
12007; BTVER2-NEXT:    shrb $7, %dil # sched: [1:0.50]
12008; BTVER2-NEXT:    sarb $7, (%rdx) # sched: [4:1.00]
12009; BTVER2-NEXT:    shlb $7, (%rdx) # sched: [4:1.00]
12010; BTVER2-NEXT:    shrb $7, (%rdx) # sched: [4:1.00]
12011; BTVER2-NEXT:    sarb %cl, %dil # sched: [1:0.50]
12012; BTVER2-NEXT:    shlb %cl, %dil # sched: [1:0.50]
12013; BTVER2-NEXT:    shrb %cl, %dil # sched: [1:0.50]
12014; BTVER2-NEXT:    sarb %cl, (%rdx) # sched: [4:1.00]
12015; BTVER2-NEXT:    shlb %cl, (%rdx) # sched: [4:1.00]
12016; BTVER2-NEXT:    shrb %cl, (%rdx) # sched: [4:1.00]
12017; BTVER2-NEXT:    #NO_APP
12018; BTVER2-NEXT:    retq # sched: [4:1.00]
12019;
12020; ZNVER1-LABEL: test_sar_shl_shr_8:
12021; ZNVER1:       # %bb.0:
12022; ZNVER1-NEXT:    #APP
12023; ZNVER1-NEXT:    sarb %dil # sched: [1:0.25]
12024; ZNVER1-NEXT:    shlb %dil # sched: [1:0.25]
12025; ZNVER1-NEXT:    shrb %dil # sched: [1:0.25]
12026; ZNVER1-NEXT:    sarb (%rdx) # sched: [5:0.50]
12027; ZNVER1-NEXT:    shlb (%rdx) # sched: [5:0.50]
12028; ZNVER1-NEXT:    shrb (%rdx) # sched: [5:0.50]
12029; ZNVER1-NEXT:    sarb $7, %dil # sched: [1:0.25]
12030; ZNVER1-NEXT:    shlb $7, %dil # sched: [1:0.25]
12031; ZNVER1-NEXT:    shrb $7, %dil # sched: [1:0.25]
12032; ZNVER1-NEXT:    sarb $7, (%rdx) # sched: [5:0.50]
12033; ZNVER1-NEXT:    shlb $7, (%rdx) # sched: [5:0.50]
12034; ZNVER1-NEXT:    shrb $7, (%rdx) # sched: [5:0.50]
12035; ZNVER1-NEXT:    sarb %cl, %dil # sched: [1:0.25]
12036; ZNVER1-NEXT:    shlb %cl, %dil # sched: [1:0.25]
12037; ZNVER1-NEXT:    shrb %cl, %dil # sched: [1:0.25]
12038; ZNVER1-NEXT:    sarb %cl, (%rdx) # sched: [5:1.00]
12039; ZNVER1-NEXT:    shlb %cl, (%rdx) # sched: [5:1.00]
12040; ZNVER1-NEXT:    shrb %cl, (%rdx) # sched: [5:1.00]
12041; ZNVER1-NEXT:    #NO_APP
12042; ZNVER1-NEXT:    retq # sched: [1:0.50]
12043  call void asm sideeffect "sarb $0 \0A\09 shlb $0 \0A\09 shrb $0 \0A\09 sarb $2 \0A\09 shlb $2 \0A\09 shrb $2 \0A\09 sarb $3, $0 \0A\09 shlb $3, $0 \0A\09 shrb $3, $0 \0A\09 sarb $3, $2 \0A\09 shlb $3, $2 \0A\09 shrb $3, $2 \0A\09 sarb %CL, $0 \0A\09 shlb %CL, $0 \0A\09 shrb %CL, $0 \0A\09 sarb %CL, $2  \0A\09 shlb %CL, $2 \0A\09 shrb %CL, $2", "r,r,*m,i"(i8 %a0, i8 %a1, i8 *%a2, i8 7)
12044  ret void
12045}
12046define void @test_sar_shl_shr_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
12047; GENERIC-LABEL: test_sar_shl_shr_16:
12048; GENERIC:       # %bb.0:
12049; GENERIC-NEXT:    #APP
12050; GENERIC-NEXT:    sarw %di # sched: [1:0.50]
12051; GENERIC-NEXT:    shlw %di # sched: [1:0.50]
12052; GENERIC-NEXT:    shrw %di # sched: [1:0.50]
12053; GENERIC-NEXT:    sarw (%rdx) # sched: [7:1.00]
12054; GENERIC-NEXT:    shlw (%rdx) # sched: [7:1.00]
12055; GENERIC-NEXT:    shrw (%rdx) # sched: [7:1.00]
12056; GENERIC-NEXT:    sarw $7, %di # sched: [1:0.50]
12057; GENERIC-NEXT:    shlw $7, %di # sched: [1:0.50]
12058; GENERIC-NEXT:    shrw $7, %di # sched: [1:0.50]
12059; GENERIC-NEXT:    sarw $7, (%rdx) # sched: [7:1.00]
12060; GENERIC-NEXT:    shlw $7, (%rdx) # sched: [7:1.00]
12061; GENERIC-NEXT:    shrw $7, (%rdx) # sched: [7:1.00]
12062; GENERIC-NEXT:    sarw %cl, %di # sched: [3:1.50]
12063; GENERIC-NEXT:    shlw %cl, %di # sched: [3:1.50]
12064; GENERIC-NEXT:    shrw %cl, %di # sched: [3:1.50]
12065; GENERIC-NEXT:    sarw %cl, (%rdx) # sched: [9:1.50]
12066; GENERIC-NEXT:    shlw %cl, (%rdx) # sched: [9:1.50]
12067; GENERIC-NEXT:    shrw %cl, (%rdx) # sched: [9:1.50]
12068; GENERIC-NEXT:    #NO_APP
12069; GENERIC-NEXT:    retq # sched: [1:1.00]
12070;
12071; ATOM-LABEL: test_sar_shl_shr_16:
12072; ATOM:       # %bb.0:
12073; ATOM-NEXT:    #APP
12074; ATOM-NEXT:    sarw %di # sched: [1:1.00]
12075; ATOM-NEXT:    shlw %di # sched: [1:1.00]
12076; ATOM-NEXT:    shrw %di # sched: [1:1.00]
12077; ATOM-NEXT:    sarw (%rdx) # sched: [1:1.00]
12078; ATOM-NEXT:    shlw (%rdx) # sched: [1:1.00]
12079; ATOM-NEXT:    shrw (%rdx) # sched: [1:1.00]
12080; ATOM-NEXT:    sarw $7, %di # sched: [1:1.00]
12081; ATOM-NEXT:    shlw $7, %di # sched: [1:1.00]
12082; ATOM-NEXT:    shrw $7, %di # sched: [1:1.00]
12083; ATOM-NEXT:    sarw $7, (%rdx) # sched: [1:1.00]
12084; ATOM-NEXT:    shlw $7, (%rdx) # sched: [1:1.00]
12085; ATOM-NEXT:    shrw $7, (%rdx) # sched: [1:1.00]
12086; ATOM-NEXT:    sarw %cl, %di # sched: [1:1.00]
12087; ATOM-NEXT:    shlw %cl, %di # sched: [1:1.00]
12088; ATOM-NEXT:    shrw %cl, %di # sched: [1:1.00]
12089; ATOM-NEXT:    sarw %cl, (%rdx) # sched: [1:1.00]
12090; ATOM-NEXT:    shlw %cl, (%rdx) # sched: [1:1.00]
12091; ATOM-NEXT:    shrw %cl, (%rdx) # sched: [1:1.00]
12092; ATOM-NEXT:    #NO_APP
12093; ATOM-NEXT:    retq # sched: [79:39.50]
12094;
12095; SLM-LABEL: test_sar_shl_shr_16:
12096; SLM:       # %bb.0:
12097; SLM-NEXT:    #APP
12098; SLM-NEXT:    sarw %di # sched: [1:1.00]
12099; SLM-NEXT:    shlw %di # sched: [1:1.00]
12100; SLM-NEXT:    shrw %di # sched: [1:1.00]
12101; SLM-NEXT:    sarw (%rdx) # sched: [4:2.00]
12102; SLM-NEXT:    shlw (%rdx) # sched: [4:2.00]
12103; SLM-NEXT:    shrw (%rdx) # sched: [4:2.00]
12104; SLM-NEXT:    sarw $7, %di # sched: [1:1.00]
12105; SLM-NEXT:    shlw $7, %di # sched: [1:1.00]
12106; SLM-NEXT:    shrw $7, %di # sched: [1:1.00]
12107; SLM-NEXT:    sarw $7, (%rdx) # sched: [4:2.00]
12108; SLM-NEXT:    shlw $7, (%rdx) # sched: [4:2.00]
12109; SLM-NEXT:    shrw $7, (%rdx) # sched: [4:2.00]
12110; SLM-NEXT:    sarw %cl, %di # sched: [1:1.00]
12111; SLM-NEXT:    shlw %cl, %di # sched: [1:1.00]
12112; SLM-NEXT:    shrw %cl, %di # sched: [1:1.00]
12113; SLM-NEXT:    sarw %cl, (%rdx) # sched: [4:2.00]
12114; SLM-NEXT:    shlw %cl, (%rdx) # sched: [4:2.00]
12115; SLM-NEXT:    shrw %cl, (%rdx) # sched: [4:2.00]
12116; SLM-NEXT:    #NO_APP
12117; SLM-NEXT:    retq # sched: [4:1.00]
12118;
12119; SANDY-LABEL: test_sar_shl_shr_16:
12120; SANDY:       # %bb.0:
12121; SANDY-NEXT:    #APP
12122; SANDY-NEXT:    sarw %di # sched: [1:0.50]
12123; SANDY-NEXT:    shlw %di # sched: [1:0.50]
12124; SANDY-NEXT:    shrw %di # sched: [1:0.50]
12125; SANDY-NEXT:    sarw (%rdx) # sched: [7:1.00]
12126; SANDY-NEXT:    shlw (%rdx) # sched: [7:1.00]
12127; SANDY-NEXT:    shrw (%rdx) # sched: [7:1.00]
12128; SANDY-NEXT:    sarw $7, %di # sched: [1:0.50]
12129; SANDY-NEXT:    shlw $7, %di # sched: [1:0.50]
12130; SANDY-NEXT:    shrw $7, %di # sched: [1:0.50]
12131; SANDY-NEXT:    sarw $7, (%rdx) # sched: [7:1.00]
12132; SANDY-NEXT:    shlw $7, (%rdx) # sched: [7:1.00]
12133; SANDY-NEXT:    shrw $7, (%rdx) # sched: [7:1.00]
12134; SANDY-NEXT:    sarw %cl, %di # sched: [3:1.50]
12135; SANDY-NEXT:    shlw %cl, %di # sched: [3:1.50]
12136; SANDY-NEXT:    shrw %cl, %di # sched: [3:1.50]
12137; SANDY-NEXT:    sarw %cl, (%rdx) # sched: [9:1.50]
12138; SANDY-NEXT:    shlw %cl, (%rdx) # sched: [9:1.50]
12139; SANDY-NEXT:    shrw %cl, (%rdx) # sched: [9:1.50]
12140; SANDY-NEXT:    #NO_APP
12141; SANDY-NEXT:    retq # sched: [1:1.00]
12142;
12143; HASWELL-LABEL: test_sar_shl_shr_16:
12144; HASWELL:       # %bb.0:
12145; HASWELL-NEXT:    #APP
12146; HASWELL-NEXT:    sarw %di # sched: [1:0.50]
12147; HASWELL-NEXT:    shlw %di # sched: [1:0.50]
12148; HASWELL-NEXT:    shrw %di # sched: [1:0.50]
12149; HASWELL-NEXT:    sarw (%rdx) # sched: [7:1.00]
12150; HASWELL-NEXT:    shlw (%rdx) # sched: [7:1.00]
12151; HASWELL-NEXT:    shrw (%rdx) # sched: [7:1.00]
12152; HASWELL-NEXT:    sarw $7, %di # sched: [1:0.50]
12153; HASWELL-NEXT:    shlw $7, %di # sched: [1:0.50]
12154; HASWELL-NEXT:    shrw $7, %di # sched: [1:0.50]
12155; HASWELL-NEXT:    sarw $7, (%rdx) # sched: [7:1.00]
12156; HASWELL-NEXT:    shlw $7, (%rdx) # sched: [7:1.00]
12157; HASWELL-NEXT:    shrw $7, (%rdx) # sched: [7:1.00]
12158; HASWELL-NEXT:    sarw %cl, %di # sched: [3:1.00]
12159; HASWELL-NEXT:    shlw %cl, %di # sched: [3:1.00]
12160; HASWELL-NEXT:    shrw %cl, %di # sched: [3:1.00]
12161; HASWELL-NEXT:    sarw %cl, (%rdx) # sched: [9:1.00]
12162; HASWELL-NEXT:    shlw %cl, (%rdx) # sched: [9:1.00]
12163; HASWELL-NEXT:    shrw %cl, (%rdx) # sched: [9:1.00]
12164; HASWELL-NEXT:    #NO_APP
12165; HASWELL-NEXT:    retq # sched: [7:1.00]
12166;
12167; BROADWELL-LABEL: test_sar_shl_shr_16:
12168; BROADWELL:       # %bb.0:
12169; BROADWELL-NEXT:    #APP
12170; BROADWELL-NEXT:    sarw %di # sched: [1:0.50]
12171; BROADWELL-NEXT:    shlw %di # sched: [1:0.50]
12172; BROADWELL-NEXT:    shrw %di # sched: [1:0.50]
12173; BROADWELL-NEXT:    sarw (%rdx) # sched: [6:1.00]
12174; BROADWELL-NEXT:    shlw (%rdx) # sched: [6:1.00]
12175; BROADWELL-NEXT:    shrw (%rdx) # sched: [6:1.00]
12176; BROADWELL-NEXT:    sarw $7, %di # sched: [1:0.50]
12177; BROADWELL-NEXT:    shlw $7, %di # sched: [1:0.50]
12178; BROADWELL-NEXT:    shrw $7, %di # sched: [1:0.50]
12179; BROADWELL-NEXT:    sarw $7, (%rdx) # sched: [6:1.00]
12180; BROADWELL-NEXT:    shlw $7, (%rdx) # sched: [6:1.00]
12181; BROADWELL-NEXT:    shrw $7, (%rdx) # sched: [6:1.00]
12182; BROADWELL-NEXT:    sarw %cl, %di # sched: [3:1.00]
12183; BROADWELL-NEXT:    shlw %cl, %di # sched: [3:1.00]
12184; BROADWELL-NEXT:    shrw %cl, %di # sched: [3:1.00]
12185; BROADWELL-NEXT:    sarw %cl, (%rdx) # sched: [8:1.00]
12186; BROADWELL-NEXT:    shlw %cl, (%rdx) # sched: [8:1.00]
12187; BROADWELL-NEXT:    shrw %cl, (%rdx) # sched: [8:1.00]
12188; BROADWELL-NEXT:    #NO_APP
12189; BROADWELL-NEXT:    retq # sched: [7:1.00]
12190;
12191; SKYLAKE-LABEL: test_sar_shl_shr_16:
12192; SKYLAKE:       # %bb.0:
12193; SKYLAKE-NEXT:    #APP
12194; SKYLAKE-NEXT:    sarw %di # sched: [1:0.50]
12195; SKYLAKE-NEXT:    shlw %di # sched: [1:0.50]
12196; SKYLAKE-NEXT:    shrw %di # sched: [1:0.50]
12197; SKYLAKE-NEXT:    sarw (%rdx) # sched: [6:1.00]
12198; SKYLAKE-NEXT:    shlw (%rdx) # sched: [6:1.00]
12199; SKYLAKE-NEXT:    shrw (%rdx) # sched: [6:1.00]
12200; SKYLAKE-NEXT:    sarw $7, %di # sched: [1:0.50]
12201; SKYLAKE-NEXT:    shlw $7, %di # sched: [1:0.50]
12202; SKYLAKE-NEXT:    shrw $7, %di # sched: [1:0.50]
12203; SKYLAKE-NEXT:    sarw $7, (%rdx) # sched: [6:1.00]
12204; SKYLAKE-NEXT:    shlw $7, (%rdx) # sched: [6:1.00]
12205; SKYLAKE-NEXT:    shrw $7, (%rdx) # sched: [6:1.00]
12206; SKYLAKE-NEXT:    sarw %cl, %di # sched: [3:1.50]
12207; SKYLAKE-NEXT:    shlw %cl, %di # sched: [3:1.50]
12208; SKYLAKE-NEXT:    shrw %cl, %di # sched: [3:1.50]
12209; SKYLAKE-NEXT:    sarw %cl, (%rdx) # sched: [8:1.50]
12210; SKYLAKE-NEXT:    shlw %cl, (%rdx) # sched: [8:1.50]
12211; SKYLAKE-NEXT:    shrw %cl, (%rdx) # sched: [8:1.50]
12212; SKYLAKE-NEXT:    #NO_APP
12213; SKYLAKE-NEXT:    retq # sched: [7:1.00]
12214;
12215; SKX-LABEL: test_sar_shl_shr_16:
12216; SKX:       # %bb.0:
12217; SKX-NEXT:    #APP
12218; SKX-NEXT:    sarw %di # sched: [1:0.50]
12219; SKX-NEXT:    shlw %di # sched: [1:0.50]
12220; SKX-NEXT:    shrw %di # sched: [1:0.50]
12221; SKX-NEXT:    sarw (%rdx) # sched: [6:1.00]
12222; SKX-NEXT:    shlw (%rdx) # sched: [6:1.00]
12223; SKX-NEXT:    shrw (%rdx) # sched: [6:1.00]
12224; SKX-NEXT:    sarw $7, %di # sched: [1:0.50]
12225; SKX-NEXT:    shlw $7, %di # sched: [1:0.50]
12226; SKX-NEXT:    shrw $7, %di # sched: [1:0.50]
12227; SKX-NEXT:    sarw $7, (%rdx) # sched: [6:1.00]
12228; SKX-NEXT:    shlw $7, (%rdx) # sched: [6:1.00]
12229; SKX-NEXT:    shrw $7, (%rdx) # sched: [6:1.00]
12230; SKX-NEXT:    sarw %cl, %di # sched: [3:1.50]
12231; SKX-NEXT:    shlw %cl, %di # sched: [3:1.50]
12232; SKX-NEXT:    shrw %cl, %di # sched: [3:1.50]
12233; SKX-NEXT:    sarw %cl, (%rdx) # sched: [8:1.50]
12234; SKX-NEXT:    shlw %cl, (%rdx) # sched: [8:1.50]
12235; SKX-NEXT:    shrw %cl, (%rdx) # sched: [8:1.50]
12236; SKX-NEXT:    #NO_APP
12237; SKX-NEXT:    retq # sched: [7:1.00]
12238;
12239; BTVER2-LABEL: test_sar_shl_shr_16:
12240; BTVER2:       # %bb.0:
12241; BTVER2-NEXT:    #APP
12242; BTVER2-NEXT:    sarw %di # sched: [1:0.50]
12243; BTVER2-NEXT:    shlw %di # sched: [1:0.50]
12244; BTVER2-NEXT:    shrw %di # sched: [1:0.50]
12245; BTVER2-NEXT:    sarw (%rdx) # sched: [4:1.00]
12246; BTVER2-NEXT:    shlw (%rdx) # sched: [4:1.00]
12247; BTVER2-NEXT:    shrw (%rdx) # sched: [4:1.00]
12248; BTVER2-NEXT:    sarw $7, %di # sched: [1:0.50]
12249; BTVER2-NEXT:    shlw $7, %di # sched: [1:0.50]
12250; BTVER2-NEXT:    shrw $7, %di # sched: [1:0.50]
12251; BTVER2-NEXT:    sarw $7, (%rdx) # sched: [4:1.00]
12252; BTVER2-NEXT:    shlw $7, (%rdx) # sched: [4:1.00]
12253; BTVER2-NEXT:    shrw $7, (%rdx) # sched: [4:1.00]
12254; BTVER2-NEXT:    sarw %cl, %di # sched: [1:0.50]
12255; BTVER2-NEXT:    shlw %cl, %di # sched: [1:0.50]
12256; BTVER2-NEXT:    shrw %cl, %di # sched: [1:0.50]
12257; BTVER2-NEXT:    sarw %cl, (%rdx) # sched: [4:1.00]
12258; BTVER2-NEXT:    shlw %cl, (%rdx) # sched: [4:1.00]
12259; BTVER2-NEXT:    shrw %cl, (%rdx) # sched: [4:1.00]
12260; BTVER2-NEXT:    #NO_APP
12261; BTVER2-NEXT:    retq # sched: [4:1.00]
12262;
12263; ZNVER1-LABEL: test_sar_shl_shr_16:
12264; ZNVER1:       # %bb.0:
12265; ZNVER1-NEXT:    #APP
12266; ZNVER1-NEXT:    sarw %di # sched: [1:0.25]
12267; ZNVER1-NEXT:    shlw %di # sched: [1:0.25]
12268; ZNVER1-NEXT:    shrw %di # sched: [1:0.25]
12269; ZNVER1-NEXT:    sarw (%rdx) # sched: [5:0.50]
12270; ZNVER1-NEXT:    shlw (%rdx) # sched: [5:0.50]
12271; ZNVER1-NEXT:    shrw (%rdx) # sched: [5:0.50]
12272; ZNVER1-NEXT:    sarw $7, %di # sched: [1:0.25]
12273; ZNVER1-NEXT:    shlw $7, %di # sched: [1:0.25]
12274; ZNVER1-NEXT:    shrw $7, %di # sched: [1:0.25]
12275; ZNVER1-NEXT:    sarw $7, (%rdx) # sched: [5:0.50]
12276; ZNVER1-NEXT:    shlw $7, (%rdx) # sched: [5:0.50]
12277; ZNVER1-NEXT:    shrw $7, (%rdx) # sched: [5:0.50]
12278; ZNVER1-NEXT:    sarw %cl, %di # sched: [1:0.25]
12279; ZNVER1-NEXT:    shlw %cl, %di # sched: [1:0.25]
12280; ZNVER1-NEXT:    shrw %cl, %di # sched: [1:0.25]
12281; ZNVER1-NEXT:    sarw %cl, (%rdx) # sched: [5:1.00]
12282; ZNVER1-NEXT:    shlw %cl, (%rdx) # sched: [5:1.00]
12283; ZNVER1-NEXT:    shrw %cl, (%rdx) # sched: [5:1.00]
12284; ZNVER1-NEXT:    #NO_APP
12285; ZNVER1-NEXT:    retq # sched: [1:0.50]
12286  call void asm sideeffect "sarw $0 \0A\09 shlw $0 \0A\09 shrw $0 \0A\09 sarw $2 \0A\09 shlw $2 \0A\09 shrw $2 \0A\09 sarw $3, $0 \0A\09 shlw $3, $0 \0A\09 shrw $3, $0 \0A\09 sarw $3, $2 \0A\09 shlw $3, $2 \0A\09 shrw $3, $2 \0A\09 sarw %CL, $0 \0A\09 shlw %CL, $0 \0A\09 shrw %CL, $0 \0A\09 sarw %CL, $2  \0A\09 shlw %CL, $2 \0A\09 shrw %CL, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7)
12287  ret void
12288}
12289define void @test_sar_shl_shr_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
12290; GENERIC-LABEL: test_sar_shl_shr_32:
12291; GENERIC:       # %bb.0:
12292; GENERIC-NEXT:    #APP
12293; GENERIC-NEXT:    sarl %edi # sched: [1:0.50]
12294; GENERIC-NEXT:    shll %edi # sched: [1:0.50]
12295; GENERIC-NEXT:    shrl %edi # sched: [1:0.50]
12296; GENERIC-NEXT:    sarl (%rdx) # sched: [7:1.00]
12297; GENERIC-NEXT:    shll (%rdx) # sched: [7:1.00]
12298; GENERIC-NEXT:    shrl (%rdx) # sched: [7:1.00]
12299; GENERIC-NEXT:    sarl $7, %edi # sched: [1:0.50]
12300; GENERIC-NEXT:    shll $7, %edi # sched: [1:0.50]
12301; GENERIC-NEXT:    shrl $7, %edi # sched: [1:0.50]
12302; GENERIC-NEXT:    sarl $7, (%rdx) # sched: [7:1.00]
12303; GENERIC-NEXT:    shll $7, (%rdx) # sched: [7:1.00]
12304; GENERIC-NEXT:    shrl $7, (%rdx) # sched: [7:1.00]
12305; GENERIC-NEXT:    sarl %cl, %edi # sched: [3:1.50]
12306; GENERIC-NEXT:    shll %cl, %edi # sched: [3:1.50]
12307; GENERIC-NEXT:    shrl %cl, %edi # sched: [3:1.50]
12308; GENERIC-NEXT:    sarl %cl, (%rdx) # sched: [9:1.50]
12309; GENERIC-NEXT:    shll %cl, (%rdx) # sched: [9:1.50]
12310; GENERIC-NEXT:    shrl %cl, (%rdx) # sched: [9:1.50]
12311; GENERIC-NEXT:    #NO_APP
12312; GENERIC-NEXT:    retq # sched: [1:1.00]
12313;
12314; ATOM-LABEL: test_sar_shl_shr_32:
12315; ATOM:       # %bb.0:
12316; ATOM-NEXT:    #APP
12317; ATOM-NEXT:    sarl %edi # sched: [1:1.00]
12318; ATOM-NEXT:    shll %edi # sched: [1:1.00]
12319; ATOM-NEXT:    shrl %edi # sched: [1:1.00]
12320; ATOM-NEXT:    sarl (%rdx) # sched: [1:1.00]
12321; ATOM-NEXT:    shll (%rdx) # sched: [1:1.00]
12322; ATOM-NEXT:    shrl (%rdx) # sched: [1:1.00]
12323; ATOM-NEXT:    sarl $7, %edi # sched: [1:1.00]
12324; ATOM-NEXT:    shll $7, %edi # sched: [1:1.00]
12325; ATOM-NEXT:    shrl $7, %edi # sched: [1:1.00]
12326; ATOM-NEXT:    sarl $7, (%rdx) # sched: [1:1.00]
12327; ATOM-NEXT:    shll $7, (%rdx) # sched: [1:1.00]
12328; ATOM-NEXT:    shrl $7, (%rdx) # sched: [1:1.00]
12329; ATOM-NEXT:    sarl %cl, %edi # sched: [1:1.00]
12330; ATOM-NEXT:    shll %cl, %edi # sched: [1:1.00]
12331; ATOM-NEXT:    shrl %cl, %edi # sched: [1:1.00]
12332; ATOM-NEXT:    sarl %cl, (%rdx) # sched: [1:1.00]
12333; ATOM-NEXT:    shll %cl, (%rdx) # sched: [1:1.00]
12334; ATOM-NEXT:    shrl %cl, (%rdx) # sched: [1:1.00]
12335; ATOM-NEXT:    #NO_APP
12336; ATOM-NEXT:    retq # sched: [79:39.50]
12337;
12338; SLM-LABEL: test_sar_shl_shr_32:
12339; SLM:       # %bb.0:
12340; SLM-NEXT:    #APP
12341; SLM-NEXT:    sarl %edi # sched: [1:1.00]
12342; SLM-NEXT:    shll %edi # sched: [1:1.00]
12343; SLM-NEXT:    shrl %edi # sched: [1:1.00]
12344; SLM-NEXT:    sarl (%rdx) # sched: [4:2.00]
12345; SLM-NEXT:    shll (%rdx) # sched: [4:2.00]
12346; SLM-NEXT:    shrl (%rdx) # sched: [4:2.00]
12347; SLM-NEXT:    sarl $7, %edi # sched: [1:1.00]
12348; SLM-NEXT:    shll $7, %edi # sched: [1:1.00]
12349; SLM-NEXT:    shrl $7, %edi # sched: [1:1.00]
12350; SLM-NEXT:    sarl $7, (%rdx) # sched: [4:2.00]
12351; SLM-NEXT:    shll $7, (%rdx) # sched: [4:2.00]
12352; SLM-NEXT:    shrl $7, (%rdx) # sched: [4:2.00]
12353; SLM-NEXT:    sarl %cl, %edi # sched: [1:1.00]
12354; SLM-NEXT:    shll %cl, %edi # sched: [1:1.00]
12355; SLM-NEXT:    shrl %cl, %edi # sched: [1:1.00]
12356; SLM-NEXT:    sarl %cl, (%rdx) # sched: [4:2.00]
12357; SLM-NEXT:    shll %cl, (%rdx) # sched: [4:2.00]
12358; SLM-NEXT:    shrl %cl, (%rdx) # sched: [4:2.00]
12359; SLM-NEXT:    #NO_APP
12360; SLM-NEXT:    retq # sched: [4:1.00]
12361;
12362; SANDY-LABEL: test_sar_shl_shr_32:
12363; SANDY:       # %bb.0:
12364; SANDY-NEXT:    #APP
12365; SANDY-NEXT:    sarl %edi # sched: [1:0.50]
12366; SANDY-NEXT:    shll %edi # sched: [1:0.50]
12367; SANDY-NEXT:    shrl %edi # sched: [1:0.50]
12368; SANDY-NEXT:    sarl (%rdx) # sched: [7:1.00]
12369; SANDY-NEXT:    shll (%rdx) # sched: [7:1.00]
12370; SANDY-NEXT:    shrl (%rdx) # sched: [7:1.00]
12371; SANDY-NEXT:    sarl $7, %edi # sched: [1:0.50]
12372; SANDY-NEXT:    shll $7, %edi # sched: [1:0.50]
12373; SANDY-NEXT:    shrl $7, %edi # sched: [1:0.50]
12374; SANDY-NEXT:    sarl $7, (%rdx) # sched: [7:1.00]
12375; SANDY-NEXT:    shll $7, (%rdx) # sched: [7:1.00]
12376; SANDY-NEXT:    shrl $7, (%rdx) # sched: [7:1.00]
12377; SANDY-NEXT:    sarl %cl, %edi # sched: [3:1.50]
12378; SANDY-NEXT:    shll %cl, %edi # sched: [3:1.50]
12379; SANDY-NEXT:    shrl %cl, %edi # sched: [3:1.50]
12380; SANDY-NEXT:    sarl %cl, (%rdx) # sched: [9:1.50]
12381; SANDY-NEXT:    shll %cl, (%rdx) # sched: [9:1.50]
12382; SANDY-NEXT:    shrl %cl, (%rdx) # sched: [9:1.50]
12383; SANDY-NEXT:    #NO_APP
12384; SANDY-NEXT:    retq # sched: [1:1.00]
12385;
12386; HASWELL-LABEL: test_sar_shl_shr_32:
12387; HASWELL:       # %bb.0:
12388; HASWELL-NEXT:    #APP
12389; HASWELL-NEXT:    sarl %edi # sched: [1:0.50]
12390; HASWELL-NEXT:    shll %edi # sched: [1:0.50]
12391; HASWELL-NEXT:    shrl %edi # sched: [1:0.50]
12392; HASWELL-NEXT:    sarl (%rdx) # sched: [7:1.00]
12393; HASWELL-NEXT:    shll (%rdx) # sched: [7:1.00]
12394; HASWELL-NEXT:    shrl (%rdx) # sched: [7:1.00]
12395; HASWELL-NEXT:    sarl $7, %edi # sched: [1:0.50]
12396; HASWELL-NEXT:    shll $7, %edi # sched: [1:0.50]
12397; HASWELL-NEXT:    shrl $7, %edi # sched: [1:0.50]
12398; HASWELL-NEXT:    sarl $7, (%rdx) # sched: [7:1.00]
12399; HASWELL-NEXT:    shll $7, (%rdx) # sched: [7:1.00]
12400; HASWELL-NEXT:    shrl $7, (%rdx) # sched: [7:1.00]
12401; HASWELL-NEXT:    sarl %cl, %edi # sched: [3:1.00]
12402; HASWELL-NEXT:    shll %cl, %edi # sched: [3:1.00]
12403; HASWELL-NEXT:    shrl %cl, %edi # sched: [3:1.00]
12404; HASWELL-NEXT:    sarl %cl, (%rdx) # sched: [9:1.00]
12405; HASWELL-NEXT:    shll %cl, (%rdx) # sched: [9:1.00]
12406; HASWELL-NEXT:    shrl %cl, (%rdx) # sched: [9:1.00]
12407; HASWELL-NEXT:    #NO_APP
12408; HASWELL-NEXT:    retq # sched: [7:1.00]
12409;
12410; BROADWELL-LABEL: test_sar_shl_shr_32:
12411; BROADWELL:       # %bb.0:
12412; BROADWELL-NEXT:    #APP
12413; BROADWELL-NEXT:    sarl %edi # sched: [1:0.50]
12414; BROADWELL-NEXT:    shll %edi # sched: [1:0.50]
12415; BROADWELL-NEXT:    shrl %edi # sched: [1:0.50]
12416; BROADWELL-NEXT:    sarl (%rdx) # sched: [6:1.00]
12417; BROADWELL-NEXT:    shll (%rdx) # sched: [6:1.00]
12418; BROADWELL-NEXT:    shrl (%rdx) # sched: [6:1.00]
12419; BROADWELL-NEXT:    sarl $7, %edi # sched: [1:0.50]
12420; BROADWELL-NEXT:    shll $7, %edi # sched: [1:0.50]
12421; BROADWELL-NEXT:    shrl $7, %edi # sched: [1:0.50]
12422; BROADWELL-NEXT:    sarl $7, (%rdx) # sched: [6:1.00]
12423; BROADWELL-NEXT:    shll $7, (%rdx) # sched: [6:1.00]
12424; BROADWELL-NEXT:    shrl $7, (%rdx) # sched: [6:1.00]
12425; BROADWELL-NEXT:    sarl %cl, %edi # sched: [3:1.00]
12426; BROADWELL-NEXT:    shll %cl, %edi # sched: [3:1.00]
12427; BROADWELL-NEXT:    shrl %cl, %edi # sched: [3:1.00]
12428; BROADWELL-NEXT:    sarl %cl, (%rdx) # sched: [8:1.00]
12429; BROADWELL-NEXT:    shll %cl, (%rdx) # sched: [8:1.00]
12430; BROADWELL-NEXT:    shrl %cl, (%rdx) # sched: [8:1.00]
12431; BROADWELL-NEXT:    #NO_APP
12432; BROADWELL-NEXT:    retq # sched: [7:1.00]
12433;
12434; SKYLAKE-LABEL: test_sar_shl_shr_32:
12435; SKYLAKE:       # %bb.0:
12436; SKYLAKE-NEXT:    #APP
12437; SKYLAKE-NEXT:    sarl %edi # sched: [1:0.50]
12438; SKYLAKE-NEXT:    shll %edi # sched: [1:0.50]
12439; SKYLAKE-NEXT:    shrl %edi # sched: [1:0.50]
12440; SKYLAKE-NEXT:    sarl (%rdx) # sched: [6:1.00]
12441; SKYLAKE-NEXT:    shll (%rdx) # sched: [6:1.00]
12442; SKYLAKE-NEXT:    shrl (%rdx) # sched: [6:1.00]
12443; SKYLAKE-NEXT:    sarl $7, %edi # sched: [1:0.50]
12444; SKYLAKE-NEXT:    shll $7, %edi # sched: [1:0.50]
12445; SKYLAKE-NEXT:    shrl $7, %edi # sched: [1:0.50]
12446; SKYLAKE-NEXT:    sarl $7, (%rdx) # sched: [6:1.00]
12447; SKYLAKE-NEXT:    shll $7, (%rdx) # sched: [6:1.00]
12448; SKYLAKE-NEXT:    shrl $7, (%rdx) # sched: [6:1.00]
12449; SKYLAKE-NEXT:    sarl %cl, %edi # sched: [3:1.50]
12450; SKYLAKE-NEXT:    shll %cl, %edi # sched: [3:1.50]
12451; SKYLAKE-NEXT:    shrl %cl, %edi # sched: [3:1.50]
12452; SKYLAKE-NEXT:    sarl %cl, (%rdx) # sched: [8:1.50]
12453; SKYLAKE-NEXT:    shll %cl, (%rdx) # sched: [8:1.50]
12454; SKYLAKE-NEXT:    shrl %cl, (%rdx) # sched: [8:1.50]
12455; SKYLAKE-NEXT:    #NO_APP
12456; SKYLAKE-NEXT:    retq # sched: [7:1.00]
12457;
12458; SKX-LABEL: test_sar_shl_shr_32:
12459; SKX:       # %bb.0:
12460; SKX-NEXT:    #APP
12461; SKX-NEXT:    sarl %edi # sched: [1:0.50]
12462; SKX-NEXT:    shll %edi # sched: [1:0.50]
12463; SKX-NEXT:    shrl %edi # sched: [1:0.50]
12464; SKX-NEXT:    sarl (%rdx) # sched: [6:1.00]
12465; SKX-NEXT:    shll (%rdx) # sched: [6:1.00]
12466; SKX-NEXT:    shrl (%rdx) # sched: [6:1.00]
12467; SKX-NEXT:    sarl $7, %edi # sched: [1:0.50]
12468; SKX-NEXT:    shll $7, %edi # sched: [1:0.50]
12469; SKX-NEXT:    shrl $7, %edi # sched: [1:0.50]
12470; SKX-NEXT:    sarl $7, (%rdx) # sched: [6:1.00]
12471; SKX-NEXT:    shll $7, (%rdx) # sched: [6:1.00]
12472; SKX-NEXT:    shrl $7, (%rdx) # sched: [6:1.00]
12473; SKX-NEXT:    sarl %cl, %edi # sched: [3:1.50]
12474; SKX-NEXT:    shll %cl, %edi # sched: [3:1.50]
12475; SKX-NEXT:    shrl %cl, %edi # sched: [3:1.50]
12476; SKX-NEXT:    sarl %cl, (%rdx) # sched: [8:1.50]
12477; SKX-NEXT:    shll %cl, (%rdx) # sched: [8:1.50]
12478; SKX-NEXT:    shrl %cl, (%rdx) # sched: [8:1.50]
12479; SKX-NEXT:    #NO_APP
12480; SKX-NEXT:    retq # sched: [7:1.00]
12481;
12482; BTVER2-LABEL: test_sar_shl_shr_32:
12483; BTVER2:       # %bb.0:
12484; BTVER2-NEXT:    #APP
12485; BTVER2-NEXT:    sarl %edi # sched: [1:0.50]
12486; BTVER2-NEXT:    shll %edi # sched: [1:0.50]
12487; BTVER2-NEXT:    shrl %edi # sched: [1:0.50]
12488; BTVER2-NEXT:    sarl (%rdx) # sched: [4:1.00]
12489; BTVER2-NEXT:    shll (%rdx) # sched: [4:1.00]
12490; BTVER2-NEXT:    shrl (%rdx) # sched: [4:1.00]
12491; BTVER2-NEXT:    sarl $7, %edi # sched: [1:0.50]
12492; BTVER2-NEXT:    shll $7, %edi # sched: [1:0.50]
12493; BTVER2-NEXT:    shrl $7, %edi # sched: [1:0.50]
12494; BTVER2-NEXT:    sarl $7, (%rdx) # sched: [4:1.00]
12495; BTVER2-NEXT:    shll $7, (%rdx) # sched: [4:1.00]
12496; BTVER2-NEXT:    shrl $7, (%rdx) # sched: [4:1.00]
12497; BTVER2-NEXT:    sarl %cl, %edi # sched: [1:0.50]
12498; BTVER2-NEXT:    shll %cl, %edi # sched: [1:0.50]
12499; BTVER2-NEXT:    shrl %cl, %edi # sched: [1:0.50]
12500; BTVER2-NEXT:    sarl %cl, (%rdx) # sched: [4:1.00]
12501; BTVER2-NEXT:    shll %cl, (%rdx) # sched: [4:1.00]
12502; BTVER2-NEXT:    shrl %cl, (%rdx) # sched: [4:1.00]
12503; BTVER2-NEXT:    #NO_APP
12504; BTVER2-NEXT:    retq # sched: [4:1.00]
12505;
12506; ZNVER1-LABEL: test_sar_shl_shr_32:
12507; ZNVER1:       # %bb.0:
12508; ZNVER1-NEXT:    #APP
12509; ZNVER1-NEXT:    sarl %edi # sched: [1:0.25]
12510; ZNVER1-NEXT:    shll %edi # sched: [1:0.25]
12511; ZNVER1-NEXT:    shrl %edi # sched: [1:0.25]
12512; ZNVER1-NEXT:    sarl (%rdx) # sched: [5:0.50]
12513; ZNVER1-NEXT:    shll (%rdx) # sched: [5:0.50]
12514; ZNVER1-NEXT:    shrl (%rdx) # sched: [5:0.50]
12515; ZNVER1-NEXT:    sarl $7, %edi # sched: [1:0.25]
12516; ZNVER1-NEXT:    shll $7, %edi # sched: [1:0.25]
12517; ZNVER1-NEXT:    shrl $7, %edi # sched: [1:0.25]
12518; ZNVER1-NEXT:    sarl $7, (%rdx) # sched: [5:0.50]
12519; ZNVER1-NEXT:    shll $7, (%rdx) # sched: [5:0.50]
12520; ZNVER1-NEXT:    shrl $7, (%rdx) # sched: [5:0.50]
12521; ZNVER1-NEXT:    sarl %cl, %edi # sched: [1:0.25]
12522; ZNVER1-NEXT:    shll %cl, %edi # sched: [1:0.25]
12523; ZNVER1-NEXT:    shrl %cl, %edi # sched: [1:0.25]
12524; ZNVER1-NEXT:    sarl %cl, (%rdx) # sched: [5:1.00]
12525; ZNVER1-NEXT:    shll %cl, (%rdx) # sched: [5:1.00]
12526; ZNVER1-NEXT:    shrl %cl, (%rdx) # sched: [5:1.00]
12527; ZNVER1-NEXT:    #NO_APP
12528; ZNVER1-NEXT:    retq # sched: [1:0.50]
12529  call void asm sideeffect "sarl $0 \0A\09 shll $0 \0A\09 shrl $0 \0A\09 sarl $2 \0A\09 shll $2 \0A\09 shrl $2 \0A\09 sarl $3, $0 \0A\09 shll $3, $0 \0A\09 shrl $3, $0 \0A\09 sarl $3, $2 \0A\09 shll $3, $2 \0A\09 shrl $3, $2 \0A\09 sarl %CL, $0 \0A\09 shll %CL, $0 \0A\09 shrl %CL, $0 \0A\09 sarl %CL, $2  \0A\09 shll %CL, $2 \0A\09 shrl %CL, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7)
12530  ret void
12531}
12532define void @test_sar_shl_shr_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
12533; GENERIC-LABEL: test_sar_shl_shr_64:
12534; GENERIC:       # %bb.0:
12535; GENERIC-NEXT:    #APP
12536; GENERIC-NEXT:    sarq %rdi # sched: [1:0.50]
12537; GENERIC-NEXT:    shlq %rdi # sched: [1:0.50]
12538; GENERIC-NEXT:    shrq %rdi # sched: [1:0.50]
12539; GENERIC-NEXT:    sarq (%rdx) # sched: [7:1.00]
12540; GENERIC-NEXT:    shlq (%rdx) # sched: [7:1.00]
12541; GENERIC-NEXT:    shrq (%rdx) # sched: [7:1.00]
12542; GENERIC-NEXT:    sarq $7, %rdi # sched: [1:0.50]
12543; GENERIC-NEXT:    shlq $7, %rdi # sched: [1:0.50]
12544; GENERIC-NEXT:    shrq $7, %rdi # sched: [1:0.50]
12545; GENERIC-NEXT:    sarq $7, (%rdx) # sched: [7:1.00]
12546; GENERIC-NEXT:    shlq $7, (%rdx) # sched: [7:1.00]
12547; GENERIC-NEXT:    shrq $7, (%rdx) # sched: [7:1.00]
12548; GENERIC-NEXT:    sarq %cl, %rdi # sched: [3:1.50]
12549; GENERIC-NEXT:    shlq %cl, %rdi # sched: [3:1.50]
12550; GENERIC-NEXT:    shrq %cl, %rdi # sched: [3:1.50]
12551; GENERIC-NEXT:    sarq %cl, (%rdx) # sched: [9:1.50]
12552; GENERIC-NEXT:    shlq %cl, (%rdx) # sched: [9:1.50]
12553; GENERIC-NEXT:    shrq %cl, (%rdx) # sched: [9:1.50]
12554; GENERIC-NEXT:    #NO_APP
12555; GENERIC-NEXT:    retq # sched: [1:1.00]
12556;
12557; ATOM-LABEL: test_sar_shl_shr_64:
12558; ATOM:       # %bb.0:
12559; ATOM-NEXT:    #APP
12560; ATOM-NEXT:    sarq %rdi # sched: [1:1.00]
12561; ATOM-NEXT:    shlq %rdi # sched: [1:1.00]
12562; ATOM-NEXT:    shrq %rdi # sched: [1:1.00]
12563; ATOM-NEXT:    sarq (%rdx) # sched: [1:1.00]
12564; ATOM-NEXT:    shlq (%rdx) # sched: [1:1.00]
12565; ATOM-NEXT:    shrq (%rdx) # sched: [1:1.00]
12566; ATOM-NEXT:    sarq $7, %rdi # sched: [1:1.00]
12567; ATOM-NEXT:    shlq $7, %rdi # sched: [1:1.00]
12568; ATOM-NEXT:    shrq $7, %rdi # sched: [1:1.00]
12569; ATOM-NEXT:    sarq $7, (%rdx) # sched: [1:1.00]
12570; ATOM-NEXT:    shlq $7, (%rdx) # sched: [1:1.00]
12571; ATOM-NEXT:    shrq $7, (%rdx) # sched: [1:1.00]
12572; ATOM-NEXT:    sarq %cl, %rdi # sched: [1:1.00]
12573; ATOM-NEXT:    shlq %cl, %rdi # sched: [1:1.00]
12574; ATOM-NEXT:    shrq %cl, %rdi # sched: [1:1.00]
12575; ATOM-NEXT:    sarq %cl, (%rdx) # sched: [1:1.00]
12576; ATOM-NEXT:    shlq %cl, (%rdx) # sched: [1:1.00]
12577; ATOM-NEXT:    shrq %cl, (%rdx) # sched: [1:1.00]
12578; ATOM-NEXT:    #NO_APP
12579; ATOM-NEXT:    retq # sched: [79:39.50]
12580;
12581; SLM-LABEL: test_sar_shl_shr_64:
12582; SLM:       # %bb.0:
12583; SLM-NEXT:    #APP
12584; SLM-NEXT:    sarq %rdi # sched: [1:1.00]
12585; SLM-NEXT:    shlq %rdi # sched: [1:1.00]
12586; SLM-NEXT:    shrq %rdi # sched: [1:1.00]
12587; SLM-NEXT:    sarq (%rdx) # sched: [4:2.00]
12588; SLM-NEXT:    shlq (%rdx) # sched: [4:2.00]
12589; SLM-NEXT:    shrq (%rdx) # sched: [4:2.00]
12590; SLM-NEXT:    sarq $7, %rdi # sched: [1:1.00]
12591; SLM-NEXT:    shlq $7, %rdi # sched: [1:1.00]
12592; SLM-NEXT:    shrq $7, %rdi # sched: [1:1.00]
12593; SLM-NEXT:    sarq $7, (%rdx) # sched: [4:2.00]
12594; SLM-NEXT:    shlq $7, (%rdx) # sched: [4:2.00]
12595; SLM-NEXT:    shrq $7, (%rdx) # sched: [4:2.00]
12596; SLM-NEXT:    sarq %cl, %rdi # sched: [1:1.00]
12597; SLM-NEXT:    shlq %cl, %rdi # sched: [1:1.00]
12598; SLM-NEXT:    shrq %cl, %rdi # sched: [1:1.00]
12599; SLM-NEXT:    sarq %cl, (%rdx) # sched: [4:2.00]
12600; SLM-NEXT:    shlq %cl, (%rdx) # sched: [4:2.00]
12601; SLM-NEXT:    shrq %cl, (%rdx) # sched: [4:2.00]
12602; SLM-NEXT:    #NO_APP
12603; SLM-NEXT:    retq # sched: [4:1.00]
12604;
12605; SANDY-LABEL: test_sar_shl_shr_64:
12606; SANDY:       # %bb.0:
12607; SANDY-NEXT:    #APP
12608; SANDY-NEXT:    sarq %rdi # sched: [1:0.50]
12609; SANDY-NEXT:    shlq %rdi # sched: [1:0.50]
12610; SANDY-NEXT:    shrq %rdi # sched: [1:0.50]
12611; SANDY-NEXT:    sarq (%rdx) # sched: [7:1.00]
12612; SANDY-NEXT:    shlq (%rdx) # sched: [7:1.00]
12613; SANDY-NEXT:    shrq (%rdx) # sched: [7:1.00]
12614; SANDY-NEXT:    sarq $7, %rdi # sched: [1:0.50]
12615; SANDY-NEXT:    shlq $7, %rdi # sched: [1:0.50]
12616; SANDY-NEXT:    shrq $7, %rdi # sched: [1:0.50]
12617; SANDY-NEXT:    sarq $7, (%rdx) # sched: [7:1.00]
12618; SANDY-NEXT:    shlq $7, (%rdx) # sched: [7:1.00]
12619; SANDY-NEXT:    shrq $7, (%rdx) # sched: [7:1.00]
12620; SANDY-NEXT:    sarq %cl, %rdi # sched: [3:1.50]
12621; SANDY-NEXT:    shlq %cl, %rdi # sched: [3:1.50]
12622; SANDY-NEXT:    shrq %cl, %rdi # sched: [3:1.50]
12623; SANDY-NEXT:    sarq %cl, (%rdx) # sched: [9:1.50]
12624; SANDY-NEXT:    shlq %cl, (%rdx) # sched: [9:1.50]
12625; SANDY-NEXT:    shrq %cl, (%rdx) # sched: [9:1.50]
12626; SANDY-NEXT:    #NO_APP
12627; SANDY-NEXT:    retq # sched: [1:1.00]
12628;
12629; HASWELL-LABEL: test_sar_shl_shr_64:
12630; HASWELL:       # %bb.0:
12631; HASWELL-NEXT:    #APP
12632; HASWELL-NEXT:    sarq %rdi # sched: [1:0.50]
12633; HASWELL-NEXT:    shlq %rdi # sched: [1:0.50]
12634; HASWELL-NEXT:    shrq %rdi # sched: [1:0.50]
12635; HASWELL-NEXT:    sarq (%rdx) # sched: [7:1.00]
12636; HASWELL-NEXT:    shlq (%rdx) # sched: [7:1.00]
12637; HASWELL-NEXT:    shrq (%rdx) # sched: [7:1.00]
12638; HASWELL-NEXT:    sarq $7, %rdi # sched: [1:0.50]
12639; HASWELL-NEXT:    shlq $7, %rdi # sched: [1:0.50]
12640; HASWELL-NEXT:    shrq $7, %rdi # sched: [1:0.50]
12641; HASWELL-NEXT:    sarq $7, (%rdx) # sched: [7:1.00]
12642; HASWELL-NEXT:    shlq $7, (%rdx) # sched: [7:1.00]
12643; HASWELL-NEXT:    shrq $7, (%rdx) # sched: [7:1.00]
12644; HASWELL-NEXT:    sarq %cl, %rdi # sched: [3:1.00]
12645; HASWELL-NEXT:    shlq %cl, %rdi # sched: [3:1.00]
12646; HASWELL-NEXT:    shrq %cl, %rdi # sched: [3:1.00]
12647; HASWELL-NEXT:    sarq %cl, (%rdx) # sched: [9:1.00]
12648; HASWELL-NEXT:    shlq %cl, (%rdx) # sched: [9:1.00]
12649; HASWELL-NEXT:    shrq %cl, (%rdx) # sched: [9:1.00]
12650; HASWELL-NEXT:    #NO_APP
12651; HASWELL-NEXT:    retq # sched: [7:1.00]
12652;
12653; BROADWELL-LABEL: test_sar_shl_shr_64:
12654; BROADWELL:       # %bb.0:
12655; BROADWELL-NEXT:    #APP
12656; BROADWELL-NEXT:    sarq %rdi # sched: [1:0.50]
12657; BROADWELL-NEXT:    shlq %rdi # sched: [1:0.50]
12658; BROADWELL-NEXT:    shrq %rdi # sched: [1:0.50]
12659; BROADWELL-NEXT:    sarq (%rdx) # sched: [6:1.00]
12660; BROADWELL-NEXT:    shlq (%rdx) # sched: [6:1.00]
12661; BROADWELL-NEXT:    shrq (%rdx) # sched: [6:1.00]
12662; BROADWELL-NEXT:    sarq $7, %rdi # sched: [1:0.50]
12663; BROADWELL-NEXT:    shlq $7, %rdi # sched: [1:0.50]
12664; BROADWELL-NEXT:    shrq $7, %rdi # sched: [1:0.50]
12665; BROADWELL-NEXT:    sarq $7, (%rdx) # sched: [6:1.00]
12666; BROADWELL-NEXT:    shlq $7, (%rdx) # sched: [6:1.00]
12667; BROADWELL-NEXT:    shrq $7, (%rdx) # sched: [6:1.00]
12668; BROADWELL-NEXT:    sarq %cl, %rdi # sched: [3:1.00]
12669; BROADWELL-NEXT:    shlq %cl, %rdi # sched: [3:1.00]
12670; BROADWELL-NEXT:    shrq %cl, %rdi # sched: [3:1.00]
12671; BROADWELL-NEXT:    sarq %cl, (%rdx) # sched: [8:1.00]
12672; BROADWELL-NEXT:    shlq %cl, (%rdx) # sched: [8:1.00]
12673; BROADWELL-NEXT:    shrq %cl, (%rdx) # sched: [8:1.00]
12674; BROADWELL-NEXT:    #NO_APP
12675; BROADWELL-NEXT:    retq # sched: [7:1.00]
12676;
12677; SKYLAKE-LABEL: test_sar_shl_shr_64:
12678; SKYLAKE:       # %bb.0:
12679; SKYLAKE-NEXT:    #APP
12680; SKYLAKE-NEXT:    sarq %rdi # sched: [1:0.50]
12681; SKYLAKE-NEXT:    shlq %rdi # sched: [1:0.50]
12682; SKYLAKE-NEXT:    shrq %rdi # sched: [1:0.50]
12683; SKYLAKE-NEXT:    sarq (%rdx) # sched: [6:1.00]
12684; SKYLAKE-NEXT:    shlq (%rdx) # sched: [6:1.00]
12685; SKYLAKE-NEXT:    shrq (%rdx) # sched: [6:1.00]
12686; SKYLAKE-NEXT:    sarq $7, %rdi # sched: [1:0.50]
12687; SKYLAKE-NEXT:    shlq $7, %rdi # sched: [1:0.50]
12688; SKYLAKE-NEXT:    shrq $7, %rdi # sched: [1:0.50]
12689; SKYLAKE-NEXT:    sarq $7, (%rdx) # sched: [6:1.00]
12690; SKYLAKE-NEXT:    shlq $7, (%rdx) # sched: [6:1.00]
12691; SKYLAKE-NEXT:    shrq $7, (%rdx) # sched: [6:1.00]
12692; SKYLAKE-NEXT:    sarq %cl, %rdi # sched: [3:1.50]
12693; SKYLAKE-NEXT:    shlq %cl, %rdi # sched: [3:1.50]
12694; SKYLAKE-NEXT:    shrq %cl, %rdi # sched: [3:1.50]
12695; SKYLAKE-NEXT:    sarq %cl, (%rdx) # sched: [8:1.50]
12696; SKYLAKE-NEXT:    shlq %cl, (%rdx) # sched: [8:1.50]
12697; SKYLAKE-NEXT:    shrq %cl, (%rdx) # sched: [8:1.50]
12698; SKYLAKE-NEXT:    #NO_APP
12699; SKYLAKE-NEXT:    retq # sched: [7:1.00]
12700;
12701; SKX-LABEL: test_sar_shl_shr_64:
12702; SKX:       # %bb.0:
12703; SKX-NEXT:    #APP
12704; SKX-NEXT:    sarq %rdi # sched: [1:0.50]
12705; SKX-NEXT:    shlq %rdi # sched: [1:0.50]
12706; SKX-NEXT:    shrq %rdi # sched: [1:0.50]
12707; SKX-NEXT:    sarq (%rdx) # sched: [6:1.00]
12708; SKX-NEXT:    shlq (%rdx) # sched: [6:1.00]
12709; SKX-NEXT:    shrq (%rdx) # sched: [6:1.00]
12710; SKX-NEXT:    sarq $7, %rdi # sched: [1:0.50]
12711; SKX-NEXT:    shlq $7, %rdi # sched: [1:0.50]
12712; SKX-NEXT:    shrq $7, %rdi # sched: [1:0.50]
12713; SKX-NEXT:    sarq $7, (%rdx) # sched: [6:1.00]
12714; SKX-NEXT:    shlq $7, (%rdx) # sched: [6:1.00]
12715; SKX-NEXT:    shrq $7, (%rdx) # sched: [6:1.00]
12716; SKX-NEXT:    sarq %cl, %rdi # sched: [3:1.50]
12717; SKX-NEXT:    shlq %cl, %rdi # sched: [3:1.50]
12718; SKX-NEXT:    shrq %cl, %rdi # sched: [3:1.50]
12719; SKX-NEXT:    sarq %cl, (%rdx) # sched: [8:1.50]
12720; SKX-NEXT:    shlq %cl, (%rdx) # sched: [8:1.50]
12721; SKX-NEXT:    shrq %cl, (%rdx) # sched: [8:1.50]
12722; SKX-NEXT:    #NO_APP
12723; SKX-NEXT:    retq # sched: [7:1.00]
12724;
12725; BTVER2-LABEL: test_sar_shl_shr_64:
12726; BTVER2:       # %bb.0:
12727; BTVER2-NEXT:    #APP
12728; BTVER2-NEXT:    sarq %rdi # sched: [1:0.50]
12729; BTVER2-NEXT:    shlq %rdi # sched: [1:0.50]
12730; BTVER2-NEXT:    shrq %rdi # sched: [1:0.50]
12731; BTVER2-NEXT:    sarq (%rdx) # sched: [4:1.00]
12732; BTVER2-NEXT:    shlq (%rdx) # sched: [4:1.00]
12733; BTVER2-NEXT:    shrq (%rdx) # sched: [4:1.00]
12734; BTVER2-NEXT:    sarq $7, %rdi # sched: [1:0.50]
12735; BTVER2-NEXT:    shlq $7, %rdi # sched: [1:0.50]
12736; BTVER2-NEXT:    shrq $7, %rdi # sched: [1:0.50]
12737; BTVER2-NEXT:    sarq $7, (%rdx) # sched: [4:1.00]
12738; BTVER2-NEXT:    shlq $7, (%rdx) # sched: [4:1.00]
12739; BTVER2-NEXT:    shrq $7, (%rdx) # sched: [4:1.00]
12740; BTVER2-NEXT:    sarq %cl, %rdi # sched: [1:0.50]
12741; BTVER2-NEXT:    shlq %cl, %rdi # sched: [1:0.50]
12742; BTVER2-NEXT:    shrq %cl, %rdi # sched: [1:0.50]
12743; BTVER2-NEXT:    sarq %cl, (%rdx) # sched: [4:1.00]
12744; BTVER2-NEXT:    shlq %cl, (%rdx) # sched: [4:1.00]
12745; BTVER2-NEXT:    shrq %cl, (%rdx) # sched: [4:1.00]
12746; BTVER2-NEXT:    #NO_APP
12747; BTVER2-NEXT:    retq # sched: [4:1.00]
12748;
12749; ZNVER1-LABEL: test_sar_shl_shr_64:
12750; ZNVER1:       # %bb.0:
12751; ZNVER1-NEXT:    #APP
12752; ZNVER1-NEXT:    sarq %rdi # sched: [1:0.25]
12753; ZNVER1-NEXT:    shlq %rdi # sched: [1:0.25]
12754; ZNVER1-NEXT:    shrq %rdi # sched: [1:0.25]
12755; ZNVER1-NEXT:    sarq (%rdx) # sched: [5:0.50]
12756; ZNVER1-NEXT:    shlq (%rdx) # sched: [5:0.50]
12757; ZNVER1-NEXT:    shrq (%rdx) # sched: [5:0.50]
12758; ZNVER1-NEXT:    sarq $7, %rdi # sched: [1:0.25]
12759; ZNVER1-NEXT:    shlq $7, %rdi # sched: [1:0.25]
12760; ZNVER1-NEXT:    shrq $7, %rdi # sched: [1:0.25]
12761; ZNVER1-NEXT:    sarq $7, (%rdx) # sched: [5:0.50]
12762; ZNVER1-NEXT:    shlq $7, (%rdx) # sched: [5:0.50]
12763; ZNVER1-NEXT:    shrq $7, (%rdx) # sched: [5:0.50]
12764; ZNVER1-NEXT:    sarq %cl, %rdi # sched: [1:0.25]
12765; ZNVER1-NEXT:    shlq %cl, %rdi # sched: [1:0.25]
12766; ZNVER1-NEXT:    shrq %cl, %rdi # sched: [1:0.25]
12767; ZNVER1-NEXT:    sarq %cl, (%rdx) # sched: [5:1.00]
12768; ZNVER1-NEXT:    shlq %cl, (%rdx) # sched: [5:1.00]
12769; ZNVER1-NEXT:    shrq %cl, (%rdx) # sched: [5:1.00]
12770; ZNVER1-NEXT:    #NO_APP
12771; ZNVER1-NEXT:    retq # sched: [1:0.50]
12772  call void asm sideeffect "sarq $0 \0A\09 shlq $0 \0A\09 shrq $0 \0A\09 sarq $2 \0A\09 shlq $2 \0A\09 shrq $2 \0A\09 sarq $3, $0 \0A\09 shlq $3, $0 \0A\09 shrq $3, $0 \0A\09 sarq $3, $2 \0A\09 shlq $3, $2 \0A\09 shrq $3, $2 \0A\09 sarq %CL, $0 \0A\09 shlq %CL, $0 \0A\09 shrq %CL, $0 \0A\09 sarq %CL, $2  \0A\09 shlq %CL, $2 \0A\09 shrq %CL, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7)
12773  ret void
12774}
12775
12776define void @test_sbb_8(i8 %a0, i8* %a1, i8 %a2) optsize {
12777; GENERIC-LABEL: test_sbb_8:
12778; GENERIC:       # %bb.0:
12779; GENERIC-NEXT:    #APP
12780; GENERIC-NEXT:    sbbb $7, %al # sched: [2:0.67]
12781; GENERIC-NEXT:    sbbb $7, %dil # sched: [2:0.67]
12782; GENERIC-NEXT:    sbbb $7, (%rsi) # sched: [9:1.00]
12783; GENERIC-NEXT:    sbbb %dl, %dil # sched: [2:0.67]
12784; GENERIC-NEXT:    sbbb %dil, (%rsi) # sched: [9:1.00]
12785; GENERIC-NEXT:    sbbb (%rsi), %dil # sched: [7:0.67]
12786; GENERIC-NEXT:    #NO_APP
12787; GENERIC-NEXT:    retq # sched: [1:1.00]
12788;
12789; ATOM-LABEL: test_sbb_8:
12790; ATOM:       # %bb.0:
12791; ATOM-NEXT:    #APP
12792; ATOM-NEXT:    sbbb $7, %al # sched: [1:0.50]
12793; ATOM-NEXT:    sbbb $7, %dil # sched: [1:0.50]
12794; ATOM-NEXT:    sbbb $7, (%rsi) # sched: [1:1.00]
12795; ATOM-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
12796; ATOM-NEXT:    sbbb %dil, (%rsi) # sched: [1:1.00]
12797; ATOM-NEXT:    sbbb (%rsi), %dil # sched: [1:1.00]
12798; ATOM-NEXT:    #NO_APP
12799; ATOM-NEXT:    retq # sched: [79:39.50]
12800;
12801; SLM-LABEL: test_sbb_8:
12802; SLM:       # %bb.0:
12803; SLM-NEXT:    #APP
12804; SLM-NEXT:    sbbb $7, %al # sched: [1:0.50]
12805; SLM-NEXT:    sbbb $7, %dil # sched: [1:0.50]
12806; SLM-NEXT:    sbbb $7, (%rsi) # sched: [5:2.00]
12807; SLM-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
12808; SLM-NEXT:    sbbb %dil, (%rsi) # sched: [5:2.00]
12809; SLM-NEXT:    sbbb (%rsi), %dil # sched: [4:1.00]
12810; SLM-NEXT:    #NO_APP
12811; SLM-NEXT:    retq # sched: [4:1.00]
12812;
12813; SANDY-LABEL: test_sbb_8:
12814; SANDY:       # %bb.0:
12815; SANDY-NEXT:    #APP
12816; SANDY-NEXT:    sbbb $7, %al # sched: [2:0.67]
12817; SANDY-NEXT:    sbbb $7, %dil # sched: [2:0.67]
12818; SANDY-NEXT:    sbbb $7, (%rsi) # sched: [9:1.00]
12819; SANDY-NEXT:    sbbb %dl, %dil # sched: [2:0.67]
12820; SANDY-NEXT:    sbbb %dil, (%rsi) # sched: [9:1.00]
12821; SANDY-NEXT:    sbbb (%rsi), %dil # sched: [7:0.67]
12822; SANDY-NEXT:    #NO_APP
12823; SANDY-NEXT:    retq # sched: [1:1.00]
12824;
12825; HASWELL-LABEL: test_sbb_8:
12826; HASWELL:       # %bb.0:
12827; HASWELL-NEXT:    #APP
12828; HASWELL-NEXT:    sbbb $7, %al # sched: [2:0.50]
12829; HASWELL-NEXT:    sbbb $7, %dil # sched: [2:0.50]
12830; HASWELL-NEXT:    sbbb $7, (%rsi) # sched: [9:1.00]
12831; HASWELL-NEXT:    sbbb %dl, %dil # sched: [2:0.50]
12832; HASWELL-NEXT:    sbbb %dil, (%rsi) # sched: [9:1.00]
12833; HASWELL-NEXT:    sbbb (%rsi), %dil # sched: [7:0.50]
12834; HASWELL-NEXT:    #NO_APP
12835; HASWELL-NEXT:    retq # sched: [7:1.00]
12836;
12837; BROADWELL-LABEL: test_sbb_8:
12838; BROADWELL:       # %bb.0:
12839; BROADWELL-NEXT:    #APP
12840; BROADWELL-NEXT:    sbbb $7, %al # sched: [2:0.50]
12841; BROADWELL-NEXT:    sbbb $7, %dil # sched: [2:0.50]
12842; BROADWELL-NEXT:    sbbb $7, (%rsi) # sched: [8:1.00]
12843; BROADWELL-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
12844; BROADWELL-NEXT:    sbbb %dil, (%rsi) # sched: [8:1.00]
12845; BROADWELL-NEXT:    sbbb (%rsi), %dil # sched: [6:0.50]
12846; BROADWELL-NEXT:    #NO_APP
12847; BROADWELL-NEXT:    retq # sched: [7:1.00]
12848;
12849; SKYLAKE-LABEL: test_sbb_8:
12850; SKYLAKE:       # %bb.0:
12851; SKYLAKE-NEXT:    #APP
12852; SKYLAKE-NEXT:    sbbb $7, %al # sched: [2:0.50]
12853; SKYLAKE-NEXT:    sbbb $7, %dil # sched: [2:0.50]
12854; SKYLAKE-NEXT:    sbbb $7, (%rsi) # sched: [8:1.00]
12855; SKYLAKE-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
12856; SKYLAKE-NEXT:    sbbb %dil, (%rsi) # sched: [8:1.00]
12857; SKYLAKE-NEXT:    sbbb (%rsi), %dil # sched: [6:0.50]
12858; SKYLAKE-NEXT:    #NO_APP
12859; SKYLAKE-NEXT:    retq # sched: [7:1.00]
12860;
12861; SKX-LABEL: test_sbb_8:
12862; SKX:       # %bb.0:
12863; SKX-NEXT:    #APP
12864; SKX-NEXT:    sbbb $7, %al # sched: [2:0.50]
12865; SKX-NEXT:    sbbb $7, %dil # sched: [2:0.50]
12866; SKX-NEXT:    sbbb $7, (%rsi) # sched: [8:1.00]
12867; SKX-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
12868; SKX-NEXT:    sbbb %dil, (%rsi) # sched: [8:1.00]
12869; SKX-NEXT:    sbbb (%rsi), %dil # sched: [6:0.50]
12870; SKX-NEXT:    #NO_APP
12871; SKX-NEXT:    retq # sched: [7:1.00]
12872;
12873; BTVER2-LABEL: test_sbb_8:
12874; BTVER2:       # %bb.0:
12875; BTVER2-NEXT:    #APP
12876; BTVER2-NEXT:    sbbb $7, %al # sched: [1:1.00]
12877; BTVER2-NEXT:    sbbb $7, %dil # sched: [1:1.00]
12878; BTVER2-NEXT:    sbbb $7, (%rsi) # sched: [5:1.00]
12879; BTVER2-NEXT:    sbbb %dl, %dil # sched: [1:1.00]
12880; BTVER2-NEXT:    sbbb %dil, (%rsi) # sched: [5:1.00]
12881; BTVER2-NEXT:    sbbb (%rsi), %dil # sched: [4:1.00]
12882; BTVER2-NEXT:    #NO_APP
12883; BTVER2-NEXT:    retq # sched: [4:1.00]
12884;
12885; ZNVER1-LABEL: test_sbb_8:
12886; ZNVER1:       # %bb.0:
12887; ZNVER1-NEXT:    #APP
12888; ZNVER1-NEXT:    sbbb $7, %al # sched: [1:0.25]
12889; ZNVER1-NEXT:    sbbb $7, %dil # sched: [1:0.25]
12890; ZNVER1-NEXT:    sbbb $7, (%rsi) # sched: [5:0.50]
12891; ZNVER1-NEXT:    sbbb %dl, %dil # sched: [1:0.25]
12892; ZNVER1-NEXT:    sbbb %dil, (%rsi) # sched: [5:0.50]
12893; ZNVER1-NEXT:    sbbb (%rsi), %dil # sched: [5:0.50]
12894; ZNVER1-NEXT:    #NO_APP
12895; ZNVER1-NEXT:    retq # sched: [1:0.50]
12896  tail call void asm "sbbb $3, %AL \0A\09 sbbb $3, $0 \0A\09 sbbb $3, $2 \0A\09 sbbb $1, $0 \0A\09 sbbb $0, $2 \0A\09 sbbb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
12897  ret void
12898}
12899define void @test_sbb_16(i16 %a0, i16* %a1, i16 %a2) optsize {
12900; GENERIC-LABEL: test_sbb_16:
12901; GENERIC:       # %bb.0:
12902; GENERIC-NEXT:    #APP
12903; GENERIC-NEXT:    sbbw $511, %ax # imm = 0x1FF
12904; GENERIC-NEXT:    # sched: [2:0.67]
12905; GENERIC-NEXT:    sbbw $511, %di # imm = 0x1FF
12906; GENERIC-NEXT:    # sched: [2:0.67]
12907; GENERIC-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
12908; GENERIC-NEXT:    # sched: [9:1.00]
12909; GENERIC-NEXT:    sbbw $7, %di # sched: [2:0.67]
12910; GENERIC-NEXT:    sbbw $7, (%rsi) # sched: [9:1.00]
12911; GENERIC-NEXT:    sbbw %dx, %di # sched: [2:0.67]
12912; GENERIC-NEXT:    sbbw %di, (%rsi) # sched: [9:1.00]
12913; GENERIC-NEXT:    sbbw (%rsi), %di # sched: [7:0.67]
12914; GENERIC-NEXT:    #NO_APP
12915; GENERIC-NEXT:    retq # sched: [1:1.00]
12916;
12917; ATOM-LABEL: test_sbb_16:
12918; ATOM:       # %bb.0:
12919; ATOM-NEXT:    #APP
12920; ATOM-NEXT:    sbbw $511, %ax # imm = 0x1FF
12921; ATOM-NEXT:    # sched: [1:0.50]
12922; ATOM-NEXT:    sbbw $511, %di # imm = 0x1FF
12923; ATOM-NEXT:    # sched: [1:0.50]
12924; ATOM-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
12925; ATOM-NEXT:    # sched: [1:1.00]
12926; ATOM-NEXT:    sbbw $7, %di # sched: [1:0.50]
12927; ATOM-NEXT:    sbbw $7, (%rsi) # sched: [1:1.00]
12928; ATOM-NEXT:    sbbw %dx, %di # sched: [1:0.50]
12929; ATOM-NEXT:    sbbw %di, (%rsi) # sched: [1:1.00]
12930; ATOM-NEXT:    sbbw (%rsi), %di # sched: [1:1.00]
12931; ATOM-NEXT:    #NO_APP
12932; ATOM-NEXT:    retq # sched: [79:39.50]
12933;
12934; SLM-LABEL: test_sbb_16:
12935; SLM:       # %bb.0:
12936; SLM-NEXT:    #APP
12937; SLM-NEXT:    sbbw $511, %ax # imm = 0x1FF
12938; SLM-NEXT:    # sched: [1:0.50]
12939; SLM-NEXT:    sbbw $511, %di # imm = 0x1FF
12940; SLM-NEXT:    # sched: [1:0.50]
12941; SLM-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
12942; SLM-NEXT:    # sched: [5:2.00]
12943; SLM-NEXT:    sbbw $7, %di # sched: [1:0.50]
12944; SLM-NEXT:    sbbw $7, (%rsi) # sched: [5:2.00]
12945; SLM-NEXT:    sbbw %dx, %di # sched: [1:0.50]
12946; SLM-NEXT:    sbbw %di, (%rsi) # sched: [5:2.00]
12947; SLM-NEXT:    sbbw (%rsi), %di # sched: [4:1.00]
12948; SLM-NEXT:    #NO_APP
12949; SLM-NEXT:    retq # sched: [4:1.00]
12950;
12951; SANDY-LABEL: test_sbb_16:
12952; SANDY:       # %bb.0:
12953; SANDY-NEXT:    #APP
12954; SANDY-NEXT:    sbbw $511, %ax # imm = 0x1FF
12955; SANDY-NEXT:    # sched: [2:0.67]
12956; SANDY-NEXT:    sbbw $511, %di # imm = 0x1FF
12957; SANDY-NEXT:    # sched: [2:0.67]
12958; SANDY-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
12959; SANDY-NEXT:    # sched: [9:1.00]
12960; SANDY-NEXT:    sbbw $7, %di # sched: [2:0.67]
12961; SANDY-NEXT:    sbbw $7, (%rsi) # sched: [9:1.00]
12962; SANDY-NEXT:    sbbw %dx, %di # sched: [2:0.67]
12963; SANDY-NEXT:    sbbw %di, (%rsi) # sched: [9:1.00]
12964; SANDY-NEXT:    sbbw (%rsi), %di # sched: [7:0.67]
12965; SANDY-NEXT:    #NO_APP
12966; SANDY-NEXT:    retq # sched: [1:1.00]
12967;
12968; HASWELL-LABEL: test_sbb_16:
12969; HASWELL:       # %bb.0:
12970; HASWELL-NEXT:    #APP
12971; HASWELL-NEXT:    sbbw $511, %ax # imm = 0x1FF
12972; HASWELL-NEXT:    # sched: [2:0.50]
12973; HASWELL-NEXT:    sbbw $511, %di # imm = 0x1FF
12974; HASWELL-NEXT:    # sched: [2:0.50]
12975; HASWELL-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
12976; HASWELL-NEXT:    # sched: [9:1.00]
12977; HASWELL-NEXT:    sbbw $7, %di # sched: [2:0.50]
12978; HASWELL-NEXT:    sbbw $7, (%rsi) # sched: [9:1.00]
12979; HASWELL-NEXT:    sbbw %dx, %di # sched: [2:0.50]
12980; HASWELL-NEXT:    sbbw %di, (%rsi) # sched: [9:1.00]
12981; HASWELL-NEXT:    sbbw (%rsi), %di # sched: [7:0.50]
12982; HASWELL-NEXT:    #NO_APP
12983; HASWELL-NEXT:    retq # sched: [7:1.00]
12984;
12985; BROADWELL-LABEL: test_sbb_16:
12986; BROADWELL:       # %bb.0:
12987; BROADWELL-NEXT:    #APP
12988; BROADWELL-NEXT:    sbbw $511, %ax # imm = 0x1FF
12989; BROADWELL-NEXT:    # sched: [1:0.50]
12990; BROADWELL-NEXT:    sbbw $511, %di # imm = 0x1FF
12991; BROADWELL-NEXT:    # sched: [1:0.50]
12992; BROADWELL-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
12993; BROADWELL-NEXT:    # sched: [8:1.00]
12994; BROADWELL-NEXT:    sbbw $7, %di # sched: [1:0.50]
12995; BROADWELL-NEXT:    sbbw $7, (%rsi) # sched: [8:1.00]
12996; BROADWELL-NEXT:    sbbw %dx, %di # sched: [1:0.50]
12997; BROADWELL-NEXT:    sbbw %di, (%rsi) # sched: [8:1.00]
12998; BROADWELL-NEXT:    sbbw (%rsi), %di # sched: [6:0.50]
12999; BROADWELL-NEXT:    #NO_APP
13000; BROADWELL-NEXT:    retq # sched: [7:1.00]
13001;
13002; SKYLAKE-LABEL: test_sbb_16:
13003; SKYLAKE:       # %bb.0:
13004; SKYLAKE-NEXT:    #APP
13005; SKYLAKE-NEXT:    sbbw $511, %ax # imm = 0x1FF
13006; SKYLAKE-NEXT:    # sched: [1:0.50]
13007; SKYLAKE-NEXT:    sbbw $511, %di # imm = 0x1FF
13008; SKYLAKE-NEXT:    # sched: [1:0.50]
13009; SKYLAKE-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
13010; SKYLAKE-NEXT:    # sched: [8:1.00]
13011; SKYLAKE-NEXT:    sbbw $7, %di # sched: [1:0.50]
13012; SKYLAKE-NEXT:    sbbw $7, (%rsi) # sched: [8:1.00]
13013; SKYLAKE-NEXT:    sbbw %dx, %di # sched: [1:0.50]
13014; SKYLAKE-NEXT:    sbbw %di, (%rsi) # sched: [8:1.00]
13015; SKYLAKE-NEXT:    sbbw (%rsi), %di # sched: [6:0.50]
13016; SKYLAKE-NEXT:    #NO_APP
13017; SKYLAKE-NEXT:    retq # sched: [7:1.00]
13018;
13019; SKX-LABEL: test_sbb_16:
13020; SKX:       # %bb.0:
13021; SKX-NEXT:    #APP
13022; SKX-NEXT:    sbbw $511, %ax # imm = 0x1FF
13023; SKX-NEXT:    # sched: [1:0.50]
13024; SKX-NEXT:    sbbw $511, %di # imm = 0x1FF
13025; SKX-NEXT:    # sched: [1:0.50]
13026; SKX-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
13027; SKX-NEXT:    # sched: [8:1.00]
13028; SKX-NEXT:    sbbw $7, %di # sched: [1:0.50]
13029; SKX-NEXT:    sbbw $7, (%rsi) # sched: [8:1.00]
13030; SKX-NEXT:    sbbw %dx, %di # sched: [1:0.50]
13031; SKX-NEXT:    sbbw %di, (%rsi) # sched: [8:1.00]
13032; SKX-NEXT:    sbbw (%rsi), %di # sched: [6:0.50]
13033; SKX-NEXT:    #NO_APP
13034; SKX-NEXT:    retq # sched: [7:1.00]
13035;
13036; BTVER2-LABEL: test_sbb_16:
13037; BTVER2:       # %bb.0:
13038; BTVER2-NEXT:    #APP
13039; BTVER2-NEXT:    sbbw $511, %ax # imm = 0x1FF
13040; BTVER2-NEXT:    # sched: [1:1.00]
13041; BTVER2-NEXT:    sbbw $511, %di # imm = 0x1FF
13042; BTVER2-NEXT:    # sched: [1:1.00]
13043; BTVER2-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
13044; BTVER2-NEXT:    # sched: [5:1.00]
13045; BTVER2-NEXT:    sbbw $7, %di # sched: [1:1.00]
13046; BTVER2-NEXT:    sbbw $7, (%rsi) # sched: [5:1.00]
13047; BTVER2-NEXT:    sbbw %dx, %di # sched: [1:1.00]
13048; BTVER2-NEXT:    sbbw %di, (%rsi) # sched: [5:1.00]
13049; BTVER2-NEXT:    sbbw (%rsi), %di # sched: [4:1.00]
13050; BTVER2-NEXT:    #NO_APP
13051; BTVER2-NEXT:    retq # sched: [4:1.00]
13052;
13053; ZNVER1-LABEL: test_sbb_16:
13054; ZNVER1:       # %bb.0:
13055; ZNVER1-NEXT:    #APP
13056; ZNVER1-NEXT:    sbbw $511, %ax # imm = 0x1FF
13057; ZNVER1-NEXT:    # sched: [1:0.25]
13058; ZNVER1-NEXT:    sbbw $511, %di # imm = 0x1FF
13059; ZNVER1-NEXT:    # sched: [1:0.25]
13060; ZNVER1-NEXT:    sbbw $511, (%rsi) # imm = 0x1FF
13061; ZNVER1-NEXT:    # sched: [5:0.50]
13062; ZNVER1-NEXT:    sbbw $7, %di # sched: [1:0.25]
13063; ZNVER1-NEXT:    sbbw $7, (%rsi) # sched: [5:0.50]
13064; ZNVER1-NEXT:    sbbw %dx, %di # sched: [1:0.25]
13065; ZNVER1-NEXT:    sbbw %di, (%rsi) # sched: [5:0.50]
13066; ZNVER1-NEXT:    sbbw (%rsi), %di # sched: [5:0.50]
13067; ZNVER1-NEXT:    #NO_APP
13068; ZNVER1-NEXT:    retq # sched: [1:0.50]
13069  tail call void asm "sbbw $3, %AX \0A\09 sbbw $3, $0 \0A\09 sbbw $3, $2 \0A\09 sbbw $4, $0 \0A\09 sbbw $4, $2 \0A\09 sbbw $1, $0 \0A\09 sbbw $0, $2 \0A\09 sbbw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
13070  ret void
13071}
13072define void @test_sbb_32(i32 %a0, i32* %a1, i32 %a2) optsize {
13073; GENERIC-LABEL: test_sbb_32:
13074; GENERIC:       # %bb.0:
13075; GENERIC-NEXT:    #APP
13076; GENERIC-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13077; GENERIC-NEXT:    # sched: [2:0.67]
13078; GENERIC-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13079; GENERIC-NEXT:    # sched: [2:0.67]
13080; GENERIC-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13081; GENERIC-NEXT:    # sched: [9:1.00]
13082; GENERIC-NEXT:    sbbl $7, %edi # sched: [2:0.67]
13083; GENERIC-NEXT:    sbbl $7, (%rsi) # sched: [9:1.00]
13084; GENERIC-NEXT:    sbbl %edx, %edi # sched: [2:0.67]
13085; GENERIC-NEXT:    sbbl %edi, (%rsi) # sched: [9:1.00]
13086; GENERIC-NEXT:    sbbl (%rsi), %edi # sched: [7:0.67]
13087; GENERIC-NEXT:    #NO_APP
13088; GENERIC-NEXT:    retq # sched: [1:1.00]
13089;
13090; ATOM-LABEL: test_sbb_32:
13091; ATOM:       # %bb.0:
13092; ATOM-NEXT:    #APP
13093; ATOM-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13094; ATOM-NEXT:    # sched: [1:0.50]
13095; ATOM-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13096; ATOM-NEXT:    # sched: [1:0.50]
13097; ATOM-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13098; ATOM-NEXT:    # sched: [1:1.00]
13099; ATOM-NEXT:    sbbl $7, %edi # sched: [1:0.50]
13100; ATOM-NEXT:    sbbl $7, (%rsi) # sched: [1:1.00]
13101; ATOM-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
13102; ATOM-NEXT:    sbbl %edi, (%rsi) # sched: [1:1.00]
13103; ATOM-NEXT:    sbbl (%rsi), %edi # sched: [1:1.00]
13104; ATOM-NEXT:    #NO_APP
13105; ATOM-NEXT:    retq # sched: [79:39.50]
13106;
13107; SLM-LABEL: test_sbb_32:
13108; SLM:       # %bb.0:
13109; SLM-NEXT:    #APP
13110; SLM-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13111; SLM-NEXT:    # sched: [1:0.50]
13112; SLM-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13113; SLM-NEXT:    # sched: [1:0.50]
13114; SLM-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13115; SLM-NEXT:    # sched: [5:2.00]
13116; SLM-NEXT:    sbbl $7, %edi # sched: [1:0.50]
13117; SLM-NEXT:    sbbl $7, (%rsi) # sched: [5:2.00]
13118; SLM-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
13119; SLM-NEXT:    sbbl %edi, (%rsi) # sched: [5:2.00]
13120; SLM-NEXT:    sbbl (%rsi), %edi # sched: [4:1.00]
13121; SLM-NEXT:    #NO_APP
13122; SLM-NEXT:    retq # sched: [4:1.00]
13123;
13124; SANDY-LABEL: test_sbb_32:
13125; SANDY:       # %bb.0:
13126; SANDY-NEXT:    #APP
13127; SANDY-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13128; SANDY-NEXT:    # sched: [2:0.67]
13129; SANDY-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13130; SANDY-NEXT:    # sched: [2:0.67]
13131; SANDY-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13132; SANDY-NEXT:    # sched: [9:1.00]
13133; SANDY-NEXT:    sbbl $7, %edi # sched: [2:0.67]
13134; SANDY-NEXT:    sbbl $7, (%rsi) # sched: [9:1.00]
13135; SANDY-NEXT:    sbbl %edx, %edi # sched: [2:0.67]
13136; SANDY-NEXT:    sbbl %edi, (%rsi) # sched: [9:1.00]
13137; SANDY-NEXT:    sbbl (%rsi), %edi # sched: [7:0.67]
13138; SANDY-NEXT:    #NO_APP
13139; SANDY-NEXT:    retq # sched: [1:1.00]
13140;
13141; HASWELL-LABEL: test_sbb_32:
13142; HASWELL:       # %bb.0:
13143; HASWELL-NEXT:    #APP
13144; HASWELL-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13145; HASWELL-NEXT:    # sched: [2:0.50]
13146; HASWELL-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13147; HASWELL-NEXT:    # sched: [2:0.50]
13148; HASWELL-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13149; HASWELL-NEXT:    # sched: [9:1.00]
13150; HASWELL-NEXT:    sbbl $7, %edi # sched: [2:0.50]
13151; HASWELL-NEXT:    sbbl $7, (%rsi) # sched: [9:1.00]
13152; HASWELL-NEXT:    sbbl %edx, %edi # sched: [2:0.50]
13153; HASWELL-NEXT:    sbbl %edi, (%rsi) # sched: [9:1.00]
13154; HASWELL-NEXT:    sbbl (%rsi), %edi # sched: [7:0.50]
13155; HASWELL-NEXT:    #NO_APP
13156; HASWELL-NEXT:    retq # sched: [7:1.00]
13157;
13158; BROADWELL-LABEL: test_sbb_32:
13159; BROADWELL:       # %bb.0:
13160; BROADWELL-NEXT:    #APP
13161; BROADWELL-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13162; BROADWELL-NEXT:    # sched: [1:0.50]
13163; BROADWELL-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13164; BROADWELL-NEXT:    # sched: [1:0.50]
13165; BROADWELL-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13166; BROADWELL-NEXT:    # sched: [8:1.00]
13167; BROADWELL-NEXT:    sbbl $7, %edi # sched: [1:0.50]
13168; BROADWELL-NEXT:    sbbl $7, (%rsi) # sched: [8:1.00]
13169; BROADWELL-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
13170; BROADWELL-NEXT:    sbbl %edi, (%rsi) # sched: [8:1.00]
13171; BROADWELL-NEXT:    sbbl (%rsi), %edi # sched: [6:0.50]
13172; BROADWELL-NEXT:    #NO_APP
13173; BROADWELL-NEXT:    retq # sched: [7:1.00]
13174;
13175; SKYLAKE-LABEL: test_sbb_32:
13176; SKYLAKE:       # %bb.0:
13177; SKYLAKE-NEXT:    #APP
13178; SKYLAKE-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13179; SKYLAKE-NEXT:    # sched: [1:0.50]
13180; SKYLAKE-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13181; SKYLAKE-NEXT:    # sched: [1:0.50]
13182; SKYLAKE-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13183; SKYLAKE-NEXT:    # sched: [8:1.00]
13184; SKYLAKE-NEXT:    sbbl $7, %edi # sched: [1:0.50]
13185; SKYLAKE-NEXT:    sbbl $7, (%rsi) # sched: [8:1.00]
13186; SKYLAKE-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
13187; SKYLAKE-NEXT:    sbbl %edi, (%rsi) # sched: [8:1.00]
13188; SKYLAKE-NEXT:    sbbl (%rsi), %edi # sched: [6:0.50]
13189; SKYLAKE-NEXT:    #NO_APP
13190; SKYLAKE-NEXT:    retq # sched: [7:1.00]
13191;
13192; SKX-LABEL: test_sbb_32:
13193; SKX:       # %bb.0:
13194; SKX-NEXT:    #APP
13195; SKX-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13196; SKX-NEXT:    # sched: [1:0.50]
13197; SKX-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13198; SKX-NEXT:    # sched: [1:0.50]
13199; SKX-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13200; SKX-NEXT:    # sched: [8:1.00]
13201; SKX-NEXT:    sbbl $7, %edi # sched: [1:0.50]
13202; SKX-NEXT:    sbbl $7, (%rsi) # sched: [8:1.00]
13203; SKX-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
13204; SKX-NEXT:    sbbl %edi, (%rsi) # sched: [8:1.00]
13205; SKX-NEXT:    sbbl (%rsi), %edi # sched: [6:0.50]
13206; SKX-NEXT:    #NO_APP
13207; SKX-NEXT:    retq # sched: [7:1.00]
13208;
13209; BTVER2-LABEL: test_sbb_32:
13210; BTVER2:       # %bb.0:
13211; BTVER2-NEXT:    #APP
13212; BTVER2-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13213; BTVER2-NEXT:    # sched: [1:1.00]
13214; BTVER2-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13215; BTVER2-NEXT:    # sched: [1:1.00]
13216; BTVER2-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13217; BTVER2-NEXT:    # sched: [5:1.00]
13218; BTVER2-NEXT:    sbbl $7, %edi # sched: [1:1.00]
13219; BTVER2-NEXT:    sbbl $7, (%rsi) # sched: [5:1.00]
13220; BTVER2-NEXT:    sbbl %edx, %edi # sched: [1:1.00]
13221; BTVER2-NEXT:    sbbl %edi, (%rsi) # sched: [5:1.00]
13222; BTVER2-NEXT:    sbbl (%rsi), %edi # sched: [4:1.00]
13223; BTVER2-NEXT:    #NO_APP
13224; BTVER2-NEXT:    retq # sched: [4:1.00]
13225;
13226; ZNVER1-LABEL: test_sbb_32:
13227; ZNVER1:       # %bb.0:
13228; ZNVER1-NEXT:    #APP
13229; ZNVER1-NEXT:    sbbl $665536, %eax # imm = 0xA27C0
13230; ZNVER1-NEXT:    # sched: [1:0.25]
13231; ZNVER1-NEXT:    sbbl $665536, %edi # imm = 0xA27C0
13232; ZNVER1-NEXT:    # sched: [1:0.25]
13233; ZNVER1-NEXT:    sbbl $665536, (%rsi) # imm = 0xA27C0
13234; ZNVER1-NEXT:    # sched: [5:0.50]
13235; ZNVER1-NEXT:    sbbl $7, %edi # sched: [1:0.25]
13236; ZNVER1-NEXT:    sbbl $7, (%rsi) # sched: [5:0.50]
13237; ZNVER1-NEXT:    sbbl %edx, %edi # sched: [1:0.25]
13238; ZNVER1-NEXT:    sbbl %edi, (%rsi) # sched: [5:0.50]
13239; ZNVER1-NEXT:    sbbl (%rsi), %edi # sched: [5:0.50]
13240; ZNVER1-NEXT:    #NO_APP
13241; ZNVER1-NEXT:    retq # sched: [1:0.50]
13242  tail call void asm "sbbl $3, %EAX \0A\09 sbbl $3, $0 \0A\09 sbbl $3, $2 \0A\09 sbbl $4, $0 \0A\09 sbbl $4, $2 \0A\09 sbbl $1, $0 \0A\09 sbbl $0, $2 \0A\09 sbbl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
13243  ret void
13244}
13245define void @test_sbb_64(i64 %a0, i64* %a1, i64 %a2) optsize {
13246; GENERIC-LABEL: test_sbb_64:
13247; GENERIC:       # %bb.0:
13248; GENERIC-NEXT:    #APP
13249; GENERIC-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13250; GENERIC-NEXT:    # sched: [2:0.67]
13251; GENERIC-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13252; GENERIC-NEXT:    # sched: [2:0.67]
13253; GENERIC-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13254; GENERIC-NEXT:    # sched: [9:1.00]
13255; GENERIC-NEXT:    sbbq $7, %rdi # sched: [2:0.67]
13256; GENERIC-NEXT:    sbbq $7, (%rsi) # sched: [9:1.00]
13257; GENERIC-NEXT:    sbbq %rdx, %rdi # sched: [2:0.67]
13258; GENERIC-NEXT:    sbbq %rdi, (%rsi) # sched: [9:1.00]
13259; GENERIC-NEXT:    sbbq (%rsi), %rdi # sched: [7:0.67]
13260; GENERIC-NEXT:    #NO_APP
13261; GENERIC-NEXT:    retq # sched: [1:1.00]
13262;
13263; ATOM-LABEL: test_sbb_64:
13264; ATOM:       # %bb.0:
13265; ATOM-NEXT:    #APP
13266; ATOM-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13267; ATOM-NEXT:    # sched: [1:0.50]
13268; ATOM-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13269; ATOM-NEXT:    # sched: [1:0.50]
13270; ATOM-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13271; ATOM-NEXT:    # sched: [1:1.00]
13272; ATOM-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
13273; ATOM-NEXT:    sbbq $7, (%rsi) # sched: [1:1.00]
13274; ATOM-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
13275; ATOM-NEXT:    sbbq %rdi, (%rsi) # sched: [1:1.00]
13276; ATOM-NEXT:    sbbq (%rsi), %rdi # sched: [1:1.00]
13277; ATOM-NEXT:    #NO_APP
13278; ATOM-NEXT:    retq # sched: [79:39.50]
13279;
13280; SLM-LABEL: test_sbb_64:
13281; SLM:       # %bb.0:
13282; SLM-NEXT:    #APP
13283; SLM-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13284; SLM-NEXT:    # sched: [1:0.50]
13285; SLM-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13286; SLM-NEXT:    # sched: [1:0.50]
13287; SLM-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13288; SLM-NEXT:    # sched: [5:2.00]
13289; SLM-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
13290; SLM-NEXT:    sbbq $7, (%rsi) # sched: [5:2.00]
13291; SLM-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
13292; SLM-NEXT:    sbbq %rdi, (%rsi) # sched: [5:2.00]
13293; SLM-NEXT:    sbbq (%rsi), %rdi # sched: [4:1.00]
13294; SLM-NEXT:    #NO_APP
13295; SLM-NEXT:    retq # sched: [4:1.00]
13296;
13297; SANDY-LABEL: test_sbb_64:
13298; SANDY:       # %bb.0:
13299; SANDY-NEXT:    #APP
13300; SANDY-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13301; SANDY-NEXT:    # sched: [2:0.67]
13302; SANDY-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13303; SANDY-NEXT:    # sched: [2:0.67]
13304; SANDY-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13305; SANDY-NEXT:    # sched: [9:1.00]
13306; SANDY-NEXT:    sbbq $7, %rdi # sched: [2:0.67]
13307; SANDY-NEXT:    sbbq $7, (%rsi) # sched: [9:1.00]
13308; SANDY-NEXT:    sbbq %rdx, %rdi # sched: [2:0.67]
13309; SANDY-NEXT:    sbbq %rdi, (%rsi) # sched: [9:1.00]
13310; SANDY-NEXT:    sbbq (%rsi), %rdi # sched: [7:0.67]
13311; SANDY-NEXT:    #NO_APP
13312; SANDY-NEXT:    retq # sched: [1:1.00]
13313;
13314; HASWELL-LABEL: test_sbb_64:
13315; HASWELL:       # %bb.0:
13316; HASWELL-NEXT:    #APP
13317; HASWELL-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13318; HASWELL-NEXT:    # sched: [2:0.50]
13319; HASWELL-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13320; HASWELL-NEXT:    # sched: [2:0.50]
13321; HASWELL-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13322; HASWELL-NEXT:    # sched: [9:1.00]
13323; HASWELL-NEXT:    sbbq $7, %rdi # sched: [2:0.50]
13324; HASWELL-NEXT:    sbbq $7, (%rsi) # sched: [9:1.00]
13325; HASWELL-NEXT:    sbbq %rdx, %rdi # sched: [2:0.50]
13326; HASWELL-NEXT:    sbbq %rdi, (%rsi) # sched: [9:1.00]
13327; HASWELL-NEXT:    sbbq (%rsi), %rdi # sched: [7:0.50]
13328; HASWELL-NEXT:    #NO_APP
13329; HASWELL-NEXT:    retq # sched: [7:1.00]
13330;
13331; BROADWELL-LABEL: test_sbb_64:
13332; BROADWELL:       # %bb.0:
13333; BROADWELL-NEXT:    #APP
13334; BROADWELL-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13335; BROADWELL-NEXT:    # sched: [1:0.50]
13336; BROADWELL-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13337; BROADWELL-NEXT:    # sched: [1:0.50]
13338; BROADWELL-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13339; BROADWELL-NEXT:    # sched: [8:1.00]
13340; BROADWELL-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
13341; BROADWELL-NEXT:    sbbq $7, (%rsi) # sched: [8:1.00]
13342; BROADWELL-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
13343; BROADWELL-NEXT:    sbbq %rdi, (%rsi) # sched: [8:1.00]
13344; BROADWELL-NEXT:    sbbq (%rsi), %rdi # sched: [6:0.50]
13345; BROADWELL-NEXT:    #NO_APP
13346; BROADWELL-NEXT:    retq # sched: [7:1.00]
13347;
13348; SKYLAKE-LABEL: test_sbb_64:
13349; SKYLAKE:       # %bb.0:
13350; SKYLAKE-NEXT:    #APP
13351; SKYLAKE-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13352; SKYLAKE-NEXT:    # sched: [1:0.50]
13353; SKYLAKE-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13354; SKYLAKE-NEXT:    # sched: [1:0.50]
13355; SKYLAKE-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13356; SKYLAKE-NEXT:    # sched: [8:1.00]
13357; SKYLAKE-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
13358; SKYLAKE-NEXT:    sbbq $7, (%rsi) # sched: [8:1.00]
13359; SKYLAKE-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
13360; SKYLAKE-NEXT:    sbbq %rdi, (%rsi) # sched: [8:1.00]
13361; SKYLAKE-NEXT:    sbbq (%rsi), %rdi # sched: [6:0.50]
13362; SKYLAKE-NEXT:    #NO_APP
13363; SKYLAKE-NEXT:    retq # sched: [7:1.00]
13364;
13365; SKX-LABEL: test_sbb_64:
13366; SKX:       # %bb.0:
13367; SKX-NEXT:    #APP
13368; SKX-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13369; SKX-NEXT:    # sched: [1:0.50]
13370; SKX-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13371; SKX-NEXT:    # sched: [1:0.50]
13372; SKX-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13373; SKX-NEXT:    # sched: [8:1.00]
13374; SKX-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
13375; SKX-NEXT:    sbbq $7, (%rsi) # sched: [8:1.00]
13376; SKX-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
13377; SKX-NEXT:    sbbq %rdi, (%rsi) # sched: [8:1.00]
13378; SKX-NEXT:    sbbq (%rsi), %rdi # sched: [6:0.50]
13379; SKX-NEXT:    #NO_APP
13380; SKX-NEXT:    retq # sched: [7:1.00]
13381;
13382; BTVER2-LABEL: test_sbb_64:
13383; BTVER2:       # %bb.0:
13384; BTVER2-NEXT:    #APP
13385; BTVER2-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13386; BTVER2-NEXT:    # sched: [1:1.00]
13387; BTVER2-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13388; BTVER2-NEXT:    # sched: [1:1.00]
13389; BTVER2-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13390; BTVER2-NEXT:    # sched: [5:1.00]
13391; BTVER2-NEXT:    sbbq $7, %rdi # sched: [1:1.00]
13392; BTVER2-NEXT:    sbbq $7, (%rsi) # sched: [5:1.00]
13393; BTVER2-NEXT:    sbbq %rdx, %rdi # sched: [1:1.00]
13394; BTVER2-NEXT:    sbbq %rdi, (%rsi) # sched: [5:1.00]
13395; BTVER2-NEXT:    sbbq (%rsi), %rdi # sched: [4:1.00]
13396; BTVER2-NEXT:    #NO_APP
13397; BTVER2-NEXT:    retq # sched: [4:1.00]
13398;
13399; ZNVER1-LABEL: test_sbb_64:
13400; ZNVER1:       # %bb.0:
13401; ZNVER1-NEXT:    #APP
13402; ZNVER1-NEXT:    sbbq $665536, %rax # imm = 0xA27C0
13403; ZNVER1-NEXT:    # sched: [1:0.25]
13404; ZNVER1-NEXT:    sbbq $665536, %rdi # imm = 0xA27C0
13405; ZNVER1-NEXT:    # sched: [1:0.25]
13406; ZNVER1-NEXT:    sbbq $665536, (%rsi) # imm = 0xA27C0
13407; ZNVER1-NEXT:    # sched: [5:0.50]
13408; ZNVER1-NEXT:    sbbq $7, %rdi # sched: [1:0.25]
13409; ZNVER1-NEXT:    sbbq $7, (%rsi) # sched: [5:0.50]
13410; ZNVER1-NEXT:    sbbq %rdx, %rdi # sched: [1:0.25]
13411; ZNVER1-NEXT:    sbbq %rdi, (%rsi) # sched: [5:0.50]
13412; ZNVER1-NEXT:    sbbq (%rsi), %rdi # sched: [5:0.50]
13413; ZNVER1-NEXT:    #NO_APP
13414; ZNVER1-NEXT:    retq # sched: [1:0.50]
13415  tail call void asm "sbbq $3, %RAX \0A\09 sbbq $3, $0 \0A\09 sbbq $3, $2 \0A\09 sbbq $4, $0 \0A\09 sbbq $4, $2 \0A\09 sbbq $1, $0 \0A\09 sbbq $0, $2 \0A\09 sbbq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
13416  ret void
13417}
13418
13419define void @test_scas() optsize {
13420; GENERIC-LABEL: test_scas:
13421; GENERIC:       # %bb.0:
13422; GENERIC-NEXT:    #APP
13423; GENERIC-NEXT:    scasb %es:(%rdi), %al # sched: [2:0.67]
13424; GENERIC-NEXT:    scasw %es:(%rdi), %ax # sched: [2:0.67]
13425; GENERIC-NEXT:    scasl %es:(%rdi), %eax # sched: [2:0.67]
13426; GENERIC-NEXT:    scasq %es:(%rdi), %rax # sched: [2:0.67]
13427; GENERIC-NEXT:    #NO_APP
13428; GENERIC-NEXT:    retq # sched: [1:1.00]
13429;
13430; ATOM-LABEL: test_scas:
13431; ATOM:       # %bb.0:
13432; ATOM-NEXT:    #APP
13433; ATOM-NEXT:    scasb %es:(%rdi), %al # sched: [2:1.00]
13434; ATOM-NEXT:    scasw %es:(%rdi), %ax # sched: [2:1.00]
13435; ATOM-NEXT:    scasl %es:(%rdi), %eax # sched: [2:1.00]
13436; ATOM-NEXT:    scasq %es:(%rdi), %rax # sched: [2:1.00]
13437; ATOM-NEXT:    #NO_APP
13438; ATOM-NEXT:    retq # sched: [79:39.50]
13439;
13440; SLM-LABEL: test_scas:
13441; SLM:       # %bb.0:
13442; SLM-NEXT:    #APP
13443; SLM-NEXT:    scasb %es:(%rdi), %al # sched: [100:1.00]
13444; SLM-NEXT:    scasw %es:(%rdi), %ax # sched: [100:1.00]
13445; SLM-NEXT:    scasl %es:(%rdi), %eax # sched: [100:1.00]
13446; SLM-NEXT:    scasq %es:(%rdi), %rax # sched: [100:1.00]
13447; SLM-NEXT:    #NO_APP
13448; SLM-NEXT:    retq # sched: [4:1.00]
13449;
13450; SANDY-LABEL: test_scas:
13451; SANDY:       # %bb.0:
13452; SANDY-NEXT:    #APP
13453; SANDY-NEXT:    scasb %es:(%rdi), %al # sched: [2:0.67]
13454; SANDY-NEXT:    scasw %es:(%rdi), %ax # sched: [2:0.67]
13455; SANDY-NEXT:    scasl %es:(%rdi), %eax # sched: [2:0.67]
13456; SANDY-NEXT:    scasq %es:(%rdi), %rax # sched: [2:0.67]
13457; SANDY-NEXT:    #NO_APP
13458; SANDY-NEXT:    retq # sched: [1:1.00]
13459;
13460; HASWELL-LABEL: test_scas:
13461; HASWELL:       # %bb.0:
13462; HASWELL-NEXT:    #APP
13463; HASWELL-NEXT:    scasb %es:(%rdi), %al # sched: [7:0.50]
13464; HASWELL-NEXT:    scasw %es:(%rdi), %ax # sched: [7:0.50]
13465; HASWELL-NEXT:    scasl %es:(%rdi), %eax # sched: [7:0.50]
13466; HASWELL-NEXT:    scasq %es:(%rdi), %rax # sched: [7:0.50]
13467; HASWELL-NEXT:    #NO_APP
13468; HASWELL-NEXT:    retq # sched: [7:1.00]
13469;
13470; BROADWELL-LABEL: test_scas:
13471; BROADWELL:       # %bb.0:
13472; BROADWELL-NEXT:    #APP
13473; BROADWELL-NEXT:    scasb %es:(%rdi), %al # sched: [7:0.50]
13474; BROADWELL-NEXT:    scasw %es:(%rdi), %ax # sched: [7:0.50]
13475; BROADWELL-NEXT:    scasl %es:(%rdi), %eax # sched: [7:0.50]
13476; BROADWELL-NEXT:    scasq %es:(%rdi), %rax # sched: [7:0.50]
13477; BROADWELL-NEXT:    #NO_APP
13478; BROADWELL-NEXT:    retq # sched: [7:1.00]
13479;
13480; SKYLAKE-LABEL: test_scas:
13481; SKYLAKE:       # %bb.0:
13482; SKYLAKE-NEXT:    #APP
13483; SKYLAKE-NEXT:    scasb %es:(%rdi), %al # sched: [7:0.50]
13484; SKYLAKE-NEXT:    scasw %es:(%rdi), %ax # sched: [7:0.50]
13485; SKYLAKE-NEXT:    scasl %es:(%rdi), %eax # sched: [7:0.50]
13486; SKYLAKE-NEXT:    scasq %es:(%rdi), %rax # sched: [7:0.50]
13487; SKYLAKE-NEXT:    #NO_APP
13488; SKYLAKE-NEXT:    retq # sched: [7:1.00]
13489;
13490; SKX-LABEL: test_scas:
13491; SKX:       # %bb.0:
13492; SKX-NEXT:    #APP
13493; SKX-NEXT:    scasb %es:(%rdi), %al # sched: [7:0.50]
13494; SKX-NEXT:    scasw %es:(%rdi), %ax # sched: [7:0.50]
13495; SKX-NEXT:    scasl %es:(%rdi), %eax # sched: [7:0.50]
13496; SKX-NEXT:    scasq %es:(%rdi), %rax # sched: [7:0.50]
13497; SKX-NEXT:    #NO_APP
13498; SKX-NEXT:    retq # sched: [7:1.00]
13499;
13500; BTVER2-LABEL: test_scas:
13501; BTVER2:       # %bb.0:
13502; BTVER2-NEXT:    #APP
13503; BTVER2-NEXT:    scasb %es:(%rdi), %al # sched: [100:0.50]
13504; BTVER2-NEXT:    scasw %es:(%rdi), %ax # sched: [100:0.50]
13505; BTVER2-NEXT:    scasl %es:(%rdi), %eax # sched: [100:0.50]
13506; BTVER2-NEXT:    scasq %es:(%rdi), %rax # sched: [100:0.50]
13507; BTVER2-NEXT:    #NO_APP
13508; BTVER2-NEXT:    retq # sched: [4:1.00]
13509;
13510; ZNVER1-LABEL: test_scas:
13511; ZNVER1:       # %bb.0:
13512; ZNVER1-NEXT:    #APP
13513; ZNVER1-NEXT:    scasb %es:(%rdi), %al # sched: [100:0.25]
13514; ZNVER1-NEXT:    scasw %es:(%rdi), %ax # sched: [100:0.25]
13515; ZNVER1-NEXT:    scasl %es:(%rdi), %eax # sched: [100:0.25]
13516; ZNVER1-NEXT:    scasq %es:(%rdi), %rax # sched: [100:0.25]
13517; ZNVER1-NEXT:    #NO_APP
13518; ZNVER1-NEXT:    retq # sched: [1:0.50]
13519  call void asm sideeffect "scasb \0A\09 scasw \0A\09 scasl \0A\09 scasq", ""()
13520  ret void
13521}
13522
13523define void @test_setcc(i8 %a0, i8 *%a1) optsize {
13524; GENERIC-LABEL: test_setcc:
13525; GENERIC:       # %bb.0:
13526; GENERIC-NEXT:    #APP
13527; GENERIC-NEXT:    seto %dil # sched: [1:0.50]
13528; GENERIC-NEXT:    setno %dil # sched: [1:0.50]
13529; GENERIC-NEXT:    setb %dil # sched: [1:0.50]
13530; GENERIC-NEXT:    setae %dil # sched: [1:0.50]
13531; GENERIC-NEXT:    sete %dil # sched: [1:0.50]
13532; GENERIC-NEXT:    setne %dil # sched: [1:0.50]
13533; GENERIC-NEXT:    setbe %dil # sched: [2:1.00]
13534; GENERIC-NEXT:    seta %dil # sched: [2:1.00]
13535; GENERIC-NEXT:    sets %dil # sched: [1:0.50]
13536; GENERIC-NEXT:    setns %dil # sched: [1:0.50]
13537; GENERIC-NEXT:    setp %dil # sched: [1:0.50]
13538; GENERIC-NEXT:    setnp %dil # sched: [1:0.50]
13539; GENERIC-NEXT:    setl %dil # sched: [1:0.50]
13540; GENERIC-NEXT:    setge %dil # sched: [1:0.50]
13541; GENERIC-NEXT:    setle %dil # sched: [1:0.50]
13542; GENERIC-NEXT:    setg %dil # sched: [1:0.50]
13543; GENERIC-NEXT:    seto (%rsi) # sched: [2:1.00]
13544; GENERIC-NEXT:    setno (%rsi) # sched: [2:1.00]
13545; GENERIC-NEXT:    setb (%rsi) # sched: [2:1.00]
13546; GENERIC-NEXT:    setae (%rsi) # sched: [2:1.00]
13547; GENERIC-NEXT:    sete (%rsi) # sched: [2:1.00]
13548; GENERIC-NEXT:    setne (%rsi) # sched: [2:1.00]
13549; GENERIC-NEXT:    setbe (%rsi) # sched: [3:1.00]
13550; GENERIC-NEXT:    seta (%rsi) # sched: [3:1.00]
13551; GENERIC-NEXT:    sets (%rsi) # sched: [2:1.00]
13552; GENERIC-NEXT:    setns (%rsi) # sched: [2:1.00]
13553; GENERIC-NEXT:    setp (%rsi) # sched: [2:1.00]
13554; GENERIC-NEXT:    setnp (%rsi) # sched: [2:1.00]
13555; GENERIC-NEXT:    setl (%rsi) # sched: [2:1.00]
13556; GENERIC-NEXT:    setge (%rsi) # sched: [2:1.00]
13557; GENERIC-NEXT:    setle (%rsi) # sched: [2:1.00]
13558; GENERIC-NEXT:    setg (%rsi) # sched: [2:1.00]
13559; GENERIC-NEXT:    #NO_APP
13560; GENERIC-NEXT:    retq # sched: [1:1.00]
13561;
13562; ATOM-LABEL: test_setcc:
13563; ATOM:       # %bb.0:
13564; ATOM-NEXT:    #APP
13565; ATOM-NEXT:    seto %dil # sched: [1:0.50]
13566; ATOM-NEXT:    setno %dil # sched: [1:0.50]
13567; ATOM-NEXT:    setb %dil # sched: [1:0.50]
13568; ATOM-NEXT:    setae %dil # sched: [1:0.50]
13569; ATOM-NEXT:    sete %dil # sched: [1:0.50]
13570; ATOM-NEXT:    setne %dil # sched: [1:0.50]
13571; ATOM-NEXT:    setbe %dil # sched: [1:0.50]
13572; ATOM-NEXT:    seta %dil # sched: [1:0.50]
13573; ATOM-NEXT:    sets %dil # sched: [1:0.50]
13574; ATOM-NEXT:    setns %dil # sched: [1:0.50]
13575; ATOM-NEXT:    setp %dil # sched: [1:0.50]
13576; ATOM-NEXT:    setnp %dil # sched: [1:0.50]
13577; ATOM-NEXT:    setl %dil # sched: [1:0.50]
13578; ATOM-NEXT:    setge %dil # sched: [1:0.50]
13579; ATOM-NEXT:    setle %dil # sched: [1:0.50]
13580; ATOM-NEXT:    setg %dil # sched: [1:0.50]
13581; ATOM-NEXT:    seto (%rsi) # sched: [2:1.00]
13582; ATOM-NEXT:    setno (%rsi) # sched: [2:1.00]
13583; ATOM-NEXT:    setb (%rsi) # sched: [2:1.00]
13584; ATOM-NEXT:    setae (%rsi) # sched: [2:1.00]
13585; ATOM-NEXT:    sete (%rsi) # sched: [2:1.00]
13586; ATOM-NEXT:    setne (%rsi) # sched: [2:1.00]
13587; ATOM-NEXT:    setbe (%rsi) # sched: [2:1.00]
13588; ATOM-NEXT:    seta (%rsi) # sched: [2:1.00]
13589; ATOM-NEXT:    sets (%rsi) # sched: [2:1.00]
13590; ATOM-NEXT:    setns (%rsi) # sched: [2:1.00]
13591; ATOM-NEXT:    setp (%rsi) # sched: [2:1.00]
13592; ATOM-NEXT:    setnp (%rsi) # sched: [2:1.00]
13593; ATOM-NEXT:    setl (%rsi) # sched: [2:1.00]
13594; ATOM-NEXT:    setge (%rsi) # sched: [2:1.00]
13595; ATOM-NEXT:    setle (%rsi) # sched: [2:1.00]
13596; ATOM-NEXT:    setg (%rsi) # sched: [2:1.00]
13597; ATOM-NEXT:    #NO_APP
13598; ATOM-NEXT:    retq # sched: [79:39.50]
13599;
13600; SLM-LABEL: test_setcc:
13601; SLM:       # %bb.0:
13602; SLM-NEXT:    #APP
13603; SLM-NEXT:    seto %dil # sched: [1:0.50]
13604; SLM-NEXT:    setno %dil # sched: [1:0.50]
13605; SLM-NEXT:    setb %dil # sched: [1:0.50]
13606; SLM-NEXT:    setae %dil # sched: [1:0.50]
13607; SLM-NEXT:    sete %dil # sched: [1:0.50]
13608; SLM-NEXT:    setne %dil # sched: [1:0.50]
13609; SLM-NEXT:    setbe %dil # sched: [1:0.50]
13610; SLM-NEXT:    seta %dil # sched: [1:0.50]
13611; SLM-NEXT:    sets %dil # sched: [1:0.50]
13612; SLM-NEXT:    setns %dil # sched: [1:0.50]
13613; SLM-NEXT:    setp %dil # sched: [1:0.50]
13614; SLM-NEXT:    setnp %dil # sched: [1:0.50]
13615; SLM-NEXT:    setl %dil # sched: [1:0.50]
13616; SLM-NEXT:    setge %dil # sched: [1:0.50]
13617; SLM-NEXT:    setle %dil # sched: [1:0.50]
13618; SLM-NEXT:    setg %dil # sched: [1:0.50]
13619; SLM-NEXT:    seto (%rsi) # sched: [1:1.00]
13620; SLM-NEXT:    setno (%rsi) # sched: [1:1.00]
13621; SLM-NEXT:    setb (%rsi) # sched: [1:1.00]
13622; SLM-NEXT:    setae (%rsi) # sched: [1:1.00]
13623; SLM-NEXT:    sete (%rsi) # sched: [1:1.00]
13624; SLM-NEXT:    setne (%rsi) # sched: [1:1.00]
13625; SLM-NEXT:    setbe (%rsi) # sched: [1:1.00]
13626; SLM-NEXT:    seta (%rsi) # sched: [1:1.00]
13627; SLM-NEXT:    sets (%rsi) # sched: [1:1.00]
13628; SLM-NEXT:    setns (%rsi) # sched: [1:1.00]
13629; SLM-NEXT:    setp (%rsi) # sched: [1:1.00]
13630; SLM-NEXT:    setnp (%rsi) # sched: [1:1.00]
13631; SLM-NEXT:    setl (%rsi) # sched: [1:1.00]
13632; SLM-NEXT:    setge (%rsi) # sched: [1:1.00]
13633; SLM-NEXT:    setle (%rsi) # sched: [1:1.00]
13634; SLM-NEXT:    setg (%rsi) # sched: [1:1.00]
13635; SLM-NEXT:    #NO_APP
13636; SLM-NEXT:    retq # sched: [4:1.00]
13637;
13638; SANDY-LABEL: test_setcc:
13639; SANDY:       # %bb.0:
13640; SANDY-NEXT:    #APP
13641; SANDY-NEXT:    seto %dil # sched: [1:0.50]
13642; SANDY-NEXT:    setno %dil # sched: [1:0.50]
13643; SANDY-NEXT:    setb %dil # sched: [1:0.50]
13644; SANDY-NEXT:    setae %dil # sched: [1:0.50]
13645; SANDY-NEXT:    sete %dil # sched: [1:0.50]
13646; SANDY-NEXT:    setne %dil # sched: [1:0.50]
13647; SANDY-NEXT:    setbe %dil # sched: [2:1.00]
13648; SANDY-NEXT:    seta %dil # sched: [2:1.00]
13649; SANDY-NEXT:    sets %dil # sched: [1:0.50]
13650; SANDY-NEXT:    setns %dil # sched: [1:0.50]
13651; SANDY-NEXT:    setp %dil # sched: [1:0.50]
13652; SANDY-NEXT:    setnp %dil # sched: [1:0.50]
13653; SANDY-NEXT:    setl %dil # sched: [1:0.50]
13654; SANDY-NEXT:    setge %dil # sched: [1:0.50]
13655; SANDY-NEXT:    setle %dil # sched: [1:0.50]
13656; SANDY-NEXT:    setg %dil # sched: [1:0.50]
13657; SANDY-NEXT:    seto (%rsi) # sched: [2:1.00]
13658; SANDY-NEXT:    setno (%rsi) # sched: [2:1.00]
13659; SANDY-NEXT:    setb (%rsi) # sched: [2:1.00]
13660; SANDY-NEXT:    setae (%rsi) # sched: [2:1.00]
13661; SANDY-NEXT:    sete (%rsi) # sched: [2:1.00]
13662; SANDY-NEXT:    setne (%rsi) # sched: [2:1.00]
13663; SANDY-NEXT:    setbe (%rsi) # sched: [3:1.00]
13664; SANDY-NEXT:    seta (%rsi) # sched: [3:1.00]
13665; SANDY-NEXT:    sets (%rsi) # sched: [2:1.00]
13666; SANDY-NEXT:    setns (%rsi) # sched: [2:1.00]
13667; SANDY-NEXT:    setp (%rsi) # sched: [2:1.00]
13668; SANDY-NEXT:    setnp (%rsi) # sched: [2:1.00]
13669; SANDY-NEXT:    setl (%rsi) # sched: [2:1.00]
13670; SANDY-NEXT:    setge (%rsi) # sched: [2:1.00]
13671; SANDY-NEXT:    setle (%rsi) # sched: [2:1.00]
13672; SANDY-NEXT:    setg (%rsi) # sched: [2:1.00]
13673; SANDY-NEXT:    #NO_APP
13674; SANDY-NEXT:    retq # sched: [1:1.00]
13675;
13676; HASWELL-LABEL: test_setcc:
13677; HASWELL:       # %bb.0:
13678; HASWELL-NEXT:    #APP
13679; HASWELL-NEXT:    seto %dil # sched: [1:0.50]
13680; HASWELL-NEXT:    setno %dil # sched: [1:0.50]
13681; HASWELL-NEXT:    setb %dil # sched: [1:0.50]
13682; HASWELL-NEXT:    setae %dil # sched: [1:0.50]
13683; HASWELL-NEXT:    sete %dil # sched: [1:0.50]
13684; HASWELL-NEXT:    setne %dil # sched: [1:0.50]
13685; HASWELL-NEXT:    setbe %dil # sched: [2:0.50]
13686; HASWELL-NEXT:    seta %dil # sched: [2:0.50]
13687; HASWELL-NEXT:    sets %dil # sched: [1:0.50]
13688; HASWELL-NEXT:    setns %dil # sched: [1:0.50]
13689; HASWELL-NEXT:    setp %dil # sched: [1:0.50]
13690; HASWELL-NEXT:    setnp %dil # sched: [1:0.50]
13691; HASWELL-NEXT:    setl %dil # sched: [1:0.50]
13692; HASWELL-NEXT:    setge %dil # sched: [1:0.50]
13693; HASWELL-NEXT:    setle %dil # sched: [1:0.50]
13694; HASWELL-NEXT:    setg %dil # sched: [1:0.50]
13695; HASWELL-NEXT:    seto (%rsi) # sched: [2:1.00]
13696; HASWELL-NEXT:    setno (%rsi) # sched: [2:1.00]
13697; HASWELL-NEXT:    setb (%rsi) # sched: [2:1.00]
13698; HASWELL-NEXT:    setae (%rsi) # sched: [2:1.00]
13699; HASWELL-NEXT:    sete (%rsi) # sched: [2:1.00]
13700; HASWELL-NEXT:    setne (%rsi) # sched: [2:1.00]
13701; HASWELL-NEXT:    setbe (%rsi) # sched: [3:1.00]
13702; HASWELL-NEXT:    seta (%rsi) # sched: [3:1.00]
13703; HASWELL-NEXT:    sets (%rsi) # sched: [2:1.00]
13704; HASWELL-NEXT:    setns (%rsi) # sched: [2:1.00]
13705; HASWELL-NEXT:    setp (%rsi) # sched: [2:1.00]
13706; HASWELL-NEXT:    setnp (%rsi) # sched: [2:1.00]
13707; HASWELL-NEXT:    setl (%rsi) # sched: [2:1.00]
13708; HASWELL-NEXT:    setge (%rsi) # sched: [2:1.00]
13709; HASWELL-NEXT:    setle (%rsi) # sched: [2:1.00]
13710; HASWELL-NEXT:    setg (%rsi) # sched: [2:1.00]
13711; HASWELL-NEXT:    #NO_APP
13712; HASWELL-NEXT:    retq # sched: [7:1.00]
13713;
13714; BROADWELL-LABEL: test_setcc:
13715; BROADWELL:       # %bb.0:
13716; BROADWELL-NEXT:    #APP
13717; BROADWELL-NEXT:    seto %dil # sched: [1:0.50]
13718; BROADWELL-NEXT:    setno %dil # sched: [1:0.50]
13719; BROADWELL-NEXT:    setb %dil # sched: [1:0.50]
13720; BROADWELL-NEXT:    setae %dil # sched: [1:0.50]
13721; BROADWELL-NEXT:    sete %dil # sched: [1:0.50]
13722; BROADWELL-NEXT:    setne %dil # sched: [1:0.50]
13723; BROADWELL-NEXT:    setbe %dil # sched: [2:0.50]
13724; BROADWELL-NEXT:    seta %dil # sched: [2:0.50]
13725; BROADWELL-NEXT:    sets %dil # sched: [1:0.50]
13726; BROADWELL-NEXT:    setns %dil # sched: [1:0.50]
13727; BROADWELL-NEXT:    setp %dil # sched: [1:0.50]
13728; BROADWELL-NEXT:    setnp %dil # sched: [1:0.50]
13729; BROADWELL-NEXT:    setl %dil # sched: [1:0.50]
13730; BROADWELL-NEXT:    setge %dil # sched: [1:0.50]
13731; BROADWELL-NEXT:    setle %dil # sched: [1:0.50]
13732; BROADWELL-NEXT:    setg %dil # sched: [1:0.50]
13733; BROADWELL-NEXT:    seto (%rsi) # sched: [2:1.00]
13734; BROADWELL-NEXT:    setno (%rsi) # sched: [2:1.00]
13735; BROADWELL-NEXT:    setb (%rsi) # sched: [2:1.00]
13736; BROADWELL-NEXT:    setae (%rsi) # sched: [2:1.00]
13737; BROADWELL-NEXT:    sete (%rsi) # sched: [2:1.00]
13738; BROADWELL-NEXT:    setne (%rsi) # sched: [2:1.00]
13739; BROADWELL-NEXT:    setbe (%rsi) # sched: [3:1.00]
13740; BROADWELL-NEXT:    seta (%rsi) # sched: [3:1.00]
13741; BROADWELL-NEXT:    sets (%rsi) # sched: [2:1.00]
13742; BROADWELL-NEXT:    setns (%rsi) # sched: [2:1.00]
13743; BROADWELL-NEXT:    setp (%rsi) # sched: [2:1.00]
13744; BROADWELL-NEXT:    setnp (%rsi) # sched: [2:1.00]
13745; BROADWELL-NEXT:    setl (%rsi) # sched: [2:1.00]
13746; BROADWELL-NEXT:    setge (%rsi) # sched: [2:1.00]
13747; BROADWELL-NEXT:    setle (%rsi) # sched: [2:1.00]
13748; BROADWELL-NEXT:    setg (%rsi) # sched: [2:1.00]
13749; BROADWELL-NEXT:    #NO_APP
13750; BROADWELL-NEXT:    retq # sched: [7:1.00]
13751;
13752; SKYLAKE-LABEL: test_setcc:
13753; SKYLAKE:       # %bb.0:
13754; SKYLAKE-NEXT:    #APP
13755; SKYLAKE-NEXT:    seto %dil # sched: [1:0.50]
13756; SKYLAKE-NEXT:    setno %dil # sched: [1:0.50]
13757; SKYLAKE-NEXT:    setb %dil # sched: [1:0.50]
13758; SKYLAKE-NEXT:    setae %dil # sched: [1:0.50]
13759; SKYLAKE-NEXT:    sete %dil # sched: [1:0.50]
13760; SKYLAKE-NEXT:    setne %dil # sched: [1:0.50]
13761; SKYLAKE-NEXT:    setbe %dil # sched: [2:1.00]
13762; SKYLAKE-NEXT:    seta %dil # sched: [2:1.00]
13763; SKYLAKE-NEXT:    sets %dil # sched: [1:0.50]
13764; SKYLAKE-NEXT:    setns %dil # sched: [1:0.50]
13765; SKYLAKE-NEXT:    setp %dil # sched: [1:0.50]
13766; SKYLAKE-NEXT:    setnp %dil # sched: [1:0.50]
13767; SKYLAKE-NEXT:    setl %dil # sched: [1:0.50]
13768; SKYLAKE-NEXT:    setge %dil # sched: [1:0.50]
13769; SKYLAKE-NEXT:    setle %dil # sched: [1:0.50]
13770; SKYLAKE-NEXT:    setg %dil # sched: [1:0.50]
13771; SKYLAKE-NEXT:    seto (%rsi) # sched: [2:1.00]
13772; SKYLAKE-NEXT:    setno (%rsi) # sched: [2:1.00]
13773; SKYLAKE-NEXT:    setb (%rsi) # sched: [2:1.00]
13774; SKYLAKE-NEXT:    setae (%rsi) # sched: [2:1.00]
13775; SKYLAKE-NEXT:    sete (%rsi) # sched: [2:1.00]
13776; SKYLAKE-NEXT:    setne (%rsi) # sched: [2:1.00]
13777; SKYLAKE-NEXT:    setbe (%rsi) # sched: [3:1.00]
13778; SKYLAKE-NEXT:    seta (%rsi) # sched: [3:1.00]
13779; SKYLAKE-NEXT:    sets (%rsi) # sched: [2:1.00]
13780; SKYLAKE-NEXT:    setns (%rsi) # sched: [2:1.00]
13781; SKYLAKE-NEXT:    setp (%rsi) # sched: [2:1.00]
13782; SKYLAKE-NEXT:    setnp (%rsi) # sched: [2:1.00]
13783; SKYLAKE-NEXT:    setl (%rsi) # sched: [2:1.00]
13784; SKYLAKE-NEXT:    setge (%rsi) # sched: [2:1.00]
13785; SKYLAKE-NEXT:    setle (%rsi) # sched: [2:1.00]
13786; SKYLAKE-NEXT:    setg (%rsi) # sched: [2:1.00]
13787; SKYLAKE-NEXT:    #NO_APP
13788; SKYLAKE-NEXT:    retq # sched: [7:1.00]
13789;
13790; SKX-LABEL: test_setcc:
13791; SKX:       # %bb.0:
13792; SKX-NEXT:    #APP
13793; SKX-NEXT:    seto %dil # sched: [1:0.50]
13794; SKX-NEXT:    setno %dil # sched: [1:0.50]
13795; SKX-NEXT:    setb %dil # sched: [1:0.50]
13796; SKX-NEXT:    setae %dil # sched: [1:0.50]
13797; SKX-NEXT:    sete %dil # sched: [1:0.50]
13798; SKX-NEXT:    setne %dil # sched: [1:0.50]
13799; SKX-NEXT:    setbe %dil # sched: [2:1.00]
13800; SKX-NEXT:    seta %dil # sched: [2:1.00]
13801; SKX-NEXT:    sets %dil # sched: [1:0.50]
13802; SKX-NEXT:    setns %dil # sched: [1:0.50]
13803; SKX-NEXT:    setp %dil # sched: [1:0.50]
13804; SKX-NEXT:    setnp %dil # sched: [1:0.50]
13805; SKX-NEXT:    setl %dil # sched: [1:0.50]
13806; SKX-NEXT:    setge %dil # sched: [1:0.50]
13807; SKX-NEXT:    setle %dil # sched: [1:0.50]
13808; SKX-NEXT:    setg %dil # sched: [1:0.50]
13809; SKX-NEXT:    seto (%rsi) # sched: [2:1.00]
13810; SKX-NEXT:    setno (%rsi) # sched: [2:1.00]
13811; SKX-NEXT:    setb (%rsi) # sched: [2:1.00]
13812; SKX-NEXT:    setae (%rsi) # sched: [2:1.00]
13813; SKX-NEXT:    sete (%rsi) # sched: [2:1.00]
13814; SKX-NEXT:    setne (%rsi) # sched: [2:1.00]
13815; SKX-NEXT:    setbe (%rsi) # sched: [3:1.00]
13816; SKX-NEXT:    seta (%rsi) # sched: [3:1.00]
13817; SKX-NEXT:    sets (%rsi) # sched: [2:1.00]
13818; SKX-NEXT:    setns (%rsi) # sched: [2:1.00]
13819; SKX-NEXT:    setp (%rsi) # sched: [2:1.00]
13820; SKX-NEXT:    setnp (%rsi) # sched: [2:1.00]
13821; SKX-NEXT:    setl (%rsi) # sched: [2:1.00]
13822; SKX-NEXT:    setge (%rsi) # sched: [2:1.00]
13823; SKX-NEXT:    setle (%rsi) # sched: [2:1.00]
13824; SKX-NEXT:    setg (%rsi) # sched: [2:1.00]
13825; SKX-NEXT:    #NO_APP
13826; SKX-NEXT:    retq # sched: [7:1.00]
13827;
13828; BTVER2-LABEL: test_setcc:
13829; BTVER2:       # %bb.0:
13830; BTVER2-NEXT:    #APP
13831; BTVER2-NEXT:    seto %dil # sched: [1:0.50]
13832; BTVER2-NEXT:    setno %dil # sched: [1:0.50]
13833; BTVER2-NEXT:    setb %dil # sched: [1:0.50]
13834; BTVER2-NEXT:    setae %dil # sched: [1:0.50]
13835; BTVER2-NEXT:    sete %dil # sched: [1:0.50]
13836; BTVER2-NEXT:    setne %dil # sched: [1:0.50]
13837; BTVER2-NEXT:    setbe %dil # sched: [1:0.50]
13838; BTVER2-NEXT:    seta %dil # sched: [1:0.50]
13839; BTVER2-NEXT:    sets %dil # sched: [1:0.50]
13840; BTVER2-NEXT:    setns %dil # sched: [1:0.50]
13841; BTVER2-NEXT:    setp %dil # sched: [1:0.50]
13842; BTVER2-NEXT:    setnp %dil # sched: [1:0.50]
13843; BTVER2-NEXT:    setl %dil # sched: [1:0.50]
13844; BTVER2-NEXT:    setge %dil # sched: [1:0.50]
13845; BTVER2-NEXT:    setle %dil # sched: [1:0.50]
13846; BTVER2-NEXT:    setg %dil # sched: [1:0.50]
13847; BTVER2-NEXT:    seto (%rsi) # sched: [1:1.00]
13848; BTVER2-NEXT:    setno (%rsi) # sched: [1:1.00]
13849; BTVER2-NEXT:    setb (%rsi) # sched: [1:1.00]
13850; BTVER2-NEXT:    setae (%rsi) # sched: [1:1.00]
13851; BTVER2-NEXT:    sete (%rsi) # sched: [1:1.00]
13852; BTVER2-NEXT:    setne (%rsi) # sched: [1:1.00]
13853; BTVER2-NEXT:    setbe (%rsi) # sched: [1:1.00]
13854; BTVER2-NEXT:    seta (%rsi) # sched: [1:1.00]
13855; BTVER2-NEXT:    sets (%rsi) # sched: [1:1.00]
13856; BTVER2-NEXT:    setns (%rsi) # sched: [1:1.00]
13857; BTVER2-NEXT:    setp (%rsi) # sched: [1:1.00]
13858; BTVER2-NEXT:    setnp (%rsi) # sched: [1:1.00]
13859; BTVER2-NEXT:    setl (%rsi) # sched: [1:1.00]
13860; BTVER2-NEXT:    setge (%rsi) # sched: [1:1.00]
13861; BTVER2-NEXT:    setle (%rsi) # sched: [1:1.00]
13862; BTVER2-NEXT:    setg (%rsi) # sched: [1:1.00]
13863; BTVER2-NEXT:    #NO_APP
13864; BTVER2-NEXT:    retq # sched: [4:1.00]
13865;
13866; ZNVER1-LABEL: test_setcc:
13867; ZNVER1:       # %bb.0:
13868; ZNVER1-NEXT:    #APP
13869; ZNVER1-NEXT:    seto %dil # sched: [1:0.25]
13870; ZNVER1-NEXT:    setno %dil # sched: [1:0.25]
13871; ZNVER1-NEXT:    setb %dil # sched: [1:0.25]
13872; ZNVER1-NEXT:    setae %dil # sched: [1:0.25]
13873; ZNVER1-NEXT:    sete %dil # sched: [1:0.25]
13874; ZNVER1-NEXT:    setne %dil # sched: [1:0.25]
13875; ZNVER1-NEXT:    setbe %dil # sched: [1:0.25]
13876; ZNVER1-NEXT:    seta %dil # sched: [1:0.25]
13877; ZNVER1-NEXT:    sets %dil # sched: [1:0.25]
13878; ZNVER1-NEXT:    setns %dil # sched: [1:0.25]
13879; ZNVER1-NEXT:    setp %dil # sched: [1:0.25]
13880; ZNVER1-NEXT:    setnp %dil # sched: [1:0.25]
13881; ZNVER1-NEXT:    setl %dil # sched: [1:0.25]
13882; ZNVER1-NEXT:    setge %dil # sched: [1:0.25]
13883; ZNVER1-NEXT:    setle %dil # sched: [1:0.25]
13884; ZNVER1-NEXT:    setg %dil # sched: [1:0.25]
13885; ZNVER1-NEXT:    seto (%rsi) # sched: [1:0.50]
13886; ZNVER1-NEXT:    setno (%rsi) # sched: [1:0.50]
13887; ZNVER1-NEXT:    setb (%rsi) # sched: [1:0.50]
13888; ZNVER1-NEXT:    setae (%rsi) # sched: [1:0.50]
13889; ZNVER1-NEXT:    sete (%rsi) # sched: [1:0.50]
13890; ZNVER1-NEXT:    setne (%rsi) # sched: [1:0.50]
13891; ZNVER1-NEXT:    setbe (%rsi) # sched: [1:0.50]
13892; ZNVER1-NEXT:    seta (%rsi) # sched: [1:0.50]
13893; ZNVER1-NEXT:    sets (%rsi) # sched: [1:0.50]
13894; ZNVER1-NEXT:    setns (%rsi) # sched: [1:0.50]
13895; ZNVER1-NEXT:    setp (%rsi) # sched: [1:0.50]
13896; ZNVER1-NEXT:    setnp (%rsi) # sched: [1:0.50]
13897; ZNVER1-NEXT:    setl (%rsi) # sched: [1:0.50]
13898; ZNVER1-NEXT:    setge (%rsi) # sched: [1:0.50]
13899; ZNVER1-NEXT:    setle (%rsi) # sched: [1:0.50]
13900; ZNVER1-NEXT:    setg (%rsi) # sched: [1:0.50]
13901; ZNVER1-NEXT:    #NO_APP
13902; ZNVER1-NEXT:    retq # sched: [1:0.50]
13903  call void asm sideeffect "seto $0 \0A\09 setno $0 \0A\09 setb $0 \0A\09 setnb $0 \0A\09 setz $0 \0A\09 setnz $0 \0A\09 setbe $0 \0A\09 setnbe $0 \0A\09 sets $0 \0A\09 setns $0 \0A\09 setp $0 \0A\09 setnp $0 \0A\09 setl $0 \0A\09 setnl $0 \0A\09 setle $0 \0A\09 setnle $0 \0A\09 seto $1 \0A\09 setno $1 \0A\09 setb $1 \0A\09 setnb $1 \0A\09 setz $1 \0A\09 setnz $1 \0A\09 setbe $1 \0A\09 setnbe $1 \0A\09 sets $1 \0A\09 setns $1 \0A\09 setp $1 \0A\09 setnp $1 \0A\09 setl $1 \0A\09 setnl $1 \0A\09 setle $1 \0A\09 setnle $1", "r,*m"(i8 %a0, i8 *%a1)
13904  ret void
13905}
13906
13907; TODO - test_sgdt
13908
13909define void @test_shld_shrd_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
13910; GENERIC-LABEL: test_shld_shrd_16:
13911; GENERIC:       # %bb.0:
13912; GENERIC-NEXT:    #APP
13913; GENERIC-NEXT:    shldw %cl, %si, %di # sched: [4:1.50]
13914; GENERIC-NEXT:    shrdw %cl, %si, %di # sched: [4:1.50]
13915; GENERIC-NEXT:    shldw %cl, %si, (%rdx) # sched: [10:1.50]
13916; GENERIC-NEXT:    shrdw %cl, %si, (%rdx) # sched: [10:1.50]
13917; GENERIC-NEXT:    shldw $7, %si, %di # sched: [2:0.67]
13918; GENERIC-NEXT:    shrdw $7, %si, %di # sched: [2:0.67]
13919; GENERIC-NEXT:    shldw $7, %si, (%rdx) # sched: [8:1.00]
13920; GENERIC-NEXT:    shrdw $7, %si, (%rdx) # sched: [8:1.00]
13921; GENERIC-NEXT:    #NO_APP
13922; GENERIC-NEXT:    retq # sched: [1:1.00]
13923;
13924; ATOM-LABEL: test_shld_shrd_16:
13925; ATOM:       # %bb.0:
13926; ATOM-NEXT:    #APP
13927; ATOM-NEXT:    shldw %cl, %si, %di # sched: [6:3.00]
13928; ATOM-NEXT:    shrdw %cl, %si, %di # sched: [6:3.00]
13929; ATOM-NEXT:    shldw %cl, %si, (%rdx) # sched: [6:3.00]
13930; ATOM-NEXT:    shrdw %cl, %si, (%rdx) # sched: [6:3.00]
13931; ATOM-NEXT:    shldw $7, %si, %di # sched: [6:3.00]
13932; ATOM-NEXT:    shrdw $7, %si, %di # sched: [6:3.00]
13933; ATOM-NEXT:    shldw $7, %si, (%rdx) # sched: [6:3.00]
13934; ATOM-NEXT:    shrdw $7, %si, (%rdx) # sched: [6:3.00]
13935; ATOM-NEXT:    #NO_APP
13936; ATOM-NEXT:    retq # sched: [79:39.50]
13937;
13938; SLM-LABEL: test_shld_shrd_16:
13939; SLM:       # %bb.0:
13940; SLM-NEXT:    #APP
13941; SLM-NEXT:    shldw %cl, %si, %di # sched: [1:1.00]
13942; SLM-NEXT:    shrdw %cl, %si, %di # sched: [1:1.00]
13943; SLM-NEXT:    shldw %cl, %si, (%rdx) # sched: [4:2.00]
13944; SLM-NEXT:    shrdw %cl, %si, (%rdx) # sched: [4:2.00]
13945; SLM-NEXT:    shldw $7, %si, %di # sched: [1:1.00]
13946; SLM-NEXT:    shrdw $7, %si, %di # sched: [1:1.00]
13947; SLM-NEXT:    shldw $7, %si, (%rdx) # sched: [4:2.00]
13948; SLM-NEXT:    shrdw $7, %si, (%rdx) # sched: [4:2.00]
13949; SLM-NEXT:    #NO_APP
13950; SLM-NEXT:    retq # sched: [4:1.00]
13951;
13952; SANDY-LABEL: test_shld_shrd_16:
13953; SANDY:       # %bb.0:
13954; SANDY-NEXT:    #APP
13955; SANDY-NEXT:    shldw %cl, %si, %di # sched: [4:1.50]
13956; SANDY-NEXT:    shrdw %cl, %si, %di # sched: [4:1.50]
13957; SANDY-NEXT:    shldw %cl, %si, (%rdx) # sched: [10:1.50]
13958; SANDY-NEXT:    shrdw %cl, %si, (%rdx) # sched: [10:1.50]
13959; SANDY-NEXT:    shldw $7, %si, %di # sched: [2:0.67]
13960; SANDY-NEXT:    shrdw $7, %si, %di # sched: [2:0.67]
13961; SANDY-NEXT:    shldw $7, %si, (%rdx) # sched: [8:1.00]
13962; SANDY-NEXT:    shrdw $7, %si, (%rdx) # sched: [8:1.00]
13963; SANDY-NEXT:    #NO_APP
13964; SANDY-NEXT:    retq # sched: [1:1.00]
13965;
13966; HASWELL-LABEL: test_shld_shrd_16:
13967; HASWELL:       # %bb.0:
13968; HASWELL-NEXT:    #APP
13969; HASWELL-NEXT:    shldw %cl, %si, %di # sched: [6:1.00]
13970; HASWELL-NEXT:    shrdw %cl, %si, %di # sched: [6:1.00]
13971; HASWELL-NEXT:    shldw %cl, %si, (%rdx) # sched: [12:1.00]
13972; HASWELL-NEXT:    shrdw %cl, %si, (%rdx) # sched: [12:1.00]
13973; HASWELL-NEXT:    shldw $7, %si, %di # sched: [3:1.00]
13974; HASWELL-NEXT:    shrdw $7, %si, %di # sched: [3:1.00]
13975; HASWELL-NEXT:    shldw $7, %si, (%rdx) # sched: [10:1.00]
13976; HASWELL-NEXT:    shrdw $7, %si, (%rdx) # sched: [10:1.00]
13977; HASWELL-NEXT:    #NO_APP
13978; HASWELL-NEXT:    retq # sched: [7:1.00]
13979;
13980; BROADWELL-LABEL: test_shld_shrd_16:
13981; BROADWELL:       # %bb.0:
13982; BROADWELL-NEXT:    #APP
13983; BROADWELL-NEXT:    shldw %cl, %si, %di # sched: [6:1.00]
13984; BROADWELL-NEXT:    shrdw %cl, %si, %di # sched: [6:1.00]
13985; BROADWELL-NEXT:    shldw %cl, %si, (%rdx) # sched: [11:1.00]
13986; BROADWELL-NEXT:    shrdw %cl, %si, (%rdx) # sched: [11:1.00]
13987; BROADWELL-NEXT:    shldw $7, %si, %di # sched: [3:1.00]
13988; BROADWELL-NEXT:    shrdw $7, %si, %di # sched: [3:1.00]
13989; BROADWELL-NEXT:    shldw $7, %si, (%rdx) # sched: [9:1.00]
13990; BROADWELL-NEXT:    shrdw $7, %si, (%rdx) # sched: [9:1.00]
13991; BROADWELL-NEXT:    #NO_APP
13992; BROADWELL-NEXT:    retq # sched: [7:1.00]
13993;
13994; SKYLAKE-LABEL: test_shld_shrd_16:
13995; SKYLAKE:       # %bb.0:
13996; SKYLAKE-NEXT:    #APP
13997; SKYLAKE-NEXT:    shldw %cl, %si, %di # sched: [6:1.00]
13998; SKYLAKE-NEXT:    shrdw %cl, %si, %di # sched: [6:1.00]
13999; SKYLAKE-NEXT:    shldw %cl, %si, (%rdx) # sched: [11:1.00]
14000; SKYLAKE-NEXT:    shrdw %cl, %si, (%rdx) # sched: [11:1.00]
14001; SKYLAKE-NEXT:    shldw $7, %si, %di # sched: [3:1.00]
14002; SKYLAKE-NEXT:    shrdw $7, %si, %di # sched: [3:1.00]
14003; SKYLAKE-NEXT:    shldw $7, %si, (%rdx) # sched: [9:1.00]
14004; SKYLAKE-NEXT:    shrdw $7, %si, (%rdx) # sched: [9:1.00]
14005; SKYLAKE-NEXT:    #NO_APP
14006; SKYLAKE-NEXT:    retq # sched: [7:1.00]
14007;
14008; SKX-LABEL: test_shld_shrd_16:
14009; SKX:       # %bb.0:
14010; SKX-NEXT:    #APP
14011; SKX-NEXT:    shldw %cl, %si, %di # sched: [6:1.00]
14012; SKX-NEXT:    shrdw %cl, %si, %di # sched: [6:1.00]
14013; SKX-NEXT:    shldw %cl, %si, (%rdx) # sched: [11:1.00]
14014; SKX-NEXT:    shrdw %cl, %si, (%rdx) # sched: [11:1.00]
14015; SKX-NEXT:    shldw $7, %si, %di # sched: [3:1.00]
14016; SKX-NEXT:    shrdw $7, %si, %di # sched: [3:1.00]
14017; SKX-NEXT:    shldw $7, %si, (%rdx) # sched: [9:1.00]
14018; SKX-NEXT:    shrdw $7, %si, (%rdx) # sched: [9:1.00]
14019; SKX-NEXT:    #NO_APP
14020; SKX-NEXT:    retq # sched: [7:1.00]
14021;
14022; BTVER2-LABEL: test_shld_shrd_16:
14023; BTVER2:       # %bb.0:
14024; BTVER2-NEXT:    #APP
14025; BTVER2-NEXT:    shldw %cl, %si, %di # sched: [4:4.00]
14026; BTVER2-NEXT:    shrdw %cl, %si, %di # sched: [4:4.00]
14027; BTVER2-NEXT:    shldw %cl, %si, (%rdx) # sched: [9:11.00]
14028; BTVER2-NEXT:    shrdw %cl, %si, (%rdx) # sched: [9:11.00]
14029; BTVER2-NEXT:    shldw $7, %si, %di # sched: [3:3.00]
14030; BTVER2-NEXT:    shrdw $7, %si, %di # sched: [3:3.00]
14031; BTVER2-NEXT:    shldw $7, %si, (%rdx) # sched: [9:11.00]
14032; BTVER2-NEXT:    shrdw $7, %si, (%rdx) # sched: [9:11.00]
14033; BTVER2-NEXT:    #NO_APP
14034; BTVER2-NEXT:    retq # sched: [4:1.00]
14035;
14036; ZNVER1-LABEL: test_shld_shrd_16:
14037; ZNVER1:       # %bb.0:
14038; ZNVER1-NEXT:    #APP
14039; ZNVER1-NEXT:    shldw %cl, %si, %di # sched: [100:0.25]
14040; ZNVER1-NEXT:    shrdw %cl, %si, %di # sched: [100:0.25]
14041; ZNVER1-NEXT:    shldw %cl, %si, (%rdx) # sched: [100:0.25]
14042; ZNVER1-NEXT:    shrdw %cl, %si, (%rdx) # sched: [100:0.25]
14043; ZNVER1-NEXT:    shldw $7, %si, %di # sched: [1:0.25]
14044; ZNVER1-NEXT:    shrdw $7, %si, %di # sched: [1:0.25]
14045; ZNVER1-NEXT:    shldw $7, %si, (%rdx) # sched: [5:0.50]
14046; ZNVER1-NEXT:    shrdw $7, %si, (%rdx) # sched: [5:0.50]
14047; ZNVER1-NEXT:    #NO_APP
14048; ZNVER1-NEXT:    retq # sched: [1:0.50]
14049  call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i16 %a0, i16 %a1, i16 *%a2, i8 7)
14050  ret void
14051}
14052define void @test_shld_shrd_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
14053; GENERIC-LABEL: test_shld_shrd_32:
14054; GENERIC:       # %bb.0:
14055; GENERIC-NEXT:    #APP
14056; GENERIC-NEXT:    shldl %cl, %esi, %edi # sched: [4:1.50]
14057; GENERIC-NEXT:    shrdl %cl, %esi, %edi # sched: [4:1.50]
14058; GENERIC-NEXT:    shldl %cl, %esi, (%rdx) # sched: [10:1.50]
14059; GENERIC-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [10:1.50]
14060; GENERIC-NEXT:    shldl $7, %esi, %edi # sched: [2:0.67]
14061; GENERIC-NEXT:    shrdl $7, %esi, %edi # sched: [2:0.67]
14062; GENERIC-NEXT:    shldl $7, %esi, (%rdx) # sched: [8:1.00]
14063; GENERIC-NEXT:    shrdl $7, %esi, (%rdx) # sched: [8:1.00]
14064; GENERIC-NEXT:    #NO_APP
14065; GENERIC-NEXT:    retq # sched: [1:1.00]
14066;
14067; ATOM-LABEL: test_shld_shrd_32:
14068; ATOM:       # %bb.0:
14069; ATOM-NEXT:    #APP
14070; ATOM-NEXT:    shldl %cl, %esi, %edi # sched: [2:1.00]
14071; ATOM-NEXT:    shrdl %cl, %esi, %edi # sched: [2:1.00]
14072; ATOM-NEXT:    shldl %cl, %esi, (%rdx) # sched: [4:2.00]
14073; ATOM-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [4:2.00]
14074; ATOM-NEXT:    shldl $7, %esi, %edi # sched: [2:1.00]
14075; ATOM-NEXT:    shrdl $7, %esi, %edi # sched: [2:1.00]
14076; ATOM-NEXT:    shldl $7, %esi, (%rdx) # sched: [4:2.00]
14077; ATOM-NEXT:    shrdl $7, %esi, (%rdx) # sched: [4:2.00]
14078; ATOM-NEXT:    #NO_APP
14079; ATOM-NEXT:    retq # sched: [79:39.50]
14080;
14081; SLM-LABEL: test_shld_shrd_32:
14082; SLM:       # %bb.0:
14083; SLM-NEXT:    #APP
14084; SLM-NEXT:    shldl %cl, %esi, %edi # sched: [1:1.00]
14085; SLM-NEXT:    shrdl %cl, %esi, %edi # sched: [1:1.00]
14086; SLM-NEXT:    shldl %cl, %esi, (%rdx) # sched: [4:2.00]
14087; SLM-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [4:2.00]
14088; SLM-NEXT:    shldl $7, %esi, %edi # sched: [1:1.00]
14089; SLM-NEXT:    shrdl $7, %esi, %edi # sched: [1:1.00]
14090; SLM-NEXT:    shldl $7, %esi, (%rdx) # sched: [4:2.00]
14091; SLM-NEXT:    shrdl $7, %esi, (%rdx) # sched: [4:2.00]
14092; SLM-NEXT:    #NO_APP
14093; SLM-NEXT:    retq # sched: [4:1.00]
14094;
14095; SANDY-LABEL: test_shld_shrd_32:
14096; SANDY:       # %bb.0:
14097; SANDY-NEXT:    #APP
14098; SANDY-NEXT:    shldl %cl, %esi, %edi # sched: [4:1.50]
14099; SANDY-NEXT:    shrdl %cl, %esi, %edi # sched: [4:1.50]
14100; SANDY-NEXT:    shldl %cl, %esi, (%rdx) # sched: [10:1.50]
14101; SANDY-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [10:1.50]
14102; SANDY-NEXT:    shldl $7, %esi, %edi # sched: [2:0.67]
14103; SANDY-NEXT:    shrdl $7, %esi, %edi # sched: [2:0.67]
14104; SANDY-NEXT:    shldl $7, %esi, (%rdx) # sched: [8:1.00]
14105; SANDY-NEXT:    shrdl $7, %esi, (%rdx) # sched: [8:1.00]
14106; SANDY-NEXT:    #NO_APP
14107; SANDY-NEXT:    retq # sched: [1:1.00]
14108;
14109; HASWELL-LABEL: test_shld_shrd_32:
14110; HASWELL:       # %bb.0:
14111; HASWELL-NEXT:    #APP
14112; HASWELL-NEXT:    shldl %cl, %esi, %edi # sched: [6:1.00]
14113; HASWELL-NEXT:    shrdl %cl, %esi, %edi # sched: [6:1.00]
14114; HASWELL-NEXT:    shldl %cl, %esi, (%rdx) # sched: [12:1.00]
14115; HASWELL-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [12:1.00]
14116; HASWELL-NEXT:    shldl $7, %esi, %edi # sched: [3:1.00]
14117; HASWELL-NEXT:    shrdl $7, %esi, %edi # sched: [3:1.00]
14118; HASWELL-NEXT:    shldl $7, %esi, (%rdx) # sched: [10:1.00]
14119; HASWELL-NEXT:    shrdl $7, %esi, (%rdx) # sched: [10:1.00]
14120; HASWELL-NEXT:    #NO_APP
14121; HASWELL-NEXT:    retq # sched: [7:1.00]
14122;
14123; BROADWELL-LABEL: test_shld_shrd_32:
14124; BROADWELL:       # %bb.0:
14125; BROADWELL-NEXT:    #APP
14126; BROADWELL-NEXT:    shldl %cl, %esi, %edi # sched: [6:1.00]
14127; BROADWELL-NEXT:    shrdl %cl, %esi, %edi # sched: [6:1.00]
14128; BROADWELL-NEXT:    shldl %cl, %esi, (%rdx) # sched: [11:1.00]
14129; BROADWELL-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [11:1.00]
14130; BROADWELL-NEXT:    shldl $7, %esi, %edi # sched: [3:1.00]
14131; BROADWELL-NEXT:    shrdl $7, %esi, %edi # sched: [3:1.00]
14132; BROADWELL-NEXT:    shldl $7, %esi, (%rdx) # sched: [9:1.00]
14133; BROADWELL-NEXT:    shrdl $7, %esi, (%rdx) # sched: [9:1.00]
14134; BROADWELL-NEXT:    #NO_APP
14135; BROADWELL-NEXT:    retq # sched: [7:1.00]
14136;
14137; SKYLAKE-LABEL: test_shld_shrd_32:
14138; SKYLAKE:       # %bb.0:
14139; SKYLAKE-NEXT:    #APP
14140; SKYLAKE-NEXT:    shldl %cl, %esi, %edi # sched: [6:1.00]
14141; SKYLAKE-NEXT:    shrdl %cl, %esi, %edi # sched: [6:1.00]
14142; SKYLAKE-NEXT:    shldl %cl, %esi, (%rdx) # sched: [11:1.00]
14143; SKYLAKE-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [11:1.00]
14144; SKYLAKE-NEXT:    shldl $7, %esi, %edi # sched: [3:1.00]
14145; SKYLAKE-NEXT:    shrdl $7, %esi, %edi # sched: [3:1.00]
14146; SKYLAKE-NEXT:    shldl $7, %esi, (%rdx) # sched: [9:1.00]
14147; SKYLAKE-NEXT:    shrdl $7, %esi, (%rdx) # sched: [9:1.00]
14148; SKYLAKE-NEXT:    #NO_APP
14149; SKYLAKE-NEXT:    retq # sched: [7:1.00]
14150;
14151; SKX-LABEL: test_shld_shrd_32:
14152; SKX:       # %bb.0:
14153; SKX-NEXT:    #APP
14154; SKX-NEXT:    shldl %cl, %esi, %edi # sched: [6:1.00]
14155; SKX-NEXT:    shrdl %cl, %esi, %edi # sched: [6:1.00]
14156; SKX-NEXT:    shldl %cl, %esi, (%rdx) # sched: [11:1.00]
14157; SKX-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [11:1.00]
14158; SKX-NEXT:    shldl $7, %esi, %edi # sched: [3:1.00]
14159; SKX-NEXT:    shrdl $7, %esi, %edi # sched: [3:1.00]
14160; SKX-NEXT:    shldl $7, %esi, (%rdx) # sched: [9:1.00]
14161; SKX-NEXT:    shrdl $7, %esi, (%rdx) # sched: [9:1.00]
14162; SKX-NEXT:    #NO_APP
14163; SKX-NEXT:    retq # sched: [7:1.00]
14164;
14165; BTVER2-LABEL: test_shld_shrd_32:
14166; BTVER2:       # %bb.0:
14167; BTVER2-NEXT:    #APP
14168; BTVER2-NEXT:    shldl %cl, %esi, %edi # sched: [4:4.00]
14169; BTVER2-NEXT:    shrdl %cl, %esi, %edi # sched: [4:4.00]
14170; BTVER2-NEXT:    shldl %cl, %esi, (%rdx) # sched: [9:11.00]
14171; BTVER2-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [9:11.00]
14172; BTVER2-NEXT:    shldl $7, %esi, %edi # sched: [3:3.00]
14173; BTVER2-NEXT:    shrdl $7, %esi, %edi # sched: [3:3.00]
14174; BTVER2-NEXT:    shldl $7, %esi, (%rdx) # sched: [9:11.00]
14175; BTVER2-NEXT:    shrdl $7, %esi, (%rdx) # sched: [9:11.00]
14176; BTVER2-NEXT:    #NO_APP
14177; BTVER2-NEXT:    retq # sched: [4:1.00]
14178;
14179; ZNVER1-LABEL: test_shld_shrd_32:
14180; ZNVER1:       # %bb.0:
14181; ZNVER1-NEXT:    #APP
14182; ZNVER1-NEXT:    shldl %cl, %esi, %edi # sched: [100:0.25]
14183; ZNVER1-NEXT:    shrdl %cl, %esi, %edi # sched: [100:0.25]
14184; ZNVER1-NEXT:    shldl %cl, %esi, (%rdx) # sched: [100:0.25]
14185; ZNVER1-NEXT:    shrdl %cl, %esi, (%rdx) # sched: [100:0.25]
14186; ZNVER1-NEXT:    shldl $7, %esi, %edi # sched: [1:0.25]
14187; ZNVER1-NEXT:    shrdl $7, %esi, %edi # sched: [1:0.25]
14188; ZNVER1-NEXT:    shldl $7, %esi, (%rdx) # sched: [5:0.50]
14189; ZNVER1-NEXT:    shrdl $7, %esi, (%rdx) # sched: [5:0.50]
14190; ZNVER1-NEXT:    #NO_APP
14191; ZNVER1-NEXT:    retq # sched: [1:0.50]
14192  call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i32 %a0, i32 %a1, i32 *%a2, i8 7)
14193  ret void
14194}
14195define void @test_shld_shrd_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
14196; GENERIC-LABEL: test_shld_shrd_64:
14197; GENERIC:       # %bb.0:
14198; GENERIC-NEXT:    #APP
14199; GENERIC-NEXT:    shldq %cl, %rsi, %rdi # sched: [4:1.50]
14200; GENERIC-NEXT:    shrdq %cl, %rsi, %rdi # sched: [4:1.50]
14201; GENERIC-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [10:1.50]
14202; GENERIC-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [10:1.50]
14203; GENERIC-NEXT:    shldq $7, %rsi, %rdi # sched: [2:0.67]
14204; GENERIC-NEXT:    shrdq $7, %rsi, %rdi # sched: [2:0.67]
14205; GENERIC-NEXT:    shldq $7, %rsi, (%rdx) # sched: [8:1.00]
14206; GENERIC-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [8:1.00]
14207; GENERIC-NEXT:    #NO_APP
14208; GENERIC-NEXT:    retq # sched: [1:1.00]
14209;
14210; ATOM-LABEL: test_shld_shrd_64:
14211; ATOM:       # %bb.0:
14212; ATOM-NEXT:    #APP
14213; ATOM-NEXT:    shldq %cl, %rsi, %rdi # sched: [8:4.00]
14214; ATOM-NEXT:    shrdq %cl, %rsi, %rdi # sched: [8:4.00]
14215; ATOM-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [9:4.50]
14216; ATOM-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [9:4.50]
14217; ATOM-NEXT:    shldq $7, %rsi, %rdi # sched: [9:4.50]
14218; ATOM-NEXT:    shrdq $7, %rsi, %rdi # sched: [9:4.50]
14219; ATOM-NEXT:    shldq $7, %rsi, (%rdx) # sched: [9:4.50]
14220; ATOM-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [9:4.50]
14221; ATOM-NEXT:    #NO_APP
14222; ATOM-NEXT:    retq # sched: [79:39.50]
14223;
14224; SLM-LABEL: test_shld_shrd_64:
14225; SLM:       # %bb.0:
14226; SLM-NEXT:    #APP
14227; SLM-NEXT:    shldq %cl, %rsi, %rdi # sched: [1:1.00]
14228; SLM-NEXT:    shrdq %cl, %rsi, %rdi # sched: [1:1.00]
14229; SLM-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [4:2.00]
14230; SLM-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [4:2.00]
14231; SLM-NEXT:    shldq $7, %rsi, %rdi # sched: [1:1.00]
14232; SLM-NEXT:    shrdq $7, %rsi, %rdi # sched: [1:1.00]
14233; SLM-NEXT:    shldq $7, %rsi, (%rdx) # sched: [4:2.00]
14234; SLM-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [4:2.00]
14235; SLM-NEXT:    #NO_APP
14236; SLM-NEXT:    retq # sched: [4:1.00]
14237;
14238; SANDY-LABEL: test_shld_shrd_64:
14239; SANDY:       # %bb.0:
14240; SANDY-NEXT:    #APP
14241; SANDY-NEXT:    shldq %cl, %rsi, %rdi # sched: [4:1.50]
14242; SANDY-NEXT:    shrdq %cl, %rsi, %rdi # sched: [4:1.50]
14243; SANDY-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [10:1.50]
14244; SANDY-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [10:1.50]
14245; SANDY-NEXT:    shldq $7, %rsi, %rdi # sched: [2:0.67]
14246; SANDY-NEXT:    shrdq $7, %rsi, %rdi # sched: [2:0.67]
14247; SANDY-NEXT:    shldq $7, %rsi, (%rdx) # sched: [8:1.00]
14248; SANDY-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [8:1.00]
14249; SANDY-NEXT:    #NO_APP
14250; SANDY-NEXT:    retq # sched: [1:1.00]
14251;
14252; HASWELL-LABEL: test_shld_shrd_64:
14253; HASWELL:       # %bb.0:
14254; HASWELL-NEXT:    #APP
14255; HASWELL-NEXT:    shldq %cl, %rsi, %rdi # sched: [6:1.00]
14256; HASWELL-NEXT:    shrdq %cl, %rsi, %rdi # sched: [6:1.00]
14257; HASWELL-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [12:1.00]
14258; HASWELL-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [12:1.00]
14259; HASWELL-NEXT:    shldq $7, %rsi, %rdi # sched: [3:1.00]
14260; HASWELL-NEXT:    shrdq $7, %rsi, %rdi # sched: [3:1.00]
14261; HASWELL-NEXT:    shldq $7, %rsi, (%rdx) # sched: [10:1.00]
14262; HASWELL-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [10:1.00]
14263; HASWELL-NEXT:    #NO_APP
14264; HASWELL-NEXT:    retq # sched: [7:1.00]
14265;
14266; BROADWELL-LABEL: test_shld_shrd_64:
14267; BROADWELL:       # %bb.0:
14268; BROADWELL-NEXT:    #APP
14269; BROADWELL-NEXT:    shldq %cl, %rsi, %rdi # sched: [6:1.00]
14270; BROADWELL-NEXT:    shrdq %cl, %rsi, %rdi # sched: [6:1.00]
14271; BROADWELL-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [11:1.00]
14272; BROADWELL-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [11:1.00]
14273; BROADWELL-NEXT:    shldq $7, %rsi, %rdi # sched: [3:1.00]
14274; BROADWELL-NEXT:    shrdq $7, %rsi, %rdi # sched: [3:1.00]
14275; BROADWELL-NEXT:    shldq $7, %rsi, (%rdx) # sched: [9:1.00]
14276; BROADWELL-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [9:1.00]
14277; BROADWELL-NEXT:    #NO_APP
14278; BROADWELL-NEXT:    retq # sched: [7:1.00]
14279;
14280; SKYLAKE-LABEL: test_shld_shrd_64:
14281; SKYLAKE:       # %bb.0:
14282; SKYLAKE-NEXT:    #APP
14283; SKYLAKE-NEXT:    shldq %cl, %rsi, %rdi # sched: [6:1.00]
14284; SKYLAKE-NEXT:    shrdq %cl, %rsi, %rdi # sched: [6:1.00]
14285; SKYLAKE-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [11:1.00]
14286; SKYLAKE-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [11:1.00]
14287; SKYLAKE-NEXT:    shldq $7, %rsi, %rdi # sched: [3:1.00]
14288; SKYLAKE-NEXT:    shrdq $7, %rsi, %rdi # sched: [3:1.00]
14289; SKYLAKE-NEXT:    shldq $7, %rsi, (%rdx) # sched: [9:1.00]
14290; SKYLAKE-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [9:1.00]
14291; SKYLAKE-NEXT:    #NO_APP
14292; SKYLAKE-NEXT:    retq # sched: [7:1.00]
14293;
14294; SKX-LABEL: test_shld_shrd_64:
14295; SKX:       # %bb.0:
14296; SKX-NEXT:    #APP
14297; SKX-NEXT:    shldq %cl, %rsi, %rdi # sched: [6:1.00]
14298; SKX-NEXT:    shrdq %cl, %rsi, %rdi # sched: [6:1.00]
14299; SKX-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [11:1.00]
14300; SKX-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [11:1.00]
14301; SKX-NEXT:    shldq $7, %rsi, %rdi # sched: [3:1.00]
14302; SKX-NEXT:    shrdq $7, %rsi, %rdi # sched: [3:1.00]
14303; SKX-NEXT:    shldq $7, %rsi, (%rdx) # sched: [9:1.00]
14304; SKX-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [9:1.00]
14305; SKX-NEXT:    #NO_APP
14306; SKX-NEXT:    retq # sched: [7:1.00]
14307;
14308; BTVER2-LABEL: test_shld_shrd_64:
14309; BTVER2:       # %bb.0:
14310; BTVER2-NEXT:    #APP
14311; BTVER2-NEXT:    shldq %cl, %rsi, %rdi # sched: [4:4.00]
14312; BTVER2-NEXT:    shrdq %cl, %rsi, %rdi # sched: [4:4.00]
14313; BTVER2-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [9:11.00]
14314; BTVER2-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [9:11.00]
14315; BTVER2-NEXT:    shldq $7, %rsi, %rdi # sched: [3:3.00]
14316; BTVER2-NEXT:    shrdq $7, %rsi, %rdi # sched: [3:3.00]
14317; BTVER2-NEXT:    shldq $7, %rsi, (%rdx) # sched: [9:11.00]
14318; BTVER2-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [9:11.00]
14319; BTVER2-NEXT:    #NO_APP
14320; BTVER2-NEXT:    retq # sched: [4:1.00]
14321;
14322; ZNVER1-LABEL: test_shld_shrd_64:
14323; ZNVER1:       # %bb.0:
14324; ZNVER1-NEXT:    #APP
14325; ZNVER1-NEXT:    shldq %cl, %rsi, %rdi # sched: [100:0.25]
14326; ZNVER1-NEXT:    shrdq %cl, %rsi, %rdi # sched: [100:0.25]
14327; ZNVER1-NEXT:    shldq %cl, %rsi, (%rdx) # sched: [100:0.25]
14328; ZNVER1-NEXT:    shrdq %cl, %rsi, (%rdx) # sched: [100:0.25]
14329; ZNVER1-NEXT:    shldq $7, %rsi, %rdi # sched: [1:0.25]
14330; ZNVER1-NEXT:    shrdq $7, %rsi, %rdi # sched: [1:0.25]
14331; ZNVER1-NEXT:    shldq $7, %rsi, (%rdx) # sched: [5:0.50]
14332; ZNVER1-NEXT:    shrdq $7, %rsi, (%rdx) # sched: [5:0.50]
14333; ZNVER1-NEXT:    #NO_APP
14334; ZNVER1-NEXT:    retq # sched: [1:0.50]
14335  call void asm sideeffect "shld $1, $0 \0A\09 shrd $1, $0 \0A\09 shld $1, $2 \0A\09 shrd $1, $2 \0A\09 shld $3, $1, $0 \0A\09 shrd $3, $1, $0 \0A\09 shld $3, $1, $2 \0A\09 shrd $3, $1, $2", "r,r,*m,i"(i64 %a0, i64 %a1, i64 *%a2, i8 7)
14336  ret void
14337}
14338
14339; TODO - test_sidt
14340; TODO - test_sldt
14341; TODO - test_smsw
14342
14343define void @test_stc_std() optsize {
14344; GENERIC-LABEL: test_stc_std:
14345; GENERIC:       # %bb.0:
14346; GENERIC-NEXT:    #APP
14347; GENERIC-NEXT:    stc # sched: [1:0.33]
14348; GENERIC-NEXT:    std # sched: [1:0.33]
14349; GENERIC-NEXT:    #NO_APP
14350; GENERIC-NEXT:    retq # sched: [1:1.00]
14351;
14352; ATOM-LABEL: test_stc_std:
14353; ATOM:       # %bb.0:
14354; ATOM-NEXT:    #APP
14355; ATOM-NEXT:    stc # sched: [1:0.50]
14356; ATOM-NEXT:    std # sched: [21:10.50]
14357; ATOM-NEXT:    #NO_APP
14358; ATOM-NEXT:    retq # sched: [79:39.50]
14359;
14360; SLM-LABEL: test_stc_std:
14361; SLM:       # %bb.0:
14362; SLM-NEXT:    #APP
14363; SLM-NEXT:    stc # sched: [1:0.50]
14364; SLM-NEXT:    std # sched: [1:0.50]
14365; SLM-NEXT:    #NO_APP
14366; SLM-NEXT:    retq # sched: [4:1.00]
14367;
14368; SANDY-LABEL: test_stc_std:
14369; SANDY:       # %bb.0:
14370; SANDY-NEXT:    #APP
14371; SANDY-NEXT:    stc # sched: [1:0.33]
14372; SANDY-NEXT:    std # sched: [1:0.33]
14373; SANDY-NEXT:    #NO_APP
14374; SANDY-NEXT:    retq # sched: [1:1.00]
14375;
14376; HASWELL-LABEL: test_stc_std:
14377; HASWELL:       # %bb.0:
14378; HASWELL-NEXT:    #APP
14379; HASWELL-NEXT:    stc # sched: [1:0.25]
14380; HASWELL-NEXT:    std # sched: [6:1.50]
14381; HASWELL-NEXT:    #NO_APP
14382; HASWELL-NEXT:    retq # sched: [7:1.00]
14383;
14384; BROADWELL-LABEL: test_stc_std:
14385; BROADWELL:       # %bb.0:
14386; BROADWELL-NEXT:    #APP
14387; BROADWELL-NEXT:    stc # sched: [1:0.25]
14388; BROADWELL-NEXT:    std # sched: [6:1.50]
14389; BROADWELL-NEXT:    #NO_APP
14390; BROADWELL-NEXT:    retq # sched: [7:1.00]
14391;
14392; SKYLAKE-LABEL: test_stc_std:
14393; SKYLAKE:       # %bb.0:
14394; SKYLAKE-NEXT:    #APP
14395; SKYLAKE-NEXT:    stc # sched: [1:0.25]
14396; SKYLAKE-NEXT:    std # sched: [6:1.50]
14397; SKYLAKE-NEXT:    #NO_APP
14398; SKYLAKE-NEXT:    retq # sched: [7:1.00]
14399;
14400; SKX-LABEL: test_stc_std:
14401; SKX:       # %bb.0:
14402; SKX-NEXT:    #APP
14403; SKX-NEXT:    stc # sched: [1:0.25]
14404; SKX-NEXT:    std # sched: [6:1.50]
14405; SKX-NEXT:    #NO_APP
14406; SKX-NEXT:    retq # sched: [7:1.00]
14407;
14408; BTVER2-LABEL: test_stc_std:
14409; BTVER2:       # %bb.0:
14410; BTVER2-NEXT:    #APP
14411; BTVER2-NEXT:    stc # sched: [1:0.50]
14412; BTVER2-NEXT:    std # sched: [1:0.50]
14413; BTVER2-NEXT:    #NO_APP
14414; BTVER2-NEXT:    retq # sched: [4:1.00]
14415;
14416; ZNVER1-LABEL: test_stc_std:
14417; ZNVER1:       # %bb.0:
14418; ZNVER1-NEXT:    #APP
14419; ZNVER1-NEXT:    stc # sched: [1:0.25]
14420; ZNVER1-NEXT:    std # sched: [1:0.25]
14421; ZNVER1-NEXT:    #NO_APP
14422; ZNVER1-NEXT:    retq # sched: [1:0.50]
14423  call void asm sideeffect "stc \0A\09 std", ""()
14424  ret void
14425}
14426
14427; TODO - test_sti
14428; TODO - test_stgi
14429
14430define void @test_stos() optsize {
14431; GENERIC-LABEL: test_stos:
14432; GENERIC:       # %bb.0:
14433; GENERIC-NEXT:    #APP
14434; GENERIC-NEXT:    stosb %al, %es:(%rdi) # sched: [5:1.00]
14435; GENERIC-NEXT:    stosw %ax, %es:(%rdi) # sched: [5:1.00]
14436; GENERIC-NEXT:    stosl %eax, %es:(%rdi) # sched: [5:1.00]
14437; GENERIC-NEXT:    stosq %rax, %es:(%rdi) # sched: [5:1.00]
14438; GENERIC-NEXT:    #NO_APP
14439; GENERIC-NEXT:    retq # sched: [1:1.00]
14440;
14441; ATOM-LABEL: test_stos:
14442; ATOM:       # %bb.0:
14443; ATOM-NEXT:    #APP
14444; ATOM-NEXT:    stosb %al, %es:(%rdi) # sched: [1:0.50]
14445; ATOM-NEXT:    stosw %ax, %es:(%rdi) # sched: [1:0.50]
14446; ATOM-NEXT:    stosl %eax, %es:(%rdi) # sched: [1:0.50]
14447; ATOM-NEXT:    stosq %rax, %es:(%rdi) # sched: [1:0.50]
14448; ATOM-NEXT:    #NO_APP
14449; ATOM-NEXT:    retq # sched: [79:39.50]
14450;
14451; SLM-LABEL: test_stos:
14452; SLM:       # %bb.0:
14453; SLM-NEXT:    #APP
14454; SLM-NEXT:    stosb %al, %es:(%rdi) # sched: [100:1.00]
14455; SLM-NEXT:    stosw %ax, %es:(%rdi) # sched: [100:1.00]
14456; SLM-NEXT:    stosl %eax, %es:(%rdi) # sched: [100:1.00]
14457; SLM-NEXT:    stosq %rax, %es:(%rdi) # sched: [100:1.00]
14458; SLM-NEXT:    #NO_APP
14459; SLM-NEXT:    retq # sched: [4:1.00]
14460;
14461; SANDY-LABEL: test_stos:
14462; SANDY:       # %bb.0:
14463; SANDY-NEXT:    #APP
14464; SANDY-NEXT:    stosb %al, %es:(%rdi) # sched: [5:1.00]
14465; SANDY-NEXT:    stosw %ax, %es:(%rdi) # sched: [5:1.00]
14466; SANDY-NEXT:    stosl %eax, %es:(%rdi) # sched: [5:1.00]
14467; SANDY-NEXT:    stosq %rax, %es:(%rdi) # sched: [5:1.00]
14468; SANDY-NEXT:    #NO_APP
14469; SANDY-NEXT:    retq # sched: [1:1.00]
14470;
14471; HASWELL-LABEL: test_stos:
14472; HASWELL:       # %bb.0:
14473; HASWELL-NEXT:    #APP
14474; HASWELL-NEXT:    stosb %al, %es:(%rdi) # sched: [2:1.00]
14475; HASWELL-NEXT:    stosw %ax, %es:(%rdi) # sched: [2:1.00]
14476; HASWELL-NEXT:    stosl %eax, %es:(%rdi) # sched: [2:1.00]
14477; HASWELL-NEXT:    stosq %rax, %es:(%rdi) # sched: [2:1.00]
14478; HASWELL-NEXT:    #NO_APP
14479; HASWELL-NEXT:    retq # sched: [7:1.00]
14480;
14481; BROADWELL-LABEL: test_stos:
14482; BROADWELL:       # %bb.0:
14483; BROADWELL-NEXT:    #APP
14484; BROADWELL-NEXT:    stosb %al, %es:(%rdi) # sched: [2:1.00]
14485; BROADWELL-NEXT:    stosw %ax, %es:(%rdi) # sched: [2:1.00]
14486; BROADWELL-NEXT:    stosl %eax, %es:(%rdi) # sched: [2:1.00]
14487; BROADWELL-NEXT:    stosq %rax, %es:(%rdi) # sched: [2:1.00]
14488; BROADWELL-NEXT:    #NO_APP
14489; BROADWELL-NEXT:    retq # sched: [7:1.00]
14490;
14491; SKYLAKE-LABEL: test_stos:
14492; SKYLAKE:       # %bb.0:
14493; SKYLAKE-NEXT:    #APP
14494; SKYLAKE-NEXT:    stosb %al, %es:(%rdi) # sched: [2:1.00]
14495; SKYLAKE-NEXT:    stosw %ax, %es:(%rdi) # sched: [2:1.00]
14496; SKYLAKE-NEXT:    stosl %eax, %es:(%rdi) # sched: [2:1.00]
14497; SKYLAKE-NEXT:    stosq %rax, %es:(%rdi) # sched: [2:1.00]
14498; SKYLAKE-NEXT:    #NO_APP
14499; SKYLAKE-NEXT:    retq # sched: [7:1.00]
14500;
14501; SKX-LABEL: test_stos:
14502; SKX:       # %bb.0:
14503; SKX-NEXT:    #APP
14504; SKX-NEXT:    stosb %al, %es:(%rdi) # sched: [2:1.00]
14505; SKX-NEXT:    stosw %ax, %es:(%rdi) # sched: [2:1.00]
14506; SKX-NEXT:    stosl %eax, %es:(%rdi) # sched: [2:1.00]
14507; SKX-NEXT:    stosq %rax, %es:(%rdi) # sched: [2:1.00]
14508; SKX-NEXT:    #NO_APP
14509; SKX-NEXT:    retq # sched: [7:1.00]
14510;
14511; BTVER2-LABEL: test_stos:
14512; BTVER2:       # %bb.0:
14513; BTVER2-NEXT:    #APP
14514; BTVER2-NEXT:    stosb %al, %es:(%rdi) # sched: [100:0.50]
14515; BTVER2-NEXT:    stosw %ax, %es:(%rdi) # sched: [100:0.50]
14516; BTVER2-NEXT:    stosl %eax, %es:(%rdi) # sched: [100:0.50]
14517; BTVER2-NEXT:    stosq %rax, %es:(%rdi) # sched: [100:0.50]
14518; BTVER2-NEXT:    #NO_APP
14519; BTVER2-NEXT:    retq # sched: [4:1.00]
14520;
14521; ZNVER1-LABEL: test_stos:
14522; ZNVER1:       # %bb.0:
14523; ZNVER1-NEXT:    #APP
14524; ZNVER1-NEXT:    stosb %al, %es:(%rdi) # sched: [100:0.25]
14525; ZNVER1-NEXT:    stosw %ax, %es:(%rdi) # sched: [100:0.25]
14526; ZNVER1-NEXT:    stosl %eax, %es:(%rdi) # sched: [100:0.25]
14527; ZNVER1-NEXT:    stosq %rax, %es:(%rdi) # sched: [100:0.25]
14528; ZNVER1-NEXT:    #NO_APP
14529; ZNVER1-NEXT:    retq # sched: [1:0.50]
14530  call void asm sideeffect "stosb \0A\09 stosw \0A\09 stosl \0A\09 stosq", ""()
14531  ret void
14532}
14533
14534; TODO - test_str
14535
14536define void @test_sub_8(i8 %a0, i8* %a1, i8 %a2) optsize {
14537; GENERIC-LABEL: test_sub_8:
14538; GENERIC:       # %bb.0:
14539; GENERIC-NEXT:    #APP
14540; GENERIC-NEXT:    subb $7, %al # sched: [1:0.33]
14541; GENERIC-NEXT:    subb $7, %dil # sched: [1:0.33]
14542; GENERIC-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
14543; GENERIC-NEXT:    subb %dl, %dil # sched: [1:0.33]
14544; GENERIC-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
14545; GENERIC-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
14546; GENERIC-NEXT:    #NO_APP
14547; GENERIC-NEXT:    retq # sched: [1:1.00]
14548;
14549; ATOM-LABEL: test_sub_8:
14550; ATOM:       # %bb.0:
14551; ATOM-NEXT:    #APP
14552; ATOM-NEXT:    subb $7, %al # sched: [1:0.50]
14553; ATOM-NEXT:    subb $7, %dil # sched: [1:0.50]
14554; ATOM-NEXT:    subb $7, (%rsi) # sched: [1:1.00]
14555; ATOM-NEXT:    subb %dl, %dil # sched: [1:0.50]
14556; ATOM-NEXT:    subb %dil, (%rsi) # sched: [1:1.00]
14557; ATOM-NEXT:    subb (%rsi), %dil # sched: [1:1.00]
14558; ATOM-NEXT:    #NO_APP
14559; ATOM-NEXT:    retq # sched: [79:39.50]
14560;
14561; SLM-LABEL: test_sub_8:
14562; SLM:       # %bb.0:
14563; SLM-NEXT:    #APP
14564; SLM-NEXT:    subb $7, %al # sched: [1:0.50]
14565; SLM-NEXT:    subb $7, %dil # sched: [1:0.50]
14566; SLM-NEXT:    subb $7, (%rsi) # sched: [5:2.00]
14567; SLM-NEXT:    subb %dl, %dil # sched: [1:0.50]
14568; SLM-NEXT:    subb %dil, (%rsi) # sched: [5:2.00]
14569; SLM-NEXT:    subb (%rsi), %dil # sched: [4:1.00]
14570; SLM-NEXT:    #NO_APP
14571; SLM-NEXT:    retq # sched: [4:1.00]
14572;
14573; SANDY-LABEL: test_sub_8:
14574; SANDY:       # %bb.0:
14575; SANDY-NEXT:    #APP
14576; SANDY-NEXT:    subb $7, %al # sched: [1:0.33]
14577; SANDY-NEXT:    subb $7, %dil # sched: [1:0.33]
14578; SANDY-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
14579; SANDY-NEXT:    subb %dl, %dil # sched: [1:0.33]
14580; SANDY-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
14581; SANDY-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
14582; SANDY-NEXT:    #NO_APP
14583; SANDY-NEXT:    retq # sched: [1:1.00]
14584;
14585; HASWELL-LABEL: test_sub_8:
14586; HASWELL:       # %bb.0:
14587; HASWELL-NEXT:    #APP
14588; HASWELL-NEXT:    subb $7, %al # sched: [1:0.25]
14589; HASWELL-NEXT:    subb $7, %dil # sched: [1:0.25]
14590; HASWELL-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
14591; HASWELL-NEXT:    subb %dl, %dil # sched: [1:0.25]
14592; HASWELL-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
14593; HASWELL-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
14594; HASWELL-NEXT:    #NO_APP
14595; HASWELL-NEXT:    retq # sched: [7:1.00]
14596;
14597; BROADWELL-LABEL: test_sub_8:
14598; BROADWELL:       # %bb.0:
14599; BROADWELL-NEXT:    #APP
14600; BROADWELL-NEXT:    subb $7, %al # sched: [1:0.25]
14601; BROADWELL-NEXT:    subb $7, %dil # sched: [1:0.25]
14602; BROADWELL-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
14603; BROADWELL-NEXT:    subb %dl, %dil # sched: [1:0.25]
14604; BROADWELL-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
14605; BROADWELL-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
14606; BROADWELL-NEXT:    #NO_APP
14607; BROADWELL-NEXT:    retq # sched: [7:1.00]
14608;
14609; SKYLAKE-LABEL: test_sub_8:
14610; SKYLAKE:       # %bb.0:
14611; SKYLAKE-NEXT:    #APP
14612; SKYLAKE-NEXT:    subb $7, %al # sched: [1:0.25]
14613; SKYLAKE-NEXT:    subb $7, %dil # sched: [1:0.25]
14614; SKYLAKE-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
14615; SKYLAKE-NEXT:    subb %dl, %dil # sched: [1:0.25]
14616; SKYLAKE-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
14617; SKYLAKE-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
14618; SKYLAKE-NEXT:    #NO_APP
14619; SKYLAKE-NEXT:    retq # sched: [7:1.00]
14620;
14621; SKX-LABEL: test_sub_8:
14622; SKX:       # %bb.0:
14623; SKX-NEXT:    #APP
14624; SKX-NEXT:    subb $7, %al # sched: [1:0.25]
14625; SKX-NEXT:    subb $7, %dil # sched: [1:0.25]
14626; SKX-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
14627; SKX-NEXT:    subb %dl, %dil # sched: [1:0.25]
14628; SKX-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
14629; SKX-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
14630; SKX-NEXT:    #NO_APP
14631; SKX-NEXT:    retq # sched: [7:1.00]
14632;
14633; BTVER2-LABEL: test_sub_8:
14634; BTVER2:       # %bb.0:
14635; BTVER2-NEXT:    #APP
14636; BTVER2-NEXT:    subb $7, %al # sched: [1:0.50]
14637; BTVER2-NEXT:    subb $7, %dil # sched: [1:0.50]
14638; BTVER2-NEXT:    subb $7, (%rsi) # sched: [5:1.00]
14639; BTVER2-NEXT:    subb %dl, %dil # sched: [1:0.50]
14640; BTVER2-NEXT:    subb %dil, (%rsi) # sched: [5:1.00]
14641; BTVER2-NEXT:    subb (%rsi), %dil # sched: [4:1.00]
14642; BTVER2-NEXT:    #NO_APP
14643; BTVER2-NEXT:    retq # sched: [4:1.00]
14644;
14645; ZNVER1-LABEL: test_sub_8:
14646; ZNVER1:       # %bb.0:
14647; ZNVER1-NEXT:    #APP
14648; ZNVER1-NEXT:    subb $7, %al # sched: [1:0.25]
14649; ZNVER1-NEXT:    subb $7, %dil # sched: [1:0.25]
14650; ZNVER1-NEXT:    subb $7, (%rsi) # sched: [5:0.50]
14651; ZNVER1-NEXT:    subb %dl, %dil # sched: [1:0.25]
14652; ZNVER1-NEXT:    subb %dil, (%rsi) # sched: [5:0.50]
14653; ZNVER1-NEXT:    subb (%rsi), %dil # sched: [5:0.50]
14654; ZNVER1-NEXT:    #NO_APP
14655; ZNVER1-NEXT:    retq # sched: [1:0.50]
14656  tail call void asm "subb $3, %AL \0A\09 subb $3, $0 \0A\09 subb $3, $2 \0A\09 subb $1, $0 \0A\09 subb $0, $2 \0A\09 subb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
14657  ret void
14658}
14659define void @test_sub_16(i16 %a0, i16* %a1, i16 %a2) optsize {
14660; GENERIC-LABEL: test_sub_16:
14661; GENERIC:       # %bb.0:
14662; GENERIC-NEXT:    #APP
14663; GENERIC-NEXT:    subw $511, %ax # imm = 0x1FF
14664; GENERIC-NEXT:    # sched: [1:0.33]
14665; GENERIC-NEXT:    subw $511, %di # imm = 0x1FF
14666; GENERIC-NEXT:    # sched: [1:0.33]
14667; GENERIC-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14668; GENERIC-NEXT:    # sched: [7:1.00]
14669; GENERIC-NEXT:    subw $7, %di # sched: [1:0.33]
14670; GENERIC-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
14671; GENERIC-NEXT:    subw %dx, %di # sched: [1:0.33]
14672; GENERIC-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
14673; GENERIC-NEXT:    subw (%rsi), %di # sched: [6:0.50]
14674; GENERIC-NEXT:    #NO_APP
14675; GENERIC-NEXT:    retq # sched: [1:1.00]
14676;
14677; ATOM-LABEL: test_sub_16:
14678; ATOM:       # %bb.0:
14679; ATOM-NEXT:    #APP
14680; ATOM-NEXT:    subw $511, %ax # imm = 0x1FF
14681; ATOM-NEXT:    # sched: [1:0.50]
14682; ATOM-NEXT:    subw $511, %di # imm = 0x1FF
14683; ATOM-NEXT:    # sched: [1:0.50]
14684; ATOM-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14685; ATOM-NEXT:    # sched: [1:1.00]
14686; ATOM-NEXT:    subw $7, %di # sched: [1:0.50]
14687; ATOM-NEXT:    subw $7, (%rsi) # sched: [1:1.00]
14688; ATOM-NEXT:    subw %dx, %di # sched: [1:0.50]
14689; ATOM-NEXT:    subw %di, (%rsi) # sched: [1:1.00]
14690; ATOM-NEXT:    subw (%rsi), %di # sched: [1:1.00]
14691; ATOM-NEXT:    #NO_APP
14692; ATOM-NEXT:    retq # sched: [79:39.50]
14693;
14694; SLM-LABEL: test_sub_16:
14695; SLM:       # %bb.0:
14696; SLM-NEXT:    #APP
14697; SLM-NEXT:    subw $511, %ax # imm = 0x1FF
14698; SLM-NEXT:    # sched: [1:0.50]
14699; SLM-NEXT:    subw $511, %di # imm = 0x1FF
14700; SLM-NEXT:    # sched: [1:0.50]
14701; SLM-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14702; SLM-NEXT:    # sched: [5:2.00]
14703; SLM-NEXT:    subw $7, %di # sched: [1:0.50]
14704; SLM-NEXT:    subw $7, (%rsi) # sched: [5:2.00]
14705; SLM-NEXT:    subw %dx, %di # sched: [1:0.50]
14706; SLM-NEXT:    subw %di, (%rsi) # sched: [5:2.00]
14707; SLM-NEXT:    subw (%rsi), %di # sched: [4:1.00]
14708; SLM-NEXT:    #NO_APP
14709; SLM-NEXT:    retq # sched: [4:1.00]
14710;
14711; SANDY-LABEL: test_sub_16:
14712; SANDY:       # %bb.0:
14713; SANDY-NEXT:    #APP
14714; SANDY-NEXT:    subw $511, %ax # imm = 0x1FF
14715; SANDY-NEXT:    # sched: [1:0.33]
14716; SANDY-NEXT:    subw $511, %di # imm = 0x1FF
14717; SANDY-NEXT:    # sched: [1:0.33]
14718; SANDY-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14719; SANDY-NEXT:    # sched: [7:1.00]
14720; SANDY-NEXT:    subw $7, %di # sched: [1:0.33]
14721; SANDY-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
14722; SANDY-NEXT:    subw %dx, %di # sched: [1:0.33]
14723; SANDY-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
14724; SANDY-NEXT:    subw (%rsi), %di # sched: [6:0.50]
14725; SANDY-NEXT:    #NO_APP
14726; SANDY-NEXT:    retq # sched: [1:1.00]
14727;
14728; HASWELL-LABEL: test_sub_16:
14729; HASWELL:       # %bb.0:
14730; HASWELL-NEXT:    #APP
14731; HASWELL-NEXT:    subw $511, %ax # imm = 0x1FF
14732; HASWELL-NEXT:    # sched: [1:0.25]
14733; HASWELL-NEXT:    subw $511, %di # imm = 0x1FF
14734; HASWELL-NEXT:    # sched: [1:0.25]
14735; HASWELL-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14736; HASWELL-NEXT:    # sched: [7:1.00]
14737; HASWELL-NEXT:    subw $7, %di # sched: [1:0.25]
14738; HASWELL-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
14739; HASWELL-NEXT:    subw %dx, %di # sched: [1:0.25]
14740; HASWELL-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
14741; HASWELL-NEXT:    subw (%rsi), %di # sched: [6:0.50]
14742; HASWELL-NEXT:    #NO_APP
14743; HASWELL-NEXT:    retq # sched: [7:1.00]
14744;
14745; BROADWELL-LABEL: test_sub_16:
14746; BROADWELL:       # %bb.0:
14747; BROADWELL-NEXT:    #APP
14748; BROADWELL-NEXT:    subw $511, %ax # imm = 0x1FF
14749; BROADWELL-NEXT:    # sched: [1:0.25]
14750; BROADWELL-NEXT:    subw $511, %di # imm = 0x1FF
14751; BROADWELL-NEXT:    # sched: [1:0.25]
14752; BROADWELL-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14753; BROADWELL-NEXT:    # sched: [7:1.00]
14754; BROADWELL-NEXT:    subw $7, %di # sched: [1:0.25]
14755; BROADWELL-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
14756; BROADWELL-NEXT:    subw %dx, %di # sched: [1:0.25]
14757; BROADWELL-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
14758; BROADWELL-NEXT:    subw (%rsi), %di # sched: [6:0.50]
14759; BROADWELL-NEXT:    #NO_APP
14760; BROADWELL-NEXT:    retq # sched: [7:1.00]
14761;
14762; SKYLAKE-LABEL: test_sub_16:
14763; SKYLAKE:       # %bb.0:
14764; SKYLAKE-NEXT:    #APP
14765; SKYLAKE-NEXT:    subw $511, %ax # imm = 0x1FF
14766; SKYLAKE-NEXT:    # sched: [1:0.25]
14767; SKYLAKE-NEXT:    subw $511, %di # imm = 0x1FF
14768; SKYLAKE-NEXT:    # sched: [1:0.25]
14769; SKYLAKE-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14770; SKYLAKE-NEXT:    # sched: [7:1.00]
14771; SKYLAKE-NEXT:    subw $7, %di # sched: [1:0.25]
14772; SKYLAKE-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
14773; SKYLAKE-NEXT:    subw %dx, %di # sched: [1:0.25]
14774; SKYLAKE-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
14775; SKYLAKE-NEXT:    subw (%rsi), %di # sched: [6:0.50]
14776; SKYLAKE-NEXT:    #NO_APP
14777; SKYLAKE-NEXT:    retq # sched: [7:1.00]
14778;
14779; SKX-LABEL: test_sub_16:
14780; SKX:       # %bb.0:
14781; SKX-NEXT:    #APP
14782; SKX-NEXT:    subw $511, %ax # imm = 0x1FF
14783; SKX-NEXT:    # sched: [1:0.25]
14784; SKX-NEXT:    subw $511, %di # imm = 0x1FF
14785; SKX-NEXT:    # sched: [1:0.25]
14786; SKX-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14787; SKX-NEXT:    # sched: [7:1.00]
14788; SKX-NEXT:    subw $7, %di # sched: [1:0.25]
14789; SKX-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
14790; SKX-NEXT:    subw %dx, %di # sched: [1:0.25]
14791; SKX-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
14792; SKX-NEXT:    subw (%rsi), %di # sched: [6:0.50]
14793; SKX-NEXT:    #NO_APP
14794; SKX-NEXT:    retq # sched: [7:1.00]
14795;
14796; BTVER2-LABEL: test_sub_16:
14797; BTVER2:       # %bb.0:
14798; BTVER2-NEXT:    #APP
14799; BTVER2-NEXT:    subw $511, %ax # imm = 0x1FF
14800; BTVER2-NEXT:    # sched: [1:0.50]
14801; BTVER2-NEXT:    subw $511, %di # imm = 0x1FF
14802; BTVER2-NEXT:    # sched: [1:0.50]
14803; BTVER2-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14804; BTVER2-NEXT:    # sched: [5:1.00]
14805; BTVER2-NEXT:    subw $7, %di # sched: [1:0.50]
14806; BTVER2-NEXT:    subw $7, (%rsi) # sched: [5:1.00]
14807; BTVER2-NEXT:    subw %dx, %di # sched: [1:0.50]
14808; BTVER2-NEXT:    subw %di, (%rsi) # sched: [5:1.00]
14809; BTVER2-NEXT:    subw (%rsi), %di # sched: [4:1.00]
14810; BTVER2-NEXT:    #NO_APP
14811; BTVER2-NEXT:    retq # sched: [4:1.00]
14812;
14813; ZNVER1-LABEL: test_sub_16:
14814; ZNVER1:       # %bb.0:
14815; ZNVER1-NEXT:    #APP
14816; ZNVER1-NEXT:    subw $511, %ax # imm = 0x1FF
14817; ZNVER1-NEXT:    # sched: [1:0.25]
14818; ZNVER1-NEXT:    subw $511, %di # imm = 0x1FF
14819; ZNVER1-NEXT:    # sched: [1:0.25]
14820; ZNVER1-NEXT:    subw $511, (%rsi) # imm = 0x1FF
14821; ZNVER1-NEXT:    # sched: [5:0.50]
14822; ZNVER1-NEXT:    subw $7, %di # sched: [1:0.25]
14823; ZNVER1-NEXT:    subw $7, (%rsi) # sched: [5:0.50]
14824; ZNVER1-NEXT:    subw %dx, %di # sched: [1:0.25]
14825; ZNVER1-NEXT:    subw %di, (%rsi) # sched: [5:0.50]
14826; ZNVER1-NEXT:    subw (%rsi), %di # sched: [5:0.50]
14827; ZNVER1-NEXT:    #NO_APP
14828; ZNVER1-NEXT:    retq # sched: [1:0.50]
14829  tail call void asm "subw $3, %AX \0A\09 subw $3, $0 \0A\09 subw $3, $2 \0A\09 subw $4, $0 \0A\09 subw $4, $2 \0A\09 subw $1, $0 \0A\09 subw $0, $2 \0A\09 subw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
14830  ret void
14831}
14832define void @test_sub_32(i32 %a0, i32* %a1, i32 %a2) optsize {
14833; GENERIC-LABEL: test_sub_32:
14834; GENERIC:       # %bb.0:
14835; GENERIC-NEXT:    #APP
14836; GENERIC-NEXT:    subl $665536, %eax # imm = 0xA27C0
14837; GENERIC-NEXT:    # sched: [1:0.33]
14838; GENERIC-NEXT:    subl $665536, %edi # imm = 0xA27C0
14839; GENERIC-NEXT:    # sched: [1:0.33]
14840; GENERIC-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14841; GENERIC-NEXT:    # sched: [7:1.00]
14842; GENERIC-NEXT:    subl $7, %edi # sched: [1:0.33]
14843; GENERIC-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
14844; GENERIC-NEXT:    subl %edx, %edi # sched: [1:0.33]
14845; GENERIC-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
14846; GENERIC-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
14847; GENERIC-NEXT:    #NO_APP
14848; GENERIC-NEXT:    retq # sched: [1:1.00]
14849;
14850; ATOM-LABEL: test_sub_32:
14851; ATOM:       # %bb.0:
14852; ATOM-NEXT:    #APP
14853; ATOM-NEXT:    subl $665536, %eax # imm = 0xA27C0
14854; ATOM-NEXT:    # sched: [1:0.50]
14855; ATOM-NEXT:    subl $665536, %edi # imm = 0xA27C0
14856; ATOM-NEXT:    # sched: [1:0.50]
14857; ATOM-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14858; ATOM-NEXT:    # sched: [1:1.00]
14859; ATOM-NEXT:    subl $7, %edi # sched: [1:0.50]
14860; ATOM-NEXT:    subl $7, (%rsi) # sched: [1:1.00]
14861; ATOM-NEXT:    subl %edx, %edi # sched: [1:0.50]
14862; ATOM-NEXT:    subl %edi, (%rsi) # sched: [1:1.00]
14863; ATOM-NEXT:    subl (%rsi), %edi # sched: [1:1.00]
14864; ATOM-NEXT:    #NO_APP
14865; ATOM-NEXT:    retq # sched: [79:39.50]
14866;
14867; SLM-LABEL: test_sub_32:
14868; SLM:       # %bb.0:
14869; SLM-NEXT:    #APP
14870; SLM-NEXT:    subl $665536, %eax # imm = 0xA27C0
14871; SLM-NEXT:    # sched: [1:0.50]
14872; SLM-NEXT:    subl $665536, %edi # imm = 0xA27C0
14873; SLM-NEXT:    # sched: [1:0.50]
14874; SLM-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14875; SLM-NEXT:    # sched: [5:2.00]
14876; SLM-NEXT:    subl $7, %edi # sched: [1:0.50]
14877; SLM-NEXT:    subl $7, (%rsi) # sched: [5:2.00]
14878; SLM-NEXT:    subl %edx, %edi # sched: [1:0.50]
14879; SLM-NEXT:    subl %edi, (%rsi) # sched: [5:2.00]
14880; SLM-NEXT:    subl (%rsi), %edi # sched: [4:1.00]
14881; SLM-NEXT:    #NO_APP
14882; SLM-NEXT:    retq # sched: [4:1.00]
14883;
14884; SANDY-LABEL: test_sub_32:
14885; SANDY:       # %bb.0:
14886; SANDY-NEXT:    #APP
14887; SANDY-NEXT:    subl $665536, %eax # imm = 0xA27C0
14888; SANDY-NEXT:    # sched: [1:0.33]
14889; SANDY-NEXT:    subl $665536, %edi # imm = 0xA27C0
14890; SANDY-NEXT:    # sched: [1:0.33]
14891; SANDY-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14892; SANDY-NEXT:    # sched: [7:1.00]
14893; SANDY-NEXT:    subl $7, %edi # sched: [1:0.33]
14894; SANDY-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
14895; SANDY-NEXT:    subl %edx, %edi # sched: [1:0.33]
14896; SANDY-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
14897; SANDY-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
14898; SANDY-NEXT:    #NO_APP
14899; SANDY-NEXT:    retq # sched: [1:1.00]
14900;
14901; HASWELL-LABEL: test_sub_32:
14902; HASWELL:       # %bb.0:
14903; HASWELL-NEXT:    #APP
14904; HASWELL-NEXT:    subl $665536, %eax # imm = 0xA27C0
14905; HASWELL-NEXT:    # sched: [1:0.25]
14906; HASWELL-NEXT:    subl $665536, %edi # imm = 0xA27C0
14907; HASWELL-NEXT:    # sched: [1:0.25]
14908; HASWELL-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14909; HASWELL-NEXT:    # sched: [7:1.00]
14910; HASWELL-NEXT:    subl $7, %edi # sched: [1:0.25]
14911; HASWELL-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
14912; HASWELL-NEXT:    subl %edx, %edi # sched: [1:0.25]
14913; HASWELL-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
14914; HASWELL-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
14915; HASWELL-NEXT:    #NO_APP
14916; HASWELL-NEXT:    retq # sched: [7:1.00]
14917;
14918; BROADWELL-LABEL: test_sub_32:
14919; BROADWELL:       # %bb.0:
14920; BROADWELL-NEXT:    #APP
14921; BROADWELL-NEXT:    subl $665536, %eax # imm = 0xA27C0
14922; BROADWELL-NEXT:    # sched: [1:0.25]
14923; BROADWELL-NEXT:    subl $665536, %edi # imm = 0xA27C0
14924; BROADWELL-NEXT:    # sched: [1:0.25]
14925; BROADWELL-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14926; BROADWELL-NEXT:    # sched: [7:1.00]
14927; BROADWELL-NEXT:    subl $7, %edi # sched: [1:0.25]
14928; BROADWELL-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
14929; BROADWELL-NEXT:    subl %edx, %edi # sched: [1:0.25]
14930; BROADWELL-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
14931; BROADWELL-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
14932; BROADWELL-NEXT:    #NO_APP
14933; BROADWELL-NEXT:    retq # sched: [7:1.00]
14934;
14935; SKYLAKE-LABEL: test_sub_32:
14936; SKYLAKE:       # %bb.0:
14937; SKYLAKE-NEXT:    #APP
14938; SKYLAKE-NEXT:    subl $665536, %eax # imm = 0xA27C0
14939; SKYLAKE-NEXT:    # sched: [1:0.25]
14940; SKYLAKE-NEXT:    subl $665536, %edi # imm = 0xA27C0
14941; SKYLAKE-NEXT:    # sched: [1:0.25]
14942; SKYLAKE-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14943; SKYLAKE-NEXT:    # sched: [7:1.00]
14944; SKYLAKE-NEXT:    subl $7, %edi # sched: [1:0.25]
14945; SKYLAKE-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
14946; SKYLAKE-NEXT:    subl %edx, %edi # sched: [1:0.25]
14947; SKYLAKE-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
14948; SKYLAKE-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
14949; SKYLAKE-NEXT:    #NO_APP
14950; SKYLAKE-NEXT:    retq # sched: [7:1.00]
14951;
14952; SKX-LABEL: test_sub_32:
14953; SKX:       # %bb.0:
14954; SKX-NEXT:    #APP
14955; SKX-NEXT:    subl $665536, %eax # imm = 0xA27C0
14956; SKX-NEXT:    # sched: [1:0.25]
14957; SKX-NEXT:    subl $665536, %edi # imm = 0xA27C0
14958; SKX-NEXT:    # sched: [1:0.25]
14959; SKX-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14960; SKX-NEXT:    # sched: [7:1.00]
14961; SKX-NEXT:    subl $7, %edi # sched: [1:0.25]
14962; SKX-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
14963; SKX-NEXT:    subl %edx, %edi # sched: [1:0.25]
14964; SKX-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
14965; SKX-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
14966; SKX-NEXT:    #NO_APP
14967; SKX-NEXT:    retq # sched: [7:1.00]
14968;
14969; BTVER2-LABEL: test_sub_32:
14970; BTVER2:       # %bb.0:
14971; BTVER2-NEXT:    #APP
14972; BTVER2-NEXT:    subl $665536, %eax # imm = 0xA27C0
14973; BTVER2-NEXT:    # sched: [1:0.50]
14974; BTVER2-NEXT:    subl $665536, %edi # imm = 0xA27C0
14975; BTVER2-NEXT:    # sched: [1:0.50]
14976; BTVER2-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14977; BTVER2-NEXT:    # sched: [5:1.00]
14978; BTVER2-NEXT:    subl $7, %edi # sched: [1:0.50]
14979; BTVER2-NEXT:    subl $7, (%rsi) # sched: [5:1.00]
14980; BTVER2-NEXT:    subl %edx, %edi # sched: [1:0.50]
14981; BTVER2-NEXT:    subl %edi, (%rsi) # sched: [5:1.00]
14982; BTVER2-NEXT:    subl (%rsi), %edi # sched: [4:1.00]
14983; BTVER2-NEXT:    #NO_APP
14984; BTVER2-NEXT:    retq # sched: [4:1.00]
14985;
14986; ZNVER1-LABEL: test_sub_32:
14987; ZNVER1:       # %bb.0:
14988; ZNVER1-NEXT:    #APP
14989; ZNVER1-NEXT:    subl $665536, %eax # imm = 0xA27C0
14990; ZNVER1-NEXT:    # sched: [1:0.25]
14991; ZNVER1-NEXT:    subl $665536, %edi # imm = 0xA27C0
14992; ZNVER1-NEXT:    # sched: [1:0.25]
14993; ZNVER1-NEXT:    subl $665536, (%rsi) # imm = 0xA27C0
14994; ZNVER1-NEXT:    # sched: [5:0.50]
14995; ZNVER1-NEXT:    subl $7, %edi # sched: [1:0.25]
14996; ZNVER1-NEXT:    subl $7, (%rsi) # sched: [5:0.50]
14997; ZNVER1-NEXT:    subl %edx, %edi # sched: [1:0.25]
14998; ZNVER1-NEXT:    subl %edi, (%rsi) # sched: [5:0.50]
14999; ZNVER1-NEXT:    subl (%rsi), %edi # sched: [5:0.50]
15000; ZNVER1-NEXT:    #NO_APP
15001; ZNVER1-NEXT:    retq # sched: [1:0.50]
15002  tail call void asm "subl $3, %EAX \0A\09 subl $3, $0 \0A\09 subl $3, $2 \0A\09 subl $4, $0 \0A\09 subl $4, $2 \0A\09 subl $1, $0 \0A\09 subl $0, $2 \0A\09 subl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
15003  ret void
15004}
15005define void @test_sub_64(i64 %a0, i64* %a1, i64 %a2) optsize {
15006; GENERIC-LABEL: test_sub_64:
15007; GENERIC:       # %bb.0:
15008; GENERIC-NEXT:    #APP
15009; GENERIC-NEXT:    subq $665536, %rax # imm = 0xA27C0
15010; GENERIC-NEXT:    # sched: [1:0.33]
15011; GENERIC-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15012; GENERIC-NEXT:    # sched: [1:0.33]
15013; GENERIC-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15014; GENERIC-NEXT:    # sched: [7:1.00]
15015; GENERIC-NEXT:    subq $7, %rdi # sched: [1:0.33]
15016; GENERIC-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
15017; GENERIC-NEXT:    subq %rdx, %rdi # sched: [1:0.33]
15018; GENERIC-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
15019; GENERIC-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
15020; GENERIC-NEXT:    #NO_APP
15021; GENERIC-NEXT:    retq # sched: [1:1.00]
15022;
15023; ATOM-LABEL: test_sub_64:
15024; ATOM:       # %bb.0:
15025; ATOM-NEXT:    #APP
15026; ATOM-NEXT:    subq $665536, %rax # imm = 0xA27C0
15027; ATOM-NEXT:    # sched: [1:0.50]
15028; ATOM-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15029; ATOM-NEXT:    # sched: [1:0.50]
15030; ATOM-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15031; ATOM-NEXT:    # sched: [1:1.00]
15032; ATOM-NEXT:    subq $7, %rdi # sched: [1:0.50]
15033; ATOM-NEXT:    subq $7, (%rsi) # sched: [1:1.00]
15034; ATOM-NEXT:    subq %rdx, %rdi # sched: [1:0.50]
15035; ATOM-NEXT:    subq %rdi, (%rsi) # sched: [1:1.00]
15036; ATOM-NEXT:    subq (%rsi), %rdi # sched: [1:1.00]
15037; ATOM-NEXT:    #NO_APP
15038; ATOM-NEXT:    retq # sched: [79:39.50]
15039;
15040; SLM-LABEL: test_sub_64:
15041; SLM:       # %bb.0:
15042; SLM-NEXT:    #APP
15043; SLM-NEXT:    subq $665536, %rax # imm = 0xA27C0
15044; SLM-NEXT:    # sched: [1:0.50]
15045; SLM-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15046; SLM-NEXT:    # sched: [1:0.50]
15047; SLM-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15048; SLM-NEXT:    # sched: [5:2.00]
15049; SLM-NEXT:    subq $7, %rdi # sched: [1:0.50]
15050; SLM-NEXT:    subq $7, (%rsi) # sched: [5:2.00]
15051; SLM-NEXT:    subq %rdx, %rdi # sched: [1:0.50]
15052; SLM-NEXT:    subq %rdi, (%rsi) # sched: [5:2.00]
15053; SLM-NEXT:    subq (%rsi), %rdi # sched: [4:1.00]
15054; SLM-NEXT:    #NO_APP
15055; SLM-NEXT:    retq # sched: [4:1.00]
15056;
15057; SANDY-LABEL: test_sub_64:
15058; SANDY:       # %bb.0:
15059; SANDY-NEXT:    #APP
15060; SANDY-NEXT:    subq $665536, %rax # imm = 0xA27C0
15061; SANDY-NEXT:    # sched: [1:0.33]
15062; SANDY-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15063; SANDY-NEXT:    # sched: [1:0.33]
15064; SANDY-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15065; SANDY-NEXT:    # sched: [7:1.00]
15066; SANDY-NEXT:    subq $7, %rdi # sched: [1:0.33]
15067; SANDY-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
15068; SANDY-NEXT:    subq %rdx, %rdi # sched: [1:0.33]
15069; SANDY-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
15070; SANDY-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
15071; SANDY-NEXT:    #NO_APP
15072; SANDY-NEXT:    retq # sched: [1:1.00]
15073;
15074; HASWELL-LABEL: test_sub_64:
15075; HASWELL:       # %bb.0:
15076; HASWELL-NEXT:    #APP
15077; HASWELL-NEXT:    subq $665536, %rax # imm = 0xA27C0
15078; HASWELL-NEXT:    # sched: [1:0.25]
15079; HASWELL-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15080; HASWELL-NEXT:    # sched: [1:0.25]
15081; HASWELL-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15082; HASWELL-NEXT:    # sched: [7:1.00]
15083; HASWELL-NEXT:    subq $7, %rdi # sched: [1:0.25]
15084; HASWELL-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
15085; HASWELL-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
15086; HASWELL-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
15087; HASWELL-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
15088; HASWELL-NEXT:    #NO_APP
15089; HASWELL-NEXT:    retq # sched: [7:1.00]
15090;
15091; BROADWELL-LABEL: test_sub_64:
15092; BROADWELL:       # %bb.0:
15093; BROADWELL-NEXT:    #APP
15094; BROADWELL-NEXT:    subq $665536, %rax # imm = 0xA27C0
15095; BROADWELL-NEXT:    # sched: [1:0.25]
15096; BROADWELL-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15097; BROADWELL-NEXT:    # sched: [1:0.25]
15098; BROADWELL-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15099; BROADWELL-NEXT:    # sched: [7:1.00]
15100; BROADWELL-NEXT:    subq $7, %rdi # sched: [1:0.25]
15101; BROADWELL-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
15102; BROADWELL-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
15103; BROADWELL-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
15104; BROADWELL-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
15105; BROADWELL-NEXT:    #NO_APP
15106; BROADWELL-NEXT:    retq # sched: [7:1.00]
15107;
15108; SKYLAKE-LABEL: test_sub_64:
15109; SKYLAKE:       # %bb.0:
15110; SKYLAKE-NEXT:    #APP
15111; SKYLAKE-NEXT:    subq $665536, %rax # imm = 0xA27C0
15112; SKYLAKE-NEXT:    # sched: [1:0.25]
15113; SKYLAKE-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15114; SKYLAKE-NEXT:    # sched: [1:0.25]
15115; SKYLAKE-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15116; SKYLAKE-NEXT:    # sched: [7:1.00]
15117; SKYLAKE-NEXT:    subq $7, %rdi # sched: [1:0.25]
15118; SKYLAKE-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
15119; SKYLAKE-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
15120; SKYLAKE-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
15121; SKYLAKE-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
15122; SKYLAKE-NEXT:    #NO_APP
15123; SKYLAKE-NEXT:    retq # sched: [7:1.00]
15124;
15125; SKX-LABEL: test_sub_64:
15126; SKX:       # %bb.0:
15127; SKX-NEXT:    #APP
15128; SKX-NEXT:    subq $665536, %rax # imm = 0xA27C0
15129; SKX-NEXT:    # sched: [1:0.25]
15130; SKX-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15131; SKX-NEXT:    # sched: [1:0.25]
15132; SKX-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15133; SKX-NEXT:    # sched: [7:1.00]
15134; SKX-NEXT:    subq $7, %rdi # sched: [1:0.25]
15135; SKX-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
15136; SKX-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
15137; SKX-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
15138; SKX-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
15139; SKX-NEXT:    #NO_APP
15140; SKX-NEXT:    retq # sched: [7:1.00]
15141;
15142; BTVER2-LABEL: test_sub_64:
15143; BTVER2:       # %bb.0:
15144; BTVER2-NEXT:    #APP
15145; BTVER2-NEXT:    subq $665536, %rax # imm = 0xA27C0
15146; BTVER2-NEXT:    # sched: [1:0.50]
15147; BTVER2-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15148; BTVER2-NEXT:    # sched: [1:0.50]
15149; BTVER2-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15150; BTVER2-NEXT:    # sched: [5:1.00]
15151; BTVER2-NEXT:    subq $7, %rdi # sched: [1:0.50]
15152; BTVER2-NEXT:    subq $7, (%rsi) # sched: [5:1.00]
15153; BTVER2-NEXT:    subq %rdx, %rdi # sched: [1:0.50]
15154; BTVER2-NEXT:    subq %rdi, (%rsi) # sched: [5:1.00]
15155; BTVER2-NEXT:    subq (%rsi), %rdi # sched: [4:1.00]
15156; BTVER2-NEXT:    #NO_APP
15157; BTVER2-NEXT:    retq # sched: [4:1.00]
15158;
15159; ZNVER1-LABEL: test_sub_64:
15160; ZNVER1:       # %bb.0:
15161; ZNVER1-NEXT:    #APP
15162; ZNVER1-NEXT:    subq $665536, %rax # imm = 0xA27C0
15163; ZNVER1-NEXT:    # sched: [1:0.25]
15164; ZNVER1-NEXT:    subq $665536, %rdi # imm = 0xA27C0
15165; ZNVER1-NEXT:    # sched: [1:0.25]
15166; ZNVER1-NEXT:    subq $665536, (%rsi) # imm = 0xA27C0
15167; ZNVER1-NEXT:    # sched: [5:0.50]
15168; ZNVER1-NEXT:    subq $7, %rdi # sched: [1:0.25]
15169; ZNVER1-NEXT:    subq $7, (%rsi) # sched: [5:0.50]
15170; ZNVER1-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
15171; ZNVER1-NEXT:    subq %rdi, (%rsi) # sched: [5:0.50]
15172; ZNVER1-NEXT:    subq (%rsi), %rdi # sched: [5:0.50]
15173; ZNVER1-NEXT:    #NO_APP
15174; ZNVER1-NEXT:    retq # sched: [1:0.50]
15175  tail call void asm "subq $3, %RAX \0A\09 subq $3, $0 \0A\09 subq $3, $2 \0A\09 subq $4, $0 \0A\09 subq $4, $2 \0A\09 subq $1, $0 \0A\09 subq $0, $2 \0A\09 subq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
15176  ret void
15177}
15178
15179; TODO - test_swapgs
15180; TODO - test_syscall
15181; TODO - test_sysenter
15182; TODO - test_sysexit
15183; TODO - test_sysret
15184
15185define void @test_test_8(i8 %a0, i8* %a1) optsize {
15186; GENERIC-LABEL: test_test_8:
15187; GENERIC:       # %bb.0:
15188; GENERIC-NEXT:    #APP
15189; GENERIC-NEXT:    testb $7, %al # sched: [1:0.33]
15190; GENERIC-NEXT:    testb $7, %dil # sched: [1:0.33]
15191; GENERIC-NEXT:    testb $7, (%rsi) # sched: [6:0.50]
15192; GENERIC-NEXT:    testb %dil, %dil # sched: [1:0.33]
15193; GENERIC-NEXT:    testb %dil, (%rsi) # sched: [6:0.50]
15194; GENERIC-NEXT:    #NO_APP
15195; GENERIC-NEXT:    retq # sched: [1:1.00]
15196;
15197; ATOM-LABEL: test_test_8:
15198; ATOM:       # %bb.0:
15199; ATOM-NEXT:    #APP
15200; ATOM-NEXT:    testb $7, %al # sched: [1:0.50]
15201; ATOM-NEXT:    testb $7, %dil # sched: [1:0.50]
15202; ATOM-NEXT:    testb $7, (%rsi) # sched: [1:1.00]
15203; ATOM-NEXT:    testb %dil, %dil # sched: [1:0.50]
15204; ATOM-NEXT:    testb %dil, (%rsi) # sched: [1:1.00]
15205; ATOM-NEXT:    #NO_APP
15206; ATOM-NEXT:    retq # sched: [79:39.50]
15207;
15208; SLM-LABEL: test_test_8:
15209; SLM:       # %bb.0:
15210; SLM-NEXT:    #APP
15211; SLM-NEXT:    testb $7, %al # sched: [1:0.50]
15212; SLM-NEXT:    testb $7, %dil # sched: [1:0.50]
15213; SLM-NEXT:    testb $7, (%rsi) # sched: [4:1.00]
15214; SLM-NEXT:    testb %dil, %dil # sched: [1:0.50]
15215; SLM-NEXT:    testb %dil, (%rsi) # sched: [4:1.00]
15216; SLM-NEXT:    #NO_APP
15217; SLM-NEXT:    retq # sched: [4:1.00]
15218;
15219; SANDY-LABEL: test_test_8:
15220; SANDY:       # %bb.0:
15221; SANDY-NEXT:    #APP
15222; SANDY-NEXT:    testb $7, %al # sched: [1:0.33]
15223; SANDY-NEXT:    testb $7, %dil # sched: [1:0.33]
15224; SANDY-NEXT:    testb $7, (%rsi) # sched: [6:0.50]
15225; SANDY-NEXT:    testb %dil, %dil # sched: [1:0.33]
15226; SANDY-NEXT:    testb %dil, (%rsi) # sched: [6:0.50]
15227; SANDY-NEXT:    #NO_APP
15228; SANDY-NEXT:    retq # sched: [1:1.00]
15229;
15230; HASWELL-LABEL: test_test_8:
15231; HASWELL:       # %bb.0:
15232; HASWELL-NEXT:    #APP
15233; HASWELL-NEXT:    testb $7, %al # sched: [1:0.25]
15234; HASWELL-NEXT:    testb $7, %dil # sched: [1:0.25]
15235; HASWELL-NEXT:    testb $7, (%rsi) # sched: [6:0.50]
15236; HASWELL-NEXT:    testb %dil, %dil # sched: [1:0.25]
15237; HASWELL-NEXT:    testb %dil, (%rsi) # sched: [6:0.50]
15238; HASWELL-NEXT:    #NO_APP
15239; HASWELL-NEXT:    retq # sched: [7:1.00]
15240;
15241; BROADWELL-LABEL: test_test_8:
15242; BROADWELL:       # %bb.0:
15243; BROADWELL-NEXT:    #APP
15244; BROADWELL-NEXT:    testb $7, %al # sched: [1:0.25]
15245; BROADWELL-NEXT:    testb $7, %dil # sched: [1:0.25]
15246; BROADWELL-NEXT:    testb $7, (%rsi) # sched: [6:0.50]
15247; BROADWELL-NEXT:    testb %dil, %dil # sched: [1:0.25]
15248; BROADWELL-NEXT:    testb %dil, (%rsi) # sched: [6:0.50]
15249; BROADWELL-NEXT:    #NO_APP
15250; BROADWELL-NEXT:    retq # sched: [7:1.00]
15251;
15252; SKYLAKE-LABEL: test_test_8:
15253; SKYLAKE:       # %bb.0:
15254; SKYLAKE-NEXT:    #APP
15255; SKYLAKE-NEXT:    testb $7, %al # sched: [1:0.25]
15256; SKYLAKE-NEXT:    testb $7, %dil # sched: [1:0.25]
15257; SKYLAKE-NEXT:    testb $7, (%rsi) # sched: [6:0.50]
15258; SKYLAKE-NEXT:    testb %dil, %dil # sched: [1:0.25]
15259; SKYLAKE-NEXT:    testb %dil, (%rsi) # sched: [6:0.50]
15260; SKYLAKE-NEXT:    #NO_APP
15261; SKYLAKE-NEXT:    retq # sched: [7:1.00]
15262;
15263; SKX-LABEL: test_test_8:
15264; SKX:       # %bb.0:
15265; SKX-NEXT:    #APP
15266; SKX-NEXT:    testb $7, %al # sched: [1:0.25]
15267; SKX-NEXT:    testb $7, %dil # sched: [1:0.25]
15268; SKX-NEXT:    testb $7, (%rsi) # sched: [6:0.50]
15269; SKX-NEXT:    testb %dil, %dil # sched: [1:0.25]
15270; SKX-NEXT:    testb %dil, (%rsi) # sched: [6:0.50]
15271; SKX-NEXT:    #NO_APP
15272; SKX-NEXT:    retq # sched: [7:1.00]
15273;
15274; BTVER2-LABEL: test_test_8:
15275; BTVER2:       # %bb.0:
15276; BTVER2-NEXT:    #APP
15277; BTVER2-NEXT:    testb $7, %al # sched: [1:0.50]
15278; BTVER2-NEXT:    testb $7, %dil # sched: [1:0.50]
15279; BTVER2-NEXT:    testb $7, (%rsi) # sched: [4:1.00]
15280; BTVER2-NEXT:    testb %dil, %dil # sched: [1:0.50]
15281; BTVER2-NEXT:    testb %dil, (%rsi) # sched: [4:1.00]
15282; BTVER2-NEXT:    #NO_APP
15283; BTVER2-NEXT:    retq # sched: [4:1.00]
15284;
15285; ZNVER1-LABEL: test_test_8:
15286; ZNVER1:       # %bb.0:
15287; ZNVER1-NEXT:    #APP
15288; ZNVER1-NEXT:    testb $7, %al # sched: [1:0.25]
15289; ZNVER1-NEXT:    testb $7, %dil # sched: [1:0.25]
15290; ZNVER1-NEXT:    testb $7, (%rsi) # sched: [5:0.50]
15291; ZNVER1-NEXT:    testb %dil, %dil # sched: [1:0.25]
15292; ZNVER1-NEXT:    testb %dil, (%rsi) # sched: [5:0.50]
15293; ZNVER1-NEXT:    #NO_APP
15294; ZNVER1-NEXT:    retq # sched: [1:0.50]
15295  tail call void asm "testb $2, %AL \0A\09 testb $2, $0 \0A\09 testb $2, $1 \0A\09 testb $0, $0 \0A\09 testb $0, $1", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
15296  ret void
15297}
15298define void @test_test_16(i16 %a0, i16* %a1) optsize {
15299; GENERIC-LABEL: test_test_16:
15300; GENERIC:       # %bb.0:
15301; GENERIC-NEXT:    #APP
15302; GENERIC-NEXT:    testw $511, %ax # imm = 0x1FF
15303; GENERIC-NEXT:    # sched: [1:0.33]
15304; GENERIC-NEXT:    testw $511, %di # imm = 0x1FF
15305; GENERIC-NEXT:    # sched: [1:0.33]
15306; GENERIC-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15307; GENERIC-NEXT:    # sched: [6:0.50]
15308; GENERIC-NEXT:    testw %di, %di # sched: [1:0.33]
15309; GENERIC-NEXT:    testw %di, (%rsi) # sched: [6:0.50]
15310; GENERIC-NEXT:    #NO_APP
15311; GENERIC-NEXT:    retq # sched: [1:1.00]
15312;
15313; ATOM-LABEL: test_test_16:
15314; ATOM:       # %bb.0:
15315; ATOM-NEXT:    #APP
15316; ATOM-NEXT:    testw $511, %ax # imm = 0x1FF
15317; ATOM-NEXT:    # sched: [1:0.50]
15318; ATOM-NEXT:    testw $511, %di # imm = 0x1FF
15319; ATOM-NEXT:    # sched: [1:0.50]
15320; ATOM-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15321; ATOM-NEXT:    # sched: [1:1.00]
15322; ATOM-NEXT:    testw %di, %di # sched: [1:0.50]
15323; ATOM-NEXT:    testw %di, (%rsi) # sched: [1:1.00]
15324; ATOM-NEXT:    #NO_APP
15325; ATOM-NEXT:    retq # sched: [79:39.50]
15326;
15327; SLM-LABEL: test_test_16:
15328; SLM:       # %bb.0:
15329; SLM-NEXT:    #APP
15330; SLM-NEXT:    testw $511, %ax # imm = 0x1FF
15331; SLM-NEXT:    # sched: [1:0.50]
15332; SLM-NEXT:    testw $511, %di # imm = 0x1FF
15333; SLM-NEXT:    # sched: [1:0.50]
15334; SLM-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15335; SLM-NEXT:    # sched: [4:1.00]
15336; SLM-NEXT:    testw %di, %di # sched: [1:0.50]
15337; SLM-NEXT:    testw %di, (%rsi) # sched: [4:1.00]
15338; SLM-NEXT:    #NO_APP
15339; SLM-NEXT:    retq # sched: [4:1.00]
15340;
15341; SANDY-LABEL: test_test_16:
15342; SANDY:       # %bb.0:
15343; SANDY-NEXT:    #APP
15344; SANDY-NEXT:    testw $511, %ax # imm = 0x1FF
15345; SANDY-NEXT:    # sched: [1:0.33]
15346; SANDY-NEXT:    testw $511, %di # imm = 0x1FF
15347; SANDY-NEXT:    # sched: [1:0.33]
15348; SANDY-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15349; SANDY-NEXT:    # sched: [6:0.50]
15350; SANDY-NEXT:    testw %di, %di # sched: [1:0.33]
15351; SANDY-NEXT:    testw %di, (%rsi) # sched: [6:0.50]
15352; SANDY-NEXT:    #NO_APP
15353; SANDY-NEXT:    retq # sched: [1:1.00]
15354;
15355; HASWELL-LABEL: test_test_16:
15356; HASWELL:       # %bb.0:
15357; HASWELL-NEXT:    #APP
15358; HASWELL-NEXT:    testw $511, %ax # imm = 0x1FF
15359; HASWELL-NEXT:    # sched: [1:0.25]
15360; HASWELL-NEXT:    testw $511, %di # imm = 0x1FF
15361; HASWELL-NEXT:    # sched: [1:0.25]
15362; HASWELL-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15363; HASWELL-NEXT:    # sched: [6:0.50]
15364; HASWELL-NEXT:    testw %di, %di # sched: [1:0.25]
15365; HASWELL-NEXT:    testw %di, (%rsi) # sched: [6:0.50]
15366; HASWELL-NEXT:    #NO_APP
15367; HASWELL-NEXT:    retq # sched: [7:1.00]
15368;
15369; BROADWELL-LABEL: test_test_16:
15370; BROADWELL:       # %bb.0:
15371; BROADWELL-NEXT:    #APP
15372; BROADWELL-NEXT:    testw $511, %ax # imm = 0x1FF
15373; BROADWELL-NEXT:    # sched: [1:0.25]
15374; BROADWELL-NEXT:    testw $511, %di # imm = 0x1FF
15375; BROADWELL-NEXT:    # sched: [1:0.25]
15376; BROADWELL-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15377; BROADWELL-NEXT:    # sched: [6:0.50]
15378; BROADWELL-NEXT:    testw %di, %di # sched: [1:0.25]
15379; BROADWELL-NEXT:    testw %di, (%rsi) # sched: [6:0.50]
15380; BROADWELL-NEXT:    #NO_APP
15381; BROADWELL-NEXT:    retq # sched: [7:1.00]
15382;
15383; SKYLAKE-LABEL: test_test_16:
15384; SKYLAKE:       # %bb.0:
15385; SKYLAKE-NEXT:    #APP
15386; SKYLAKE-NEXT:    testw $511, %ax # imm = 0x1FF
15387; SKYLAKE-NEXT:    # sched: [1:0.25]
15388; SKYLAKE-NEXT:    testw $511, %di # imm = 0x1FF
15389; SKYLAKE-NEXT:    # sched: [1:0.25]
15390; SKYLAKE-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15391; SKYLAKE-NEXT:    # sched: [6:0.50]
15392; SKYLAKE-NEXT:    testw %di, %di # sched: [1:0.25]
15393; SKYLAKE-NEXT:    testw %di, (%rsi) # sched: [6:0.50]
15394; SKYLAKE-NEXT:    #NO_APP
15395; SKYLAKE-NEXT:    retq # sched: [7:1.00]
15396;
15397; SKX-LABEL: test_test_16:
15398; SKX:       # %bb.0:
15399; SKX-NEXT:    #APP
15400; SKX-NEXT:    testw $511, %ax # imm = 0x1FF
15401; SKX-NEXT:    # sched: [1:0.25]
15402; SKX-NEXT:    testw $511, %di # imm = 0x1FF
15403; SKX-NEXT:    # sched: [1:0.25]
15404; SKX-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15405; SKX-NEXT:    # sched: [6:0.50]
15406; SKX-NEXT:    testw %di, %di # sched: [1:0.25]
15407; SKX-NEXT:    testw %di, (%rsi) # sched: [6:0.50]
15408; SKX-NEXT:    #NO_APP
15409; SKX-NEXT:    retq # sched: [7:1.00]
15410;
15411; BTVER2-LABEL: test_test_16:
15412; BTVER2:       # %bb.0:
15413; BTVER2-NEXT:    #APP
15414; BTVER2-NEXT:    testw $511, %ax # imm = 0x1FF
15415; BTVER2-NEXT:    # sched: [1:0.50]
15416; BTVER2-NEXT:    testw $511, %di # imm = 0x1FF
15417; BTVER2-NEXT:    # sched: [1:0.50]
15418; BTVER2-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15419; BTVER2-NEXT:    # sched: [4:1.00]
15420; BTVER2-NEXT:    testw %di, %di # sched: [1:0.50]
15421; BTVER2-NEXT:    testw %di, (%rsi) # sched: [4:1.00]
15422; BTVER2-NEXT:    #NO_APP
15423; BTVER2-NEXT:    retq # sched: [4:1.00]
15424;
15425; ZNVER1-LABEL: test_test_16:
15426; ZNVER1:       # %bb.0:
15427; ZNVER1-NEXT:    #APP
15428; ZNVER1-NEXT:    testw $511, %ax # imm = 0x1FF
15429; ZNVER1-NEXT:    # sched: [1:0.25]
15430; ZNVER1-NEXT:    testw $511, %di # imm = 0x1FF
15431; ZNVER1-NEXT:    # sched: [1:0.25]
15432; ZNVER1-NEXT:    testw $511, (%rsi) # imm = 0x1FF
15433; ZNVER1-NEXT:    # sched: [5:0.50]
15434; ZNVER1-NEXT:    testw %di, %di # sched: [1:0.25]
15435; ZNVER1-NEXT:    testw %di, (%rsi) # sched: [5:0.50]
15436; ZNVER1-NEXT:    #NO_APP
15437; ZNVER1-NEXT:    retq # sched: [1:0.50]
15438  tail call void asm "testw $2, %AX \0A\09 testw $2, $0 \0A\09 testw $2, $1 \0A\09 testw $0, $0 \0A\09 testw $0, $1", "r,*m,i"(i16 %a0, i16* %a1, i16 511) nounwind
15439  ret void
15440}
15441define void @test_test_32(i32 %a0, i32* %a1) optsize {
15442; GENERIC-LABEL: test_test_32:
15443; GENERIC:       # %bb.0:
15444; GENERIC-NEXT:    #APP
15445; GENERIC-NEXT:    testl $665536, %eax # imm = 0xA27C0
15446; GENERIC-NEXT:    # sched: [1:0.33]
15447; GENERIC-NEXT:    testl $665536, %edi # imm = 0xA27C0
15448; GENERIC-NEXT:    # sched: [1:0.33]
15449; GENERIC-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15450; GENERIC-NEXT:    # sched: [6:0.50]
15451; GENERIC-NEXT:    testl %edi, %edi # sched: [1:0.33]
15452; GENERIC-NEXT:    testl %edi, (%rsi) # sched: [6:0.50]
15453; GENERIC-NEXT:    #NO_APP
15454; GENERIC-NEXT:    retq # sched: [1:1.00]
15455;
15456; ATOM-LABEL: test_test_32:
15457; ATOM:       # %bb.0:
15458; ATOM-NEXT:    #APP
15459; ATOM-NEXT:    testl $665536, %eax # imm = 0xA27C0
15460; ATOM-NEXT:    # sched: [1:0.50]
15461; ATOM-NEXT:    testl $665536, %edi # imm = 0xA27C0
15462; ATOM-NEXT:    # sched: [1:0.50]
15463; ATOM-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15464; ATOM-NEXT:    # sched: [1:1.00]
15465; ATOM-NEXT:    testl %edi, %edi # sched: [1:0.50]
15466; ATOM-NEXT:    testl %edi, (%rsi) # sched: [1:1.00]
15467; ATOM-NEXT:    #NO_APP
15468; ATOM-NEXT:    retq # sched: [79:39.50]
15469;
15470; SLM-LABEL: test_test_32:
15471; SLM:       # %bb.0:
15472; SLM-NEXT:    #APP
15473; SLM-NEXT:    testl $665536, %eax # imm = 0xA27C0
15474; SLM-NEXT:    # sched: [1:0.50]
15475; SLM-NEXT:    testl $665536, %edi # imm = 0xA27C0
15476; SLM-NEXT:    # sched: [1:0.50]
15477; SLM-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15478; SLM-NEXT:    # sched: [4:1.00]
15479; SLM-NEXT:    testl %edi, %edi # sched: [1:0.50]
15480; SLM-NEXT:    testl %edi, (%rsi) # sched: [4:1.00]
15481; SLM-NEXT:    #NO_APP
15482; SLM-NEXT:    retq # sched: [4:1.00]
15483;
15484; SANDY-LABEL: test_test_32:
15485; SANDY:       # %bb.0:
15486; SANDY-NEXT:    #APP
15487; SANDY-NEXT:    testl $665536, %eax # imm = 0xA27C0
15488; SANDY-NEXT:    # sched: [1:0.33]
15489; SANDY-NEXT:    testl $665536, %edi # imm = 0xA27C0
15490; SANDY-NEXT:    # sched: [1:0.33]
15491; SANDY-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15492; SANDY-NEXT:    # sched: [6:0.50]
15493; SANDY-NEXT:    testl %edi, %edi # sched: [1:0.33]
15494; SANDY-NEXT:    testl %edi, (%rsi) # sched: [6:0.50]
15495; SANDY-NEXT:    #NO_APP
15496; SANDY-NEXT:    retq # sched: [1:1.00]
15497;
15498; HASWELL-LABEL: test_test_32:
15499; HASWELL:       # %bb.0:
15500; HASWELL-NEXT:    #APP
15501; HASWELL-NEXT:    testl $665536, %eax # imm = 0xA27C0
15502; HASWELL-NEXT:    # sched: [1:0.25]
15503; HASWELL-NEXT:    testl $665536, %edi # imm = 0xA27C0
15504; HASWELL-NEXT:    # sched: [1:0.25]
15505; HASWELL-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15506; HASWELL-NEXT:    # sched: [6:0.50]
15507; HASWELL-NEXT:    testl %edi, %edi # sched: [1:0.25]
15508; HASWELL-NEXT:    testl %edi, (%rsi) # sched: [6:0.50]
15509; HASWELL-NEXT:    #NO_APP
15510; HASWELL-NEXT:    retq # sched: [7:1.00]
15511;
15512; BROADWELL-LABEL: test_test_32:
15513; BROADWELL:       # %bb.0:
15514; BROADWELL-NEXT:    #APP
15515; BROADWELL-NEXT:    testl $665536, %eax # imm = 0xA27C0
15516; BROADWELL-NEXT:    # sched: [1:0.25]
15517; BROADWELL-NEXT:    testl $665536, %edi # imm = 0xA27C0
15518; BROADWELL-NEXT:    # sched: [1:0.25]
15519; BROADWELL-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15520; BROADWELL-NEXT:    # sched: [6:0.50]
15521; BROADWELL-NEXT:    testl %edi, %edi # sched: [1:0.25]
15522; BROADWELL-NEXT:    testl %edi, (%rsi) # sched: [6:0.50]
15523; BROADWELL-NEXT:    #NO_APP
15524; BROADWELL-NEXT:    retq # sched: [7:1.00]
15525;
15526; SKYLAKE-LABEL: test_test_32:
15527; SKYLAKE:       # %bb.0:
15528; SKYLAKE-NEXT:    #APP
15529; SKYLAKE-NEXT:    testl $665536, %eax # imm = 0xA27C0
15530; SKYLAKE-NEXT:    # sched: [1:0.25]
15531; SKYLAKE-NEXT:    testl $665536, %edi # imm = 0xA27C0
15532; SKYLAKE-NEXT:    # sched: [1:0.25]
15533; SKYLAKE-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15534; SKYLAKE-NEXT:    # sched: [6:0.50]
15535; SKYLAKE-NEXT:    testl %edi, %edi # sched: [1:0.25]
15536; SKYLAKE-NEXT:    testl %edi, (%rsi) # sched: [6:0.50]
15537; SKYLAKE-NEXT:    #NO_APP
15538; SKYLAKE-NEXT:    retq # sched: [7:1.00]
15539;
15540; SKX-LABEL: test_test_32:
15541; SKX:       # %bb.0:
15542; SKX-NEXT:    #APP
15543; SKX-NEXT:    testl $665536, %eax # imm = 0xA27C0
15544; SKX-NEXT:    # sched: [1:0.25]
15545; SKX-NEXT:    testl $665536, %edi # imm = 0xA27C0
15546; SKX-NEXT:    # sched: [1:0.25]
15547; SKX-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15548; SKX-NEXT:    # sched: [6:0.50]
15549; SKX-NEXT:    testl %edi, %edi # sched: [1:0.25]
15550; SKX-NEXT:    testl %edi, (%rsi) # sched: [6:0.50]
15551; SKX-NEXT:    #NO_APP
15552; SKX-NEXT:    retq # sched: [7:1.00]
15553;
15554; BTVER2-LABEL: test_test_32:
15555; BTVER2:       # %bb.0:
15556; BTVER2-NEXT:    #APP
15557; BTVER2-NEXT:    testl $665536, %eax # imm = 0xA27C0
15558; BTVER2-NEXT:    # sched: [1:0.50]
15559; BTVER2-NEXT:    testl $665536, %edi # imm = 0xA27C0
15560; BTVER2-NEXT:    # sched: [1:0.50]
15561; BTVER2-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15562; BTVER2-NEXT:    # sched: [4:1.00]
15563; BTVER2-NEXT:    testl %edi, %edi # sched: [1:0.50]
15564; BTVER2-NEXT:    testl %edi, (%rsi) # sched: [4:1.00]
15565; BTVER2-NEXT:    #NO_APP
15566; BTVER2-NEXT:    retq # sched: [4:1.00]
15567;
15568; ZNVER1-LABEL: test_test_32:
15569; ZNVER1:       # %bb.0:
15570; ZNVER1-NEXT:    #APP
15571; ZNVER1-NEXT:    testl $665536, %eax # imm = 0xA27C0
15572; ZNVER1-NEXT:    # sched: [1:0.25]
15573; ZNVER1-NEXT:    testl $665536, %edi # imm = 0xA27C0
15574; ZNVER1-NEXT:    # sched: [1:0.25]
15575; ZNVER1-NEXT:    testl $665536, (%rsi) # imm = 0xA27C0
15576; ZNVER1-NEXT:    # sched: [5:0.50]
15577; ZNVER1-NEXT:    testl %edi, %edi # sched: [1:0.25]
15578; ZNVER1-NEXT:    testl %edi, (%rsi) # sched: [5:0.50]
15579; ZNVER1-NEXT:    #NO_APP
15580; ZNVER1-NEXT:    retq # sched: [1:0.50]
15581  tail call void asm "testl $2, %EAX \0A\09 testl $2, $0 \0A\09 testl $2, $1 \0A\09 testl $0, $0 \0A\09 testl $0, $1", "r,*m,i"(i32 %a0, i32* %a1, i32 665536) nounwind
15582  ret void
15583}
15584define void @test_test_64(i64 %a0, i64* %a1) optsize {
15585; GENERIC-LABEL: test_test_64:
15586; GENERIC:       # %bb.0:
15587; GENERIC-NEXT:    #APP
15588; GENERIC-NEXT:    testq $665536, %rax # imm = 0xA27C0
15589; GENERIC-NEXT:    # sched: [1:0.33]
15590; GENERIC-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15591; GENERIC-NEXT:    # sched: [1:0.33]
15592; GENERIC-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15593; GENERIC-NEXT:    # sched: [6:0.50]
15594; GENERIC-NEXT:    testq %rdi, %rdi # sched: [1:0.33]
15595; GENERIC-NEXT:    testq %rdi, (%rsi) # sched: [6:0.50]
15596; GENERIC-NEXT:    #NO_APP
15597; GENERIC-NEXT:    retq # sched: [1:1.00]
15598;
15599; ATOM-LABEL: test_test_64:
15600; ATOM:       # %bb.0:
15601; ATOM-NEXT:    #APP
15602; ATOM-NEXT:    testq $665536, %rax # imm = 0xA27C0
15603; ATOM-NEXT:    # sched: [1:0.50]
15604; ATOM-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15605; ATOM-NEXT:    # sched: [1:0.50]
15606; ATOM-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15607; ATOM-NEXT:    # sched: [1:1.00]
15608; ATOM-NEXT:    testq %rdi, %rdi # sched: [1:0.50]
15609; ATOM-NEXT:    testq %rdi, (%rsi) # sched: [1:1.00]
15610; ATOM-NEXT:    #NO_APP
15611; ATOM-NEXT:    retq # sched: [79:39.50]
15612;
15613; SLM-LABEL: test_test_64:
15614; SLM:       # %bb.0:
15615; SLM-NEXT:    #APP
15616; SLM-NEXT:    testq $665536, %rax # imm = 0xA27C0
15617; SLM-NEXT:    # sched: [1:0.50]
15618; SLM-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15619; SLM-NEXT:    # sched: [1:0.50]
15620; SLM-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15621; SLM-NEXT:    # sched: [4:1.00]
15622; SLM-NEXT:    testq %rdi, %rdi # sched: [1:0.50]
15623; SLM-NEXT:    testq %rdi, (%rsi) # sched: [4:1.00]
15624; SLM-NEXT:    #NO_APP
15625; SLM-NEXT:    retq # sched: [4:1.00]
15626;
15627; SANDY-LABEL: test_test_64:
15628; SANDY:       # %bb.0:
15629; SANDY-NEXT:    #APP
15630; SANDY-NEXT:    testq $665536, %rax # imm = 0xA27C0
15631; SANDY-NEXT:    # sched: [1:0.33]
15632; SANDY-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15633; SANDY-NEXT:    # sched: [1:0.33]
15634; SANDY-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15635; SANDY-NEXT:    # sched: [6:0.50]
15636; SANDY-NEXT:    testq %rdi, %rdi # sched: [1:0.33]
15637; SANDY-NEXT:    testq %rdi, (%rsi) # sched: [6:0.50]
15638; SANDY-NEXT:    #NO_APP
15639; SANDY-NEXT:    retq # sched: [1:1.00]
15640;
15641; HASWELL-LABEL: test_test_64:
15642; HASWELL:       # %bb.0:
15643; HASWELL-NEXT:    #APP
15644; HASWELL-NEXT:    testq $665536, %rax # imm = 0xA27C0
15645; HASWELL-NEXT:    # sched: [1:0.25]
15646; HASWELL-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15647; HASWELL-NEXT:    # sched: [1:0.25]
15648; HASWELL-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15649; HASWELL-NEXT:    # sched: [6:0.50]
15650; HASWELL-NEXT:    testq %rdi, %rdi # sched: [1:0.25]
15651; HASWELL-NEXT:    testq %rdi, (%rsi) # sched: [6:0.50]
15652; HASWELL-NEXT:    #NO_APP
15653; HASWELL-NEXT:    retq # sched: [7:1.00]
15654;
15655; BROADWELL-LABEL: test_test_64:
15656; BROADWELL:       # %bb.0:
15657; BROADWELL-NEXT:    #APP
15658; BROADWELL-NEXT:    testq $665536, %rax # imm = 0xA27C0
15659; BROADWELL-NEXT:    # sched: [1:0.25]
15660; BROADWELL-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15661; BROADWELL-NEXT:    # sched: [1:0.25]
15662; BROADWELL-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15663; BROADWELL-NEXT:    # sched: [6:0.50]
15664; BROADWELL-NEXT:    testq %rdi, %rdi # sched: [1:0.25]
15665; BROADWELL-NEXT:    testq %rdi, (%rsi) # sched: [6:0.50]
15666; BROADWELL-NEXT:    #NO_APP
15667; BROADWELL-NEXT:    retq # sched: [7:1.00]
15668;
15669; SKYLAKE-LABEL: test_test_64:
15670; SKYLAKE:       # %bb.0:
15671; SKYLAKE-NEXT:    #APP
15672; SKYLAKE-NEXT:    testq $665536, %rax # imm = 0xA27C0
15673; SKYLAKE-NEXT:    # sched: [1:0.25]
15674; SKYLAKE-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15675; SKYLAKE-NEXT:    # sched: [1:0.25]
15676; SKYLAKE-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15677; SKYLAKE-NEXT:    # sched: [6:0.50]
15678; SKYLAKE-NEXT:    testq %rdi, %rdi # sched: [1:0.25]
15679; SKYLAKE-NEXT:    testq %rdi, (%rsi) # sched: [6:0.50]
15680; SKYLAKE-NEXT:    #NO_APP
15681; SKYLAKE-NEXT:    retq # sched: [7:1.00]
15682;
15683; SKX-LABEL: test_test_64:
15684; SKX:       # %bb.0:
15685; SKX-NEXT:    #APP
15686; SKX-NEXT:    testq $665536, %rax # imm = 0xA27C0
15687; SKX-NEXT:    # sched: [1:0.25]
15688; SKX-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15689; SKX-NEXT:    # sched: [1:0.25]
15690; SKX-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15691; SKX-NEXT:    # sched: [6:0.50]
15692; SKX-NEXT:    testq %rdi, %rdi # sched: [1:0.25]
15693; SKX-NEXT:    testq %rdi, (%rsi) # sched: [6:0.50]
15694; SKX-NEXT:    #NO_APP
15695; SKX-NEXT:    retq # sched: [7:1.00]
15696;
15697; BTVER2-LABEL: test_test_64:
15698; BTVER2:       # %bb.0:
15699; BTVER2-NEXT:    #APP
15700; BTVER2-NEXT:    testq $665536, %rax # imm = 0xA27C0
15701; BTVER2-NEXT:    # sched: [1:0.50]
15702; BTVER2-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15703; BTVER2-NEXT:    # sched: [1:0.50]
15704; BTVER2-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15705; BTVER2-NEXT:    # sched: [4:1.00]
15706; BTVER2-NEXT:    testq %rdi, %rdi # sched: [1:0.50]
15707; BTVER2-NEXT:    testq %rdi, (%rsi) # sched: [4:1.00]
15708; BTVER2-NEXT:    #NO_APP
15709; BTVER2-NEXT:    retq # sched: [4:1.00]
15710;
15711; ZNVER1-LABEL: test_test_64:
15712; ZNVER1:       # %bb.0:
15713; ZNVER1-NEXT:    #APP
15714; ZNVER1-NEXT:    testq $665536, %rax # imm = 0xA27C0
15715; ZNVER1-NEXT:    # sched: [1:0.25]
15716; ZNVER1-NEXT:    testq $665536, %rdi # imm = 0xA27C0
15717; ZNVER1-NEXT:    # sched: [1:0.25]
15718; ZNVER1-NEXT:    testq $665536, (%rsi) # imm = 0xA27C0
15719; ZNVER1-NEXT:    # sched: [5:0.50]
15720; ZNVER1-NEXT:    testq %rdi, %rdi # sched: [1:0.25]
15721; ZNVER1-NEXT:    testq %rdi, (%rsi) # sched: [5:0.50]
15722; ZNVER1-NEXT:    #NO_APP
15723; ZNVER1-NEXT:    retq # sched: [1:0.50]
15724  tail call void asm "testq $2, %RAX \0A\09 testq $2, $0 \0A\09 testq $2, $1 \0A\09 testq $0, $0 \0A\09 testq $0, $1", "r,*m,i"(i64 %a0, i64* %a1, i32 665536) nounwind
15725  ret void
15726}
15727
15728; TODO: ud0, ud1
15729define void @test_ud2() optsize {
15730; GENERIC-LABEL: test_ud2:
15731; GENERIC:       # %bb.0:
15732; GENERIC-NEXT:    #APP
15733; GENERIC-NEXT:    ud2 # sched: [100:0.33]
15734; GENERIC-NEXT:    #NO_APP
15735; GENERIC-NEXT:    retq # sched: [1:1.00]
15736;
15737; ATOM-LABEL: test_ud2:
15738; ATOM:       # %bb.0:
15739; ATOM-NEXT:    #APP
15740; ATOM-NEXT:    ud2 # sched: [100:0.50]
15741; ATOM-NEXT:    #NO_APP
15742; ATOM-NEXT:    retq # sched: [79:39.50]
15743;
15744; SLM-LABEL: test_ud2:
15745; SLM:       # %bb.0:
15746; SLM-NEXT:    #APP
15747; SLM-NEXT:    ud2 # sched: [100:1.00]
15748; SLM-NEXT:    #NO_APP
15749; SLM-NEXT:    retq # sched: [4:1.00]
15750;
15751; SANDY-LABEL: test_ud2:
15752; SANDY:       # %bb.0:
15753; SANDY-NEXT:    #APP
15754; SANDY-NEXT:    ud2 # sched: [100:0.33]
15755; SANDY-NEXT:    #NO_APP
15756; SANDY-NEXT:    retq # sched: [1:1.00]
15757;
15758; HASWELL-LABEL: test_ud2:
15759; HASWELL:       # %bb.0:
15760; HASWELL-NEXT:    #APP
15761; HASWELL-NEXT:    ud2 # sched: [100:0.25]
15762; HASWELL-NEXT:    #NO_APP
15763; HASWELL-NEXT:    retq # sched: [7:1.00]
15764;
15765; BROADWELL-LABEL: test_ud2:
15766; BROADWELL:       # %bb.0:
15767; BROADWELL-NEXT:    #APP
15768; BROADWELL-NEXT:    ud2 # sched: [100:0.25]
15769; BROADWELL-NEXT:    #NO_APP
15770; BROADWELL-NEXT:    retq # sched: [7:1.00]
15771;
15772; SKYLAKE-LABEL: test_ud2:
15773; SKYLAKE:       # %bb.0:
15774; SKYLAKE-NEXT:    #APP
15775; SKYLAKE-NEXT:    ud2 # sched: [100:0.25]
15776; SKYLAKE-NEXT:    #NO_APP
15777; SKYLAKE-NEXT:    retq # sched: [7:1.00]
15778;
15779; SKX-LABEL: test_ud2:
15780; SKX:       # %bb.0:
15781; SKX-NEXT:    #APP
15782; SKX-NEXT:    ud2 # sched: [100:0.25]
15783; SKX-NEXT:    #NO_APP
15784; SKX-NEXT:    retq # sched: [7:1.00]
15785;
15786; BTVER2-LABEL: test_ud2:
15787; BTVER2:       # %bb.0:
15788; BTVER2-NEXT:    #APP
15789; BTVER2-NEXT:    ud2 # sched: [100:0.50]
15790; BTVER2-NEXT:    #NO_APP
15791; BTVER2-NEXT:    retq # sched: [4:1.00]
15792;
15793; ZNVER1-LABEL: test_ud2:
15794; ZNVER1:       # %bb.0:
15795; ZNVER1-NEXT:    #APP
15796; ZNVER1-NEXT:    ud2 # sched: [100:0.25]
15797; ZNVER1-NEXT:    #NO_APP
15798; ZNVER1-NEXT:    retq # sched: [1:0.50]
15799  call void asm sideeffect "ud2", ""()
15800  ret void
15801}
15802
15803; TODO - test_verr
15804; TODO - test_verw
15805; TODO - test_vmload
15806; TODO - test_vmmcall
15807; TODO - test_vmrun
15808; TODO - test_vmsave
15809; TODO - test_wbinvd
15810
15811define void @test_xadd_8(i8 %a0, i8 %a1, i8 *%a2) optsize {
15812; GENERIC-LABEL: test_xadd_8:
15813; GENERIC:       # %bb.0:
15814; GENERIC-NEXT:    #APP
15815; GENERIC-NEXT:    xaddb %dil, %sil # sched: [2:1.00]
15816; GENERIC-NEXT:    xaddb %dil, (%rdx) # sched: [8:1.00]
15817; GENERIC-NEXT:    #NO_APP
15818; GENERIC-NEXT:    retq # sched: [1:1.00]
15819;
15820; ATOM-LABEL: test_xadd_8:
15821; ATOM:       # %bb.0:
15822; ATOM-NEXT:    #APP
15823; ATOM-NEXT:    xaddb %dil, %sil # sched: [2:1.00]
15824; ATOM-NEXT:    xaddb %dil, (%rdx) # sched: [3:1.50]
15825; ATOM-NEXT:    #NO_APP
15826; ATOM-NEXT:    retq # sched: [79:39.50]
15827;
15828; SLM-LABEL: test_xadd_8:
15829; SLM:       # %bb.0:
15830; SLM-NEXT:    #APP
15831; SLM-NEXT:    xaddb %dil, %sil # sched: [1:0.50]
15832; SLM-NEXT:    xaddb %dil, (%rdx) # sched: [4:2.00]
15833; SLM-NEXT:    #NO_APP
15834; SLM-NEXT:    retq # sched: [4:1.00]
15835;
15836; SANDY-LABEL: test_xadd_8:
15837; SANDY:       # %bb.0:
15838; SANDY-NEXT:    #APP
15839; SANDY-NEXT:    xaddb %dil, %sil # sched: [2:1.00]
15840; SANDY-NEXT:    xaddb %dil, (%rdx) # sched: [8:1.00]
15841; SANDY-NEXT:    #NO_APP
15842; SANDY-NEXT:    retq # sched: [1:1.00]
15843;
15844; HASWELL-LABEL: test_xadd_8:
15845; HASWELL:       # %bb.0:
15846; HASWELL-NEXT:    #APP
15847; HASWELL-NEXT:    xaddb %dil, %sil # sched: [2:0.75]
15848; HASWELL-NEXT:    xaddb %dil, (%rdx) # sched: [8:1.00]
15849; HASWELL-NEXT:    #NO_APP
15850; HASWELL-NEXT:    retq # sched: [7:1.00]
15851;
15852; BROADWELL-LABEL: test_xadd_8:
15853; BROADWELL:       # %bb.0:
15854; BROADWELL-NEXT:    #APP
15855; BROADWELL-NEXT:    xaddb %dil, %sil # sched: [2:0.75]
15856; BROADWELL-NEXT:    xaddb %dil, (%rdx) # sched: [7:1.00]
15857; BROADWELL-NEXT:    #NO_APP
15858; BROADWELL-NEXT:    retq # sched: [7:1.00]
15859;
15860; SKYLAKE-LABEL: test_xadd_8:
15861; SKYLAKE:       # %bb.0:
15862; SKYLAKE-NEXT:    #APP
15863; SKYLAKE-NEXT:    xaddb %dil, %sil # sched: [2:0.75]
15864; SKYLAKE-NEXT:    xaddb %dil, (%rdx) # sched: [7:1.00]
15865; SKYLAKE-NEXT:    #NO_APP
15866; SKYLAKE-NEXT:    retq # sched: [7:1.00]
15867;
15868; SKX-LABEL: test_xadd_8:
15869; SKX:       # %bb.0:
15870; SKX-NEXT:    #APP
15871; SKX-NEXT:    xaddb %dil, %sil # sched: [2:0.75]
15872; SKX-NEXT:    xaddb %dil, (%rdx) # sched: [7:1.00]
15873; SKX-NEXT:    #NO_APP
15874; SKX-NEXT:    retq # sched: [7:1.00]
15875;
15876; BTVER2-LABEL: test_xadd_8:
15877; BTVER2:       # %bb.0:
15878; BTVER2-NEXT:    #APP
15879; BTVER2-NEXT:    xaddb %dil, %sil # sched: [1:0.50]
15880; BTVER2-NEXT:    xaddb %dil, (%rdx) # sched: [4:1.00]
15881; BTVER2-NEXT:    #NO_APP
15882; BTVER2-NEXT:    retq # sched: [4:1.00]
15883;
15884; ZNVER1-LABEL: test_xadd_8:
15885; ZNVER1:       # %bb.0:
15886; ZNVER1-NEXT:    #APP
15887; ZNVER1-NEXT:    xaddb %dil, %sil # sched: [1:0.25]
15888; ZNVER1-NEXT:    xaddb %dil, (%rdx) # sched: [100:0.25]
15889; ZNVER1-NEXT:    #NO_APP
15890; ZNVER1-NEXT:    retq # sched: [1:0.50]
15891  tail call void asm "xaddb $0, $1 \0A\09 xaddb $0, $2", "r,r,*m"(i8 %a0, i8 %a1, i8 *%a2) nounwind
15892  ret void
15893}
15894define void @test_xadd_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
15895; GENERIC-LABEL: test_xadd_16:
15896; GENERIC:       # %bb.0:
15897; GENERIC-NEXT:    #APP
15898; GENERIC-NEXT:    xaddw %di, %si # sched: [2:1.00]
15899; GENERIC-NEXT:    xaddw %di, (%rdx) # sched: [8:1.00]
15900; GENERIC-NEXT:    #NO_APP
15901; GENERIC-NEXT:    retq # sched: [1:1.00]
15902;
15903; ATOM-LABEL: test_xadd_16:
15904; ATOM:       # %bb.0:
15905; ATOM-NEXT:    #APP
15906; ATOM-NEXT:    xaddw %di, %si # sched: [2:1.00]
15907; ATOM-NEXT:    xaddw %di, (%rdx) # sched: [3:1.50]
15908; ATOM-NEXT:    #NO_APP
15909; ATOM-NEXT:    retq # sched: [79:39.50]
15910;
15911; SLM-LABEL: test_xadd_16:
15912; SLM:       # %bb.0:
15913; SLM-NEXT:    #APP
15914; SLM-NEXT:    xaddw %di, %si # sched: [1:0.50]
15915; SLM-NEXT:    xaddw %di, (%rdx) # sched: [4:2.00]
15916; SLM-NEXT:    #NO_APP
15917; SLM-NEXT:    retq # sched: [4:1.00]
15918;
15919; SANDY-LABEL: test_xadd_16:
15920; SANDY:       # %bb.0:
15921; SANDY-NEXT:    #APP
15922; SANDY-NEXT:    xaddw %di, %si # sched: [2:1.00]
15923; SANDY-NEXT:    xaddw %di, (%rdx) # sched: [8:1.00]
15924; SANDY-NEXT:    #NO_APP
15925; SANDY-NEXT:    retq # sched: [1:1.00]
15926;
15927; HASWELL-LABEL: test_xadd_16:
15928; HASWELL:       # %bb.0:
15929; HASWELL-NEXT:    #APP
15930; HASWELL-NEXT:    xaddw %di, %si # sched: [2:0.75]
15931; HASWELL-NEXT:    xaddw %di, (%rdx) # sched: [8:1.00]
15932; HASWELL-NEXT:    #NO_APP
15933; HASWELL-NEXT:    retq # sched: [7:1.00]
15934;
15935; BROADWELL-LABEL: test_xadd_16:
15936; BROADWELL:       # %bb.0:
15937; BROADWELL-NEXT:    #APP
15938; BROADWELL-NEXT:    xaddw %di, %si # sched: [2:0.75]
15939; BROADWELL-NEXT:    xaddw %di, (%rdx) # sched: [7:1.00]
15940; BROADWELL-NEXT:    #NO_APP
15941; BROADWELL-NEXT:    retq # sched: [7:1.00]
15942;
15943; SKYLAKE-LABEL: test_xadd_16:
15944; SKYLAKE:       # %bb.0:
15945; SKYLAKE-NEXT:    #APP
15946; SKYLAKE-NEXT:    xaddw %di, %si # sched: [2:0.75]
15947; SKYLAKE-NEXT:    xaddw %di, (%rdx) # sched: [7:1.00]
15948; SKYLAKE-NEXT:    #NO_APP
15949; SKYLAKE-NEXT:    retq # sched: [7:1.00]
15950;
15951; SKX-LABEL: test_xadd_16:
15952; SKX:       # %bb.0:
15953; SKX-NEXT:    #APP
15954; SKX-NEXT:    xaddw %di, %si # sched: [2:0.75]
15955; SKX-NEXT:    xaddw %di, (%rdx) # sched: [7:1.00]
15956; SKX-NEXT:    #NO_APP
15957; SKX-NEXT:    retq # sched: [7:1.00]
15958;
15959; BTVER2-LABEL: test_xadd_16:
15960; BTVER2:       # %bb.0:
15961; BTVER2-NEXT:    #APP
15962; BTVER2-NEXT:    xaddw %di, %si # sched: [1:0.50]
15963; BTVER2-NEXT:    xaddw %di, (%rdx) # sched: [4:1.00]
15964; BTVER2-NEXT:    #NO_APP
15965; BTVER2-NEXT:    retq # sched: [4:1.00]
15966;
15967; ZNVER1-LABEL: test_xadd_16:
15968; ZNVER1:       # %bb.0:
15969; ZNVER1-NEXT:    #APP
15970; ZNVER1-NEXT:    xaddw %di, %si # sched: [1:0.25]
15971; ZNVER1-NEXT:    xaddw %di, (%rdx) # sched: [100:0.25]
15972; ZNVER1-NEXT:    #NO_APP
15973; ZNVER1-NEXT:    retq # sched: [1:0.50]
15974  tail call void asm "xaddw $0, $1 \0A\09 xaddw $0, $2", "r,r,*m"(i16 %a0, i16 %a1, i16 *%a2) nounwind
15975  ret void
15976}
15977define void @test_xadd_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
15978; GENERIC-LABEL: test_xadd_32:
15979; GENERIC:       # %bb.0:
15980; GENERIC-NEXT:    #APP
15981; GENERIC-NEXT:    xaddl %edi, %esi # sched: [2:1.00]
15982; GENERIC-NEXT:    xaddl %edi, (%rdx) # sched: [8:1.00]
15983; GENERIC-NEXT:    #NO_APP
15984; GENERIC-NEXT:    retq # sched: [1:1.00]
15985;
15986; ATOM-LABEL: test_xadd_32:
15987; ATOM:       # %bb.0:
15988; ATOM-NEXT:    #APP
15989; ATOM-NEXT:    xaddl %edi, %esi # sched: [2:1.00]
15990; ATOM-NEXT:    xaddl %edi, (%rdx) # sched: [3:1.50]
15991; ATOM-NEXT:    #NO_APP
15992; ATOM-NEXT:    retq # sched: [79:39.50]
15993;
15994; SLM-LABEL: test_xadd_32:
15995; SLM:       # %bb.0:
15996; SLM-NEXT:    #APP
15997; SLM-NEXT:    xaddl %edi, %esi # sched: [1:0.50]
15998; SLM-NEXT:    xaddl %edi, (%rdx) # sched: [4:2.00]
15999; SLM-NEXT:    #NO_APP
16000; SLM-NEXT:    retq # sched: [4:1.00]
16001;
16002; SANDY-LABEL: test_xadd_32:
16003; SANDY:       # %bb.0:
16004; SANDY-NEXT:    #APP
16005; SANDY-NEXT:    xaddl %edi, %esi # sched: [2:1.00]
16006; SANDY-NEXT:    xaddl %edi, (%rdx) # sched: [8:1.00]
16007; SANDY-NEXT:    #NO_APP
16008; SANDY-NEXT:    retq # sched: [1:1.00]
16009;
16010; HASWELL-LABEL: test_xadd_32:
16011; HASWELL:       # %bb.0:
16012; HASWELL-NEXT:    #APP
16013; HASWELL-NEXT:    xaddl %edi, %esi # sched: [2:0.75]
16014; HASWELL-NEXT:    xaddl %edi, (%rdx) # sched: [8:1.00]
16015; HASWELL-NEXT:    #NO_APP
16016; HASWELL-NEXT:    retq # sched: [7:1.00]
16017;
16018; BROADWELL-LABEL: test_xadd_32:
16019; BROADWELL:       # %bb.0:
16020; BROADWELL-NEXT:    #APP
16021; BROADWELL-NEXT:    xaddl %edi, %esi # sched: [2:0.75]
16022; BROADWELL-NEXT:    xaddl %edi, (%rdx) # sched: [7:1.00]
16023; BROADWELL-NEXT:    #NO_APP
16024; BROADWELL-NEXT:    retq # sched: [7:1.00]
16025;
16026; SKYLAKE-LABEL: test_xadd_32:
16027; SKYLAKE:       # %bb.0:
16028; SKYLAKE-NEXT:    #APP
16029; SKYLAKE-NEXT:    xaddl %edi, %esi # sched: [2:0.75]
16030; SKYLAKE-NEXT:    xaddl %edi, (%rdx) # sched: [7:1.00]
16031; SKYLAKE-NEXT:    #NO_APP
16032; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16033;
16034; SKX-LABEL: test_xadd_32:
16035; SKX:       # %bb.0:
16036; SKX-NEXT:    #APP
16037; SKX-NEXT:    xaddl %edi, %esi # sched: [2:0.75]
16038; SKX-NEXT:    xaddl %edi, (%rdx) # sched: [7:1.00]
16039; SKX-NEXT:    #NO_APP
16040; SKX-NEXT:    retq # sched: [7:1.00]
16041;
16042; BTVER2-LABEL: test_xadd_32:
16043; BTVER2:       # %bb.0:
16044; BTVER2-NEXT:    #APP
16045; BTVER2-NEXT:    xaddl %edi, %esi # sched: [1:0.50]
16046; BTVER2-NEXT:    xaddl %edi, (%rdx) # sched: [4:1.00]
16047; BTVER2-NEXT:    #NO_APP
16048; BTVER2-NEXT:    retq # sched: [4:1.00]
16049;
16050; ZNVER1-LABEL: test_xadd_32:
16051; ZNVER1:       # %bb.0:
16052; ZNVER1-NEXT:    #APP
16053; ZNVER1-NEXT:    xaddl %edi, %esi # sched: [1:0.25]
16054; ZNVER1-NEXT:    xaddl %edi, (%rdx) # sched: [100:0.25]
16055; ZNVER1-NEXT:    #NO_APP
16056; ZNVER1-NEXT:    retq # sched: [1:0.50]
16057  tail call void asm "xaddl $0, $1 \0A\09 xaddl $0, $2", "r,r,*m"(i32 %a0, i32 %a1, i32 *%a2) nounwind
16058  ret void
16059}
16060define void @test_xadd_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
16061; GENERIC-LABEL: test_xadd_64:
16062; GENERIC:       # %bb.0:
16063; GENERIC-NEXT:    #APP
16064; GENERIC-NEXT:    xaddq %rdi, %rsi # sched: [2:1.00]
16065; GENERIC-NEXT:    xaddq %rdi, (%rdx) # sched: [8:1.00]
16066; GENERIC-NEXT:    #NO_APP
16067; GENERIC-NEXT:    retq # sched: [1:1.00]
16068;
16069; ATOM-LABEL: test_xadd_64:
16070; ATOM:       # %bb.0:
16071; ATOM-NEXT:    #APP
16072; ATOM-NEXT:    xaddq %rdi, %rsi # sched: [2:1.00]
16073; ATOM-NEXT:    xaddq %rdi, (%rdx) # sched: [3:1.50]
16074; ATOM-NEXT:    #NO_APP
16075; ATOM-NEXT:    retq # sched: [79:39.50]
16076;
16077; SLM-LABEL: test_xadd_64:
16078; SLM:       # %bb.0:
16079; SLM-NEXT:    #APP
16080; SLM-NEXT:    xaddq %rdi, %rsi # sched: [1:0.50]
16081; SLM-NEXT:    xaddq %rdi, (%rdx) # sched: [4:2.00]
16082; SLM-NEXT:    #NO_APP
16083; SLM-NEXT:    retq # sched: [4:1.00]
16084;
16085; SANDY-LABEL: test_xadd_64:
16086; SANDY:       # %bb.0:
16087; SANDY-NEXT:    #APP
16088; SANDY-NEXT:    xaddq %rdi, %rsi # sched: [2:1.00]
16089; SANDY-NEXT:    xaddq %rdi, (%rdx) # sched: [8:1.00]
16090; SANDY-NEXT:    #NO_APP
16091; SANDY-NEXT:    retq # sched: [1:1.00]
16092;
16093; HASWELL-LABEL: test_xadd_64:
16094; HASWELL:       # %bb.0:
16095; HASWELL-NEXT:    #APP
16096; HASWELL-NEXT:    xaddq %rdi, %rsi # sched: [2:0.75]
16097; HASWELL-NEXT:    xaddq %rdi, (%rdx) # sched: [8:1.00]
16098; HASWELL-NEXT:    #NO_APP
16099; HASWELL-NEXT:    retq # sched: [7:1.00]
16100;
16101; BROADWELL-LABEL: test_xadd_64:
16102; BROADWELL:       # %bb.0:
16103; BROADWELL-NEXT:    #APP
16104; BROADWELL-NEXT:    xaddq %rdi, %rsi # sched: [2:0.75]
16105; BROADWELL-NEXT:    xaddq %rdi, (%rdx) # sched: [7:1.00]
16106; BROADWELL-NEXT:    #NO_APP
16107; BROADWELL-NEXT:    retq # sched: [7:1.00]
16108;
16109; SKYLAKE-LABEL: test_xadd_64:
16110; SKYLAKE:       # %bb.0:
16111; SKYLAKE-NEXT:    #APP
16112; SKYLAKE-NEXT:    xaddq %rdi, %rsi # sched: [2:0.75]
16113; SKYLAKE-NEXT:    xaddq %rdi, (%rdx) # sched: [7:1.00]
16114; SKYLAKE-NEXT:    #NO_APP
16115; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16116;
16117; SKX-LABEL: test_xadd_64:
16118; SKX:       # %bb.0:
16119; SKX-NEXT:    #APP
16120; SKX-NEXT:    xaddq %rdi, %rsi # sched: [2:0.75]
16121; SKX-NEXT:    xaddq %rdi, (%rdx) # sched: [7:1.00]
16122; SKX-NEXT:    #NO_APP
16123; SKX-NEXT:    retq # sched: [7:1.00]
16124;
16125; BTVER2-LABEL: test_xadd_64:
16126; BTVER2:       # %bb.0:
16127; BTVER2-NEXT:    #APP
16128; BTVER2-NEXT:    xaddq %rdi, %rsi # sched: [1:0.50]
16129; BTVER2-NEXT:    xaddq %rdi, (%rdx) # sched: [4:1.00]
16130; BTVER2-NEXT:    #NO_APP
16131; BTVER2-NEXT:    retq # sched: [4:1.00]
16132;
16133; ZNVER1-LABEL: test_xadd_64:
16134; ZNVER1:       # %bb.0:
16135; ZNVER1-NEXT:    #APP
16136; ZNVER1-NEXT:    xaddq %rdi, %rsi # sched: [1:0.25]
16137; ZNVER1-NEXT:    xaddq %rdi, (%rdx) # sched: [100:0.25]
16138; ZNVER1-NEXT:    #NO_APP
16139; ZNVER1-NEXT:    retq # sched: [1:0.50]
16140  tail call void asm "xaddq $0, $1 \0A\09 xaddq $0, $2", "r,r,*m"(i64 %a0, i64 %a1, i64 *%a2) nounwind
16141  ret void
16142}
16143
16144define void @test_xchg_8(i8 %a0, i8 %a1, i8 *%a2) optsize {
16145; GENERIC-LABEL: test_xchg_8:
16146; GENERIC:       # %bb.0:
16147; GENERIC-NEXT:    #APP
16148; GENERIC-NEXT:    xchgb %sil, %dil # sched: [2:1.00]
16149; GENERIC-NEXT:    xchgb %dil, (%rdx) # sched: [6:1.00]
16150; GENERIC-NEXT:    #NO_APP
16151; GENERIC-NEXT:    retq # sched: [1:1.00]
16152;
16153; ATOM-LABEL: test_xchg_8:
16154; ATOM:       # %bb.0:
16155; ATOM-NEXT:    #APP
16156; ATOM-NEXT:    xchgb %sil, %dil # sched: [2:1.00]
16157; ATOM-NEXT:    xchgb %dil, (%rdx) # sched: [3:1.50]
16158; ATOM-NEXT:    #NO_APP
16159; ATOM-NEXT:    retq # sched: [79:39.50]
16160;
16161; SLM-LABEL: test_xchg_8:
16162; SLM:       # %bb.0:
16163; SLM-NEXT:    #APP
16164; SLM-NEXT:    xchgb %sil, %dil # sched: [1:0.50]
16165; SLM-NEXT:    xchgb %dil, (%rdx) # sched: [4:2.00]
16166; SLM-NEXT:    #NO_APP
16167; SLM-NEXT:    retq # sched: [4:1.00]
16168;
16169; SANDY-LABEL: test_xchg_8:
16170; SANDY:       # %bb.0:
16171; SANDY-NEXT:    #APP
16172; SANDY-NEXT:    xchgb %sil, %dil # sched: [2:1.00]
16173; SANDY-NEXT:    xchgb %dil, (%rdx) # sched: [6:1.00]
16174; SANDY-NEXT:    #NO_APP
16175; SANDY-NEXT:    retq # sched: [1:1.00]
16176;
16177; HASWELL-LABEL: test_xchg_8:
16178; HASWELL:       # %bb.0:
16179; HASWELL-NEXT:    #APP
16180; HASWELL-NEXT:    xchgb %sil, %dil # sched: [2:0.75]
16181; HASWELL-NEXT:    xchgb %dil, (%rdx) # sched: [9:1.00]
16182; HASWELL-NEXT:    #NO_APP
16183; HASWELL-NEXT:    retq # sched: [7:1.00]
16184;
16185; BROADWELL-LABEL: test_xchg_8:
16186; BROADWELL:       # %bb.0:
16187; BROADWELL-NEXT:    #APP
16188; BROADWELL-NEXT:    xchgb %sil, %dil # sched: [2:0.75]
16189; BROADWELL-NEXT:    xchgb %dil, (%rdx) # sched: [8:1.00]
16190; BROADWELL-NEXT:    #NO_APP
16191; BROADWELL-NEXT:    retq # sched: [7:1.00]
16192;
16193; SKYLAKE-LABEL: test_xchg_8:
16194; SKYLAKE:       # %bb.0:
16195; SKYLAKE-NEXT:    #APP
16196; SKYLAKE-NEXT:    xchgb %sil, %dil # sched: [2:0.75]
16197; SKYLAKE-NEXT:    xchgb %dil, (%rdx) # sched: [10:1.25]
16198; SKYLAKE-NEXT:    #NO_APP
16199; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16200;
16201; SKX-LABEL: test_xchg_8:
16202; SKX:       # %bb.0:
16203; SKX-NEXT:    #APP
16204; SKX-NEXT:    xchgb %sil, %dil # sched: [2:0.75]
16205; SKX-NEXT:    xchgb %dil, (%rdx) # sched: [10:1.25]
16206; SKX-NEXT:    #NO_APP
16207; SKX-NEXT:    retq # sched: [7:1.00]
16208;
16209; BTVER2-LABEL: test_xchg_8:
16210; BTVER2:       # %bb.0:
16211; BTVER2-NEXT:    #APP
16212; BTVER2-NEXT:    xchgb %sil, %dil # sched: [1:0.50]
16213; BTVER2-NEXT:    xchgb %dil, (%rdx) # sched: [4:1.00]
16214; BTVER2-NEXT:    #NO_APP
16215; BTVER2-NEXT:    retq # sched: [4:1.00]
16216;
16217; ZNVER1-LABEL: test_xchg_8:
16218; ZNVER1:       # %bb.0:
16219; ZNVER1-NEXT:    #APP
16220; ZNVER1-NEXT:    xchgb %sil, %dil # sched: [1:0.50]
16221; ZNVER1-NEXT:    xchgb %dil, (%rdx) # sched: [5:0.50]
16222; ZNVER1-NEXT:    #NO_APP
16223; ZNVER1-NEXT:    retq # sched: [1:0.50]
16224  tail call void asm "xchg $1, $0 \0A\09 xchg $2, $0", "r,r,*m"(i8 %a0, i8 %a1, i8 *%a2) nounwind
16225  ret void
16226}
16227define void @test_xchg_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
16228; GENERIC-LABEL: test_xchg_16:
16229; GENERIC:       # %bb.0:
16230; GENERIC-NEXT:    #APP
16231; GENERIC-NEXT:    xchgw %di, %ax # sched: [2:1.00]
16232; GENERIC-NEXT:    xchgw %si, %di # sched: [2:1.00]
16233; GENERIC-NEXT:    xchgw %di, (%rdx) # sched: [6:1.00]
16234; GENERIC-NEXT:    #NO_APP
16235; GENERIC-NEXT:    retq # sched: [1:1.00]
16236;
16237; ATOM-LABEL: test_xchg_16:
16238; ATOM:       # %bb.0:
16239; ATOM-NEXT:    #APP
16240; ATOM-NEXT:    xchgw %di, %ax # sched: [2:1.00]
16241; ATOM-NEXT:    xchgw %si, %di # sched: [2:1.00]
16242; ATOM-NEXT:    xchgw %di, (%rdx) # sched: [3:1.50]
16243; ATOM-NEXT:    #NO_APP
16244; ATOM-NEXT:    retq # sched: [79:39.50]
16245;
16246; SLM-LABEL: test_xchg_16:
16247; SLM:       # %bb.0:
16248; SLM-NEXT:    #APP
16249; SLM-NEXT:    xchgw %di, %ax # sched: [1:0.50]
16250; SLM-NEXT:    xchgw %si, %di # sched: [1:0.50]
16251; SLM-NEXT:    xchgw %di, (%rdx) # sched: [4:2.00]
16252; SLM-NEXT:    #NO_APP
16253; SLM-NEXT:    retq # sched: [4:1.00]
16254;
16255; SANDY-LABEL: test_xchg_16:
16256; SANDY:       # %bb.0:
16257; SANDY-NEXT:    #APP
16258; SANDY-NEXT:    xchgw %di, %ax # sched: [2:1.00]
16259; SANDY-NEXT:    xchgw %si, %di # sched: [2:1.00]
16260; SANDY-NEXT:    xchgw %di, (%rdx) # sched: [6:1.00]
16261; SANDY-NEXT:    #NO_APP
16262; SANDY-NEXT:    retq # sched: [1:1.00]
16263;
16264; HASWELL-LABEL: test_xchg_16:
16265; HASWELL:       # %bb.0:
16266; HASWELL-NEXT:    #APP
16267; HASWELL-NEXT:    xchgw %di, %ax # sched: [2:0.75]
16268; HASWELL-NEXT:    xchgw %si, %di # sched: [2:0.75]
16269; HASWELL-NEXT:    xchgw %di, (%rdx) # sched: [9:1.00]
16270; HASWELL-NEXT:    #NO_APP
16271; HASWELL-NEXT:    retq # sched: [7:1.00]
16272;
16273; BROADWELL-LABEL: test_xchg_16:
16274; BROADWELL:       # %bb.0:
16275; BROADWELL-NEXT:    #APP
16276; BROADWELL-NEXT:    xchgw %di, %ax # sched: [2:0.75]
16277; BROADWELL-NEXT:    xchgw %si, %di # sched: [2:0.75]
16278; BROADWELL-NEXT:    xchgw %di, (%rdx) # sched: [8:1.00]
16279; BROADWELL-NEXT:    #NO_APP
16280; BROADWELL-NEXT:    retq # sched: [7:1.00]
16281;
16282; SKYLAKE-LABEL: test_xchg_16:
16283; SKYLAKE:       # %bb.0:
16284; SKYLAKE-NEXT:    #APP
16285; SKYLAKE-NEXT:    xchgw %di, %ax # sched: [2:0.75]
16286; SKYLAKE-NEXT:    xchgw %si, %di # sched: [2:0.75]
16287; SKYLAKE-NEXT:    xchgw %di, (%rdx) # sched: [10:1.25]
16288; SKYLAKE-NEXT:    #NO_APP
16289; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16290;
16291; SKX-LABEL: test_xchg_16:
16292; SKX:       # %bb.0:
16293; SKX-NEXT:    #APP
16294; SKX-NEXT:    xchgw %di, %ax # sched: [2:0.75]
16295; SKX-NEXT:    xchgw %si, %di # sched: [2:0.75]
16296; SKX-NEXT:    xchgw %di, (%rdx) # sched: [10:1.25]
16297; SKX-NEXT:    #NO_APP
16298; SKX-NEXT:    retq # sched: [7:1.00]
16299;
16300; BTVER2-LABEL: test_xchg_16:
16301; BTVER2:       # %bb.0:
16302; BTVER2-NEXT:    #APP
16303; BTVER2-NEXT:    xchgw %di, %ax # sched: [1:0.50]
16304; BTVER2-NEXT:    xchgw %si, %di # sched: [1:0.50]
16305; BTVER2-NEXT:    xchgw %di, (%rdx) # sched: [4:1.00]
16306; BTVER2-NEXT:    #NO_APP
16307; BTVER2-NEXT:    retq # sched: [4:1.00]
16308;
16309; ZNVER1-LABEL: test_xchg_16:
16310; ZNVER1:       # %bb.0:
16311; ZNVER1-NEXT:    #APP
16312; ZNVER1-NEXT:    xchgw %di, %ax # sched: [1:0.50]
16313; ZNVER1-NEXT:    xchgw %si, %di # sched: [1:0.50]
16314; ZNVER1-NEXT:    xchgw %di, (%rdx) # sched: [5:0.50]
16315; ZNVER1-NEXT:    #NO_APP
16316; ZNVER1-NEXT:    retq # sched: [1:0.50]
16317  tail call void asm "xchg %AX, $0 \0A\09 xchg $1, $0 \0A\09 xchg $2, $0", "r,r,*m"(i16 %a0, i16 %a1, i16 *%a2) nounwind
16318  ret void
16319}
16320define void @test_xchg_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
16321; GENERIC-LABEL: test_xchg_32:
16322; GENERIC:       # %bb.0:
16323; GENERIC-NEXT:    #APP
16324; GENERIC-NEXT:    xchgl %edi, %eax # sched: [2:1.00]
16325; GENERIC-NEXT:    xchgl %esi, %edi # sched: [2:1.00]
16326; GENERIC-NEXT:    xchgl %edi, (%rdx) # sched: [6:1.00]
16327; GENERIC-NEXT:    #NO_APP
16328; GENERIC-NEXT:    retq # sched: [1:1.00]
16329;
16330; ATOM-LABEL: test_xchg_32:
16331; ATOM:       # %bb.0:
16332; ATOM-NEXT:    #APP
16333; ATOM-NEXT:    xchgl %edi, %eax # sched: [2:1.00]
16334; ATOM-NEXT:    xchgl %esi, %edi # sched: [2:1.00]
16335; ATOM-NEXT:    xchgl %edi, (%rdx) # sched: [3:1.50]
16336; ATOM-NEXT:    #NO_APP
16337; ATOM-NEXT:    retq # sched: [79:39.50]
16338;
16339; SLM-LABEL: test_xchg_32:
16340; SLM:       # %bb.0:
16341; SLM-NEXT:    #APP
16342; SLM-NEXT:    xchgl %edi, %eax # sched: [1:0.50]
16343; SLM-NEXT:    xchgl %esi, %edi # sched: [1:0.50]
16344; SLM-NEXT:    xchgl %edi, (%rdx) # sched: [4:2.00]
16345; SLM-NEXT:    #NO_APP
16346; SLM-NEXT:    retq # sched: [4:1.00]
16347;
16348; SANDY-LABEL: test_xchg_32:
16349; SANDY:       # %bb.0:
16350; SANDY-NEXT:    #APP
16351; SANDY-NEXT:    xchgl %edi, %eax # sched: [2:1.00]
16352; SANDY-NEXT:    xchgl %esi, %edi # sched: [2:1.00]
16353; SANDY-NEXT:    xchgl %edi, (%rdx) # sched: [6:1.00]
16354; SANDY-NEXT:    #NO_APP
16355; SANDY-NEXT:    retq # sched: [1:1.00]
16356;
16357; HASWELL-LABEL: test_xchg_32:
16358; HASWELL:       # %bb.0:
16359; HASWELL-NEXT:    #APP
16360; HASWELL-NEXT:    xchgl %edi, %eax # sched: [2:0.75]
16361; HASWELL-NEXT:    xchgl %esi, %edi # sched: [2:0.75]
16362; HASWELL-NEXT:    xchgl %edi, (%rdx) # sched: [9:1.00]
16363; HASWELL-NEXT:    #NO_APP
16364; HASWELL-NEXT:    retq # sched: [7:1.00]
16365;
16366; BROADWELL-LABEL: test_xchg_32:
16367; BROADWELL:       # %bb.0:
16368; BROADWELL-NEXT:    #APP
16369; BROADWELL-NEXT:    xchgl %edi, %eax # sched: [2:0.75]
16370; BROADWELL-NEXT:    xchgl %esi, %edi # sched: [2:0.75]
16371; BROADWELL-NEXT:    xchgl %edi, (%rdx) # sched: [8:1.00]
16372; BROADWELL-NEXT:    #NO_APP
16373; BROADWELL-NEXT:    retq # sched: [7:1.00]
16374;
16375; SKYLAKE-LABEL: test_xchg_32:
16376; SKYLAKE:       # %bb.0:
16377; SKYLAKE-NEXT:    #APP
16378; SKYLAKE-NEXT:    xchgl %edi, %eax # sched: [2:0.75]
16379; SKYLAKE-NEXT:    xchgl %esi, %edi # sched: [2:0.75]
16380; SKYLAKE-NEXT:    xchgl %edi, (%rdx) # sched: [10:1.25]
16381; SKYLAKE-NEXT:    #NO_APP
16382; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16383;
16384; SKX-LABEL: test_xchg_32:
16385; SKX:       # %bb.0:
16386; SKX-NEXT:    #APP
16387; SKX-NEXT:    xchgl %edi, %eax # sched: [2:0.75]
16388; SKX-NEXT:    xchgl %esi, %edi # sched: [2:0.75]
16389; SKX-NEXT:    xchgl %edi, (%rdx) # sched: [10:1.25]
16390; SKX-NEXT:    #NO_APP
16391; SKX-NEXT:    retq # sched: [7:1.00]
16392;
16393; BTVER2-LABEL: test_xchg_32:
16394; BTVER2:       # %bb.0:
16395; BTVER2-NEXT:    #APP
16396; BTVER2-NEXT:    xchgl %edi, %eax # sched: [1:0.50]
16397; BTVER2-NEXT:    xchgl %esi, %edi # sched: [1:0.50]
16398; BTVER2-NEXT:    xchgl %edi, (%rdx) # sched: [4:1.00]
16399; BTVER2-NEXT:    #NO_APP
16400; BTVER2-NEXT:    retq # sched: [4:1.00]
16401;
16402; ZNVER1-LABEL: test_xchg_32:
16403; ZNVER1:       # %bb.0:
16404; ZNVER1-NEXT:    #APP
16405; ZNVER1-NEXT:    xchgl %edi, %eax # sched: [1:0.50]
16406; ZNVER1-NEXT:    xchgl %esi, %edi # sched: [1:0.50]
16407; ZNVER1-NEXT:    xchgl %edi, (%rdx) # sched: [5:0.50]
16408; ZNVER1-NEXT:    #NO_APP
16409; ZNVER1-NEXT:    retq # sched: [1:0.50]
16410  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
16411  ret void
16412}
16413define void @test_xchg_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
16414; GENERIC-LABEL: test_xchg_64:
16415; GENERIC:       # %bb.0:
16416; GENERIC-NEXT:    #APP
16417; GENERIC-NEXT:    xchgq %rdi, %rax # sched: [2:1.00]
16418; GENERIC-NEXT:    xchgq %rsi, %rdi # sched: [2:1.00]
16419; GENERIC-NEXT:    xchgq %rdi, (%rdx) # sched: [6:1.00]
16420; GENERIC-NEXT:    #NO_APP
16421; GENERIC-NEXT:    retq # sched: [1:1.00]
16422;
16423; ATOM-LABEL: test_xchg_64:
16424; ATOM:       # %bb.0:
16425; ATOM-NEXT:    #APP
16426; ATOM-NEXT:    xchgq %rdi, %rax # sched: [2:1.00]
16427; ATOM-NEXT:    xchgq %rsi, %rdi # sched: [2:1.00]
16428; ATOM-NEXT:    xchgq %rdi, (%rdx) # sched: [3:1.50]
16429; ATOM-NEXT:    #NO_APP
16430; ATOM-NEXT:    retq # sched: [79:39.50]
16431;
16432; SLM-LABEL: test_xchg_64:
16433; SLM:       # %bb.0:
16434; SLM-NEXT:    #APP
16435; SLM-NEXT:    xchgq %rdi, %rax # sched: [1:0.50]
16436; SLM-NEXT:    xchgq %rsi, %rdi # sched: [1:0.50]
16437; SLM-NEXT:    xchgq %rdi, (%rdx) # sched: [4:2.00]
16438; SLM-NEXT:    #NO_APP
16439; SLM-NEXT:    retq # sched: [4:1.00]
16440;
16441; SANDY-LABEL: test_xchg_64:
16442; SANDY:       # %bb.0:
16443; SANDY-NEXT:    #APP
16444; SANDY-NEXT:    xchgq %rdi, %rax # sched: [2:1.00]
16445; SANDY-NEXT:    xchgq %rsi, %rdi # sched: [2:1.00]
16446; SANDY-NEXT:    xchgq %rdi, (%rdx) # sched: [6:1.00]
16447; SANDY-NEXT:    #NO_APP
16448; SANDY-NEXT:    retq # sched: [1:1.00]
16449;
16450; HASWELL-LABEL: test_xchg_64:
16451; HASWELL:       # %bb.0:
16452; HASWELL-NEXT:    #APP
16453; HASWELL-NEXT:    xchgq %rdi, %rax # sched: [2:0.75]
16454; HASWELL-NEXT:    xchgq %rsi, %rdi # sched: [2:0.75]
16455; HASWELL-NEXT:    xchgq %rdi, (%rdx) # sched: [9:1.00]
16456; HASWELL-NEXT:    #NO_APP
16457; HASWELL-NEXT:    retq # sched: [7:1.00]
16458;
16459; BROADWELL-LABEL: test_xchg_64:
16460; BROADWELL:       # %bb.0:
16461; BROADWELL-NEXT:    #APP
16462; BROADWELL-NEXT:    xchgq %rdi, %rax # sched: [2:0.75]
16463; BROADWELL-NEXT:    xchgq %rsi, %rdi # sched: [2:0.75]
16464; BROADWELL-NEXT:    xchgq %rdi, (%rdx) # sched: [8:1.00]
16465; BROADWELL-NEXT:    #NO_APP
16466; BROADWELL-NEXT:    retq # sched: [7:1.00]
16467;
16468; SKYLAKE-LABEL: test_xchg_64:
16469; SKYLAKE:       # %bb.0:
16470; SKYLAKE-NEXT:    #APP
16471; SKYLAKE-NEXT:    xchgq %rdi, %rax # sched: [2:0.75]
16472; SKYLAKE-NEXT:    xchgq %rsi, %rdi # sched: [2:0.75]
16473; SKYLAKE-NEXT:    xchgq %rdi, (%rdx) # sched: [10:1.25]
16474; SKYLAKE-NEXT:    #NO_APP
16475; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16476;
16477; SKX-LABEL: test_xchg_64:
16478; SKX:       # %bb.0:
16479; SKX-NEXT:    #APP
16480; SKX-NEXT:    xchgq %rdi, %rax # sched: [2:0.75]
16481; SKX-NEXT:    xchgq %rsi, %rdi # sched: [2:0.75]
16482; SKX-NEXT:    xchgq %rdi, (%rdx) # sched: [10:1.25]
16483; SKX-NEXT:    #NO_APP
16484; SKX-NEXT:    retq # sched: [7:1.00]
16485;
16486; BTVER2-LABEL: test_xchg_64:
16487; BTVER2:       # %bb.0:
16488; BTVER2-NEXT:    #APP
16489; BTVER2-NEXT:    xchgq %rdi, %rax # sched: [1:0.50]
16490; BTVER2-NEXT:    xchgq %rsi, %rdi # sched: [1:0.50]
16491; BTVER2-NEXT:    xchgq %rdi, (%rdx) # sched: [4:1.00]
16492; BTVER2-NEXT:    #NO_APP
16493; BTVER2-NEXT:    retq # sched: [4:1.00]
16494;
16495; ZNVER1-LABEL: test_xchg_64:
16496; ZNVER1:       # %bb.0:
16497; ZNVER1-NEXT:    #APP
16498; ZNVER1-NEXT:    xchgq %rdi, %rax # sched: [1:0.50]
16499; ZNVER1-NEXT:    xchgq %rsi, %rdi # sched: [1:0.50]
16500; ZNVER1-NEXT:    xchgq %rdi, (%rdx) # sched: [5:0.50]
16501; ZNVER1-NEXT:    #NO_APP
16502; ZNVER1-NEXT:    retq # sched: [1:0.50]
16503  tail call void asm "xchg %RAX, $0 \0A\09 xchg $1, $0 \0A\09 xchg $2, $0", "r,r,*m"(i64 %a0, i64 %a1, i64 *%a2) nounwind
16504  ret void
16505}
16506
16507define void @test_xlat() optsize {
16508; GENERIC-LABEL: test_xlat:
16509; GENERIC:       # %bb.0:
16510; GENERIC-NEXT:    #APP
16511; GENERIC-NEXT:    xlatb # sched: [5:0.50]
16512; GENERIC-NEXT:    #NO_APP
16513; GENERIC-NEXT:    retq # sched: [1:1.00]
16514;
16515; ATOM-LABEL: test_xlat:
16516; ATOM:       # %bb.0:
16517; ATOM-NEXT:    #APP
16518; ATOM-NEXT:    xlatb # sched: [6:3.00]
16519; ATOM-NEXT:    #NO_APP
16520; ATOM-NEXT:    retq # sched: [79:39.50]
16521;
16522; SLM-LABEL: test_xlat:
16523; SLM:       # %bb.0:
16524; SLM-NEXT:    #APP
16525; SLM-NEXT:    xlatb # sched: [3:1.00]
16526; SLM-NEXT:    #NO_APP
16527; SLM-NEXT:    retq # sched: [4:1.00]
16528;
16529; SANDY-LABEL: test_xlat:
16530; SANDY:       # %bb.0:
16531; SANDY-NEXT:    #APP
16532; SANDY-NEXT:    xlatb # sched: [5:0.50]
16533; SANDY-NEXT:    #NO_APP
16534; SANDY-NEXT:    retq # sched: [1:1.00]
16535;
16536; HASWELL-LABEL: test_xlat:
16537; HASWELL:       # %bb.0:
16538; HASWELL-NEXT:    #APP
16539; HASWELL-NEXT:    xlatb # sched: [7:0.75]
16540; HASWELL-NEXT:    #NO_APP
16541; HASWELL-NEXT:    retq # sched: [7:1.00]
16542;
16543; BROADWELL-LABEL: test_xlat:
16544; BROADWELL:       # %bb.0:
16545; BROADWELL-NEXT:    #APP
16546; BROADWELL-NEXT:    xlatb # sched: [5:0.50]
16547; BROADWELL-NEXT:    #NO_APP
16548; BROADWELL-NEXT:    retq # sched: [7:1.00]
16549;
16550; SKYLAKE-LABEL: test_xlat:
16551; SKYLAKE:       # %bb.0:
16552; SKYLAKE-NEXT:    #APP
16553; SKYLAKE-NEXT:    xlatb # sched: [5:0.50]
16554; SKYLAKE-NEXT:    #NO_APP
16555; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16556;
16557; SKX-LABEL: test_xlat:
16558; SKX:       # %bb.0:
16559; SKX-NEXT:    #APP
16560; SKX-NEXT:    xlatb # sched: [5:0.50]
16561; SKX-NEXT:    #NO_APP
16562; SKX-NEXT:    retq # sched: [7:1.00]
16563;
16564; BTVER2-LABEL: test_xlat:
16565; BTVER2:       # %bb.0:
16566; BTVER2-NEXT:    #APP
16567; BTVER2-NEXT:    xlatb # sched: [5:1.00]
16568; BTVER2-NEXT:    #NO_APP
16569; BTVER2-NEXT:    retq # sched: [4:1.00]
16570;
16571; ZNVER1-LABEL: test_xlat:
16572; ZNVER1:       # %bb.0:
16573; ZNVER1-NEXT:    #APP
16574; ZNVER1-NEXT:    xlatb # sched: [100:0.25]
16575; ZNVER1-NEXT:    #NO_APP
16576; ZNVER1-NEXT:    retq # sched: [1:0.50]
16577  tail call void asm "xlat", ""() nounwind
16578  ret void
16579}
16580
16581define void @test_xor_8(i8 %a0, i8* %a1, i8 %a2) optsize {
16582; GENERIC-LABEL: test_xor_8:
16583; GENERIC:       # %bb.0:
16584; GENERIC-NEXT:    #APP
16585; GENERIC-NEXT:    xorb $7, %al # sched: [1:0.33]
16586; GENERIC-NEXT:    xorb $7, %dil # sched: [1:0.33]
16587; GENERIC-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
16588; GENERIC-NEXT:    xorb %dl, %dil # sched: [1:0.33]
16589; GENERIC-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
16590; GENERIC-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
16591; GENERIC-NEXT:    #NO_APP
16592; GENERIC-NEXT:    retq # sched: [1:1.00]
16593;
16594; ATOM-LABEL: test_xor_8:
16595; ATOM:       # %bb.0:
16596; ATOM-NEXT:    #APP
16597; ATOM-NEXT:    xorb $7, %al # sched: [1:0.50]
16598; ATOM-NEXT:    xorb $7, %dil # sched: [1:0.50]
16599; ATOM-NEXT:    xorb $7, (%rsi) # sched: [1:1.00]
16600; ATOM-NEXT:    xorb %dl, %dil # sched: [1:0.50]
16601; ATOM-NEXT:    xorb %dil, (%rsi) # sched: [1:1.00]
16602; ATOM-NEXT:    xorb (%rsi), %dil # sched: [1:1.00]
16603; ATOM-NEXT:    #NO_APP
16604; ATOM-NEXT:    retq # sched: [79:39.50]
16605;
16606; SLM-LABEL: test_xor_8:
16607; SLM:       # %bb.0:
16608; SLM-NEXT:    #APP
16609; SLM-NEXT:    xorb $7, %al # sched: [1:0.50]
16610; SLM-NEXT:    xorb $7, %dil # sched: [1:0.50]
16611; SLM-NEXT:    xorb $7, (%rsi) # sched: [5:2.00]
16612; SLM-NEXT:    xorb %dl, %dil # sched: [1:0.50]
16613; SLM-NEXT:    xorb %dil, (%rsi) # sched: [5:2.00]
16614; SLM-NEXT:    xorb (%rsi), %dil # sched: [4:1.00]
16615; SLM-NEXT:    #NO_APP
16616; SLM-NEXT:    retq # sched: [4:1.00]
16617;
16618; SANDY-LABEL: test_xor_8:
16619; SANDY:       # %bb.0:
16620; SANDY-NEXT:    #APP
16621; SANDY-NEXT:    xorb $7, %al # sched: [1:0.33]
16622; SANDY-NEXT:    xorb $7, %dil # sched: [1:0.33]
16623; SANDY-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
16624; SANDY-NEXT:    xorb %dl, %dil # sched: [1:0.33]
16625; SANDY-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
16626; SANDY-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
16627; SANDY-NEXT:    #NO_APP
16628; SANDY-NEXT:    retq # sched: [1:1.00]
16629;
16630; HASWELL-LABEL: test_xor_8:
16631; HASWELL:       # %bb.0:
16632; HASWELL-NEXT:    #APP
16633; HASWELL-NEXT:    xorb $7, %al # sched: [1:0.25]
16634; HASWELL-NEXT:    xorb $7, %dil # sched: [1:0.25]
16635; HASWELL-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
16636; HASWELL-NEXT:    xorb %dl, %dil # sched: [1:0.25]
16637; HASWELL-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
16638; HASWELL-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
16639; HASWELL-NEXT:    #NO_APP
16640; HASWELL-NEXT:    retq # sched: [7:1.00]
16641;
16642; BROADWELL-LABEL: test_xor_8:
16643; BROADWELL:       # %bb.0:
16644; BROADWELL-NEXT:    #APP
16645; BROADWELL-NEXT:    xorb $7, %al # sched: [1:0.25]
16646; BROADWELL-NEXT:    xorb $7, %dil # sched: [1:0.25]
16647; BROADWELL-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
16648; BROADWELL-NEXT:    xorb %dl, %dil # sched: [1:0.25]
16649; BROADWELL-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
16650; BROADWELL-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
16651; BROADWELL-NEXT:    #NO_APP
16652; BROADWELL-NEXT:    retq # sched: [7:1.00]
16653;
16654; SKYLAKE-LABEL: test_xor_8:
16655; SKYLAKE:       # %bb.0:
16656; SKYLAKE-NEXT:    #APP
16657; SKYLAKE-NEXT:    xorb $7, %al # sched: [1:0.25]
16658; SKYLAKE-NEXT:    xorb $7, %dil # sched: [1:0.25]
16659; SKYLAKE-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
16660; SKYLAKE-NEXT:    xorb %dl, %dil # sched: [1:0.25]
16661; SKYLAKE-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
16662; SKYLAKE-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
16663; SKYLAKE-NEXT:    #NO_APP
16664; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16665;
16666; SKX-LABEL: test_xor_8:
16667; SKX:       # %bb.0:
16668; SKX-NEXT:    #APP
16669; SKX-NEXT:    xorb $7, %al # sched: [1:0.25]
16670; SKX-NEXT:    xorb $7, %dil # sched: [1:0.25]
16671; SKX-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
16672; SKX-NEXT:    xorb %dl, %dil # sched: [1:0.25]
16673; SKX-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
16674; SKX-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
16675; SKX-NEXT:    #NO_APP
16676; SKX-NEXT:    retq # sched: [7:1.00]
16677;
16678; BTVER2-LABEL: test_xor_8:
16679; BTVER2:       # %bb.0:
16680; BTVER2-NEXT:    #APP
16681; BTVER2-NEXT:    xorb $7, %al # sched: [1:0.50]
16682; BTVER2-NEXT:    xorb $7, %dil # sched: [1:0.50]
16683; BTVER2-NEXT:    xorb $7, (%rsi) # sched: [5:1.00]
16684; BTVER2-NEXT:    xorb %dl, %dil # sched: [1:0.50]
16685; BTVER2-NEXT:    xorb %dil, (%rsi) # sched: [5:1.00]
16686; BTVER2-NEXT:    xorb (%rsi), %dil # sched: [4:1.00]
16687; BTVER2-NEXT:    #NO_APP
16688; BTVER2-NEXT:    retq # sched: [4:1.00]
16689;
16690; ZNVER1-LABEL: test_xor_8:
16691; ZNVER1:       # %bb.0:
16692; ZNVER1-NEXT:    #APP
16693; ZNVER1-NEXT:    xorb $7, %al # sched: [1:0.25]
16694; ZNVER1-NEXT:    xorb $7, %dil # sched: [1:0.25]
16695; ZNVER1-NEXT:    xorb $7, (%rsi) # sched: [5:0.50]
16696; ZNVER1-NEXT:    xorb %dl, %dil # sched: [1:0.25]
16697; ZNVER1-NEXT:    xorb %dil, (%rsi) # sched: [5:0.50]
16698; ZNVER1-NEXT:    xorb (%rsi), %dil # sched: [5:0.50]
16699; ZNVER1-NEXT:    #NO_APP
16700; ZNVER1-NEXT:    retq # sched: [1:0.50]
16701  tail call void asm "xorb $3, %AL \0A\09 xorb $3, $0 \0A\09 xorb $3, $2 \0A\09 xorb $1, $0 \0A\09 xorb $0, $2 \0A\09 xorb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
16702  ret void
16703}
16704define void @test_xor_16(i16 %a0, i16* %a1, i16 %a2) optsize {
16705; GENERIC-LABEL: test_xor_16:
16706; GENERIC:       # %bb.0:
16707; GENERIC-NEXT:    #APP
16708; GENERIC-NEXT:    xorw $511, %ax # imm = 0x1FF
16709; GENERIC-NEXT:    # sched: [1:0.33]
16710; GENERIC-NEXT:    xorw $511, %di # imm = 0x1FF
16711; GENERIC-NEXT:    # sched: [1:0.33]
16712; GENERIC-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16713; GENERIC-NEXT:    # sched: [7:1.00]
16714; GENERIC-NEXT:    xorw $7, %di # sched: [1:0.33]
16715; GENERIC-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
16716; GENERIC-NEXT:    xorw %dx, %di # sched: [1:0.33]
16717; GENERIC-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
16718; GENERIC-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
16719; GENERIC-NEXT:    #NO_APP
16720; GENERIC-NEXT:    retq # sched: [1:1.00]
16721;
16722; ATOM-LABEL: test_xor_16:
16723; ATOM:       # %bb.0:
16724; ATOM-NEXT:    #APP
16725; ATOM-NEXT:    xorw $511, %ax # imm = 0x1FF
16726; ATOM-NEXT:    # sched: [1:0.50]
16727; ATOM-NEXT:    xorw $511, %di # imm = 0x1FF
16728; ATOM-NEXT:    # sched: [1:0.50]
16729; ATOM-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16730; ATOM-NEXT:    # sched: [1:1.00]
16731; ATOM-NEXT:    xorw $7, %di # sched: [1:0.50]
16732; ATOM-NEXT:    xorw $7, (%rsi) # sched: [1:1.00]
16733; ATOM-NEXT:    xorw %dx, %di # sched: [1:0.50]
16734; ATOM-NEXT:    xorw %di, (%rsi) # sched: [1:1.00]
16735; ATOM-NEXT:    xorw (%rsi), %di # sched: [1:1.00]
16736; ATOM-NEXT:    #NO_APP
16737; ATOM-NEXT:    retq # sched: [79:39.50]
16738;
16739; SLM-LABEL: test_xor_16:
16740; SLM:       # %bb.0:
16741; SLM-NEXT:    #APP
16742; SLM-NEXT:    xorw $511, %ax # imm = 0x1FF
16743; SLM-NEXT:    # sched: [1:0.50]
16744; SLM-NEXT:    xorw $511, %di # imm = 0x1FF
16745; SLM-NEXT:    # sched: [1:0.50]
16746; SLM-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16747; SLM-NEXT:    # sched: [5:2.00]
16748; SLM-NEXT:    xorw $7, %di # sched: [1:0.50]
16749; SLM-NEXT:    xorw $7, (%rsi) # sched: [5:2.00]
16750; SLM-NEXT:    xorw %dx, %di # sched: [1:0.50]
16751; SLM-NEXT:    xorw %di, (%rsi) # sched: [5:2.00]
16752; SLM-NEXT:    xorw (%rsi), %di # sched: [4:1.00]
16753; SLM-NEXT:    #NO_APP
16754; SLM-NEXT:    retq # sched: [4:1.00]
16755;
16756; SANDY-LABEL: test_xor_16:
16757; SANDY:       # %bb.0:
16758; SANDY-NEXT:    #APP
16759; SANDY-NEXT:    xorw $511, %ax # imm = 0x1FF
16760; SANDY-NEXT:    # sched: [1:0.33]
16761; SANDY-NEXT:    xorw $511, %di # imm = 0x1FF
16762; SANDY-NEXT:    # sched: [1:0.33]
16763; SANDY-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16764; SANDY-NEXT:    # sched: [7:1.00]
16765; SANDY-NEXT:    xorw $7, %di # sched: [1:0.33]
16766; SANDY-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
16767; SANDY-NEXT:    xorw %dx, %di # sched: [1:0.33]
16768; SANDY-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
16769; SANDY-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
16770; SANDY-NEXT:    #NO_APP
16771; SANDY-NEXT:    retq # sched: [1:1.00]
16772;
16773; HASWELL-LABEL: test_xor_16:
16774; HASWELL:       # %bb.0:
16775; HASWELL-NEXT:    #APP
16776; HASWELL-NEXT:    xorw $511, %ax # imm = 0x1FF
16777; HASWELL-NEXT:    # sched: [1:0.25]
16778; HASWELL-NEXT:    xorw $511, %di # imm = 0x1FF
16779; HASWELL-NEXT:    # sched: [1:0.25]
16780; HASWELL-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16781; HASWELL-NEXT:    # sched: [7:1.00]
16782; HASWELL-NEXT:    xorw $7, %di # sched: [1:0.25]
16783; HASWELL-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
16784; HASWELL-NEXT:    xorw %dx, %di # sched: [1:0.25]
16785; HASWELL-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
16786; HASWELL-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
16787; HASWELL-NEXT:    #NO_APP
16788; HASWELL-NEXT:    retq # sched: [7:1.00]
16789;
16790; BROADWELL-LABEL: test_xor_16:
16791; BROADWELL:       # %bb.0:
16792; BROADWELL-NEXT:    #APP
16793; BROADWELL-NEXT:    xorw $511, %ax # imm = 0x1FF
16794; BROADWELL-NEXT:    # sched: [1:0.25]
16795; BROADWELL-NEXT:    xorw $511, %di # imm = 0x1FF
16796; BROADWELL-NEXT:    # sched: [1:0.25]
16797; BROADWELL-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16798; BROADWELL-NEXT:    # sched: [7:1.00]
16799; BROADWELL-NEXT:    xorw $7, %di # sched: [1:0.25]
16800; BROADWELL-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
16801; BROADWELL-NEXT:    xorw %dx, %di # sched: [1:0.25]
16802; BROADWELL-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
16803; BROADWELL-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
16804; BROADWELL-NEXT:    #NO_APP
16805; BROADWELL-NEXT:    retq # sched: [7:1.00]
16806;
16807; SKYLAKE-LABEL: test_xor_16:
16808; SKYLAKE:       # %bb.0:
16809; SKYLAKE-NEXT:    #APP
16810; SKYLAKE-NEXT:    xorw $511, %ax # imm = 0x1FF
16811; SKYLAKE-NEXT:    # sched: [1:0.25]
16812; SKYLAKE-NEXT:    xorw $511, %di # imm = 0x1FF
16813; SKYLAKE-NEXT:    # sched: [1:0.25]
16814; SKYLAKE-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16815; SKYLAKE-NEXT:    # sched: [7:1.00]
16816; SKYLAKE-NEXT:    xorw $7, %di # sched: [1:0.25]
16817; SKYLAKE-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
16818; SKYLAKE-NEXT:    xorw %dx, %di # sched: [1:0.25]
16819; SKYLAKE-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
16820; SKYLAKE-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
16821; SKYLAKE-NEXT:    #NO_APP
16822; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16823;
16824; SKX-LABEL: test_xor_16:
16825; SKX:       # %bb.0:
16826; SKX-NEXT:    #APP
16827; SKX-NEXT:    xorw $511, %ax # imm = 0x1FF
16828; SKX-NEXT:    # sched: [1:0.25]
16829; SKX-NEXT:    xorw $511, %di # imm = 0x1FF
16830; SKX-NEXT:    # sched: [1:0.25]
16831; SKX-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16832; SKX-NEXT:    # sched: [7:1.00]
16833; SKX-NEXT:    xorw $7, %di # sched: [1:0.25]
16834; SKX-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
16835; SKX-NEXT:    xorw %dx, %di # sched: [1:0.25]
16836; SKX-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
16837; SKX-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
16838; SKX-NEXT:    #NO_APP
16839; SKX-NEXT:    retq # sched: [7:1.00]
16840;
16841; BTVER2-LABEL: test_xor_16:
16842; BTVER2:       # %bb.0:
16843; BTVER2-NEXT:    #APP
16844; BTVER2-NEXT:    xorw $511, %ax # imm = 0x1FF
16845; BTVER2-NEXT:    # sched: [1:0.50]
16846; BTVER2-NEXT:    xorw $511, %di # imm = 0x1FF
16847; BTVER2-NEXT:    # sched: [1:0.50]
16848; BTVER2-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16849; BTVER2-NEXT:    # sched: [5:1.00]
16850; BTVER2-NEXT:    xorw $7, %di # sched: [1:0.50]
16851; BTVER2-NEXT:    xorw $7, (%rsi) # sched: [5:1.00]
16852; BTVER2-NEXT:    xorw %dx, %di # sched: [1:0.50]
16853; BTVER2-NEXT:    xorw %di, (%rsi) # sched: [5:1.00]
16854; BTVER2-NEXT:    xorw (%rsi), %di # sched: [4:1.00]
16855; BTVER2-NEXT:    #NO_APP
16856; BTVER2-NEXT:    retq # sched: [4:1.00]
16857;
16858; ZNVER1-LABEL: test_xor_16:
16859; ZNVER1:       # %bb.0:
16860; ZNVER1-NEXT:    #APP
16861; ZNVER1-NEXT:    xorw $511, %ax # imm = 0x1FF
16862; ZNVER1-NEXT:    # sched: [1:0.25]
16863; ZNVER1-NEXT:    xorw $511, %di # imm = 0x1FF
16864; ZNVER1-NEXT:    # sched: [1:0.25]
16865; ZNVER1-NEXT:    xorw $511, (%rsi) # imm = 0x1FF
16866; ZNVER1-NEXT:    # sched: [5:0.50]
16867; ZNVER1-NEXT:    xorw $7, %di # sched: [1:0.25]
16868; ZNVER1-NEXT:    xorw $7, (%rsi) # sched: [5:0.50]
16869; ZNVER1-NEXT:    xorw %dx, %di # sched: [1:0.25]
16870; ZNVER1-NEXT:    xorw %di, (%rsi) # sched: [5:0.50]
16871; ZNVER1-NEXT:    xorw (%rsi), %di # sched: [5:0.50]
16872; ZNVER1-NEXT:    #NO_APP
16873; ZNVER1-NEXT:    retq # sched: [1:0.50]
16874  tail call void asm "xorw $3, %AX \0A\09 xorw $3, $0 \0A\09 xorw $3, $2 \0A\09 xorw $4, $0 \0A\09 xorw $4, $2 \0A\09 xorw $1, $0 \0A\09 xorw $0, $2 \0A\09 xorw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
16875  ret void
16876}
16877define void @test_xor_32(i32 %a0, i32* %a1, i32 %a2) optsize {
16878; GENERIC-LABEL: test_xor_32:
16879; GENERIC:       # %bb.0:
16880; GENERIC-NEXT:    #APP
16881; GENERIC-NEXT:    xorl $665536, %eax # imm = 0xA27C0
16882; GENERIC-NEXT:    # sched: [1:0.33]
16883; GENERIC-NEXT:    xorl $665536, %edi # imm = 0xA27C0
16884; GENERIC-NEXT:    # sched: [1:0.33]
16885; GENERIC-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
16886; GENERIC-NEXT:    # sched: [7:1.00]
16887; GENERIC-NEXT:    xorl $7, %edi # sched: [1:0.33]
16888; GENERIC-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
16889; GENERIC-NEXT:    xorl %edx, %edi # sched: [1:0.33]
16890; GENERIC-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
16891; GENERIC-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
16892; GENERIC-NEXT:    #NO_APP
16893; GENERIC-NEXT:    retq # sched: [1:1.00]
16894;
16895; ATOM-LABEL: test_xor_32:
16896; ATOM:       # %bb.0:
16897; ATOM-NEXT:    #APP
16898; ATOM-NEXT:    xorl $665536, %eax # imm = 0xA27C0
16899; ATOM-NEXT:    # sched: [1:0.50]
16900; ATOM-NEXT:    xorl $665536, %edi # imm = 0xA27C0
16901; ATOM-NEXT:    # sched: [1:0.50]
16902; ATOM-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
16903; ATOM-NEXT:    # sched: [1:1.00]
16904; ATOM-NEXT:    xorl $7, %edi # sched: [1:0.50]
16905; ATOM-NEXT:    xorl $7, (%rsi) # sched: [1:1.00]
16906; ATOM-NEXT:    xorl %edx, %edi # sched: [1:0.50]
16907; ATOM-NEXT:    xorl %edi, (%rsi) # sched: [1:1.00]
16908; ATOM-NEXT:    xorl (%rsi), %edi # sched: [1:1.00]
16909; ATOM-NEXT:    #NO_APP
16910; ATOM-NEXT:    retq # sched: [79:39.50]
16911;
16912; SLM-LABEL: test_xor_32:
16913; SLM:       # %bb.0:
16914; SLM-NEXT:    #APP
16915; SLM-NEXT:    xorl $665536, %eax # imm = 0xA27C0
16916; SLM-NEXT:    # sched: [1:0.50]
16917; SLM-NEXT:    xorl $665536, %edi # imm = 0xA27C0
16918; SLM-NEXT:    # sched: [1:0.50]
16919; SLM-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
16920; SLM-NEXT:    # sched: [5:2.00]
16921; SLM-NEXT:    xorl $7, %edi # sched: [1:0.50]
16922; SLM-NEXT:    xorl $7, (%rsi) # sched: [5:2.00]
16923; SLM-NEXT:    xorl %edx, %edi # sched: [1:0.50]
16924; SLM-NEXT:    xorl %edi, (%rsi) # sched: [5:2.00]
16925; SLM-NEXT:    xorl (%rsi), %edi # sched: [4:1.00]
16926; SLM-NEXT:    #NO_APP
16927; SLM-NEXT:    retq # sched: [4:1.00]
16928;
16929; SANDY-LABEL: test_xor_32:
16930; SANDY:       # %bb.0:
16931; SANDY-NEXT:    #APP
16932; SANDY-NEXT:    xorl $665536, %eax # imm = 0xA27C0
16933; SANDY-NEXT:    # sched: [1:0.33]
16934; SANDY-NEXT:    xorl $665536, %edi # imm = 0xA27C0
16935; SANDY-NEXT:    # sched: [1:0.33]
16936; SANDY-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
16937; SANDY-NEXT:    # sched: [7:1.00]
16938; SANDY-NEXT:    xorl $7, %edi # sched: [1:0.33]
16939; SANDY-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
16940; SANDY-NEXT:    xorl %edx, %edi # sched: [1:0.33]
16941; SANDY-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
16942; SANDY-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
16943; SANDY-NEXT:    #NO_APP
16944; SANDY-NEXT:    retq # sched: [1:1.00]
16945;
16946; HASWELL-LABEL: test_xor_32:
16947; HASWELL:       # %bb.0:
16948; HASWELL-NEXT:    #APP
16949; HASWELL-NEXT:    xorl $665536, %eax # imm = 0xA27C0
16950; HASWELL-NEXT:    # sched: [1:0.25]
16951; HASWELL-NEXT:    xorl $665536, %edi # imm = 0xA27C0
16952; HASWELL-NEXT:    # sched: [1:0.25]
16953; HASWELL-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
16954; HASWELL-NEXT:    # sched: [7:1.00]
16955; HASWELL-NEXT:    xorl $7, %edi # sched: [1:0.25]
16956; HASWELL-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
16957; HASWELL-NEXT:    xorl %edx, %edi # sched: [1:0.25]
16958; HASWELL-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
16959; HASWELL-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
16960; HASWELL-NEXT:    #NO_APP
16961; HASWELL-NEXT:    retq # sched: [7:1.00]
16962;
16963; BROADWELL-LABEL: test_xor_32:
16964; BROADWELL:       # %bb.0:
16965; BROADWELL-NEXT:    #APP
16966; BROADWELL-NEXT:    xorl $665536, %eax # imm = 0xA27C0
16967; BROADWELL-NEXT:    # sched: [1:0.25]
16968; BROADWELL-NEXT:    xorl $665536, %edi # imm = 0xA27C0
16969; BROADWELL-NEXT:    # sched: [1:0.25]
16970; BROADWELL-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
16971; BROADWELL-NEXT:    # sched: [7:1.00]
16972; BROADWELL-NEXT:    xorl $7, %edi # sched: [1:0.25]
16973; BROADWELL-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
16974; BROADWELL-NEXT:    xorl %edx, %edi # sched: [1:0.25]
16975; BROADWELL-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
16976; BROADWELL-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
16977; BROADWELL-NEXT:    #NO_APP
16978; BROADWELL-NEXT:    retq # sched: [7:1.00]
16979;
16980; SKYLAKE-LABEL: test_xor_32:
16981; SKYLAKE:       # %bb.0:
16982; SKYLAKE-NEXT:    #APP
16983; SKYLAKE-NEXT:    xorl $665536, %eax # imm = 0xA27C0
16984; SKYLAKE-NEXT:    # sched: [1:0.25]
16985; SKYLAKE-NEXT:    xorl $665536, %edi # imm = 0xA27C0
16986; SKYLAKE-NEXT:    # sched: [1:0.25]
16987; SKYLAKE-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
16988; SKYLAKE-NEXT:    # sched: [7:1.00]
16989; SKYLAKE-NEXT:    xorl $7, %edi # sched: [1:0.25]
16990; SKYLAKE-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
16991; SKYLAKE-NEXT:    xorl %edx, %edi # sched: [1:0.25]
16992; SKYLAKE-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
16993; SKYLAKE-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
16994; SKYLAKE-NEXT:    #NO_APP
16995; SKYLAKE-NEXT:    retq # sched: [7:1.00]
16996;
16997; SKX-LABEL: test_xor_32:
16998; SKX:       # %bb.0:
16999; SKX-NEXT:    #APP
17000; SKX-NEXT:    xorl $665536, %eax # imm = 0xA27C0
17001; SKX-NEXT:    # sched: [1:0.25]
17002; SKX-NEXT:    xorl $665536, %edi # imm = 0xA27C0
17003; SKX-NEXT:    # sched: [1:0.25]
17004; SKX-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
17005; SKX-NEXT:    # sched: [7:1.00]
17006; SKX-NEXT:    xorl $7, %edi # sched: [1:0.25]
17007; SKX-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
17008; SKX-NEXT:    xorl %edx, %edi # sched: [1:0.25]
17009; SKX-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
17010; SKX-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
17011; SKX-NEXT:    #NO_APP
17012; SKX-NEXT:    retq # sched: [7:1.00]
17013;
17014; BTVER2-LABEL: test_xor_32:
17015; BTVER2:       # %bb.0:
17016; BTVER2-NEXT:    #APP
17017; BTVER2-NEXT:    xorl $665536, %eax # imm = 0xA27C0
17018; BTVER2-NEXT:    # sched: [1:0.50]
17019; BTVER2-NEXT:    xorl $665536, %edi # imm = 0xA27C0
17020; BTVER2-NEXT:    # sched: [1:0.50]
17021; BTVER2-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
17022; BTVER2-NEXT:    # sched: [5:1.00]
17023; BTVER2-NEXT:    xorl $7, %edi # sched: [1:0.50]
17024; BTVER2-NEXT:    xorl $7, (%rsi) # sched: [5:1.00]
17025; BTVER2-NEXT:    xorl %edx, %edi # sched: [1:0.50]
17026; BTVER2-NEXT:    xorl %edi, (%rsi) # sched: [5:1.00]
17027; BTVER2-NEXT:    xorl (%rsi), %edi # sched: [4:1.00]
17028; BTVER2-NEXT:    #NO_APP
17029; BTVER2-NEXT:    retq # sched: [4:1.00]
17030;
17031; ZNVER1-LABEL: test_xor_32:
17032; ZNVER1:       # %bb.0:
17033; ZNVER1-NEXT:    #APP
17034; ZNVER1-NEXT:    xorl $665536, %eax # imm = 0xA27C0
17035; ZNVER1-NEXT:    # sched: [1:0.25]
17036; ZNVER1-NEXT:    xorl $665536, %edi # imm = 0xA27C0
17037; ZNVER1-NEXT:    # sched: [1:0.25]
17038; ZNVER1-NEXT:    xorl $665536, (%rsi) # imm = 0xA27C0
17039; ZNVER1-NEXT:    # sched: [5:0.50]
17040; ZNVER1-NEXT:    xorl $7, %edi # sched: [1:0.25]
17041; ZNVER1-NEXT:    xorl $7, (%rsi) # sched: [5:0.50]
17042; ZNVER1-NEXT:    xorl %edx, %edi # sched: [1:0.25]
17043; ZNVER1-NEXT:    xorl %edi, (%rsi) # sched: [5:0.50]
17044; ZNVER1-NEXT:    xorl (%rsi), %edi # sched: [5:0.50]
17045; ZNVER1-NEXT:    #NO_APP
17046; ZNVER1-NEXT:    retq # sched: [1:0.50]
17047  tail call void asm "xorl $3, %EAX \0A\09 xorl $3, $0 \0A\09 xorl $3, $2 \0A\09 xorl $4, $0 \0A\09 xorl $4, $2 \0A\09 xorl $1, $0 \0A\09 xorl $0, $2 \0A\09 xorl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
17048  ret void
17049}
17050define void @test_xor_64(i64 %a0, i64* %a1, i64 %a2) optsize {
17051; GENERIC-LABEL: test_xor_64:
17052; GENERIC:       # %bb.0:
17053; GENERIC-NEXT:    #APP
17054; GENERIC-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17055; GENERIC-NEXT:    # sched: [1:0.33]
17056; GENERIC-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17057; GENERIC-NEXT:    # sched: [1:0.33]
17058; GENERIC-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17059; GENERIC-NEXT:    # sched: [7:1.00]
17060; GENERIC-NEXT:    xorq $7, %rdi # sched: [1:0.33]
17061; GENERIC-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
17062; GENERIC-NEXT:    xorq %rdx, %rdi # sched: [1:0.33]
17063; GENERIC-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
17064; GENERIC-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
17065; GENERIC-NEXT:    #NO_APP
17066; GENERIC-NEXT:    retq # sched: [1:1.00]
17067;
17068; ATOM-LABEL: test_xor_64:
17069; ATOM:       # %bb.0:
17070; ATOM-NEXT:    #APP
17071; ATOM-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17072; ATOM-NEXT:    # sched: [1:0.50]
17073; ATOM-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17074; ATOM-NEXT:    # sched: [1:0.50]
17075; ATOM-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17076; ATOM-NEXT:    # sched: [1:1.00]
17077; ATOM-NEXT:    xorq $7, %rdi # sched: [1:0.50]
17078; ATOM-NEXT:    xorq $7, (%rsi) # sched: [1:1.00]
17079; ATOM-NEXT:    xorq %rdx, %rdi # sched: [1:0.50]
17080; ATOM-NEXT:    xorq %rdi, (%rsi) # sched: [1:1.00]
17081; ATOM-NEXT:    xorq (%rsi), %rdi # sched: [1:1.00]
17082; ATOM-NEXT:    #NO_APP
17083; ATOM-NEXT:    retq # sched: [79:39.50]
17084;
17085; SLM-LABEL: test_xor_64:
17086; SLM:       # %bb.0:
17087; SLM-NEXT:    #APP
17088; SLM-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17089; SLM-NEXT:    # sched: [1:0.50]
17090; SLM-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17091; SLM-NEXT:    # sched: [1:0.50]
17092; SLM-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17093; SLM-NEXT:    # sched: [5:2.00]
17094; SLM-NEXT:    xorq $7, %rdi # sched: [1:0.50]
17095; SLM-NEXT:    xorq $7, (%rsi) # sched: [5:2.00]
17096; SLM-NEXT:    xorq %rdx, %rdi # sched: [1:0.50]
17097; SLM-NEXT:    xorq %rdi, (%rsi) # sched: [5:2.00]
17098; SLM-NEXT:    xorq (%rsi), %rdi # sched: [4:1.00]
17099; SLM-NEXT:    #NO_APP
17100; SLM-NEXT:    retq # sched: [4:1.00]
17101;
17102; SANDY-LABEL: test_xor_64:
17103; SANDY:       # %bb.0:
17104; SANDY-NEXT:    #APP
17105; SANDY-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17106; SANDY-NEXT:    # sched: [1:0.33]
17107; SANDY-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17108; SANDY-NEXT:    # sched: [1:0.33]
17109; SANDY-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17110; SANDY-NEXT:    # sched: [7:1.00]
17111; SANDY-NEXT:    xorq $7, %rdi # sched: [1:0.33]
17112; SANDY-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
17113; SANDY-NEXT:    xorq %rdx, %rdi # sched: [1:0.33]
17114; SANDY-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
17115; SANDY-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
17116; SANDY-NEXT:    #NO_APP
17117; SANDY-NEXT:    retq # sched: [1:1.00]
17118;
17119; HASWELL-LABEL: test_xor_64:
17120; HASWELL:       # %bb.0:
17121; HASWELL-NEXT:    #APP
17122; HASWELL-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17123; HASWELL-NEXT:    # sched: [1:0.25]
17124; HASWELL-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17125; HASWELL-NEXT:    # sched: [1:0.25]
17126; HASWELL-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17127; HASWELL-NEXT:    # sched: [7:1.00]
17128; HASWELL-NEXT:    xorq $7, %rdi # sched: [1:0.25]
17129; HASWELL-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
17130; HASWELL-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
17131; HASWELL-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
17132; HASWELL-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
17133; HASWELL-NEXT:    #NO_APP
17134; HASWELL-NEXT:    retq # sched: [7:1.00]
17135;
17136; BROADWELL-LABEL: test_xor_64:
17137; BROADWELL:       # %bb.0:
17138; BROADWELL-NEXT:    #APP
17139; BROADWELL-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17140; BROADWELL-NEXT:    # sched: [1:0.25]
17141; BROADWELL-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17142; BROADWELL-NEXT:    # sched: [1:0.25]
17143; BROADWELL-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17144; BROADWELL-NEXT:    # sched: [7:1.00]
17145; BROADWELL-NEXT:    xorq $7, %rdi # sched: [1:0.25]
17146; BROADWELL-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
17147; BROADWELL-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
17148; BROADWELL-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
17149; BROADWELL-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
17150; BROADWELL-NEXT:    #NO_APP
17151; BROADWELL-NEXT:    retq # sched: [7:1.00]
17152;
17153; SKYLAKE-LABEL: test_xor_64:
17154; SKYLAKE:       # %bb.0:
17155; SKYLAKE-NEXT:    #APP
17156; SKYLAKE-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17157; SKYLAKE-NEXT:    # sched: [1:0.25]
17158; SKYLAKE-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17159; SKYLAKE-NEXT:    # sched: [1:0.25]
17160; SKYLAKE-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17161; SKYLAKE-NEXT:    # sched: [7:1.00]
17162; SKYLAKE-NEXT:    xorq $7, %rdi # sched: [1:0.25]
17163; SKYLAKE-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
17164; SKYLAKE-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
17165; SKYLAKE-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
17166; SKYLAKE-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
17167; SKYLAKE-NEXT:    #NO_APP
17168; SKYLAKE-NEXT:    retq # sched: [7:1.00]
17169;
17170; SKX-LABEL: test_xor_64:
17171; SKX:       # %bb.0:
17172; SKX-NEXT:    #APP
17173; SKX-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17174; SKX-NEXT:    # sched: [1:0.25]
17175; SKX-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17176; SKX-NEXT:    # sched: [1:0.25]
17177; SKX-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17178; SKX-NEXT:    # sched: [7:1.00]
17179; SKX-NEXT:    xorq $7, %rdi # sched: [1:0.25]
17180; SKX-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
17181; SKX-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
17182; SKX-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
17183; SKX-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
17184; SKX-NEXT:    #NO_APP
17185; SKX-NEXT:    retq # sched: [7:1.00]
17186;
17187; BTVER2-LABEL: test_xor_64:
17188; BTVER2:       # %bb.0:
17189; BTVER2-NEXT:    #APP
17190; BTVER2-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17191; BTVER2-NEXT:    # sched: [1:0.50]
17192; BTVER2-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17193; BTVER2-NEXT:    # sched: [1:0.50]
17194; BTVER2-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17195; BTVER2-NEXT:    # sched: [5:1.00]
17196; BTVER2-NEXT:    xorq $7, %rdi # sched: [1:0.50]
17197; BTVER2-NEXT:    xorq $7, (%rsi) # sched: [5:1.00]
17198; BTVER2-NEXT:    xorq %rdx, %rdi # sched: [1:0.50]
17199; BTVER2-NEXT:    xorq %rdi, (%rsi) # sched: [5:1.00]
17200; BTVER2-NEXT:    xorq (%rsi), %rdi # sched: [4:1.00]
17201; BTVER2-NEXT:    #NO_APP
17202; BTVER2-NEXT:    retq # sched: [4:1.00]
17203;
17204; ZNVER1-LABEL: test_xor_64:
17205; ZNVER1:       # %bb.0:
17206; ZNVER1-NEXT:    #APP
17207; ZNVER1-NEXT:    xorq $665536, %rax # imm = 0xA27C0
17208; ZNVER1-NEXT:    # sched: [1:0.25]
17209; ZNVER1-NEXT:    xorq $665536, %rdi # imm = 0xA27C0
17210; ZNVER1-NEXT:    # sched: [1:0.25]
17211; ZNVER1-NEXT:    xorq $665536, (%rsi) # imm = 0xA27C0
17212; ZNVER1-NEXT:    # sched: [5:0.50]
17213; ZNVER1-NEXT:    xorq $7, %rdi # sched: [1:0.25]
17214; ZNVER1-NEXT:    xorq $7, (%rsi) # sched: [5:0.50]
17215; ZNVER1-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
17216; ZNVER1-NEXT:    xorq %rdi, (%rsi) # sched: [5:0.50]
17217; ZNVER1-NEXT:    xorq (%rsi), %rdi # sched: [5:0.50]
17218; ZNVER1-NEXT:    #NO_APP
17219; ZNVER1-NEXT:    retq # sched: [1:0.50]
17220  tail call void asm "xorq $3, %RAX \0A\09 xorq $3, $0 \0A\09 xorq $3, $2 \0A\09 xorq $4, $0 \0A\09 xorq $4, $2 \0A\09 xorq $1, $0 \0A\09 xorq $0, $2 \0A\09 xorq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
17221  ret void
17222}
17223