diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2025-11-07 15:27:24 -0800 |
|---|---|---|
| committer | Matt Arsenault <arsenm2@gmail.com> | 2025-11-11 19:23:52 -0800 |
| commit | abf1fe120ccc125e06d5151396697bc7453d3233 (patch) | |
| tree | af0c6f03570f0d9ca9e65eb5b388723da81abb1e | |
| parent | 57b5e69daf1ed481aa6b682979c1539fd4d9f3aa (diff) | |
RuntimeLibcalls: Add __memcpy_chk, __memmove_chk, __memset_chkusers/arsenm/runtime-libcalls/add-memcpy-memmove-memset-chk-functions
These were in TargetLibraryInfo, but missing from RuntimeLibcalls.
This only adds the cases that already have the non-chk variants
already. Copies the enabled-by-default logic from TargetLibraryInfo,
which is probably overly permissive. Only isPS opts-out.
| -rw-r--r-- | llvm/include/llvm/IR/RuntimeLibcalls.td | 17 | ||||
| -rw-r--r-- | llvm/test/Transforms/Util/DeclareRuntimeLibcalls/basic.ll | 4 | ||||
| -rw-r--r-- | llvm/test/Transforms/Util/DeclareRuntimeLibcalls/ps.ll | 6 |
3 files changed, 25 insertions, 2 deletions
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td index c22af429d1da..11e6127e0741 100644 --- a/llvm/include/llvm/IR/RuntimeLibcalls.td +++ b/llvm/include/llvm/IR/RuntimeLibcalls.td @@ -35,6 +35,9 @@ def isNotOSLinuxAndNotOSOpenBSD : RuntimeLibcallPredicate< def isNotOSAIXAndNotOSOpenBSD : RuntimeLibcallPredicate< [{!TT.isOSAIX() && !TT.isOSOpenBSD()}]>; +def isNotPS : RuntimeLibcallPredicate< + [{!TT.isPS()}]>; + // OpenBSD uses __guard_local. AIX uses __ssp_canary_word, MSVC/Windows // Itanium uses __security_cookie def hasStackChkFail : RuntimeLibcallPredicate< @@ -374,8 +377,11 @@ foreach FPTy = ["F32", "F64", "F128", "PPCF128"] in { // Memory def MEMCMP : RuntimeLibcall; def MEMCPY : RuntimeLibcall; +def MEMCPY_CHK : RuntimeLibcall; def MEMMOVE : RuntimeLibcall; +def MEMMOVE_CHK : RuntimeLibcall; def MEMSET : RuntimeLibcall; +def MEMSET_CHK : RuntimeLibcall; def CALLOC : RuntimeLibcall; def BZERO : RuntimeLibcall; def STRLEN : RuntimeLibcall; @@ -1091,6 +1097,10 @@ def memcpy : RuntimeLibcallImpl<MEMCPY>; def memmove : RuntimeLibcallImpl<MEMMOVE>; def memset : RuntimeLibcallImpl<MEMSET>; +def __memcpy_chk : RuntimeLibcallImpl<MEMCPY_CHK>; +def __memmove_chk : RuntimeLibcallImpl<MEMMOVE_CHK>; +def __memset_chk : RuntimeLibcallImpl<MEMSET_CHK>; + // DSEPass can emit calloc if it finds a pair of malloc/memset def calloc : RuntimeLibcallImpl<CALLOC>; @@ -2624,8 +2634,10 @@ defvar X86_F128_Libcalls = LibcallImpls<(add LibmF128Libcalls, LibmF128FiniteLib defvar SinCosF32F64Libcalls = LibcallImpls<(add sincosf, sincos), hasSinCos_f32_f64>; +defvar MemChkLibcalls = [__memcpy_chk, __memset_chk, __memmove_chk]; + defvar X86CommonLibcalls = - (add (sub WinDefaultLibcallImpls, WindowsDivRemMulLibcallOverrides), + (add (sub WinDefaultLibcallImpls, WindowsDivRemMulLibcallOverrides, MemChkLibcalls), DarwinSinCosStret, DarwinExp10, X86_F128_Libcalls, LibmHasSinCosF80, // FIXME: Depends on long double @@ -2641,7 +2653,8 @@ defvar X86CommonLibcalls = // FIXME: MSVCRT doesn't have powi. The f128 case is added as a // hack for one test relying on it. __powitf2_f128, - DefaultStackProtector + DefaultStackProtector, + LibcallImpls<(add MemChkLibcalls), isNotPS> ); defvar Windows32DivRemMulCalls = diff --git a/llvm/test/Transforms/Util/DeclareRuntimeLibcalls/basic.ll b/llvm/test/Transforms/Util/DeclareRuntimeLibcalls/basic.ll index be8cae261c7b..db0cc24c287b 100644 --- a/llvm/test/Transforms/Util/DeclareRuntimeLibcalls/basic.ll +++ b/llvm/test/Transforms/Util/DeclareRuntimeLibcalls/basic.ll @@ -12,6 +12,10 @@ define float @sinf(float %x) { ; CHECK: declare void @_Unwind_Resume(...) +; CHECK: declare void @__memcpy_chk(...) +; CHECK: declare void @__memmove_chk(...) +; CHECK: declare void @__memset_chk(...) + ; CHECK: declare void @__umodti3(...) ; CHECK: declare void @acosf(...) diff --git a/llvm/test/Transforms/Util/DeclareRuntimeLibcalls/ps.ll b/llvm/test/Transforms/Util/DeclareRuntimeLibcalls/ps.ll new file mode 100644 index 000000000000..bcdcc63400f7 --- /dev/null +++ b/llvm/test/Transforms/Util/DeclareRuntimeLibcalls/ps.ll @@ -0,0 +1,6 @@ +; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=x86_64-scei-ps4 < %s | FileCheck %s +; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=x86_64-scei-ps5 < %s | FileCheck %s + +; CHECK-NOT: __memcpy_chk +; CHECK-NOT: __memset_chk +; CHECK-NOT: __memmove_chk |
