From 5fc071f2b452d26dcf79c2ed704510e4bee5b64f Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Fri, 2 Dec 2022 14:34:34 +0000 Subject: [PATCH] [DSE] Use precise loc for memcpy_chk during overwrite checks. Extends the logic from D115167 to memcpy_chk. Depends on D115167 Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D139096 --- llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp | 3 ++- llvm/test/Transforms/DeadStoreElimination/libcalls-chk.ll | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp index 5ab5a26..ab8c72e 100644 --- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -883,7 +883,8 @@ struct DSEState { LocationSize Size) const { if (auto *CB = dyn_cast(I)) { LibFunc F; - if (TLI.getLibFunc(*CB, F) && TLI.has(F) && F == LibFunc_memset_chk) { + if (TLI.getLibFunc(*CB, F) && TLI.has(F) && + (F == LibFunc_memset_chk || F == LibFunc_memcpy_chk)) { // Use the precise location size specified by the 3rd argument // for determining KillingI overwrites DeadLoc if it is a memset_chk // instruction. memset_chk will write either the amount specified as 3rd diff --git a/llvm/test/Transforms/DeadStoreElimination/libcalls-chk.ll b/llvm/test/Transforms/DeadStoreElimination/libcalls-chk.ll index 02b71c8..657bfce 100644 --- a/llvm/test/Transforms/DeadStoreElimination/libcalls-chk.ll +++ b/llvm/test/Transforms/DeadStoreElimination/libcalls-chk.ll @@ -107,8 +107,7 @@ define void @dse_strncpy_chk_test3(ptr noalias %out1, ptr noalias %out2, ptr noa define void @dse_strncpy_memcpy_chk_test1(ptr noalias %out, ptr noalias %in, i64 %n) { ; CHECK-LABEL: @dse_strncpy_memcpy_chk_test1( -; CHECK-NEXT: store i32 0, ptr [[OUT:%.*]], align 4 -; CHECK-NEXT: [[CALL_1:%.*]] = tail call ptr @__memcpy_chk(ptr [[OUT]], ptr [[IN:%.*]], i64 100, i64 [[N:%.*]]) +; CHECK-NEXT: [[CALL_1:%.*]] = tail call ptr @__memcpy_chk(ptr [[OUT:%.*]], ptr [[IN:%.*]], i64 100, i64 [[N:%.*]]) ; CHECK-NEXT: ret void ; store i32 0, ptr %out -- 2.7.4