diff options
author | Nikita Popov <npopov@redhat.com> | 2025-03-12 15:30:09 +0100 |
---|---|---|
committer | Nikita Popov <npopov@redhat.com> | 2025-03-12 15:30:57 +0100 |
commit | a502c656881c8bc28b49a08c29421059d00aca26 (patch) | |
tree | 2ad2424080c4abaf6838a92cf5e522999980e0b4 /llvm/lib/Transforms/Utils/BuildLibCalls.cpp | |
parent | 190063464e12d730eef27873ce985e15a5eeee0b (diff) | |
download | llvm-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.cpp | 24 |
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; } |