aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/CodeGenPrepare.cpp
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2017-06-07 15:05:13 +0000
committerSanjay Patel <spatel@rotateright.com>2017-06-07 15:05:13 +0000
commitcf531ca50c699f71ebbb73e2e489029ddceba273 (patch)
treeb705b7e959c08d789d53080a756a23ce9591fac0 /llvm/lib/CodeGen/CodeGenPrepare.cpp
parentcc07564a277db1f672a928981b1707d5e75ca282 (diff)
downloadllvm-cf531ca50c699f71ebbb73e2e489029ddceba273.zip
llvm-cf531ca50c699f71ebbb73e2e489029ddceba273.tar.gz
llvm-cf531ca50c699f71ebbb73e2e489029ddceba273.tar.bz2
[CGP] pass size as param in MemCmpExpansion; NFCI
Avoid extracting the constant int twice. llvm-svn: 304920
Diffstat (limited to 'llvm/lib/CodeGen/CodeGenPrepare.cpp')
-rw-r--r--llvm/lib/CodeGen/CodeGenPrepare.cpp15
1 files changed, 5 insertions, 10 deletions
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp
index 85c6787..84719f2 100644
--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -1679,7 +1679,7 @@ class MemCmpExpansion {
unsigned getNumLoads(unsigned Size);
public:
- MemCmpExpansion(CallInst *CI, unsigned MaxLoadSize,
+ MemCmpExpansion(CallInst *CI, uint64_t Size, unsigned MaxLoadSize,
unsigned NumLoadsPerBlock);
Value *getMemCmpExpansion(uint64_t Size, bool IsLittleEndian);
};
@@ -1695,20 +1695,16 @@ MemCmpExpansion::ResultBlock::ResultBlock()
// return from.
// 3. ResultBlock, block to branch to for early exit when a
// LoadCmpBlock finds a difference.
-MemCmpExpansion::MemCmpExpansion(CallInst *CI, unsigned MaxLoadSize,
- unsigned NumLoadsPerBlock)
- : CI(CI), MaxLoadSize(MaxLoadSize), NumLoadsPerBlock(NumLoadsPerBlock) {
+MemCmpExpansion::MemCmpExpansion(CallInst *CI, uint64_t Size,
+ unsigned MaxLoadSize, unsigned LoadsPerBlock)
+ : CI(CI), MaxLoadSize(MaxLoadSize), NumLoadsPerBlock(LoadsPerBlock) {
IRBuilder<> Builder(CI->getContext());
-
BasicBlock *StartBlock = CI->getParent();
EndBlock = StartBlock->splitBasicBlock(CI, "endblock");
setupEndBlockPHINodes();
IsUsedForZeroCmp = isOnlyUsedInZeroEqualityComparison(CI);
- ConstantInt *SizeCast = dyn_cast<ConstantInt>(CI->getArgOperand(2));
- uint64_t Size = SizeCast->getZExtValue();
-
// Calculate how many load compare blocks are required for an expansion of
// given Size.
NumBlocks = calculateNumBlocks(Size);
@@ -2206,7 +2202,6 @@ static bool expandMemCmp(CallInst *CI, const TargetTransformInfo *TTI,
// Early exit from expansion if size greater than max bytes to load.
uint64_t SizeVal = SizeCast->getZExtValue();
-
unsigned NumLoads = 0;
unsigned RemainingSize = SizeVal;
unsigned LoadSize = MaxLoadSize;
@@ -2226,7 +2221,7 @@ static bool expandMemCmp(CallInst *CI, const TargetTransformInfo *TTI,
// MemCmpHelper object creates and sets up basic blocks required for
// expanding memcmp with size SizeVal.
unsigned NumLoadsPerBlock = MemCmpNumLoadsPerBlock;
- MemCmpExpansion MemCmpHelper(CI, MaxLoadSize, NumLoadsPerBlock);
+ MemCmpExpansion MemCmpHelper(CI, SizeVal, MaxLoadSize, NumLoadsPerBlock);
Value *Res = MemCmpHelper.getMemCmpExpansion(SizeVal, DL->isLittleEndian());