summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-01 02:26:47 +0000
committerChris Lattner <sabre@nondot.org>2009-03-01 02:26:47 +0000
commite2bb5e31c8833897eebe1b4ddc892d5f771330fe (patch)
tree75d16d07e83227dff69cb76e39fe236cd6c5f3b3 /llvm
parent53f12b11dcd84d9c43deeca73aeba11f87960e9e (diff)
downloadbcm5719-llvm-e2bb5e31c8833897eebe1b4ddc892d5f771330fe.tar.gz
bcm5719-llvm-e2bb5e31c8833897eebe1b4ddc892d5f771330fe.zip
hoist the check for alloca size up so that it controls CanConvertToScalar
as well as isSafeAllocaToScalarRepl. llvm-svn: 65755
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
index 3a4201bf81e..92ac76be74f 100644
--- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
+++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
@@ -253,11 +253,13 @@ bool SROA::performScalarRepl(Function &F) {
// (allocations OF arrays are ok though), and an allocation of a scalar
// value cannot be decomposed at all.
uint64_t AllocaSize = TD->getTypePaddedSize(AI->getAllocatedType());
-
+
+ // Do not promote any struct whose size is too big.
+ if (AllocaSize < SRThreshold)
+ continue;
+
if ((isa<StructType>(AI->getAllocatedType()) ||
isa<ArrayType>(AI->getAllocatedType())) &&
- // Do not promote any struct whose size is too big.
- AllocaSize < SRThreshold &&
// Do not promote any struct into more than "32" separate vars.
getNumSAElements(AI->getAllocatedType()) < SRThreshold/4) {
// Check that all of the users of the allocation are capable of being
OpenPOWER on IntegriCloud