If the LHS of the FCMP is coming from a UIToFP instruction, then we don't want
authorBill Wendling <isanbard@gmail.com>
Sun, 9 Nov 2008 04:26:50 +0000 (04:26 +0000)
committerBill Wendling <isanbard@gmail.com>
Sun, 9 Nov 2008 04:26:50 +0000 (04:26 +0000)
commitc143bcf9ac05085ab3c5de45bf136885173da902
tree8ef766f0e6e78a7d4c7d479d9991b7cd89ed3eb6
parentb0714dbc0dc1cfc942790930871967572c1e360d
If the LHS of the FCMP is coming from a UIToFP instruction, then we don't want
to generate signed ICMP instructions to replace the FCMP. This would violate
the following:

define i1 @test1(i32 %val) {
  %1 = uitofp i32 %val to double
  %2 = fcmp ole double %1, 0.000000e+00
  ret i1 %2
}

would be transformed into:

define i1 @test1(i32 %val) {
  %1 = icmp slt i33 %val, 1
  ret i1 %1
}

which is obviously wrong. This patch modifes InstCombiner::FoldFCmp_IntToFP_Cst
to handle when the LHS comes from UIToFP.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58929 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/InstructionCombining.cpp
test/Transforms/InstCombine/2008-11-08-FCmp.ll [new file with mode: 0644]