OSDN Git Service

Convert fcmp with 0.0 from casted integers to icmp
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 6 Jan 2015 15:50:59 +0000 (15:50 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 6 Jan 2015 15:50:59 +0000 (15:50 +0000)
commitd883ca0ca713c329deed614fa389230c7266d0e4
tree1d24ccfe2a21326fb7f578186fbfb78274f0bd7a
parent23dc3f4eefa9b5d22ba8856944c6ba0628385392
Convert fcmp with 0.0 from casted integers to icmp

This is already handled in general when it is known the
conversion can't lose bits with smaller integer types
casted into wider floating point types.

This pattern happens somewhat often in GPU programs that cast
workitem intrinsics to float, which are often compared with 0.

Specifically handle the special case of compares with zero which
should also be known to not lose information. I had a more general
version of this which allows equality compares if the casted float is
exactly representable in the integer, but I'm not 100% confident that
is always correct.

Also fold cases that aren't integers to true / false.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225265 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/InstCombine/InstCombineCompares.cpp
test/Transforms/InstCombine/cast-int-fcmp-eq-0.ll [new file with mode: 0644]