[llvm-commits] [llvm] r165126 - /llvm/trunk/lib/Transforms/Utils/BypassSlowDivision.cpp
Hal Finkel
hfinkel at anl.gov
Wed Oct 3 10:07:42 PDT 2012
On Wed, 03 Oct 2012 16:11:44 -0000
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.
This is not a specific comment on this patch, but can you (or someone
else) please explain why Clang would be using a different default
context from LLVM?
Thanks again,
Hal
>
> 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.
>
> 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
--
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-commits
mailing list