Rather than having special rules like "intrinsics cannot

throw exceptions", just mark intrinsics with the nounwind
attribute.  Likewise, mark intrinsics as readnone/readonly
and get rid of special aliasing logic (which didn't use
anything more than this anyway).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44544 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands
2007-12-03 20:06:50 +00:00
parent 4cf4b69330
commit a3355ffb3d
22 changed files with 136 additions and 146 deletions

View File

@ -25,8 +25,6 @@
#include "llvm/Pass.h"
#include "llvm/Target/TargetData.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/GetElementPtrTypeIterator.h"
@ -116,9 +114,6 @@ namespace {
/// global) or not.
bool pointsToConstantMemory(const Value *P);
virtual ModRefBehavior getModRefBehavior(Function *F, CallSite CS,
std::vector<PointerAccessInfo> *Info);
private:
// CheckGEPInstructions - Check two GEP instructions with known
// must-aliasing base pointers. This checks to see if the index expressions
@ -810,37 +805,5 @@ BasicAliasAnalysis::CheckGEPInstructions(
return MayAlias;
}
static ManagedStatic<BitVector> NoMemoryIntrinsics;
static ManagedStatic<BitVector> OnlyReadsMemoryIntrinsics;
AliasAnalysis::ModRefBehavior
BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS,
std::vector<PointerAccessInfo> *Info) {
if (!F->isDeclaration()) return UnknownModRefBehavior;
static bool Initialized = false;
if (!Initialized) {
NoMemoryIntrinsics->resize(Intrinsic::num_intrinsics);
OnlyReadsMemoryIntrinsics->resize(Intrinsic::num_intrinsics);
#define GET_MODREF_BEHAVIOR
#include "llvm/Intrinsics.gen"
#undef GET_MODREF_BEHAVIOR
Initialized = true;
}
// If this is an intrinsic, we can use lookup tables
if (unsigned id = F->getIntrinsicID()) {
if (NoMemoryIntrinsics->test(id))
return DoesNotAccessMemory;
if (OnlyReadsMemoryIntrinsics->test(id))
return OnlyReadsMemory;
return UnknownModRefBehavior;
}
return UnknownModRefBehavior;
}
// Make sure that anything that uses AliasAnalysis pulls in this file...
DEFINING_FILE_FOR(BasicAliasAnalysis)