Author: lattner Date: Wed Dec 19 19:56:58 2007 New Revision: 45250 URL: http://llvm.org/viewvc/llvm-project?rev=45250&view=rev Log: simplify this code with the new m_Zero() pattern. Make sure the select only has a single use, and generalize it to not require N to be a constant.
Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=45250&r1=45249&r2=45250&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Wed Dec 19 19:56:58 2007 @@ -2109,8 +2109,7 @@ } // add (cast *A to intptrtype) B -> - // cast (GEP (cast *A to sbyte*) B) -> - // intptrtype + // cast (GEP (cast *A to sbyte*) B) --> intptrtype { CastInst *CI = dyn_cast<CastInst>(LHS); Value *Other = RHS; @@ -2131,8 +2130,7 @@ } } - // add (select X 0 (sub n A)) A -> - // select X A n + // add (select X 0 (sub n A)) A --> select X A n { SelectInst *SI = dyn_cast<SelectInst>(LHS); Value *Other = RHS; @@ -2140,25 +2138,19 @@ SI = dyn_cast<SelectInst>(RHS); Other = LHS; } - if (SI) { + if (SI && SI->hasOneUse()) { Value *TV = SI->getTrueValue(); Value *FV = SI->getFalseValue(); - Value *A; + Value *A, *N; // Can we fold the add into the argument of the select? // We check both true and false select arguments for a matching subtract. - ConstantInt *C1, *C2; - if (match(FV, m_ConstantInt(C1)) && C1->getValue() == 0 && - match(TV, m_Sub(m_ConstantInt(C2), m_Value(A))) && - A == Other) { - // We managed to fold the add into the true select value. - return new SelectInst(SI->getCondition(), C2, A); - } else if (match(TV, m_ConstantInt(C1)) && C1->getValue() == 0 && - match(FV, m_Sub(m_ConstantInt(C2), m_Value(A))) && - A == Other) { - // We managed to fold the add into the false select value. - return new SelectInst(SI->getCondition(), A, C2); - } + if (match(FV, m_Zero()) && match(TV, m_Sub(m_Value(N), m_Value(A))) && + A == Other) // Fold the add into the true select value. + return new SelectInst(SI->getCondition(), N, A); + if (match(TV, m_Zero()) && match(FV, m_Sub(m_Value(N), m_Value(A))) && + A == Other) // Fold the add into the false select value. + return new SelectInst(SI->getCondition(), A, N); } } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits