[llvm] r181586 - InstCombine: Verify the type before transforming uitofp into select.
Bill Wendling
isanbard at gmail.com
Tue May 14 11:30:23 PDT 2013
Done. Thanks!
-bw
On May 10, 2013, at 3:10 AM, Benjamin Kramer <benny.kra at gmail.com> wrote:
>
> On 10.05.2013, at 11:16, Benjamin Kramer <benny.kra at googlemail.com> wrote:
>
>> Author: d0k
>> Date: Fri May 10 04:16:52 2013
>> New Revision: 181586
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=181586&view=rev
>> Log:
>> InstCombine: Verify the type before transforming uitofp into select.
>
> This fixes a bad regression in 3.3 and should be merged into the branch.
>
> - Ben
>
>>
>> PR15952.
>>
>> Modified:
>> llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
>> llvm/trunk/test/Transforms/InstCombine/add4.ll
>>
>> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp?rev=181586&r1=181585&r2=181586&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp (original)
>> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp Fri May 10 04:16:52 2013
>> @@ -525,31 +525,32 @@ Instruction *InstCombiner::visitFMul(Bin
>> }
>>
>> // B * (uitofp i1 C) -> select C, B, 0
>> - if(I.hasNoNaNs() && I.hasNoInfs() && I.hasNoSignedZeros()) {
>> - Value *LHS=Op0, *RHS=Op1;
>> - Value *B, *C;
>> - if (!match(RHS, m_UIToFp(m_Value(C))))
>> - std::swap(LHS, RHS);
>> + if (I.hasNoNaNs() && I.hasNoInfs() && I.hasNoSignedZeros()) {
>> + Value *LHS = Op0, *RHS = Op1;
>> + Value *B, *C;
>> + if (!match(RHS, m_UIToFp(m_Value(C))))
>> + std::swap(LHS, RHS);
>>
>> - if (match(RHS, m_UIToFp(m_Value(C)))) {
>> - B=LHS;
>> - Value *Zero = ConstantFP::getNegativeZero(B->getType());
>> - return SelectInst::Create(C, B, Zero);
>> - }
>> + if (match(RHS, m_UIToFp(m_Value(C))) && C->getType()->isIntegerTy(1)) {
>> + B = LHS;
>> + Value *Zero = ConstantFP::getNegativeZero(B->getType());
>> + return SelectInst::Create(C, B, Zero);
>> + }
>> }
>>
>> // A * (1 - uitofp i1 C) -> select C, 0, A
>> - if(I.hasNoNaNs() && I.hasNoInfs() && I.hasNoSignedZeros()) {
>> - Value *LHS=Op0, *RHS=Op1;
>> - Value *A, *C;
>> - if (!match(RHS, m_FSub(m_FPOne(), m_UIToFp(m_Value(C)))))
>> - std::swap(LHS, RHS);
>> + if (I.hasNoNaNs() && I.hasNoInfs() && I.hasNoSignedZeros()) {
>> + Value *LHS = Op0, *RHS = Op1;
>> + Value *A, *C;
>> + if (!match(RHS, m_FSub(m_FPOne(), m_UIToFp(m_Value(C)))))
>> + std::swap(LHS, RHS);
>>
>> - if (match(RHS, m_FSub(m_FPOne(), m_UIToFp(m_Value(C))))) {
>> - A=LHS;
>> - Value *Zero = ConstantFP::getNegativeZero(A->getType());
>> - return SelectInst::Create(C, Zero, A);
>> - }
>> + if (match(RHS, m_FSub(m_FPOne(), m_UIToFp(m_Value(C)))) &&
>> + C->getType()->isIntegerTy(1)) {
>> + A = LHS;
>> + Value *Zero = ConstantFP::getNegativeZero(A->getType());
>> + return SelectInst::Create(C, Zero, A);
>> + }
>> }
>>
>> if (!isa<Constant>(Op1))
>>
>> Modified: llvm/trunk/test/Transforms/InstCombine/add4.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/add4.ll?rev=181586&r1=181585&r2=181586&view=diff
>> ==============================================================================
>> --- llvm/trunk/test/Transforms/InstCombine/add4.ll (original)
>> +++ llvm/trunk/test/Transforms/InstCombine/add4.ll Fri May 10 04:16:52 2013
>> @@ -38,3 +38,21 @@ EntryBlock:
>> ; CHECK: select i1 %C, float %B, float %A
>> }
>>
>> +; PR15952
>> +define float @test4(float %A, float %B, i32 %C) {
>> + %cf = uitofp i32 %C to float
>> + %mc = fsub float 1.000000e+00, %cf
>> + %p1 = fmul fast float %A, %mc
>> + ret float %p1
>> +; CHECK: @test4
>> +; CHECK: uitofp
>> +}
>> +
>> +define float @test5(float %A, float %B, i32 %C) {
>> + %cf = uitofp i32 %C to float
>> + %p2 = fmul fast float %B, %cf
>> + ret float %p2
>> +; CHECK: @test5
>> +; CHECK: uitofp
>> +}
>> +
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list