[llvm-commits] [llvm] r165126 - /llvm/trunk/lib/Transforms/Utils/BypassSlowDivision.cpp

David Blaikie dblaikie at gmail.com
Wed Oct 3 09:37:25 PDT 2012


On Wed, Oct 3, 2012 at 9:11 AM, Preston Gurd <preston.gurd at intel.com> wrote:
> Author: pgurd
> Date: Wed Oct  3 11:11:44 2012
> New Revision: 165126
>
> URL: http://llvm.org/viewvc/llvm-project?rev=165126&view=rev
> Log:
> This Patch corrects a problem whereby the optimization to use a faster divide
> instruction (for Intel Atom) was not being done by Clang, because
> the type context used by Clang is not the default context.
>
> It fixes the problem by getting the global context types for each div/rem
> instruction in order to compare them against the types in the BypassTypeMap.
>
> Tests for this will be done as a separate patch to Clang.

Ideally LLVM changes should have LLVM tests, otherwise we risk
regressing LLVM accidentally if we don't validate against Clang.

Is there a reason this cannot be tested at the LLVM level?

>
> Patch by Tyler Nowicki.
>
>
> Modified:
>     llvm/trunk/lib/Transforms/Utils/BypassSlowDivision.cpp
>
> Modified: llvm/trunk/lib/Transforms/Utils/BypassSlowDivision.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/BypassSlowDivision.cpp?rev=165126&r1=165125&r2=165126&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/BypassSlowDivision.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/BypassSlowDivision.cpp Wed Oct  3 11:11:44 2012
> @@ -238,14 +238,24 @@
>      if (!UseDivOp && !UseRemOp)
>        continue;
>
> +    // Skip division on vector types, only optimize integer instructions
> +    if (!J->getType()->isIntegerTy())
> +      continue;
> +
> +    // Get same type in global context
> +    IntegerType *T = cast<IntegerType>(J->getType());
> +    IntegerType *GT = IntegerType::get(getGlobalContext(), T->getBitWidth());
> +
>      // Continue if div/rem type is not bypassed
> -    DenseMap<Type *, Type *>::const_iterator BT =
> -      BypassTypeMap.find(J->getType());
> -    if (BT == BypassTypeMap.end())
> +    DenseMap<Type *, Type *>::const_iterator BI = BypassTypeMap.find(GT);
> +    if (BI == BypassTypeMap.end())
>        continue;
>
> -    IntegerType *BypassType = cast<IntegerType>(BT->second);
> -    MadeChange |= reuseOrInsertFastDiv(F, I, J, BypassType, UseDivOp,
> +    // Get the bypass type in the original context
> +    IntegerType *GBT = cast<IntegerType>(BI->second);
> +    IntegerType *BT = IntegerType::get(J->getContext(), GBT->getBitWidth());
> +
> +    MadeChange |= reuseOrInsertFastDiv(F, I, J, BT, UseDivOp,
>                                         UseSignedOp, DivCache);
>    }
>
>
>
> _______________________________________________
> 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