Hi Chris, Are you forgetting PatternMatch.h? m_Zero isn't defined anywhere.
Evan On Dec 19, 2007, at 5:56 PM, Chris Lattner wrote: > 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 _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits