[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