Remove the MarkModRef pass (use AddReadAttrs instead).

Unfortunately this means removing one regression test
of GlobalsModRef because I couldn't work out how to
perform it without MarkModRef.

llvm-svn: 56342
This commit is contained in:
Duncan Sands 2008-09-19 08:23:44 +00:00
parent af25ee7ffc
commit 310077034a
5 changed files with 0 additions and 1184 deletions

View File

@ -86,7 +86,6 @@ namespace {
(void) llvm::createLowerInvokePass();
(void) llvm::createLowerSetJmpPass();
(void) llvm::createLowerSwitchPass();
(void) llvm::createMarkModRefPass();
(void) llvm::createNoAAPass();
(void) llvm::createNoProfileInfoPass();
(void) llvm::createProfileLoaderPass();

View File

@ -137,12 +137,6 @@ LoopPass *createLoopRotatePass();
//
LoopPass *createLoopIndexSplitPass();
//===----------------------------------------------------------------------===//
//
// MarkModRef - This pass marks functions readnone/readonly.
//
FunctionPass *createMarkModRefPass();
//===----------------------------------------------------------------------===//
//
// PromoteMemoryToRegister - This pass is used to promote memory references to

View File

@ -1,69 +0,0 @@
//===--------- MarkModRef.cpp - Mark functions readnone/readonly ----------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This pass marks functions readnone/readonly based on the results of alias
// analysis. This requires a sufficiently powerful alias analysis, such as
// GlobalsModRef (invoke as "opt ... -globalsmodref-aa -markmodref ...").
//
//===----------------------------------------------------------------------===//
#define DEBUG_TYPE "markmodref"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Function.h"
#include "llvm/Pass.h"
using namespace llvm;
STATISTIC(NumReadNone, "Number of functions marked readnone");
STATISTIC(NumReadOnly, "Number of functions marked readonly");
namespace {
struct VISIBILITY_HIDDEN MarkModRef : public FunctionPass {
static char ID; // Pass identification, replacement for typeid
MarkModRef() : FunctionPass(&ID) {}
bool runOnFunction(Function &F);
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesCFG();
AU.addRequired<AliasAnalysis>();
AU.addPreserved<AliasAnalysis>();
}
};
}
char MarkModRef::ID = 0;
static RegisterPass<MarkModRef>
X("markmodref", "Mark functions readnone/readonly");
bool MarkModRef::runOnFunction(Function &F) {
// FIXME: Wrong for functions with weak linkage.
if (F.doesNotAccessMemory())
// Cannot do better.
return false;
AliasAnalysis &AA = getAnalysis<AliasAnalysis>();
AliasAnalysis::ModRefBehavior ModRef = AA.getModRefBehavior(&F);
if (ModRef == AliasAnalysis::DoesNotAccessMemory) {
F.setDoesNotAccessMemory();
NumReadNone++;
return true;
} else if (ModRef == AliasAnalysis::OnlyReadsMemory && !F.onlyReadsMemory()) {
F.setOnlyReadsMemory();
NumReadOnly++;
return true;
}
return false;
}
FunctionPass *llvm::createMarkModRefPass() {
return new MarkModRef();
}

File diff suppressed because it is too large Load Diff

View File

@ -499,10 +499,6 @@
RelativePath="..\..\lib\Transforms\Scalar\LoopUnswitch.cpp"
>
</File>
<File
RelativePath="..\..\lib\Transforms\Scalar\MarkModRef.cpp"
>
</File>
<File
RelativePath="..\..\lib\Transforms\Scalar\MemCpyOptimizer.cpp"
>