1111define i8 @t0 (i32 %a1_wide_orig , i32 %a2_wide_orig , i32 %inc ) nounwind {
1212; I386-NOCMOV-LABEL: t0:
1313; I386-NOCMOV: # %bb.0:
14- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
15- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
16- ; I386-NOCMOV-NEXT: addl %ecx , %eax
17- ; I386-NOCMOV-NEXT: addl {{[0-9]+}}(%esp), %ecx
14+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
15+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
16+ ; I386-NOCMOV-NEXT: addb %cl , %al
17+ ; I386-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %cl
1818; I386-NOCMOV-NEXT: cmpb %cl, %al
1919; I386-NOCMOV-NEXT: jg .LBB0_2
2020; I386-NOCMOV-NEXT: # %bb.1:
2121; I386-NOCMOV-NEXT: movl %ecx, %eax
2222; I386-NOCMOV-NEXT: .LBB0_2:
23- ; I386-NOCMOV-NEXT: # kill: def $al killed $al killed $eax
2423; I386-NOCMOV-NEXT: retl
2524;
2625; I386-CMOV-LABEL: t0:
2726; I386-CMOV: # %bb.0:
28- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
29- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
30- ; I386-CMOV-NEXT: addl %eax , %ecx
31- ; I386-CMOV-NEXT: addl {{[0-9]+}}(%esp), %eax
27+ ; I386-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
28+ ; I386-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
29+ ; I386-CMOV-NEXT: addb %al , %cl
30+ ; I386-CMOV-NEXT: addb {{[0-9]+}}(%esp), %al
3231; I386-CMOV-NEXT: cmpb %al, %cl
32+ ; I386-CMOV-NEXT: movzbl %cl, %ecx
33+ ; I386-CMOV-NEXT: movzbl %al, %eax
3334; I386-CMOV-NEXT: cmovgl %ecx, %eax
3435; I386-CMOV-NEXT: # kill: def $al killed $al killed $eax
3536; I386-CMOV-NEXT: retl
3637;
3738; I686-NOCMOV-LABEL: t0:
3839; I686-NOCMOV: # %bb.0:
39- ; I686-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
40- ; I686-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
41- ; I686-NOCMOV-NEXT: addl %ecx , %eax
42- ; I686-NOCMOV-NEXT: addl {{[0-9]+}}(%esp), %ecx
40+ ; I686-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
41+ ; I686-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
42+ ; I686-NOCMOV-NEXT: addb %cl , %al
43+ ; I686-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %cl
4344; I686-NOCMOV-NEXT: cmpb %cl, %al
4445; I686-NOCMOV-NEXT: jg .LBB0_2
4546; I686-NOCMOV-NEXT: # %bb.1:
4647; I686-NOCMOV-NEXT: movl %ecx, %eax
4748; I686-NOCMOV-NEXT: .LBB0_2:
48- ; I686-NOCMOV-NEXT: # kill: def $al killed $al killed $eax
4949; I686-NOCMOV-NEXT: retl
5050;
5151; I686-CMOV-LABEL: t0:
5252; I686-CMOV: # %bb.0:
53- ; I686-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
54- ; I686-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
55- ; I686-CMOV-NEXT: addl %eax , %ecx
56- ; I686-CMOV-NEXT: addl {{[0-9]+}}(%esp), %eax
53+ ; I686-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
54+ ; I686-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
55+ ; I686-CMOV-NEXT: addb %al , %cl
56+ ; I686-CMOV-NEXT: addb {{[0-9]+}}(%esp), %al
5757; I686-CMOV-NEXT: cmpb %al, %cl
58+ ; I686-CMOV-NEXT: movzbl %cl, %ecx
59+ ; I686-CMOV-NEXT: movzbl %al, %eax
5860; I686-CMOV-NEXT: cmovgl %ecx, %eax
5961; I686-CMOV-NEXT: # kill: def $al killed $al killed $eax
6062; I686-CMOV-NEXT: retl
6163;
6264; X86_64-LABEL: t0:
6365; X86_64: # %bb.0:
64- ; X86_64-NEXT: # kill: def $edx killed $edx def $rdx
65- ; X86_64-NEXT: # kill: def $esi killed $esi def $rsi
66- ; X86_64-NEXT: # kill: def $edi killed $edi def $rdi
67- ; X86_64-NEXT: leal (%rdi,%rdx), %ecx
68- ; X86_64-NEXT: leal (%rsi,%rdx), %eax
69- ; X86_64-NEXT: cmpb %al, %cl
66+ ; X86_64-NEXT: addb %dl, %dil
67+ ; X86_64-NEXT: addb %dl, %sil
68+ ; X86_64-NEXT: cmpb %sil, %dil
69+ ; X86_64-NEXT: movzbl %dil, %ecx
70+ ; X86_64-NEXT: movzbl %sil, %eax
7071; X86_64-NEXT: cmovgl %ecx, %eax
7172; X86_64-NEXT: # kill: def $al killed $al killed $eax
7273; X86_64-NEXT: retq
@@ -84,64 +85,63 @@ define i8 @t0(i32 %a1_wide_orig, i32 %a2_wide_orig, i32 %inc) nounwind {
8485define i8 @neg_only_one_truncation (i32 %a1_wide_orig , i8 %a2_orig , i32 %inc ) nounwind {
8586; I386-NOCMOV-LABEL: neg_only_one_truncation:
8687; I386-NOCMOV: # %bb.0:
87- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
88- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
89- ; I386-NOCMOV-NEXT: addl %ecx , %eax
90- ; I386-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %cl
88+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
89+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
90+ ; I386-NOCMOV-NEXT: addb %al , %cl
91+ ; I386-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %al
9192; I386-NOCMOV-NEXT: cmpb %cl, %al
9293; I386-NOCMOV-NEXT: jg .LBB1_2
9394; I386-NOCMOV-NEXT: # %bb.1:
9495; I386-NOCMOV-NEXT: movl %ecx, %eax
9596; I386-NOCMOV-NEXT: .LBB1_2:
96- ; I386-NOCMOV-NEXT: # kill: def $al killed $al killed $eax
9797; I386-NOCMOV-NEXT: retl
9898;
9999; I386-CMOV-LABEL: neg_only_one_truncation:
100100; I386-CMOV: # %bb.0:
101- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
102- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
103- ; I386-CMOV-NEXT: addl %eax , %ecx
101+ ; I386-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
102+ ; I386-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
103+ ; I386-CMOV-NEXT: addb %al , %cl
104104; I386-CMOV-NEXT: addb {{[0-9]+}}(%esp), %al
105- ; I386-CMOV-NEXT: cmpb %al, %cl
106- ; I386-CMOV-NEXT: movzbl %al, %eax
107- ; I386-CMOV-NEXT: cmovgl %ecx, %eax
105+ ; I386-CMOV-NEXT: cmpb %cl, %al
106+ ; I386-CMOV-NEXT: movzbl %al, %edx
107+ ; I386-CMOV-NEXT: movzbl %cl, %eax
108+ ; I386-CMOV-NEXT: cmovgl %edx, %eax
108109; I386-CMOV-NEXT: # kill: def $al killed $al killed $eax
109110; I386-CMOV-NEXT: retl
110111;
111112; I686-NOCMOV-LABEL: neg_only_one_truncation:
112113; I686-NOCMOV: # %bb.0:
113- ; I686-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
114- ; I686-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
115- ; I686-NOCMOV-NEXT: addl %ecx , %eax
116- ; I686-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %cl
114+ ; I686-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
115+ ; I686-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
116+ ; I686-NOCMOV-NEXT: addb %al , %cl
117+ ; I686-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %al
117118; I686-NOCMOV-NEXT: cmpb %cl, %al
118119; I686-NOCMOV-NEXT: jg .LBB1_2
119120; I686-NOCMOV-NEXT: # %bb.1:
120121; I686-NOCMOV-NEXT: movl %ecx, %eax
121122; I686-NOCMOV-NEXT: .LBB1_2:
122- ; I686-NOCMOV-NEXT: # kill: def $al killed $al killed $eax
123123; I686-NOCMOV-NEXT: retl
124124;
125125; I686-CMOV-LABEL: neg_only_one_truncation:
126126; I686-CMOV: # %bb.0:
127- ; I686-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
128- ; I686-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
129- ; I686-CMOV-NEXT: addl %eax , %ecx
127+ ; I686-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
128+ ; I686-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
129+ ; I686-CMOV-NEXT: addb %al , %cl
130130; I686-CMOV-NEXT: addb {{[0-9]+}}(%esp), %al
131- ; I686-CMOV-NEXT: cmpb %al, %cl
132- ; I686-CMOV-NEXT: movzbl %al, %eax
133- ; I686-CMOV-NEXT: cmovgl %ecx, %eax
131+ ; I686-CMOV-NEXT: cmpb %cl, %al
132+ ; I686-CMOV-NEXT: movzbl %al, %edx
133+ ; I686-CMOV-NEXT: movzbl %cl, %eax
134+ ; I686-CMOV-NEXT: cmovgl %edx, %eax
134135; I686-CMOV-NEXT: # kill: def $al killed $al killed $eax
135136; I686-CMOV-NEXT: retl
136137;
137138; X86_64-LABEL: neg_only_one_truncation:
138139; X86_64: # %bb.0:
139- ; X86_64-NEXT: # kill: def $edx killed $edx def $rdx
140- ; X86_64-NEXT: # kill: def $edi killed $edi def $rdi
141- ; X86_64-NEXT: leal (%rdi,%rdx), %ecx
142- ; X86_64-NEXT: addb %sil, %dl
143- ; X86_64-NEXT: cmpb %dl, %cl
144- ; X86_64-NEXT: movzbl %dl, %eax
140+ ; X86_64-NEXT: addb %dl, %sil
141+ ; X86_64-NEXT: addb %dl, %dil
142+ ; X86_64-NEXT: cmpb %sil, %dil
143+ ; X86_64-NEXT: movzbl %dil, %ecx
144+ ; X86_64-NEXT: movzbl %sil, %eax
145145; X86_64-NEXT: cmovgl %ecx, %eax
146146; X86_64-NEXT: # kill: def $al killed $al killed $eax
147147; X86_64-NEXT: retq
@@ -159,62 +159,63 @@ define i8 @neg_only_one_truncation(i32 %a1_wide_orig, i8 %a2_orig, i32 %inc) nou
159159define i8 @neg_type_mismatch (i32 %a1_wide_orig , i16 %a2_wide_orig , i32 %inc ) nounwind {
160160; I386-NOCMOV-LABEL: neg_type_mismatch:
161161; I386-NOCMOV: # %bb.0:
162- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
163- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
164- ; I386-NOCMOV-NEXT: addl %ecx , %eax
165- ; I386-NOCMOV-NEXT: addw {{[0-9]+}}(%esp), %cx
162+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
163+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
164+ ; I386-NOCMOV-NEXT: addb %cl , %al
165+ ; I386-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %cl
166166; I386-NOCMOV-NEXT: cmpb %cl, %al
167167; I386-NOCMOV-NEXT: jg .LBB2_2
168168; I386-NOCMOV-NEXT: # %bb.1:
169169; I386-NOCMOV-NEXT: movl %ecx, %eax
170170; I386-NOCMOV-NEXT: .LBB2_2:
171- ; I386-NOCMOV-NEXT: # kill: def $al killed $al killed $eax
172171; I386-NOCMOV-NEXT: retl
173172;
174173; I386-CMOV-LABEL: neg_type_mismatch:
175174; I386-CMOV: # %bb.0:
176- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
177- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
178- ; I386-CMOV-NEXT: addl %eax , %ecx
179- ; I386-CMOV-NEXT: addw {{[0-9]+}}(%esp), %ax
175+ ; I386-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
176+ ; I386-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
177+ ; I386-CMOV-NEXT: addb %al , %cl
178+ ; I386-CMOV-NEXT: addb {{[0-9]+}}(%esp), %al
180179; I386-CMOV-NEXT: cmpb %al, %cl
180+ ; I386-CMOV-NEXT: movzbl %cl, %ecx
181+ ; I386-CMOV-NEXT: movzbl %al, %eax
181182; I386-CMOV-NEXT: cmovgl %ecx, %eax
182183; I386-CMOV-NEXT: # kill: def $al killed $al killed $eax
183184; I386-CMOV-NEXT: retl
184185;
185186; I686-NOCMOV-LABEL: neg_type_mismatch:
186187; I686-NOCMOV: # %bb.0:
187- ; I686-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
188- ; I686-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
189- ; I686-NOCMOV-NEXT: addl %ecx , %eax
190- ; I686-NOCMOV-NEXT: addw {{[0-9]+}}(%esp), %cx
188+ ; I686-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
189+ ; I686-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
190+ ; I686-NOCMOV-NEXT: addb %cl , %al
191+ ; I686-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %cl
191192; I686-NOCMOV-NEXT: cmpb %cl, %al
192193; I686-NOCMOV-NEXT: jg .LBB2_2
193194; I686-NOCMOV-NEXT: # %bb.1:
194195; I686-NOCMOV-NEXT: movl %ecx, %eax
195196; I686-NOCMOV-NEXT: .LBB2_2:
196- ; I686-NOCMOV-NEXT: # kill: def $al killed $al killed $eax
197197; I686-NOCMOV-NEXT: retl
198198;
199199; I686-CMOV-LABEL: neg_type_mismatch:
200200; I686-CMOV: # %bb.0:
201- ; I686-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
202- ; I686-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
203- ; I686-CMOV-NEXT: addl %eax , %ecx
204- ; I686-CMOV-NEXT: addw {{[0-9]+}}(%esp), %ax
201+ ; I686-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
202+ ; I686-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
203+ ; I686-CMOV-NEXT: addb %al , %cl
204+ ; I686-CMOV-NEXT: addb {{[0-9]+}}(%esp), %al
205205; I686-CMOV-NEXT: cmpb %al, %cl
206+ ; I686-CMOV-NEXT: movzbl %cl, %ecx
207+ ; I686-CMOV-NEXT: movzbl %al, %eax
206208; I686-CMOV-NEXT: cmovgl %ecx, %eax
207209; I686-CMOV-NEXT: # kill: def $al killed $al killed $eax
208210; I686-CMOV-NEXT: retl
209211;
210212; X86_64-LABEL: neg_type_mismatch:
211213; X86_64: # %bb.0:
212- ; X86_64-NEXT: # kill: def $edx killed $edx def $rdx
213- ; X86_64-NEXT: # kill: def $esi killed $esi def $rsi
214- ; X86_64-NEXT: # kill: def $edi killed $edi def $rdi
215- ; X86_64-NEXT: leal (%rdi,%rdx), %ecx
216- ; X86_64-NEXT: leal (%rsi,%rdx), %eax
217- ; X86_64-NEXT: cmpb %al, %cl
214+ ; X86_64-NEXT: addb %dl, %dil
215+ ; X86_64-NEXT: addb %dl, %sil
216+ ; X86_64-NEXT: cmpb %sil, %dil
217+ ; X86_64-NEXT: movzbl %dil, %ecx
218+ ; X86_64-NEXT: movzbl %sil, %eax
218219; X86_64-NEXT: cmovgl %ecx, %eax
219220; X86_64-NEXT: # kill: def $al killed $al killed $eax
220221; X86_64-NEXT: retq
@@ -234,8 +235,8 @@ define i8 @negative_CopyFromReg(i32 %a1_wide, i32 %a2_wide_orig, i32 %inc) nounw
234235; I386-NOCMOV-LABEL: negative_CopyFromReg:
235236; I386-NOCMOV: # %bb.0:
236237; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
237- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
238- ; I386-NOCMOV-NEXT: addl {{[0-9]+}}(%esp), %ecx
238+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
239+ ; I386-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %cl
239240; I386-NOCMOV-NEXT: cmpb %cl, %al
240241; I386-NOCMOV-NEXT: jg .LBB3_2
241242; I386-NOCMOV-NEXT: # %bb.1:
@@ -246,18 +247,19 @@ define i8 @negative_CopyFromReg(i32 %a1_wide, i32 %a2_wide_orig, i32 %inc) nounw
246247; I386-CMOV-LABEL: negative_CopyFromReg:
247248; I386-CMOV: # %bb.0:
248249; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
249- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
250- ; I386-CMOV-NEXT: addl {{[0-9]+}}(%esp), %eax
250+ ; I386-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
251+ ; I386-CMOV-NEXT: addb {{[0-9]+}}(%esp), %al
251252; I386-CMOV-NEXT: cmpb %al, %cl
253+ ; I386-CMOV-NEXT: movzbl %al, %eax
252254; I386-CMOV-NEXT: cmovgl %ecx, %eax
253255; I386-CMOV-NEXT: # kill: def $al killed $al killed $eax
254256; I386-CMOV-NEXT: retl
255257;
256258; I686-NOCMOV-LABEL: negative_CopyFromReg:
257259; I686-NOCMOV: # %bb.0:
258260; I686-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
259- ; I686-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
260- ; I686-NOCMOV-NEXT: addl {{[0-9]+}}(%esp), %ecx
261+ ; I686-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
262+ ; I686-NOCMOV-NEXT: addb {{[0-9]+}}(%esp), %cl
261263; I686-NOCMOV-NEXT: cmpb %cl, %al
262264; I686-NOCMOV-NEXT: jg .LBB3_2
263265; I686-NOCMOV-NEXT: # %bb.1:
@@ -268,19 +270,19 @@ define i8 @negative_CopyFromReg(i32 %a1_wide, i32 %a2_wide_orig, i32 %inc) nounw
268270; I686-CMOV-LABEL: negative_CopyFromReg:
269271; I686-CMOV: # %bb.0:
270272; I686-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
271- ; I686-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
272- ; I686-CMOV-NEXT: addl {{[0-9]+}}(%esp), %eax
273+ ; I686-CMOV-NEXT: movzbl {{[0-9]+}}(%esp), %eax
274+ ; I686-CMOV-NEXT: addb {{[0-9]+}}(%esp), %al
273275; I686-CMOV-NEXT: cmpb %al, %cl
276+ ; I686-CMOV-NEXT: movzbl %al, %eax
274277; I686-CMOV-NEXT: cmovgl %ecx, %eax
275278; I686-CMOV-NEXT: # kill: def $al killed $al killed $eax
276279; I686-CMOV-NEXT: retl
277280;
278281; X86_64-LABEL: negative_CopyFromReg:
279282; X86_64: # %bb.0:
280- ; X86_64-NEXT: # kill: def $edx killed $edx def $rdx
281- ; X86_64-NEXT: # kill: def $esi killed $esi def $rsi
282- ; X86_64-NEXT: leal (%rsi,%rdx), %eax
283- ; X86_64-NEXT: cmpb %al, %dil
283+ ; X86_64-NEXT: addb %dl, %sil
284+ ; X86_64-NEXT: cmpb %sil, %dil
285+ ; X86_64-NEXT: movzbl %sil, %eax
284286; X86_64-NEXT: cmovgl %edi, %eax
285287; X86_64-NEXT: # kill: def $al killed $al killed $eax
286288; X86_64-NEXT: retq
0 commit comments