aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/BuildLibCalls.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/Utils/BuildLibCalls.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/BuildLibCalls.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/llvm/lib/Transforms/Utils/BuildLibCalls.cpp b/llvm/lib/Transforms/Utils/BuildLibCalls.cpp
index 7a5326c..594dd06 100644
--- a/llvm/lib/Transforms/Utils/BuildLibCalls.cpp
+++ b/llvm/lib/Transforms/Utils/BuildLibCalls.cpp
@@ -76,42 +76,46 @@ static bool setNoReturn(Function &F) {
return true;
}
+static bool setMemoryEffects(Function &F, MemoryEffects ME) {
+ MemoryEffects OrigME = F.getMemoryEffects();
+ MemoryEffects NewME = OrigME & ME;
+ if (OrigME == NewME)
+ return false;
+ F.setMemoryEffects(NewME);
+ return true;
+}
+
static bool setOnlyAccessesInaccessibleMemory(Function &F) {
- if (F.onlyAccessesInaccessibleMemory())
+ if (!setMemoryEffects(F, MemoryEffects::inaccessibleMemOnly()))
return false;
- F.setOnlyAccessesInaccessibleMemory();
++NumInaccessibleMemOnly;
return true;
}
static bool setOnlyReadsMemory(Function &F) {
- if (F.onlyReadsMemory())
+ if (!setMemoryEffects(F, MemoryEffects::readOnly()))
return false;
- F.setOnlyReadsMemory();
++NumReadOnly;
return true;
}
static bool setOnlyWritesMemory(Function &F) {
- if (F.onlyWritesMemory()) // writeonly or readnone
+ if (!setMemoryEffects(F, MemoryEffects::writeOnly()))
return false;
++NumWriteOnly;
- F.setOnlyWritesMemory();
return true;
}
static bool setOnlyAccessesArgMemory(Function &F) {
- if (F.onlyAccessesArgMemory())
+ if (!setMemoryEffects(F, MemoryEffects::argMemOnly()))
return false;
- F.setOnlyAccessesArgMemory();
++NumArgMemOnly;
return true;
}
static bool setOnlyAccessesInaccessibleMemOrArgMem(Function &F) {
- if (F.onlyAccessesInaccessibleMemOrArgMem())
+ if (!setMemoryEffects(F, MemoryEffects::inaccessibleOrArgMemOnly()))
return false;
- F.setOnlyAccessesInaccessibleMemOrArgMem();
++NumInaccessibleMemOrArgMemOnly;
return true;
}