[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