summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/Target/TargetLibraryInfo.h15
-rw-r--r--llvm/lib/Target/TargetLibraryInfo.cpp6
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp26
3 files changed, 30 insertions, 17 deletions
diff --git a/llvm/include/llvm/Target/TargetLibraryInfo.h b/llvm/include/llvm/Target/TargetLibraryInfo.h
index 56a89191a58..46f87b93b00 100644
--- a/llvm/include/llvm/Target/TargetLibraryInfo.h
+++ b/llvm/include/llvm/Target/TargetLibraryInfo.h
@@ -73,6 +73,11 @@ namespace llvm {
dunder_isoc99_sscanf,
/// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size);
memcpy_chk,
+ /// void *__memmove_chk(void *s1, const void *s2, size_t n,
+ /// size_t s1size);
+ memmove_chk,
+ /// void *__memset_chk(void *s, char v, size_t n, size_t s1size);
+ memset_chk,
/// double __sincospi_stret(double x);
sincospi_stret,
/// float __sincospif_stret(float x);
@@ -87,8 +92,18 @@ namespace llvm {
sqrtf_finite,
/// long double __sqrt_finite(long double x);
sqrtl_finite,
+ /// char *__stpcpy_chk(char *s1, const char *s2, size_t s1size);
+ stpcpy_chk,
+ /// char *__stpncpy_chk(char *s1, const char *s2, size_t n,
+ /// size_t s1size);
+ stpncpy_chk,
+ /// char *__strcpy_chk(char *s1, const char *s2, size_t s1size);
+ strcpy_chk,
/// char * __strdup(const char *s);
dunder_strdup,
+ /// char *__strncpy_chk(char *s1, const char *s2, size_t n,
+ /// size_t s1size);
+ strncpy_chk,
/// char *__strndup(const char *s, size_t n);
dunder_strndup,
/// char * __strtok_r(char *s, const char *delim, char **save_ptr);
diff --git a/llvm/lib/Target/TargetLibraryInfo.cpp b/llvm/lib/Target/TargetLibraryInfo.cpp
index ecb38198551..bca56b5c309 100644
--- a/llvm/lib/Target/TargetLibraryInfo.cpp
+++ b/llvm/lib/Target/TargetLibraryInfo.cpp
@@ -51,6 +51,8 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"__isoc99_scanf",
"__isoc99_sscanf",
"__memcpy_chk",
+ "__memmove_chk",
+ "__memset_chk",
"__sincospi_stret",
"__sincospif_stret",
"__sinpi",
@@ -58,7 +60,11 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
"__sqrt_finite",
"__sqrtf_finite",
"__sqrtl_finite",
+ "__stpcpy_chk",
+ "__stpncpy_chk",
+ "__strcpy_chk",
"__strdup",
+ "__strncpy_chk",
"__strndup",
"__strtok_r",
"abs",
diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
index 207d3664789..e7beb2feb62 100644
--- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
@@ -2184,28 +2184,20 @@ Value *LibCallSimplifier::optimizeCall(CallInst *CI) {
return nullptr;
case LibFunc::memcpy_chk:
return optimizeMemCpyChk(CI, Builder);
- default:
- return nullptr;
- }
- }
-
- if (!isCallingConvC)
- return nullptr;
-
- // Finally check for fortified library calls.
- if (FuncName.endswith("_chk")) {
- if (FuncName == "__memmove_chk")
+ case LibFunc::memmove_chk:
return optimizeMemMoveChk(CI, Builder);
- else if (FuncName == "__memset_chk")
+ case LibFunc::memset_chk:
return optimizeMemSetChk(CI, Builder);
- else if (FuncName == "__strcpy_chk")
+ case LibFunc::strcpy_chk:
return optimizeStrCpyChk(CI, Builder);
- else if (FuncName == "__stpcpy_chk")
+ case LibFunc::stpcpy_chk:
return optimizeStpCpyChk(CI, Builder);
- else if (FuncName == "__strncpy_chk")
- return optimizeStrNCpyChk(CI, Builder);
- else if (FuncName == "__stpncpy_chk")
+ case LibFunc::stpncpy_chk:
+ case LibFunc::strncpy_chk:
return optimizeStrNCpyChk(CI, Builder);
+ default:
+ return nullptr;
+ }
}
return nullptr;
OpenPOWER on IntegriCloud