aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/BuildLibCalls.cpp
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2025-03-12 15:30:09 +0100
committerNikita Popov <npopov@redhat.com>2025-03-12 15:30:57 +0100
commita502c656881c8bc28b49a08c29421059d00aca26 (patch)
tree2ad2424080c4abaf6838a92cf5e522999980e0b4 /llvm/lib/Transforms/Utils/BuildLibCalls.cpp
parent190063464e12d730eef27873ce985e15a5eeee0b (diff)
downloadllvm-a502c656881c8bc28b49a08c29421059d00aca26.zip
llvm-a502c656881c8bc28b49a08c29421059d00aca26.tar.gz
llvm-a502c656881c8bc28b49a08c29421059d00aca26.tar.bz2
[BuildLibCalls] Add helper for setting memory effects (NFC)
Remove reliance on having dedicated setters and getters on Function for every possible memory effect combination.
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;
}