| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
| ; RUN: llc < %s -mtriple=i686-- -mcpu=i386 | FileCheck %s --check-prefix=BASE | |
| ; RUN: llc < %s -mtriple=i686-- -mcpu=pentiumpro | FileCheck %s --check-prefix=CMOV | |
| ; PR6679 | |
| define float @foo(ptr %col) { | |
| ; BASE-LABEL: foo: | |
| ; BASE: # %bb.0: | |
| ; BASE-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; BASE-NEXT: flds (%eax) | |
| ; BASE-NEXT: fld %st(0) | |
| ; BASE-NEXT: fchs | |
| ; BASE-NEXT: fucom %st(1) | |
| ; BASE-NEXT: fnstsw %ax | |
| ; BASE-NEXT: # kill: def $ah killed $ah killed $ax | |
| ; BASE-NEXT: sahf | |
| ; BASE-NEXT: ja .LBB0_2 | |
| ; BASE-NEXT: # %bb.1: | |
| ; BASE-NEXT: fstp %st(0) | |
| ; BASE-NEXT: fldz | |
| ; BASE-NEXT: fxch %st(1) | |
| ; BASE-NEXT: .LBB0_2: | |
| ; BASE-NEXT: fstp %st(1) | |
| ; BASE-NEXT: retl | |
| ; | |
| ; CMOV-LABEL: foo: | |
| ; CMOV: # %bb.0: | |
| ; CMOV-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; CMOV-NEXT: flds (%eax) | |
| ; CMOV-NEXT: fld %st(0) | |
| ; CMOV-NEXT: fchs | |
| ; CMOV-NEXT: fucomi %st(1), %st | |
| ; CMOV-NEXT: fxch %st(1) | |
| ; CMOV-NEXT: fcmovnbe %st(1), %st | |
| ; CMOV-NEXT: fstp %st(1) | |
| ; CMOV-NEXT: retl | |
| %t = load float, ptr %col | |
| %t16 = fcmp olt float %t, 0.0 | |
| %t20 = fsub float -0.000000e+00, %t | |
| %ift = select i1 %t16, float %t20, float %t | |
| ret float %ift | |
| } |