Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
afbbd54
[ADT] Fix a memory leak in SmallDenseMap (#168011)
kazutakahirata Nov 14, 2025
4d42a0c
[Scalar] Avoid deep copies of DenseMap (NFC) (#168012)
kazutakahirata Nov 14, 2025
daa1b60
[MC] Remove a redundant cast (NFC) (#168013)
kazutakahirata Nov 14, 2025
9efe517
[Hexagon] Remove redundant declarations (NFC) (#168014)
kazutakahirata Nov 14, 2025
675bf80
[Basic] Remove a redundant std::string::c_str (NFC) (#168015)
kazutakahirata Nov 14, 2025
851f8f7
[VPlan] Disable partial reductions again with EVL tail folding (#167863)
lukel97 Nov 14, 2025
6a80728
[clang][bytecode][NFC] Limit pointer and array ops to integer indices…
tbaederr Nov 14, 2025
6b16b31
[llvm][RISCV] Support P extension CodeGen (#167882)
4vtomat Nov 14, 2025
9822905
[libcxx] [doc] Update the docs about LIBCXX_ENABLE_FILESYSTEM (#167843)
mstorsjo Nov 14, 2025
80ae168
[libcxx] [doc] Document the supported target versions of Windows (#16…
mstorsjo Nov 14, 2025
b5c459d
[Linalg] Add basic infra to add matchers for linalg.*conv*/*pool* ops…
Abhishek-Varma Nov 14, 2025
bf07226
[libc++] Reorganize and fix the libc++ CI dockerfiles (#167530)
ldionne Nov 14, 2025
3277f6c
[LV] Explicitly disable in-loop reductions for AnyOf and FindIV. nfc …
Mel-Chen Nov 14, 2025
b2a8188
Destroy tasks as they are run in the thread pool (#167852)
chandlerc Nov 14, 2025
787f677
[libc++] proper guarding for locale usage in filesystem on Windows (#…
moleium Nov 14, 2025
31b7f1f
[GlobalISel] Add support for value/constants as inline asm memory ope…
Pierre-vh Nov 14, 2025
8723fe5
[mlir][tosa] Allow int64 index tensors in gather/scatter (#167894)
lhutton1 Nov 14, 2025
40a9e34
[AArch64][llvm] Add support for Permission Overlay Extension 2 (FEAT_…
jthackray Nov 14, 2025
c021e16
[AArch64][SME] Handle SME state around TLS-descriptor calls (#155608)
MacDue Nov 14, 2025
3890c97
[InferAddressSpaces] Fix bad `addrspacecast` insertion for phinode (#…
Kerang-BR Nov 14, 2025
72c69ae
[AMDGPU] Make use of getFunction and getMF. NFC. (#167872)
jayfoad Nov 14, 2025
00000dc
[LoopInterchange] Fix tests with loops that have BTC=0. NFC. (#167748)
sjoerdmeijer Nov 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 25 additions & 22 deletions .github/workflows/libcxx-build-containers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ on:
branches:
- main
paths:
- 'libcxx/utils/ci/**'
- 'libcxx/utils/ci/docker/**'
- '.github/workflows/libcxx-build-containers.yml'
pull_request:
paths:
- 'libcxx/utils/ci/**'
- 'libcxx/utils/ci/docker/**'
- '.github/workflows/libcxx-build-containers.yml'

jobs:
Expand All @@ -40,17 +40,18 @@ jobs:
echo '{ "data-root": "/mnt/docker" }' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker

- name: Build the Linux builder image
working-directory: libcxx/utils/ci
run: |
docker compose build builder-base
docker compose build actions-builder
- name: Build the base image
run: docker compose --file libcxx/utils/ci/docker/docker-compose.yml build libcxx-linux-builder-base
env:
TAG: ${{ github.sha }}

- name: Build the Linux Github Actions image
run: docker compose --file libcxx/utils/ci/docker/docker-compose.yml build libcxx-linux-builder
env:
TAG: ${{ github.sha }}

- name: Build the Android builder image
working-directory: libcxx/utils/ci
run: docker compose build android-buildkite-builder
run: docker compose --file libcxx/utils/ci/docker/docker-compose.yml build libcxx-android-builder
env:
TAG: ${{ github.sha }}

Expand All @@ -61,19 +62,21 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Push the Linux builder image
- name: Push the images
if: github.event_name == 'push'
working-directory: libcxx/utils/ci
run: |
docker compose push builder-base
docker compose push actions-builder
env:
TAG: ${{ github.sha }}
run: docker compose push libcxx-linux-builder-base libcxx-linux-builder libcxx-android-builder

- name: Push the Android builder image
if: github.event_name == 'push'
working-directory: libcxx/utils/ci
# We create tarballs with the images and upload them as artifacts, since that's useful for testing
# the images when making changes.
- name: Create image tarballs
run: |
docker compose push android-buildkite-builder
env:
TAG: ${{ github.sha }}
docker image save ghcr.io/llvm/libcxx-linux-builder-base:${{ github.sha }} | gzip > libcxx-linux-builder-base.tar.gz
docker image save ghcr.io/llvm/libcxx-linux-builder:${{ github.sha }} | gzip > libcxx-linux-builder.tar.gz
docker image save ghcr.io/llvm/libcxx-android-builder:${{ github.sha }} | gzip > libcxx-android-builder.tar.gz
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
with:
name: libcxx-docker-images
path: |
libcxx-linux-builder-base.tar.gz
libcxx-linux-builder.tar.gz
libcxx-android-builder.tar.gz
20 changes: 16 additions & 4 deletions clang/lib/AST/ByteCode/Opcodes.td
Original file line number Diff line number Diff line change
Expand Up @@ -361,8 +361,14 @@ def NarrowPtr : Opcode;
// [Pointer] -> [Pointer]
def ExpandPtr : Opcode;
// [Pointer, Offset] -> [Pointer]
def ArrayElemPtr : AluOpcode;
def ArrayElemPtrPop : AluOpcode;
def ArrayElemPtr : Opcode {
let Types = [IntegralTypeClass];
let HasGroup = 1;
}
def ArrayElemPtrPop : Opcode {
let Types = [IntegralTypeClass];
let HasGroup = 1;
}

def ArrayElemPop : Opcode {
let Args = [ArgUint32];
Expand Down Expand Up @@ -536,9 +542,15 @@ def InitElemPop : Opcode {
//===----------------------------------------------------------------------===//

// [Pointer, Integral] -> [Pointer]
def AddOffset : AluOpcode;
def AddOffset : Opcode {
let Types = [IntegralTypeClass];
let HasGroup = 1;
}
// [Pointer, Integral] -> [Pointer]
def SubOffset : AluOpcode;
def SubOffset : Opcode {
let Types = [IntegralTypeClass];
let HasGroup = 1;
}

// [Pointer, Pointer] -> [Integral]
def SubPtr : Opcode {
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Basic/Targets/SystemZ.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ void SystemZTargetInfo::getTargetDefines(const LangOptions &Opts,
Librel |= V.getSubminor().value_or(0);
Str += llvm::utohexstr(Librel);

Builder.defineMacro("__TARGET_LIB__", Str.c_str());
Builder.defineMacro("__TARGET_LIB__", Str);
}
}

Expand Down
12 changes: 12 additions & 0 deletions clang/test/Driver/aarch64-vfat.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,15 @@
// RUN: %clang -target aarch64 -march=armv9.7a+mops-go -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-MOPS-GO %s
// RUN: %clang -target aarch64 -march=armv9.7-a+mops-go -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-MOPS-GO %s
// VFAT-MOPS-GO: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+v9.7a"{{.*}} "-target-feature" "+mops-go"

// RUN: %clang -target aarch64 -march=armv9.7a+poe2 -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-POE2 %s
// RUN: %clang -target aarch64 -march=armv9.7-a+poe2 -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-POE2 %s
// VFAT-POE2: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+v9.7a"{{.*}} "-target-feature" "+poe2"

// RUN: %clang -target aarch64 -march=armv9.7a+tev -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-TEV %s
// RUN: %clang -target aarch64 -march=armv9.7-a+tev -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-TEV %s
// VFAT-TEV: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+v9.7a"{{.*}} "-target-feature" "+tev"

// RUN: %clang -target aarch64 -march=armv9.7a+btie -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-BTIE %s
// RUN: %clang -target aarch64 -march=armv9.7-a+btie -### -c %s 2>&1 | FileCheck -check-prefix=VFAT-BTIE %s
// VFAT-BTIE: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+v9.7a"{{.*}} "-target-feature" "+btie"
3 changes: 3 additions & 0 deletions clang/test/Driver/print-supported-extensions-aarch64.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
// CHECK-NEXT: bf16 FEAT_BF16 Enable BFloat16 Extension
// CHECK-NEXT: brbe FEAT_BRBE Enable Branch Record Buffer Extension
// CHECK-NEXT: bti FEAT_BTI Enable Branch Target Identification
// CHECK-NEXT: btie FEAT_BTIE Enable Enhanced Branch Target Identification extension
// CHECK-NEXT: cmh FEAT_CMH Enable Armv9.7-A Contention Management Hints
// CHECK-NEXT: cmpbr FEAT_CMPBR Enable Armv9.6-A base compare and branch instructions
// CHECK-NEXT: fcma FEAT_FCMA Enable Armv8.3-A Floating-point complex number support
Expand Down Expand Up @@ -59,6 +60,7 @@
// CHECK-NEXT: pauth-lr FEAT_PAuth_LR Enable Armv9.5-A PAC enhancements
// CHECK-NEXT: pcdphint FEAT_PCDPHINT Enable Armv9.6-A Producer Consumer Data Placement hints
// CHECK-NEXT: pmuv3 FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension
// CHECK-NEXT: poe2 FEAT_S1POE2 Enable Stage 1 Permission Overlays Extension 2 instructions
// CHECK-NEXT: pops FEAT_PoPS Enable Armv9.6-A Point Of Physical Storage (PoPS) DC instructions
// CHECK-NEXT: predres FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
// CHECK-NEXT: rng FEAT_RNG Enable Random Number generation instructions
Expand Down Expand Up @@ -113,6 +115,7 @@
// CHECK-NEXT: sve2p1 FEAT_SVE2p1 Enable Scalable Vector Extension 2.1 instructions
// CHECK-NEXT: sve2p2 FEAT_SVE2p2 Enable Armv9.6-A Scalable Vector Extension 2.2 instructions
// CHECK-NEXT: sve2p3 FEAT_SVE2p3 Enable Armv9.7-A Scalable Vector Extension 2.3 instructions
// CHECK-NEXT: tev FEAT_TEV Enable TIndex Exception-like Vector instructions
// CHECK-NEXT: the FEAT_THE Enable Armv8.9-A Translation Hardening Extension
// CHECK-NEXT: tlbid FEAT_TLBID Enable Armv9.7-A TLBI Domains extension
// CHECK-NEXT: tlbiw FEAT_TLBIW Enable Armv9.5-A TLBI VMALL for Dirty State
Expand Down
60 changes: 21 additions & 39 deletions libcxx/docs/Contributing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -269,20 +269,20 @@ Updating the CI testing container images
----------------------------------------

The libcxx linux premerge testing can run on one of three sets of runner
groups. The three runner group names are "llvm-premerge-libcxx-runners",
"llvm-premerge-libcxx-release-runners" and "llvm-premerge-libcxx-next-runners".
Which runner set to use is controlled by the contents of
groups. The three runner group names are ``llvm-premerge-libcxx-runners``,
``llvm-premerge-libcxx-release-runners`` and ``llvm-premerge-libcxx-next-runners``.
The runner set to use is controlled by the contents of
https://github.com/llvm/llvm-project/blob/main/.github/workflows/libcxx-build-and-test.yaml.
By default, it uses "llvm-premerge-libcxx-runners". To switch to one of the
other runner sets, just replace all uses of "llvm-premerge-libcxx-runners" in
By default, it uses ``llvm-premerge-libcxx-runners``. To switch to one of the
other runner sets, just replace all uses of ``llvm-premerge-libcxx-runners`` in
the yaml file with the desired runner set.

Which container image is used by these three runner sets is controlled
and set by the variable values in
https://github.com/llvm/llvm-zorg/blob/main/premerge/premerge_resources/variables.tf.
The table below shows the variable names and
the runner sets to which they correspond. To see their values, follow the
link above (to variables.tf in llvm-zorg).
link above (to ``variables.tf`` in llvm-zorg).

+------------------------------------+---------------------------+
|Runner Set |Variable |
Expand All @@ -295,39 +295,21 @@ link above (to variables.tf in llvm-zorg).
+------------------------------------+---------------------------+


When updating the container image you can either update just the
runner binary (the part the connects to Github), or you can update
everything (tools, etc.). Whether to update just the runner or to update
everything is controlled by the value of ``ACTIONS_BASE_IMAGE``, under
``actions-builder`` in ``libcxx/utils/ci/docker-compose.yml``.

To update just the runner binary, change the value of ``ACTIONS_BASE_IMAGE``
to be a modified version of one of the libcxx runner variable images from
https://github.com/llvm/llvm-zorg/blob/main/premerge/premerge_resources/variables.tf,
as follows: Find the libcxx runner image name you want to use from the
variables.tf file. The name will be something like
``ghcr.io/llvm/libcxx-linux-builder:<some-commit-SHA>``. Replace
``libcxx-linux-builder`` with ``libcxx-linux-builder-base``. Use this new image
name as the value you assign to ``ACTIONS_BASE_IMAGE``.

To update the entire container image, set the value of ``ACTIONS_BASE_IMAGE``
to ``builder-base``. If the value is already ``builder-base`` (there
have been no just-the-runner updates since the last complete update), then you
need to find the line containing ``RUN echo "Last forced update executed on``
in ``libcxx/utils/ci/Dockerfile`` and update the date to be the current date.

Once you have created and merged a PR with those changes, a new image
will be created, and a link to it can be found at
https://github.com/llvm/llvm-project/pkgs/container/libcxx-linux-builder,
where the actual image name should be
``ghcr.io/llvm/libcxx-linux-builder:<SHA-of-committed-change-from-PR>``.

Lastly you need to create a PR in the llvm-zorg repository,
updating the the value of the appropriate libcxx runner variable in
the variables.tf file mentioned above to the name of your newly created
image (see above paragraph about finding the image name). Once that change
has been merged, an LLVM premerge maintainer (a Google employee) must use
terraform to apply the change to the running GKE cluster.
When updating the container image you can either update just the runner binary (the part
that connects to Github), or you can update everything (tools, etc.). To update the runner
binary, bump the value of ``GITHUB_RUNNER_VERSION`` in ``libcxx/utils/ci/docker/docker-compose.yml``.
To update all of the tools, bump ``BASE_IMAGE_VERSION`` to a newer version of the ``libcxx-linux-builder-base``
image. You can see all versions of that image at https://github.com/llvm/llvm-project/pkgs/container/libcxx-linux-builder-base.

On push to ``main``, a new version of both the ``libcxx-linux-builder`` and the ``libcxx-android-builder``
images will be built and pushed to https://github.com/llvm/llvm-project/packages.

You can then update the image used by the actual runners by changing the sha associated
to ``libcxx_runner_image``, ``libcxx_release_runner_image`` or ``libcxx_next_runner_image``
in `the Terraform configuration file <https://github.com/llvm/llvm-zorg/blob/main/premerge/premerge_resources/variables.tf>`_.
To do so, you will need to create a PR in the llvm-zorg repository and wait for it to be
merged. Once that change has been merged, an LLVM premerge maintainer (a Google employee)
must use terraform to apply the change to the running GKE cluster.


Monitoring premerge testing performance
Expand Down
10 changes: 8 additions & 2 deletions libcxx/docs/VendorDocumentation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,10 @@ General purpose options

.. option:: LIBCXX_ENABLE_FILESYSTEM:BOOL

**Default**: ``ON`` except on Windows when using MSVC.
**Default**: ``ON``

This option can be used to enable or disable the filesystem components on
platforms that may not support them. For example on Windows when using MSVC.
platforms that may not support them.

.. option:: LIBCXX_ENABLE_WIDE_CHARACTERS:BOOL

Expand Down Expand Up @@ -376,6 +376,12 @@ newer (19.14) is required.

Libc++ also supports being built with clang targeting MinGW environments.

Libc++ supports Windows 7 or newer. However, the minimum runtime version
of the build is determined by the ``_WIN32_WINNT`` define, which in many
SDKs defaults to the latest version. To build a version that runs on an
older version, define e.g. ``_WIN32_WINNT=0x601`` while building libc++,
to target Windows 7.

CMake + Visual Studio
---------------------

Expand Down
2 changes: 1 addition & 1 deletion libcxx/docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ macOS 10.13+ i386, x86_64, arm64
FreeBSD 12+ i386, x86_64, arm
Linux i386, x86_64, arm, arm64 Only glibc-2.24 and later and no other libc is officially supported
Android 5.0+ i386, x86_64, arm, arm64
Windows i386, x86_64, arm64 Both MSVC and MinGW style environments, ABI in MSVC environments is :doc:`unstable <DesignDocs/ABIVersioning>`
Windows 7+ i386, x86_64, arm64 Both MSVC and MinGW style environments, ABI in MSVC environments is :doc:`unstable <DesignDocs/ABIVersioning>`
AIX 7.2TL5+ powerpc, powerpc64
Embedded (picolibc) arm
===================== ========================= ============================
Expand Down
8 changes: 5 additions & 3 deletions libcxx/include/__filesystem/path.h
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,7 @@ struct _PathCVT<char> {
}
};

# if _LIBCPP_HAS_LOCALIZATION
template <class _ECharT>
struct _PathExport {
typedef __narrow_to_utf8<sizeof(wchar_t) * __CHAR_BIT__> _Narrower;
Expand Down Expand Up @@ -364,7 +365,7 @@ struct _PathExport<char16_t> {
}
};

# if _LIBCPP_HAS_CHAR8_T
# if _LIBCPP_HAS_CHAR8_T
template <>
struct _PathExport<char8_t> {
typedef __narrow_to_utf8<sizeof(wchar_t) * __CHAR_BIT__> _Narrower;
Expand All @@ -374,8 +375,9 @@ struct _PathExport<char8_t> {
_Narrower()(back_inserter(__dest), __src.data(), __src.data() + __src.size());
}
};
# endif // _LIBCPP_HAS_CHAR8_T
# endif /* _LIBCPP_WIN32API */
# endif // _LIBCPP_HAS_CHAR8_T
# endif // _LIBCPP_HAS_LOCALIZATION
# endif // _LIBCPP_WIN32API

class _LIBCPP_EXPORTED_FROM_ABI path {
template <class _SourceOrIter, class _Tp = path&>
Expand Down
16 changes: 9 additions & 7 deletions libcxx/include/__filesystem/u8path.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,30 @@

_LIBCPP_BEGIN_NAMESPACE_FILESYSTEM

# if !defined(_LIBCPP_WIN32API) || _LIBCPP_HAS_LOCALIZATION
template <class _InputIt, __enable_if_t<__is_pathable<_InputIt>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_DEPRECATED_WITH_CHAR8_T path u8path(_InputIt __f, _InputIt __l) {
static_assert(
# if _LIBCPP_HAS_CHAR8_T
# if _LIBCPP_HAS_CHAR8_T
is_same<typename __is_pathable<_InputIt>::__char_type, char8_t>::value ||
# endif
# endif
is_same<typename __is_pathable<_InputIt>::__char_type, char>::value,
"u8path(Iter, Iter) requires Iter have a value_type of type 'char'"
" or 'char8_t'");
# if defined(_LIBCPP_WIN32API)
# if defined(_LIBCPP_WIN32API)
string __tmp(__f, __l);
using _CVT = __widen_from_utf8<sizeof(wchar_t) * __CHAR_BIT__>;
std::wstring __w;
__w.reserve(__tmp.size());
_CVT()(back_inserter(__w), __tmp.data(), __tmp.data() + __tmp.size());
return path(__w);
# else
# else
return path(__f, __l);
# endif /* !_LIBCPP_WIN32API */
# endif // defined(_LIBCPP_WIN32API)
}
# endif // !defined(_LIBCPP_WIN32API) || _LIBCPP_HAS_LOCALIZATION

# if defined(_LIBCPP_WIN32API)
# if defined(_LIBCPP_WIN32API) && _LIBCPP_HAS_LOCALIZATION
template <class _InputIt, __enable_if_t<__is_pathable<_InputIt>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_DEPRECATED_WITH_CHAR8_T path u8path(_InputIt __f, _NullSentinel) {
static_assert(
Expand All @@ -65,7 +67,7 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_DEPRECATED_WITH_CHAR8_T path u8path(_InputIt __f,
_CVT()(back_inserter(__w), __tmp.data(), __tmp.data() + __tmp.size());
return path(__w);
}
# endif /* _LIBCPP_WIN32API */
# endif // defined(_LIBCPP_WIN32API) && _LIBCPP_HAS_LOCALIZATION

template <class _Source, __enable_if_t<__is_pathable<_Source>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_DEPRECATED_WITH_CHAR8_T path u8path(const _Source& __s) {
Expand Down
Loading
Loading