[llvm-commits] [llvm] r92412 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/load-cmp.ll

Eli Friedman eli.friedman at gmail.com
Sat Jan 2 00:36:18 PST 2010


On Sat, Jan 2, 2010 at 12:20 AM, Chris Lattner <sabre at nondot.org> wrote:
> Author: lattner
> Date: Sat Jan  2 02:20:51 2010
> New Revision: 92412
>
> URL: http://llvm.org/viewvc/llvm-project?rev=92412&view=rev
> Log:
> enhance the previous optimization to work with fcmp in addition
> to icmp.
>
> Modified:
>    llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
>    llvm/trunk/test/Transforms/InstCombine/load-cmp.ll
>
> Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=92412&r1=92411&r2=92412&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Sat Jan  2 02:20:51 2010
> @@ -6180,7 +6180,7 @@
>         if (Instruction *NV = FoldFCmp_IntToFP_Cst(I, LHSI, RHSC))
>           return NV;
>         break;
> -      case Instruction::Select:
> +      case Instruction::Select: {
>         // If either operand of the select is a constant, we can fold the
>         // comparison into the select arms, which will cause one to be
>         // constant folded and the select turned into a bitwise or.
> @@ -6205,6 +6205,20 @@
>           return SelectInst::Create(LHSI->getOperand(0), Op1, Op2);
>         break;
>       }
> +    case Instruction::Load:
> +      if (GetElementPtrInst *GEP =
> +          dyn_cast<GetElementPtrInst>(LHSI->getOperand(0))) {
> +        if (GlobalVariable *GV = dyn_cast<GlobalVariable>(GEP->getOperand(0)))
> +          if (GV->isConstant() && GV->hasDefinitiveInitializer() &&
> +              !cast<LoadInst>(LHSI)->isVolatile())
> +            if (Instruction *Res = FoldCmpLoadFromIndexedGlobal(GEP, GV, I))
> +              return Res;
> +            //errs() << "NOT HANDLED: " << *GV << "\n";
> +            //errs() << "\t" << *GEP << "\n";
> +            //errs() << "\t " << I << "\n\n\n";

I assume you didn't mean to add the debugging output?

-Eli




More information about the llvm-commits mailing list