mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-05 12:31:46 +00:00
Expose struct size threhold to allow users to tweak their own setting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38472 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
532dc2e1f2
commit
ff366850aa
@ -76,7 +76,7 @@ FunctionPass *createAggressiveDCEPass();
|
||||
// ScalarReplAggregates - Break up alloca's of aggregates into multiple allocas
|
||||
// if possible.
|
||||
//
|
||||
FunctionPass *createScalarReplAggregatesPass();
|
||||
FunctionPass *createScalarReplAggregatesPass(signed Threshold = -1);
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
|
@ -48,7 +48,12 @@ STATISTIC(NumGlobals, "Number of allocas copied from constant global");
|
||||
namespace {
|
||||
struct VISIBILITY_HIDDEN SROA : public FunctionPass {
|
||||
static char ID; // Pass identification, replacement for typeid
|
||||
SROA() : FunctionPass((intptr_t)&ID) {}
|
||||
SROA(signed T = -1) : FunctionPass((intptr_t)&ID) {
|
||||
if (T == -1)
|
||||
SRThreshold = 128;
|
||||
else
|
||||
SRThreshold = T;
|
||||
}
|
||||
|
||||
bool runOnFunction(Function &F);
|
||||
|
||||
@ -87,6 +92,8 @@ namespace {
|
||||
isMemCpySrc(false), isMemCpyDst(false) {}
|
||||
};
|
||||
|
||||
unsigned SRThreshold;
|
||||
|
||||
void MarkUnsafe(AllocaInfo &I) { I.isUnsafe = true; }
|
||||
|
||||
int isSafeAllocaToScalarRepl(AllocationInst *AI);
|
||||
@ -119,7 +126,9 @@ namespace {
|
||||
}
|
||||
|
||||
// Public interface to the ScalarReplAggregates pass
|
||||
FunctionPass *llvm::createScalarReplAggregatesPass() { return new SROA(); }
|
||||
FunctionPass *llvm::createScalarReplAggregatesPass(signed int Threshold) {
|
||||
return new SROA(Threshold);
|
||||
}
|
||||
|
||||
|
||||
bool SROA::runOnFunction(Function &F) {
|
||||
@ -211,7 +220,7 @@ bool SROA::performScalarRepl(Function &F) {
|
||||
(isa<StructType>(AI->getAllocatedType()) ||
|
||||
isa<ArrayType>(AI->getAllocatedType())) &&
|
||||
AI->getAllocatedType()->isSized() &&
|
||||
TD.getTypeSize(AI->getAllocatedType()) < 128) {
|
||||
TD.getTypeSize(AI->getAllocatedType()) < SRThreshold) {
|
||||
// Check that all of the users of the allocation are capable of being
|
||||
// transformed.
|
||||
switch (isSafeAllocaToScalarRepl(AI)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user