Skip to content

Commit

Permalink
[libc] Apply no-builtin everywhere, remove unnecessary flags
Browse files Browse the repository at this point in the history
Note, this is a re-submission of D125894 with `features = ["-header_modules"]`
added to the main BUILD.bazel file.

Some functions like `stpncpy` are implemented in terms of `memset` but are not
currently using `-fno-builtin-memset`. This is somewhat hidden by the fact that
we use `-ffreestanding` globally and that `-ffreestanding` implies
`-fno-builtin` for Clang.

This patch also removes `-mllvm -combiner-global-alias-analysis` that is Clang
specific and that does not bring substantial gains on modern processors.

Also we keep `-mllvm --tail-merge-threshold=0` for aarch64 in CMakeLists.txt
but we omit it in the Bazel config. This is because Bazel consumes the source
files directly and so it can use PGO to take optimal decisions locally.

Differential Revision: https://reviews.llvm.org/D126773
  • Loading branch information
gchatelet committed Jun 1, 2022
1 parent f951a6b commit b2a9ea4
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 44 deletions.
2 changes: 1 addition & 1 deletion libc/cmake/modules/LLVMLibCObjectRules.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ set(OBJECT_LIBRARY_TARGET_TYPE "OBJECT_LIBRARY")
function(_get_common_compile_options output_var)
set(compile_options ${LIBC_COMPILE_OPTIONS_DEFAULT} ${ARGN})
if(NOT ${LIBC_TARGET_OS} STREQUAL "windows")
set(compile_options ${compile_options} -fpie -ffreestanding)
set(compile_options ${compile_options} -fpie -ffreestanding -fno-builtin)
endif()
if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
list(APPEND compile_options "-fno-exceptions")
Expand Down
14 changes: 0 additions & 14 deletions libc/src/string/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,6 @@ function(add_implementation name impl_name)
${ARGN})

if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
list(APPEND ADD_IMPL_MLLVM_COMPILE_OPTIONS "-combiner-global-alias-analysis")
# Note that '-mllvm' needs to be prefixed with 'SHELL:' to prevent CMake flag deduplication.
foreach(opt IN LISTS ADD_IMPL_MLLVM_COMPILE_OPTIONS)
list(APPEND ADD_IMPL_COMPILE_OPTIONS "SHELL:-mllvm ${opt}")
Expand Down Expand Up @@ -309,9 +308,6 @@ function(add_bcmp bcmp_name)
DEPENDS
.memory_utils.memory_utils
libc.include.string
COMPILE_OPTIONS
-fno-builtin-memcmp
-fno-builtin-bcmp
${ARGN}
)
endfunction()
Expand Down Expand Up @@ -339,8 +335,6 @@ function(add_bzero bzero_name)
DEPENDS
.memory_utils.memset_implementation
libc.include.string
COMPILE_OPTIONS
-fno-builtin-bzero
${ARGN}
)
endfunction()
Expand Down Expand Up @@ -368,8 +362,6 @@ function(add_memcmp memcmp_name)
DEPENDS
.memory_utils.memcmp_implementation
libc.include.string
COMPILE_OPTIONS
-fno-builtin-memcmp
${ARGN}
)
endfunction()
Expand Down Expand Up @@ -400,8 +392,6 @@ function(add_memcpy memcpy_name)
DEPENDS
.memory_utils.memcpy_implementation
libc.include.string
COMPILE_OPTIONS
-fno-builtin-memcpy
${ARGN}
)
endfunction()
Expand Down Expand Up @@ -434,8 +424,6 @@ function(add_memmove memmove_name)
DEPENDS
.memory_utils.memory_utils
libc.include.string
COMPILE_OPTIONS
-fno-builtin
${ARGN}
)
endfunction()
Expand Down Expand Up @@ -468,8 +456,6 @@ function(add_memset memset_name)
DEPENDS
.memory_utils.memset_implementation
libc.include.string
COMPILE_OPTIONS
-fno-builtin-memset
${ARGN}
)
endfunction()
Expand Down
38 changes: 9 additions & 29 deletions utils/bazel/llvm-project-overlay/libc/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ load("@bazel_skylib//lib:selects.bzl", "selects")

package(
default_visibility = ["//visibility:public"],
features = ["-header_modules"],
licenses = ["notice"],
)

Expand Down Expand Up @@ -85,15 +86,21 @@ cc_library(
hdrs = [
"src/__support/CPP/UInt.h",
],
deps = [":libc_root","__support_cpp_array"],
deps = [
"__support_cpp_array",
":libc_root",
],
)

cc_library(
name = "__support_cpp_type_traits",
hdrs = [
"src/__support/CPP/TypeTraits.h",
],
deps = [":libc_root","__support_cpp_uint"],
deps = [
"__support_cpp_uint",
":libc_root",
],
)

cc_library(
Expand Down Expand Up @@ -806,12 +813,6 @@ libc_function(
name = "memcpy",
srcs = ["src/string/memcpy.cpp"],
hdrs = ["src/string/memcpy.h"],
copts = [
"-fno-builtin-memcpy",
"-fno-builtin-memmove",
"-mllvm -combiner-global-alias-analysis",
"-mllvm --tail-merge-threshold=0",
],
features = no_sanitize_features,
deps = [
":__support_common",
Expand All @@ -823,10 +824,6 @@ libc_function(
name = "memset",
srcs = ["src/string/memset.cpp"],
hdrs = ["src/string/memset.h"],
copts = [
"-fno-builtin-memset",
"-mllvm -combiner-global-alias-analysis",
],
features = no_sanitize_features,
deps = [
":__support_common",
Expand All @@ -838,10 +835,6 @@ libc_function(
name = "memmove",
srcs = ["src/string/memmove.cpp"],
hdrs = ["src/string/memmove.h"],
copts = [
"-fno-builtin-memmove",
"-mllvm -combiner-global-alias-analysis",
],
features = no_sanitize_features,
deps = [
":__support_common",
Expand All @@ -855,10 +848,6 @@ libc_function(
name = "memcmp",
srcs = ["src/string/memcmp.cpp"],
hdrs = ["src/string/memcmp.h"],
copts = [
"-fno-builtin-memcmp",
"-mllvm -combiner-global-alias-analysis",
],
features = no_sanitize_features,
deps = [
":__support_common",
Expand All @@ -871,10 +860,6 @@ libc_function(
name = "bcmp",
srcs = ["src/string/bcmp.cpp"],
hdrs = ["src/string/bcmp.h"],
copts = [
"-fno-builtin-bcmp",
"-fno-builtin-memcmp",
],
features = no_sanitize_features,
deps = [
":__support_common",
Expand All @@ -886,11 +871,6 @@ libc_function(
name = "bzero",
srcs = ["src/string/bzero.cpp"],
hdrs = ["src/string/bzero.h"],
copts = [
"-fno-builtin-bzero",
"-fno-builtin-memset",
"-mllvm -combiner-global-alias-analysis",
],
features = no_sanitize_features,
deps = [
":__support_common",
Expand Down
1 change: 1 addition & 0 deletions utils/bazel/llvm-project-overlay/libc/libc_build_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def libc_function(name, srcs, deps = None, copts = None, **kwargs):
deps.append(LIBC_ROOT_TARGET)
copts = copts or []
copts.append("-O3")
copts.append("-fno-builtin")

# We compile the code twice, the first target is suffixed with ".__internal__" and contains the
# C++ functions in the "__llvm_libc" namespace. This allows us to test the function in the
Expand Down

0 comments on commit b2a9ea4

Please sign in to comment.