https://github.com/ilovepi created https://github.com/llvm/llvm-project/pull/135706
Since the backend may emit calls to these functions, they should be treated like other libcalls. If we don't, then it is possible to have their definitions removed during LTO because they are dead, only to have a later transform introduce calls to them. See https://discourse.llvm.org/t/rfc-addressing-deficiencies-in-llvm-s-lto-implementation/84999 for more information. >From af02216b9358166b635335491934ff44cdcc89a5 Mon Sep 17 00:00:00 2001 From: Paul Kirth <paulki...@google.com> Date: Mon, 14 Apr 2025 08:25:15 -0700 Subject: [PATCH] [llvm][IR] Treat memcmp and bcmp as libcalls Since the backend may emit calls to these functions, they should be treated like other libcalls. If we don't, then it is possible to have their definitions removed during LTO because they are dead, only to have a later transform introduce calls to them. See https://discourse.llvm.org/t/rfc-addressing-deficiencies-in-llvm-s-lto-implementation/84999 for more information. --- llvm/include/llvm/IR/RuntimeLibcalls.def | 2 ++ llvm/test/LTO/Resolution/RISCV/bcmp-libcall.ll | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.def b/llvm/include/llvm/IR/RuntimeLibcalls.def index 2545aebc73391..2c72bc8c012cc 100644 --- a/llvm/include/llvm/IR/RuntimeLibcalls.def +++ b/llvm/include/llvm/IR/RuntimeLibcalls.def @@ -513,6 +513,8 @@ HANDLE_LIBCALL(UO_PPCF128, "__gcc_qunord") HANDLE_LIBCALL(MEMCPY, "memcpy") HANDLE_LIBCALL(MEMMOVE, "memmove") HANDLE_LIBCALL(MEMSET, "memset") +HANDLE_LIBCALL(MEMCMP, "memcmp") +HANDLE_LIBCALL(BCMP, "bcmp") // DSEPass can emit calloc if it finds a pair of malloc/memset HANDLE_LIBCALL(CALLOC, "calloc") HANDLE_LIBCALL(BZERO, nullptr) diff --git a/llvm/test/LTO/Resolution/RISCV/bcmp-libcall.ll b/llvm/test/LTO/Resolution/RISCV/bcmp-libcall.ll index 4c6bebf69a074..80421cd9350c8 100644 --- a/llvm/test/LTO/Resolution/RISCV/bcmp-libcall.ll +++ b/llvm/test/LTO/Resolution/RISCV/bcmp-libcall.ll @@ -29,8 +29,7 @@ define i1 @foo(ptr %0, [2 x i32] %1) { declare i32 @memcmp(ptr, ptr, i32) ;; Ensure bcmp is removed from module. Follow up patches can address this. -; INTERNALIZE-NOT: declare{{.*}}i32 @bcmp -; INTERNALIZE-NOT: define{{.*}}i32 @bcmp +; INTERNALIZE: define{{.*}}i32 @bcmp define i32 @bcmp(ptr %0, ptr %1, i32 %2) { ret i32 0 } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits