diff options
author | Preston Gurd <preston.gurd@intel.com> | 2013-03-04 18:13:57 +0000 |
---|---|---|
committer | Preston Gurd <preston.gurd@intel.com> | 2013-03-04 18:13:57 +0000 |
commit | 485296d1e85510de2b5df8a5c652fd0abeb5db06 (patch) | |
tree | 37157fc9c401587e8556ae890caf95a6b1ec83fa /llvm/lib/Transforms/Utils/BypassSlowDivision.cpp | |
parent | 6972f6d3c7c2960df6a0720515cfa7c6846903ed (diff) | |
download | bcm5719-llvm-485296d1e85510de2b5df8a5c652fd0abeb5db06.tar.gz bcm5719-llvm-485296d1e85510de2b5df8a5c652fd0abeb5db06.zip |
Bypass Slow Divides
* Only apply divide bypass optimization when not optimizing for size.
* Fixed bug caused by constant for 0 value of type Int32,
used dividend type to generate the constant instead.
* For atom x86-64 apply the divide bypass to use 16-bit divides instead of
64-bit divides when operand values are small enough.
* Added lit tests for 64-bit divide bypass.
Patch by Tyler Nowicki!
llvm-svn: 176442
Diffstat (limited to 'llvm/lib/Transforms/Utils/BypassSlowDivision.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/BypassSlowDivision.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/BypassSlowDivision.cpp b/llvm/lib/Transforms/Utils/BypassSlowDivision.cpp index 00cda8e0346..1f517d038d1 100644 --- a/llvm/lib/Transforms/Utils/BypassSlowDivision.cpp +++ b/llvm/lib/Transforms/Utils/BypassSlowDivision.cpp @@ -163,7 +163,7 @@ static bool insertFastDiv(Function &F, Value *AndV = MainBuilder.CreateAnd(OrV, BitMask); // Compare operand values and branch - Value *ZeroV = MainBuilder.getInt32(0); + Value *ZeroV = ConstantInt::getSigned(Dividend->getType(), 0); Value *CmpV = MainBuilder.CreateICmpEQ(AndV, ZeroV); MainBuilder.CreateCondBr(CmpV, FastBB, SlowBB); @@ -244,7 +244,7 @@ bool llvm::bypassSlowDivision(Function &F, // Get bitwidth of div/rem instruction IntegerType *T = cast<IntegerType>(J->getType()); - int bitwidth = T->getBitWidth(); + unsigned int bitwidth = T->getBitWidth(); // Continue if bitwidth is not bypassed DenseMap<unsigned int, unsigned int>::const_iterator BI = BypassWidths.find(bitwidth); |