@@ -209,94 +209,84 @@ define double @test_ctselect_f64_basic(i1 %cond, double %a, double %b) nounwind
209209define x86_fp80 @test_ctselect_f80_basic (i1 %cond , x86_fp80 %a , x86_fp80 %b ) nounwind {
210210; I386-NOCMOV-LABEL: test_ctselect_f80_basic:
211211; I386-NOCMOV: # %bb.0:
212+ ; I386-NOCMOV-NEXT: pushl %ebp
213+ ; I386-NOCMOV-NEXT: pushl %ebx
212214; I386-NOCMOV-NEXT: pushl %edi
213215; I386-NOCMOV-NEXT: pushl %esi
214- ; I386-NOCMOV-NEXT: subl $12, %esp
215- ; I386-NOCMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
216- ; I386-NOCMOV-NEXT: sete %al
217- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
216+ ; I386-NOCMOV-NEXT: subl $40, %esp
217+ ; I386-NOCMOV-NEXT: fldt {{[0-9]+}}(%esp)
218+ ; I386-NOCMOV-NEXT: fldt {{[0-9]+}}(%esp)
219+ ; I386-NOCMOV-NEXT: fstpt {{[0-9]+}}(%esp)
220+ ; I386-NOCMOV-NEXT: fstpt {{[0-9]+}}(%esp)
221+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
222+ ; I386-NOCMOV-NEXT: testb $1, %cl
223+ ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
224+ ; I386-NOCMOV-NEXT: movl %eax, (%esp) # 4-byte Spill
218225; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
219- ; I386-NOCMOV-NEXT: movb %al, %ah
220- ; I386-NOCMOV-NEXT: movzbl %ah, %edi
221- ; I386-NOCMOV-NEXT: negl %edi
222- ; I386-NOCMOV-NEXT: movl %edx, %esi
223- ; I386-NOCMOV-NEXT: andl %edi, %esi
224- ; I386-NOCMOV-NEXT: notl %edi
225- ; I386-NOCMOV-NEXT: andl %ecx, %edi
226- ; I386-NOCMOV-NEXT: orl %edi, %esi
227- ; I386-NOCMOV-NEXT: movl %esi, (%esp)
228- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
226+ ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %esi
227+ ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %edi
228+ ; I386-NOCMOV-NEXT: sete %ch
229+ ; I386-NOCMOV-NEXT: movb %ch, %al
230+ ; I386-NOCMOV-NEXT: movzbl %al, %ebp
231+ ; I386-NOCMOV-NEXT: negl %ebp
232+ ; I386-NOCMOV-NEXT: movl %edi, %ebx
233+ ; I386-NOCMOV-NEXT: andl %ebp, %ebx
234+ ; I386-NOCMOV-NEXT: notl %ebp
235+ ; I386-NOCMOV-NEXT: andl %edx, %ebp
236+ ; I386-NOCMOV-NEXT: orl %ebp, %ebx
237+ ; I386-NOCMOV-NEXT: testb $1, %cl
238+ ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
229239; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
230- ; I386-NOCMOV-NEXT: movb %al, %ah
231- ; I386-NOCMOV-NEXT: movzbl %ah, %edi
232- ; I386-NOCMOV-NEXT: negl %edi
233- ; I386-NOCMOV-NEXT: movl %edx, %esi
234- ; I386-NOCMOV-NEXT: andl %edi, %esi
235- ; I386-NOCMOV-NEXT: notl %edi
236- ; I386-NOCMOV-NEXT: andl %ecx, %edi
237- ; I386-NOCMOV-NEXT: orl %edi, %esi
238- ; I386-NOCMOV-NEXT: movl %esi, {{[0-9]+}}(%esp)
239- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
240- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
241- ; I386-NOCMOV-NEXT: movb %al, %ah
242- ; I386-NOCMOV-NEXT: movzbl %ah, %edi
240+ ; I386-NOCMOV-NEXT: sete %ch
241+ ; I386-NOCMOV-NEXT: movb %ch, %cl
242+ ; I386-NOCMOV-NEXT: movzbl %cl, %ebp
243+ ; I386-NOCMOV-NEXT: negl %ebp
244+ ; I386-NOCMOV-NEXT: movl %edx, %edi
245+ ; I386-NOCMOV-NEXT: andl %ebp, %edi
246+ ; I386-NOCMOV-NEXT: notl %ebp
247+ ; I386-NOCMOV-NEXT: andl %eax, %ebp
248+ ; I386-NOCMOV-NEXT: orl %ebp, %edi
249+ ; I386-NOCMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
250+ ; I386-NOCMOV-NEXT: movl %edi, {{[0-9]+}}(%esp)
251+ ; I386-NOCMOV-NEXT: movl %ebx, {{[0-9]+}}(%esp)
252+ ; I386-NOCMOV-NEXT: sete %al
253+ ; I386-NOCMOV-NEXT: movl (%esp), %ebx # 4-byte Reload
254+ ; I386-NOCMOV-NEXT: movb %al, %dl
255+ ; I386-NOCMOV-NEXT: movzbl %dl, %edi
243256; I386-NOCMOV-NEXT: negl %edi
244- ; I386-NOCMOV-NEXT: movl %edx , %esi
245- ; I386-NOCMOV-NEXT: andl %edi, %esi
257+ ; I386-NOCMOV-NEXT: movl %esi , %ecx
258+ ; I386-NOCMOV-NEXT: andl %edi, %ecx
246259; I386-NOCMOV-NEXT: notl %edi
247- ; I386-NOCMOV-NEXT: andl %ecx , %edi
248- ; I386-NOCMOV-NEXT: orl %edi, %esi
249- ; I386-NOCMOV-NEXT: movl %esi , {{[0-9]+}}(%esp)
250- ; I386-NOCMOV-NEXT: fldt (%esp)
251- ; I386-NOCMOV-NEXT: addl $12 , %esp
260+ ; I386-NOCMOV-NEXT: andl %ebx , %edi
261+ ; I386-NOCMOV-NEXT: orl %edi, %ecx
262+ ; I386-NOCMOV-NEXT: movl %ecx , {{[0-9]+}}(%esp)
263+ ; I386-NOCMOV-NEXT: fldt {{[0-9]+}} (%esp)
264+ ; I386-NOCMOV-NEXT: addl $40 , %esp
252265; I386-NOCMOV-NEXT: popl %esi
253266; I386-NOCMOV-NEXT: popl %edi
267+ ; I386-NOCMOV-NEXT: popl %ebx
268+ ; I386-NOCMOV-NEXT: popl %ebp
254269; I386-NOCMOV-NEXT: retl
255270;
256271; I386-CMOV-LABEL: test_ctselect_f80_basic:
257272; I386-CMOV: # %bb.0:
258- ; I386-CMOV-NEXT: pushl %edi
259- ; I386-CMOV-NEXT: pushl %esi
260- ; I386-CMOV-NEXT: subl $12, %esp
273+ ; I386-CMOV-NEXT: subl $36, %esp
274+ ; I386-CMOV-NEXT: fldt {{[0-9]+}}(%esp)
275+ ; I386-CMOV-NEXT: fldt {{[0-9]+}}(%esp)
276+ ; I386-CMOV-NEXT: fstpt {{[0-9]+}}(%esp)
277+ ; I386-CMOV-NEXT: fstpt {{[0-9]+}}(%esp)
278+ ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
261279; I386-CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
262- ; I386-CMOV-NEXT: sete %al
280+ ; I386-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %eax
281+ ; I386-CMOV-NEXT: movl %eax, {{[0-9]+}}(%esp)
282+ ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
263283; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
264- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
265- ; I386-CMOV-NEXT: movb %al, %ah
266- ; I386-CMOV-NEXT: movzbl %ah, %edi
267- ; I386-CMOV-NEXT: negl %edi
268- ; I386-CMOV-NEXT: movl %edx, %esi
269- ; I386-CMOV-NEXT: andl %edi, %esi
270- ; I386-CMOV-NEXT: notl %edi
271- ; I386-CMOV-NEXT: andl %ecx, %edi
272- ; I386-CMOV-NEXT: orl %edi, %esi
273- ; I386-CMOV-NEXT: movl %esi, (%esp)
274- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
275- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
276- ; I386-CMOV-NEXT: movb %al, %ah
277- ; I386-CMOV-NEXT: movzbl %ah, %edi
278- ; I386-CMOV-NEXT: negl %edi
279- ; I386-CMOV-NEXT: movl %edx, %esi
280- ; I386-CMOV-NEXT: andl %edi, %esi
281- ; I386-CMOV-NEXT: notl %edi
282- ; I386-CMOV-NEXT: andl %ecx, %edi
283- ; I386-CMOV-NEXT: orl %edi, %esi
284- ; I386-CMOV-NEXT: movl %esi, {{[0-9]+}}(%esp)
285- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
286- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
287- ; I386-CMOV-NEXT: movb %al, %ah
288- ; I386-CMOV-NEXT: movzbl %ah, %edi
289- ; I386-CMOV-NEXT: negl %edi
290- ; I386-CMOV-NEXT: movl %edx, %esi
291- ; I386-CMOV-NEXT: andl %edi, %esi
292- ; I386-CMOV-NEXT: notl %edi
293- ; I386-CMOV-NEXT: andl %ecx, %edi
294- ; I386-CMOV-NEXT: orl %edi, %esi
295- ; I386-CMOV-NEXT: movl %esi, {{[0-9]+}}(%esp)
284+ ; I386-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %ecx
285+ ; I386-CMOV-NEXT: movl %ecx, {{[0-9]+}}(%esp)
286+ ; I386-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %eax
287+ ; I386-CMOV-NEXT: movl %eax, (%esp)
296288; I386-CMOV-NEXT: fldt (%esp)
297- ; I386-CMOV-NEXT: addl $12, %esp
298- ; I386-CMOV-NEXT: popl %esi
299- ; I386-CMOV-NEXT: popl %edi
289+ ; I386-CMOV-NEXT: addl $36, %esp
300290; I386-CMOV-NEXT: retl
301291 %result = call x86_fp80 @llvm.ct.select.f80 (i1 %cond , x86_fp80 %a , x86_fp80 %b )
302292 ret x86_fp80 %result
@@ -543,94 +533,84 @@ define float @test_ctselect_f32_nan(i1 %cond) nounwind {
543533define x86_fp80 @test_ctselect_f80_alignment (i1 %cond , x86_fp80 %a , x86_fp80 %b ) nounwind {
544534; I386-NOCMOV-LABEL: test_ctselect_f80_alignment:
545535; I386-NOCMOV: # %bb.0:
536+ ; I386-NOCMOV-NEXT: pushl %ebp
537+ ; I386-NOCMOV-NEXT: pushl %ebx
546538; I386-NOCMOV-NEXT: pushl %edi
547539; I386-NOCMOV-NEXT: pushl %esi
548- ; I386-NOCMOV-NEXT: subl $12, %esp
549- ; I386-NOCMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
550- ; I386-NOCMOV-NEXT: sete %al
551- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
540+ ; I386-NOCMOV-NEXT: subl $40, %esp
541+ ; I386-NOCMOV-NEXT: fldt {{[0-9]+}}(%esp)
542+ ; I386-NOCMOV-NEXT: fldt {{[0-9]+}}(%esp)
543+ ; I386-NOCMOV-NEXT: fstpt {{[0-9]+}}(%esp)
544+ ; I386-NOCMOV-NEXT: fstpt {{[0-9]+}}(%esp)
545+ ; I386-NOCMOV-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
546+ ; I386-NOCMOV-NEXT: testb $1, %cl
547+ ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
548+ ; I386-NOCMOV-NEXT: movl %eax, (%esp) # 4-byte Spill
552549; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
553- ; I386-NOCMOV-NEXT: movb %al, %ah
554- ; I386-NOCMOV-NEXT: movzbl %ah, %edi
555- ; I386-NOCMOV-NEXT: negl %edi
556- ; I386-NOCMOV-NEXT: movl %edx, %esi
557- ; I386-NOCMOV-NEXT: andl %edi, %esi
558- ; I386-NOCMOV-NEXT: notl %edi
559- ; I386-NOCMOV-NEXT: andl %ecx, %edi
560- ; I386-NOCMOV-NEXT: orl %edi, %esi
561- ; I386-NOCMOV-NEXT: movl %esi, (%esp)
562- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
550+ ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %esi
551+ ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %edi
552+ ; I386-NOCMOV-NEXT: sete %ch
553+ ; I386-NOCMOV-NEXT: movb %ch, %al
554+ ; I386-NOCMOV-NEXT: movzbl %al, %ebp
555+ ; I386-NOCMOV-NEXT: negl %ebp
556+ ; I386-NOCMOV-NEXT: movl %edi, %ebx
557+ ; I386-NOCMOV-NEXT: andl %ebp, %ebx
558+ ; I386-NOCMOV-NEXT: notl %ebp
559+ ; I386-NOCMOV-NEXT: andl %edx, %ebp
560+ ; I386-NOCMOV-NEXT: orl %ebp, %ebx
561+ ; I386-NOCMOV-NEXT: testb $1, %cl
562+ ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
563563; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
564- ; I386-NOCMOV-NEXT: movb %al, %ah
565- ; I386-NOCMOV-NEXT: movzbl %ah, %edi
566- ; I386-NOCMOV-NEXT: negl %edi
567- ; I386-NOCMOV-NEXT: movl %edx, %esi
568- ; I386-NOCMOV-NEXT: andl %edi, %esi
569- ; I386-NOCMOV-NEXT: notl %edi
570- ; I386-NOCMOV-NEXT: andl %ecx, %edi
571- ; I386-NOCMOV-NEXT: orl %edi, %esi
572- ; I386-NOCMOV-NEXT: movl %esi, {{[0-9]+}}(%esp)
573- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
574- ; I386-NOCMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
575- ; I386-NOCMOV-NEXT: movb %al, %ah
576- ; I386-NOCMOV-NEXT: movzbl %ah, %edi
564+ ; I386-NOCMOV-NEXT: sete %ch
565+ ; I386-NOCMOV-NEXT: movb %ch, %cl
566+ ; I386-NOCMOV-NEXT: movzbl %cl, %ebp
567+ ; I386-NOCMOV-NEXT: negl %ebp
568+ ; I386-NOCMOV-NEXT: movl %edx, %edi
569+ ; I386-NOCMOV-NEXT: andl %ebp, %edi
570+ ; I386-NOCMOV-NEXT: notl %ebp
571+ ; I386-NOCMOV-NEXT: andl %eax, %ebp
572+ ; I386-NOCMOV-NEXT: orl %ebp, %edi
573+ ; I386-NOCMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
574+ ; I386-NOCMOV-NEXT: movl %edi, {{[0-9]+}}(%esp)
575+ ; I386-NOCMOV-NEXT: movl %ebx, {{[0-9]+}}(%esp)
576+ ; I386-NOCMOV-NEXT: sete %al
577+ ; I386-NOCMOV-NEXT: movl (%esp), %ebx # 4-byte Reload
578+ ; I386-NOCMOV-NEXT: movb %al, %dl
579+ ; I386-NOCMOV-NEXT: movzbl %dl, %edi
577580; I386-NOCMOV-NEXT: negl %edi
578- ; I386-NOCMOV-NEXT: movl %edx , %esi
579- ; I386-NOCMOV-NEXT: andl %edi, %esi
581+ ; I386-NOCMOV-NEXT: movl %esi , %ecx
582+ ; I386-NOCMOV-NEXT: andl %edi, %ecx
580583; I386-NOCMOV-NEXT: notl %edi
581- ; I386-NOCMOV-NEXT: andl %ecx , %edi
582- ; I386-NOCMOV-NEXT: orl %edi, %esi
583- ; I386-NOCMOV-NEXT: movl %esi , {{[0-9]+}}(%esp)
584- ; I386-NOCMOV-NEXT: fldt (%esp)
585- ; I386-NOCMOV-NEXT: addl $12 , %esp
584+ ; I386-NOCMOV-NEXT: andl %ebx , %edi
585+ ; I386-NOCMOV-NEXT: orl %edi, %ecx
586+ ; I386-NOCMOV-NEXT: movl %ecx , {{[0-9]+}}(%esp)
587+ ; I386-NOCMOV-NEXT: fldt {{[0-9]+}} (%esp)
588+ ; I386-NOCMOV-NEXT: addl $40 , %esp
586589; I386-NOCMOV-NEXT: popl %esi
587590; I386-NOCMOV-NEXT: popl %edi
591+ ; I386-NOCMOV-NEXT: popl %ebx
592+ ; I386-NOCMOV-NEXT: popl %ebp
588593; I386-NOCMOV-NEXT: retl
589594;
590595; I386-CMOV-LABEL: test_ctselect_f80_alignment:
591596; I386-CMOV: # %bb.0:
592- ; I386-CMOV-NEXT: pushl %edi
593- ; I386-CMOV-NEXT: pushl %esi
594- ; I386-CMOV-NEXT: subl $12, %esp
597+ ; I386-CMOV-NEXT: subl $36, %esp
598+ ; I386-CMOV-NEXT: fldt {{[0-9]+}}(%esp)
599+ ; I386-CMOV-NEXT: fldt {{[0-9]+}}(%esp)
600+ ; I386-CMOV-NEXT: fstpt {{[0-9]+}}(%esp)
601+ ; I386-CMOV-NEXT: fstpt {{[0-9]+}}(%esp)
602+ ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
595603; I386-CMOV-NEXT: testb $1, {{[0-9]+}}(%esp)
596- ; I386-CMOV-NEXT: sete %al
604+ ; I386-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %eax
605+ ; I386-CMOV-NEXT: movl %eax, {{[0-9]+}}(%esp)
606+ ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax
597607; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
598- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
599- ; I386-CMOV-NEXT: movb %al, %ah
600- ; I386-CMOV-NEXT: movzbl %ah, %edi
601- ; I386-CMOV-NEXT: negl %edi
602- ; I386-CMOV-NEXT: movl %edx, %esi
603- ; I386-CMOV-NEXT: andl %edi, %esi
604- ; I386-CMOV-NEXT: notl %edi
605- ; I386-CMOV-NEXT: andl %ecx, %edi
606- ; I386-CMOV-NEXT: orl %edi, %esi
607- ; I386-CMOV-NEXT: movl %esi, (%esp)
608- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
609- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
610- ; I386-CMOV-NEXT: movb %al, %ah
611- ; I386-CMOV-NEXT: movzbl %ah, %edi
612- ; I386-CMOV-NEXT: negl %edi
613- ; I386-CMOV-NEXT: movl %edx, %esi
614- ; I386-CMOV-NEXT: andl %edi, %esi
615- ; I386-CMOV-NEXT: notl %edi
616- ; I386-CMOV-NEXT: andl %ecx, %edi
617- ; I386-CMOV-NEXT: orl %edi, %esi
618- ; I386-CMOV-NEXT: movl %esi, {{[0-9]+}}(%esp)
619- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %ecx
620- ; I386-CMOV-NEXT: movl {{[0-9]+}}(%esp), %edx
621- ; I386-CMOV-NEXT: movb %al, %ah
622- ; I386-CMOV-NEXT: movzbl %ah, %edi
623- ; I386-CMOV-NEXT: negl %edi
624- ; I386-CMOV-NEXT: movl %edx, %esi
625- ; I386-CMOV-NEXT: andl %edi, %esi
626- ; I386-CMOV-NEXT: notl %edi
627- ; I386-CMOV-NEXT: andl %ecx, %edi
628- ; I386-CMOV-NEXT: orl %edi, %esi
629- ; I386-CMOV-NEXT: movl %esi, {{[0-9]+}}(%esp)
608+ ; I386-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %ecx
609+ ; I386-CMOV-NEXT: movl %ecx, {{[0-9]+}}(%esp)
610+ ; I386-CMOV-NEXT: cmovnel {{[0-9]+}}(%esp), %eax
611+ ; I386-CMOV-NEXT: movl %eax, (%esp)
630612; I386-CMOV-NEXT: fldt (%esp)
631- ; I386-CMOV-NEXT: addl $12, %esp
632- ; I386-CMOV-NEXT: popl %esi
633- ; I386-CMOV-NEXT: popl %edi
613+ ; I386-CMOV-NEXT: addl $36, %esp
634614; I386-CMOV-NEXT: retl
635615 %result = call x86_fp80 @llvm.ct.select.f80 (i1 %cond , x86_fp80 %a , x86_fp80 %b )
636616 ret x86_fp80 %result
0 commit comments