diff options
author | Augie Fackler <augie@google.com> | 2022-05-03 12:11:34 -0400 |
---|---|---|
committer | Augie Fackler <augie@google.com> | 2022-05-03 13:17:33 -0400 |
commit | 1deea714b3b4023b2d50f73503ee2782c3b59fe7 (patch) | |
tree | e367ec8fa67e899cc83d074408c435a5de52dac0 /llvm/lib/Transforms/Utils/BuildLibCalls.cpp | |
parent | e072a123d3b24995b0921802d69c93c08e3667bf (diff) | |
download | llvm-1deea714b3b4023b2d50f73503ee2782c3b59fe7.zip llvm-1deea714b3b4023b2d50f73503ee2782c3b59fe7.tar.gz llvm-1deea714b3b4023b2d50f73503ee2782c3b59fe7.tar.bz2 |
BuildLibCalls: simplify switch statement slightly
Per feedback on D123086 after submit.
Also added a test for vec_malloc et al attribute inference to show it's
doing the right thing.
The new tests exposed a defect, corrected by adding vec_free to the list of
free functions in MemoryBuiltins.cpp, which had been overlooked all the
way back in D94710, over a year ago.
Differential Revision: https://reviews.llvm.org/D124859
Diffstat (limited to 'llvm/lib/Transforms/Utils/BuildLibCalls.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/BuildLibCalls.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/llvm/lib/Transforms/Utils/BuildLibCalls.cpp b/llvm/lib/Transforms/Utils/BuildLibCalls.cpp index 40fd407..75dbf7a 100644 --- a/llvm/lib/Transforms/Utils/BuildLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/BuildLibCalls.cpp @@ -442,10 +442,9 @@ bool llvm::inferNonMandatoryLibFuncAttrs(Function &F, LLVM_FALLTHROUGH; case LibFunc_valloc: case LibFunc_malloc: - Changed |= setAllocFamily(F, "malloc"); - LLVM_FALLTHROUGH; case LibFunc_vec_malloc: - Changed |= setAllocFamily(F, "vec_malloc"); + Changed |= setAllocFamily(F, TheLibFunc == LibFunc_vec_malloc ? "vec_malloc" + : "malloc"); Changed |= setAllocSize(F, 0, None); Changed |= setOnlyAccessesInaccessibleMemory(F); Changed |= setRetAndArgsNoUndef(F); @@ -532,10 +531,9 @@ bool llvm::inferNonMandatoryLibFuncAttrs(Function &F, return Changed; case LibFunc_realloc: case LibFunc_reallocf: - Changed |= setAllocFamily(F, "malloc"); - LLVM_FALLTHROUGH; case LibFunc_vec_realloc: - Changed |= setAllocFamily(F, "vec_malloc"); + Changed |= setAllocFamily( + F, TheLibFunc == LibFunc_vec_realloc ? "vec_malloc" : "malloc"); Changed |= setAllocatedPointerParam(F, 0); Changed |= setAllocSize(F, 1, None); Changed |= setOnlyAccessesInaccessibleMemOrArgMem(F); @@ -610,10 +608,9 @@ bool llvm::inferNonMandatoryLibFuncAttrs(Function &F, Changed |= setOnlyWritesMemory(F, 0); return Changed; case LibFunc_calloc: - Changed |= setAllocFamily(F, "malloc"); - LLVM_FALLTHROUGH; case LibFunc_vec_calloc: - Changed |= setAllocFamily(F, "vec_malloc"); + Changed |= setAllocFamily(F, TheLibFunc == LibFunc_vec_calloc ? "vec_malloc" + : "malloc"); Changed |= setAllocSize(F, 0, 1); Changed |= setOnlyAccessesInaccessibleMemory(F); Changed |= setRetAndArgsNoUndef(F); @@ -672,10 +669,9 @@ bool llvm::inferNonMandatoryLibFuncAttrs(Function &F, Changed |= setDoesNotCapture(F, 0); return Changed; case LibFunc_free: - Changed |= setAllocFamily(F, "malloc"); - LLVM_FALLTHROUGH; case LibFunc_vec_free: - Changed |= setAllocFamily(F, "vec_malloc"); + Changed |= setAllocFamily(F, TheLibFunc == LibFunc_vec_free ? "vec_malloc" + : "malloc"); Changed |= setAllocatedPointerParam(F, 0); Changed |= setOnlyAccessesInaccessibleMemOrArgMem(F); Changed |= setArgsNoUndef(F); |