[llvm] r211077 - [FastISel][X86] Refactor the code to get the X86 condition from a helper function. NFC.
Juergen Ributzka
juergen at apple.com
Tue Jun 17 07:57:34 PDT 2014
Oops, sorry about that. Thanks for catching that mistake. I fixed it in r211104.
Cheers,
Juergen
On Jun 17, 2014, at 3:59 AM, Stephan Bergmann <sbergman at redhat.com> wrote:
> On 06/17/2014 01:58 AM, Juergen Ributzka wrote:
>> Author: ributzka
>> Date: Mon Jun 16 18:58:24 2014
>> New Revision: 211077
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=211077&view=rev
>> Log:
>> [FastISel][X86] Refactor the code to get the X86 condition from a helper function. NFC.
>>
>> Make use of helper functions to simplify the branch and compare instruction
>> selection in FastISel. Also add test cases for compare and conditonal branch.
>>
>> Added:
>> llvm/trunk/test/CodeGen/X86/fast-isel-cmp-branch2.ll
>> llvm/trunk/test/CodeGen/X86/fast-isel-cmp.ll
>> Modified:
>> llvm/trunk/lib/Target/X86/X86FastISel.cpp
>> llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
>> llvm/trunk/lib/Target/X86/X86InstrInfo.h
>
> Looks like that change broke __builtin_isfinite, at least on X86_64:
>
>> $ cat test.cc
>> #include <iostream>
>> bool fin(double d) { return __builtin_isfinite(d); }
>> int main() { std::cout << fin(1.0) << '\n'; }
>>
>> $ clang++ test.cc
>> $ ./a.out
>> 0
>
> What changed is the code generated for
>
>> Value *IsNotInf =
>> Builder.CreateFCmpUNE(Abs, ConstantFP::getInfinity(V->getType()),"isinf");
>
> (case Builtin::BI__builtin_isfinite in CodeGenFunction::EmitBuiltinExpr, tools/clang/lib/CodeGen/CGBuiltin.cpp), from
>
>> movsd -16(%rbp), %xmm1 # 8-byte Reload
>> ucomisd %xmm1, %xmm0
>> setne %al
>> setp %cl
>> orb %al, %cl
>
> to
>
>> movsd -16(%rbp), %xmm1 # 8-byte Reload
>> ucomisd %xmm1, %xmm0
>> setne %al
>> setp %cl
>> andb %cl, %al
>
> Stephan
More information about the llvm-commits
mailing list