[LLVMdev] Floating point compare instruction selection
sabre at nondot.org
Wed Mar 16 08:24:09 PST 2005
On Wed, 16 Mar 2005, Morten Ofstad wrote:
> I didn't get any reply to my previous mail about adding floating point
> intrinsics to the X86 pattern instruction selector... And I could really need
> some help.
Sorry about that, it slipped through the cracks. :(
> Anyway, I think my confusion was caused partly by an already
> existing bug in the instruction selection for floating point compares.
Okay, please note that the pattern isel for X86 is not 100% stable or
finished. It does work in many cases however, but it probably still has
some bugs. You can track the status of the X86 pattern isel by comparing
the LLC column to the LLC-beta column here:
The pattern selector currently has some code-quality issues compared
to the simple isel in some cases (due to ugly hacks in the simple isel
that have not yet been replicated). When I get a chance to work on
finishing it up, it will become the default X86 isel.
> The case which emits code for the special case of comparing against constant
> 0.0 does not return after generating it's code, so the normal compare is also
> generated! As far as I can tell it should return right after this:
> BuildMI(BB, X86::SAHF, 1);
> instead it falls through and goes on to generate the normal compare
> instruction... Am I right?
Nope. It's emitting a compare against zero with fucomi instead of ftst.
fucomi is a PPRO+ instruction that deposits the result of the comparison
into the integer condition codes. This saves having to use SAHF and some
bit-twiddling, so it's usually a bit faster than using ftst. The simple
isel used to produce ftst for compare against zero. If you do some
benchmarking and find that one is noticably faster than the other, we
should switch them both to use the same code sequence.
More information about the llvm-dev