[llvm] [offload] add support for aligned allocations (PR #203353)

Alex Duran via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 12 00:46:14 PDT 2026


================
@@ -0,0 +1,207 @@
+//===--------------- Offload API tests - olMemAllocAligned ----------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "../common/Fixtures.hpp"
+#include <OffloadAPI.h>
+#include <gtest/gtest.h>
+
+using olMemAllocAlignedTest = OffloadDeviceTest;
+
+OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE(olMemAllocAlignedTest);
+
+constexpr size_t DefaultAlignment = 16;
+constexpr size_t TestAllocsNum = 1000;
+
+TEST_P(olMemAllocAlignedTest, SuccessAllocMany) {
+  std::vector<void *> Allocs;
+  Allocs.reserve(1000);
+
+  constexpr ol_alloc_type_t TYPES[3] = {
+      OL_ALLOC_TYPE_DEVICE, OL_ALLOC_TYPE_MANAGED, OL_ALLOC_TYPE_HOST};
+
+  for (size_t I = 1; I < TestAllocsNum; I++) {
+    void *Alloc = nullptr;
+    ASSERT_SUCCESS(olMemAllocAligned(Device, TYPES[I % 3], 1024 * I,
+                                     DefaultAlignment, &Alloc));
+    ASSERT_NE(Alloc, nullptr);
+
+    Allocs.push_back(Alloc);
+  }
+
+  for (auto *A : Allocs) {
+    olMemFree(A);
+  }
+}
+
+TEST_P(olMemAllocAlignedTest, InvalidNullDevice) {
+  void *Alloc = nullptr;
+  ASSERT_ERROR(OL_ERRC_INVALID_NULL_HANDLE,
+               olMemAllocAligned(nullptr, OL_ALLOC_TYPE_DEVICE, 1024,
+                                 DefaultAlignment, &Alloc));
+}
+
+TEST_P(olMemAllocAlignedTest, InvalidNullOutPtr) {
+  ASSERT_ERROR(OL_ERRC_INVALID_NULL_POINTER,
+               olMemAllocAligned(Device, OL_ALLOC_TYPE_DEVICE, 1024,
+                                 DefaultAlignment, nullptr));
+}
+
+TEST_P(olMemAllocAlignedTest, InvalidAlignmentZero) {
+  void *Alloc = nullptr;
+
+  ASSERT_ERROR(
+      OL_ERRC_INVALID_ARGUMENT,
+      olMemAllocAligned(Device, OL_ALLOC_TYPE_DEVICE, 1024, 0, &Alloc));
+}
+
+TEST_P(olMemAllocAlignedTest, InvalidAlignmentNotAPowerOfTwo) {
+  void *Alloc = nullptr;
+
+  ASSERT_ERROR(
+      OL_ERRC_INVALID_ARGUMENT,
+      olMemAllocAligned(Device, OL_ALLOC_TYPE_DEVICE, 1024, 3, &Alloc));
+}
+
+TEST_P(olMemAllocAlignedTest, CudaExceedDefaultAlignment) {
+  if (getPlatformBackend() != OL_PLATFORM_BACKEND_CUDA) {
+    GTEST_SKIP() << "Test inteded for CUDA backend";
+  }
+
+  void *Alloc = nullptr;
+  // The default page size for cuda is 64 KB
+  ASSERT_ERROR(OL_ERRC_UNSUPPORTED,
+               olMemAllocAligned(Device, OL_ALLOC_TYPE_DEVICE, 1024,
+                                 1024 * 64 * 64, &Alloc));
+  ASSERT_EQ(Alloc, nullptr);
+}
+
+TEST_P(olMemAllocAlignedTest, SuccessAllocManagedDifferentAlignments) {
+  void *Alloc = nullptr;
+  size_t num_alignments = 6;
----------------
adurang wrote:

> Suggested change
>   size_t num_alignments = 6;
>   size_t NumAlignments = 6;
> This suggestion is part of a pending comment and cannot be applied.

and the same in other tests.

https://github.com/llvm/llvm-project/pull/203353


More information about the llvm-commits mailing list