[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
llvm-ci wrote: LLVM Buildbot has detected a new failure on builder `premerge-monolithic-windows` running on `premerge-windows-1` while building `clang` at step 5 "clean-build-dir". Full details are available at: https://lab.llvm.org/buildbot/#/builders/35/builds/10113 Here is the relevant piece of the build log for the reference ``` Step 5 (clean-build-dir) failure: Delete failed. (failure) Step 8 (test-build-unified-tree-check-all) failure: test (failure) TEST 'lit :: timeout-hang.py' FAILED Exit Code: 1 Command Output (stdout): -- # RUN: at line 13 not env -u FILECHECK_OPTS "C:\Python39\python.exe" C:\ws\buildbot\premerge-monolithic-windows\llvm-project\llvm\utils\lit\lit.py -j1 --order=lexical Inputs/timeout-hang/run-nonexistent.txt --timeout=1 --param external=0 | "C:\Python39\python.exe" C:\ws\buildbot\premerge-monolithic-windows\build\utils\lit\tests\timeout-hang.py 1 # executed command: not env -u FILECHECK_OPTS 'C:\Python39\python.exe' 'C:\ws\buildbot\premerge-monolithic-windows\llvm-project\llvm\utils\lit\lit.py' -j1 --order=lexical Inputs/timeout-hang/run-nonexistent.txt --timeout=1 --param external=0 # .---command stderr # | lit.py: C:\ws\buildbot\premerge-monolithic-windows\llvm-project\llvm\utils\lit\lit\main.py:72: note: The test suite configuration requested an individual test timeout of 0 seconds but a timeout of 1 seconds was requested on the command line. Forcing timeout to be 1 seconds. # `- # executed command: 'C:\Python39\python.exe' 'C:\ws\buildbot\premerge-monolithic-windows\build\utils\lit\tests\timeout-hang.py' 1 # .---command stdout # | Testing took as long or longer than timeout # `- # error: command failed with exit status: 1 -- ``` https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
nico wrote: …aha, it looks it's behind CLANG_ENABLE_CIR already. https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
nico wrote: It looks like this adds a dependency of clang/ on mlir/. Is that correct? As far as I can tell, this is the first dependency from clang to mlir. (Test-only, but still.) Can we make that optional? https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
llvm-ci wrote: LLVM Buildbot has detected a new failure on builder `sanitizer-ppc64le-linux` running on `ppc64le-sanitizer` while building `clang` at step 2 "annotate". Full details are available at: https://lab.llvm.org/buildbot/#/builders/72/builds/11185 Here is the relevant piece of the build log for the reference ``` Step 2 (annotate) failure: 'python ../sanitizer_buildbot/sanitizers/zorg/buildbot/builders/sanitizers/buildbot_selector.py' (failure) ... PASS: Profile-powerpc64le :: Linux/binary-id-offset.c (962 of 2608) PASS: MemorySanitizer-POWERPC64LE :: ifaddrs.cpp (963 of 2608) PASS: SanitizerCommon-lsan-powerpc64le-Linux :: Linux/assert.cpp (964 of 2608) PASS: Profile-powerpc64le :: Linux/binary-id-lookup.c (965 of 2608) PASS: Profile-powerpc64le :: instrprof-bufferio.c (966 of 2608) UNSUPPORTED: SanitizerCommon-lsan-powerpc64le-Linux :: Posix/sl_add.cpp (967 of 2608) UNSUPPORTED: SanitizerCommon-lsan-powerpc64le-Linux :: Posix/strlcat.cpp (968 of 2608) UNSUPPORTED: SanitizerCommon-lsan-powerpc64le-Linux :: Posix/strlcpy.cpp (969 of 2608) PASS: SanitizerCommon-lsan-powerpc64le-Linux :: Linux/closedir.c (970 of 2608) UNSUPPORTED: SanitizerCommon-lsan-powerpc64le-Linux :: Posix/strtonum.cpp (971 of 2608) FAIL: LeakSanitizer-Standalone-powerpc64le :: TestCases/create_thread_leak.cpp (972 of 2608) TEST 'LeakSanitizer-Standalone-powerpc64le :: TestCases/create_thread_leak.cpp' FAILED Exit Code: 2 Command Output (stderr): -- /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/./bin/clang --driver-mode=g++ -O0 -m64 -fno-function-sections -gline-tables-only -fsanitize=leak -I/home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm-project/compiler-rt/test/lsan/../ -pthread /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm-project/compiler-rt/test/lsan/TestCases/create_thread_leak.cpp -o /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/runtimes/runtimes-bins/compiler-rt/test/lsan/POWERPC64LELsanConfig/TestCases/Output/create_thread_leak.cpp.tmp # RUN: at line 3 + /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/./bin/clang --driver-mode=g++ -O0 -m64 -fno-function-sections -gline-tables-only -fsanitize=leak -I/home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm-project/compiler-rt/test/lsan/../ -pthread /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm-project/compiler-rt/test/lsan/TestCases/create_thread_leak.cpp -o /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/runtimes/runtimes-bins/compiler-rt/test/lsan/POWERPC64LELsanConfig/TestCases/Output/create_thread_leak.cpp.tmp not /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/runtimes/runtimes-bins/compiler-rt/test/lsan/POWERPC64LELsanConfig/TestCases/Output/create_thread_leak.cpp.tmp 10 1 0 0 2>&1 | FileCheck /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm-project/compiler-rt/test/lsan/TestCases/create_thread_leak.cpp --check-prefixes=LEAK,LEAK123 # RUN: at line 4 + not /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/runtimes/runtimes-bins/compiler-rt/test/lsan/POWERPC64LELsanConfig/TestCases/Output/create_thread_leak.cpp.tmp 10 1 0 0 + FileCheck /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm-project/compiler-rt/test/lsan/TestCases/create_thread_leak.cpp --check-prefixes=LEAK,LEAK123 not /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/runtimes/runtimes-bins/compiler-rt/test/lsan/POWERPC64LELsanConfig/TestCases/Output/create_thread_leak.cpp.tmp 10 0 1 0 2>&1 | FileCheck /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm-project/compiler-rt/test/lsan/TestCases/create_thread_leak.cpp --check-prefixes=LEAK,LEAK234 # RUN: at line 5 + FileCheck /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm-project/compiler-rt/test/lsan/TestCases/create_thread_leak.cpp --check-prefixes=LEAK,LEAK234 + not /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/runtimes/runtimes-bins/compiler-rt/test/lsan/POWERPC64LELsanConfig/TestCases/Output/create_thread_leak.cpp.tmp 10 0 1 0 not /home/buildbots/llvm-external-buildbots/workers/ppc64le-sanitizer/sanitizer-ppc64le/build/build_default/runtimes/runtimes-bins/compiler-rt/test/lsan/POWERPC64LELsanConfig/TestCases/Output/create_thread_leak.cpp.tmp 10 0 0 1 2>&1 | F
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
llvm-ci wrote: LLVM Buildbot has detected a new failure on builder `clang-aarch64-quick` running on `linaro-clang-aarch64-quick` while building `clang` at step 5 "ninja check 1". Full details are available at: https://lab.llvm.org/buildbot/#/builders/65/builds/16691 Here is the relevant piece of the build log for the reference ``` Step 5 (ninja check 1) failure: stage 1 checked (failure) TEST 'lit :: timeout-hang.py' FAILED Exit Code: 1 Command Output (stdout): -- # RUN: at line 13 not env -u FILECHECK_OPTS "/usr/bin/python3.10" /home/tcwg-buildbot/worker/clang-aarch64-quick/llvm/llvm/utils/lit/lit.py -j1 --order=lexical Inputs/timeout-hang/run-nonexistent.txt --timeout=1 --param external=0 | "/usr/bin/python3.10" /home/tcwg-buildbot/worker/clang-aarch64-quick/stage1/utils/lit/tests/timeout-hang.py 1 # executed command: not env -u FILECHECK_OPTS /usr/bin/python3.10 /home/tcwg-buildbot/worker/clang-aarch64-quick/llvm/llvm/utils/lit/lit.py -j1 --order=lexical Inputs/timeout-hang/run-nonexistent.txt --timeout=1 --param external=0 # .---command stderr # | lit.py: /home/tcwg-buildbot/worker/clang-aarch64-quick/llvm/llvm/utils/lit/lit/main.py:72: note: The test suite configuration requested an individual test timeout of 0 seconds but a timeout of 1 seconds was requested on the command line. Forcing timeout to be 1 seconds. # `- # executed command: /usr/bin/python3.10 /home/tcwg-buildbot/worker/clang-aarch64-quick/stage1/utils/lit/tests/timeout-hang.py 1 # .---command stdout # | Testing took as long or longer than timeout # `- # error: command failed with exit status: 1 -- ``` https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
llvm-ci wrote: LLVM Buildbot has detected a new failure on builder `fuchsia-x86_64-linux` running on `fuchsia-debian-64-us-central1-a-1` while building `clang` at step 4 "annotate". Full details are available at: https://lab.llvm.org/buildbot/#/builders/11/builds/15238 Here is the relevant piece of the build log for the reference ``` Step 4 (annotate) failure: 'python ../llvm-zorg/zorg/buildbot/builders/annotated/fuchsia-linux.py ...' (failure) ... [221/2504] Building CXX object libc/startup/baremetal/CMakeFiles/libc.startup.baremetal.fini.dir/fini.cpp.obj [222/2504] Generating header inttypes.h from /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/runtimes/../libc/include/inttypes.yaml [223/2504] Building CXX object libc/src/stdio/baremetal/CMakeFiles/libc.src.stdio.baremetal.putchar.dir/putchar.cpp.obj [224/2504] Building CXX object libc/src/stdlib/CMakeFiles/libc.src.stdlib.labs.dir/labs.cpp.obj [225/2504] Building CXX object libc/src/string/CMakeFiles/libc.src.string.strncmp.dir/strncmp.cpp.obj [226/2504] Copying CXX header __algorithm/ranges_binary_search.h [227/2504] Copying CXX header __algorithm/shuffle.h [228/2504] Generating header complex.h from /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/runtimes/../libc/include/complex.yaml [229/2504] Generating header locale.h from /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/runtimes/../libc/include/locale.yaml [230/2504] Building CXX object libc/src/stdlib/CMakeFiles/libc.src.stdlib.memalignment.dir/memalignment.cpp.obj FAILED: libc/src/stdlib/CMakeFiles/libc.src.stdlib.memalignment.dir/memalignment.cpp.obj /var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-73fcrucs/./bin/clang++ --target=armv6m-none-eabi -DLIBC_NAMESPACE=__llvm_libc_21_0_0_git -I/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc -isystem /var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-73fcrucs/include/armv6m-unknown-none-eabi --target=armv6m-none-eabi -Wno-atomic-alignment "-Dvfprintf(stream, format, vlist)=vprintf(format, vlist)" "-Dfprintf(stream, format, ...)=printf(format)" -D_LIBCPP_PRINT=1 -mthumb -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wno-unnecessary-virtual-specifier -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -ffunction-sections -fdata-sections -ffile-prefix-map=/var/lib/buildbot/fuchsia-x86_64-linux/build/llvm-build-73fcrucs/runtimes/runtimes-armv6m-none-eabi-bins=../../../../llvm-project -ffile-prefix-map=/var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/= -no-canonical-prefixes -Os -DNDEBUG --target=armv6m-none-eabi -DLIBC_QSORT_IMPL=LIBC_QSORT_HEAP_SORT -DLIBC_TYPES_TIME_T_IS_32_BIT -DLIBC_ADD_NULL_CHECKS "-DLIBC_MATH=(LIBC_MATH_SKIP_ACCURATE_PASS | LIBC_MATH_SMALL_TABLES)" -fpie -ffreestanding -DLIBC_FULL_BUILD -nostdlibinc -ffixed-point -fno-builtin -fno-exceptions -fno-lax-vector-conversions -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-rtti -ftrivial-auto-var-init=pattern -fno-omit-frame-pointer -Wall -Wextra -Werror -Wconversion -Wno-sign-conversion -Wdeprecated -Wno-c99-extensions -Wno-gnu-imaginary-constant -Wno-pedantic -Wimplicit-fallthrough -Wwrite-strings -Wextra-semi -Wnewline-eof -Wnonportable-system-include-path -Wstrict-prototypes -Wthread-safety -Wglobal-constructors -DLIBC_COPT_PUBLIC_PACKAGING -MD -MT libc/src/stdlib/CMakeFiles/libc.src.stdlib.memalignment.dir/memalignment.cpp.obj -MF libc/src/stdlib/CMakeFiles/libc.src.stdlib.memalignment.dir/memalignment.cpp.obj.d -o libc/src/stdlib/CMakeFiles/libc.src.stdlib.memalignment.dir/memalignment.cpp.obj -c /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/stdlib/memalignment.cpp /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/stdlib/memalignment.cpp:20:3: error: unknown type name 'uintptr_t' 20 | uintptr_t addr = reinterpret_cast(p); | ^ /var/lib/buildbot/fuchsia-x86_64-linux/llvm-project/libc/src/stdlib/memalignment.cpp:20:37: error: unknown type name 'uintptr_t' 20 | uintptr_t addr = reinterpret_cast(p); | ^ 2 errors generated. [231/2504] Copying CXX header __algorithm/remove_copy_if.h [232/2504] Copying CXX header __algorithm/ranges_all_of.h [233/2504] Building CXX object libc/src/stdio/baremetal/CMakeFiles/libc.src.stdio.baremetal.puts.dir/puts.cpp.obj [234/2504] Copying CXX header __algorithm/ranges_find_first_of.h [235/2504] Copying CXX header __algorithm/ranges_contains.h [236/2504] Building CXX object libc/src/stdlib/CMakeFiles/libc.src.stdlib.srand.dir/srand.cpp.obj [237/2504] Copying CXX header __atomic/check_memory_order.h [238/2504] Copying CXX header __algorithm/unique_copy.h [239/2504] Copyi
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
https://github.com/andykaylor closed https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
https://github.com/razvanlupusoru approved this pull request. Thank you! Nice work! https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
erichkeane wrote: > @razvanlupusoru and @erichkeane Are you OK with committing this now? I am if @razvanlupusoru is. It'll probably take me a pretty decent amount of time to figure out if this is good enough for my uses, so I'd rather have it done now and fixup later if necessary. https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
andykaylor wrote: @razvanlupusoru and @erichkeane Are you OK with committing this now? https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,364 @@ +//===--===// +// +// 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 +// +//===--===// +// +// Unit tests for CIR implementation of OpenACC's PointertLikeType interface +// +//===--===// + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "mlir/IR/BuiltinTypes.h" +#include "mlir/IR/Diagnostics.h" +#include "mlir/IR/MLIRContext.h" +#include "mlir/IR/Value.h" +#include "clang/CIR/Dialect/Builder/CIRBaseBuilder.h" +#include "clang/CIR/Dialect/IR/CIRDialect.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" +#include "clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h" +#include "clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h" +#include "gtest/gtest.h" + +using namespace mlir; +using namespace cir; + +//===--===// +// Test Fixture +//===--===// + +class CIROpenACCPointerLikeTest : public ::testing::Test { +protected: + CIROpenACCPointerLikeTest() : b(&context), loc(UnknownLoc::get(&context)) { +context.loadDialect(); +context.loadDialect(); + +// Register extension to integrate CIR types with OpenACC. +mlir::DialectRegistry registry; +cir::acc::registerOpenACCExtensions(registry); +context.appendDialectRegistry(registry); + } + + MLIRContext context; + OpBuilder b; + Location loc; + llvm::StringMap recordNames; + + mlir::IntegerAttr getAlignOne(mlir::MLIRContext *ctx) { +// Note that mlir::IntegerType is used instead of cir::IntType here +// because we don't need sign information for this to be useful, so keep +// it simple. +clang::CharUnits align = clang::CharUnits::One(); +return mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 64), + align.getQuantity()); + } + + mlir::StringAttr getUniqueRecordName(const std::string &baseName) { +auto it = recordNames.find(baseName); +if (it == recordNames.end()) { + recordNames[baseName] = 0; + return b.getStringAttr(baseName); +} + +return b.getStringAttr(baseName + "." + + std::to_string(recordNames[baseName]++)); + } + + // General handler for types without a specific test + void testSingleType(mlir::Type ty, + mlir::acc::VariableTypeCategory expectedTypeCategory) { +mlir::Type ptrTy = cir::PointerType::get(ty); + +// cir::PointerType should be castable to acc::PointerLikeType +auto pltTy = dyn_cast_if_present(ptrTy); +ASSERT_NE(pltTy, nullptr); + +EXPECT_EQ(pltTy.getElementType(), ty); + +OwningOpRef varPtrOp = +b.create(loc, ptrTy, ty, "", getAlignOne(&context)); + +mlir::Value val = varPtrOp.get(); +mlir::acc::VariableTypeCategory typeCategory = pltTy.getPointeeTypeCategory( +cast>(val), +mlir::acc::getVarType(varPtrOp.get())); + +EXPECT_EQ(typeCategory, expectedTypeCategory); + } + + void testScalarType(mlir::Type ty) { +testSingleType(ty, mlir::acc::VariableTypeCategory::scalar); + } + + void testNonScalarType(mlir::Type ty) { +testSingleType(ty, mlir::acc::VariableTypeCategory::nonscalar); + } + + void testUncategorizedType(mlir::Type ty) { +testSingleType(ty, mlir::acc::VariableTypeCategory::uncategorized); + } + + void testArrayType(mlir::Type ty) { +// Build the array pointer type. +mlir::Type arrTy = cir::ArrayType::get(ty, 10); +mlir::Type ptrTy = cir::PointerType::get(arrTy); + +// Verify that the pointer points to the array type.. +auto pltTy = dyn_cast_if_present(ptrTy); +ASSERT_NE(pltTy, nullptr); +EXPECT_EQ(pltTy.getElementType(), arrTy); + +// Create an alloca for the array +OwningOpRef varPtrOp = +b.create(loc, ptrTy, arrTy, "", getAlignOne(&context)); + +// Verify that the type category is array. +mlir::Value val = varPtrOp.get(); +mlir::acc::VariableTypeCategory typeCategory = pltTy.getPointeeTypeCategory( +cast>(val), +mlir::acc::getVarType(varPtrOp.get())); +EXPECT_EQ(typeCategory, mlir::acc::VariableTypeCategory::array); + +// Create an array-to-pointer decay cast. +mlir::Type ptrToElemTy = cir::PointerType::get(ty); +OwningOpRef decayPtr = b.create( +loc, ptrToElemTy, cir::CastKind::array_to_ptrdecay, val); +mlir::Value decayVal = decayPtr.get(); + +// Verify that we still get the expected element type. +auto decayPltTy = +dyn_cast_if_present(decayVal.getType()); +ASSERT_NE(decayPltTy, nullptr); +EXPECT_EQ(decayPltTy.getElementType(), ty); + +// Veri
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,364 @@ +//===--===// +// +// 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 +// +//===--===// +// +// Unit tests for CIR implementation of OpenACC's PointertLikeType interface +// +//===--===// + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "mlir/IR/BuiltinTypes.h" +#include "mlir/IR/Diagnostics.h" +#include "mlir/IR/MLIRContext.h" +#include "mlir/IR/Value.h" +#include "clang/CIR/Dialect/Builder/CIRBaseBuilder.h" +#include "clang/CIR/Dialect/IR/CIRDialect.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" +#include "clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h" +#include "clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h" +#include "gtest/gtest.h" + +using namespace mlir; +using namespace cir; + +//===--===// +// Test Fixture +//===--===// + +class CIROpenACCPointerLikeTest : public ::testing::Test { +protected: + CIROpenACCPointerLikeTest() : b(&context), loc(UnknownLoc::get(&context)) { +context.loadDialect(); +context.loadDialect(); + +// Register extension to integrate CIR types with OpenACC. +mlir::DialectRegistry registry; +cir::acc::registerOpenACCExtensions(registry); +context.appendDialectRegistry(registry); + } + + MLIRContext context; + OpBuilder b; + Location loc; + llvm::StringMap recordNames; + + mlir::IntegerAttr getAlignOne(mlir::MLIRContext *ctx) { +// Note that mlir::IntegerType is used instead of cir::IntType here +// because we don't need sign information for this to be useful, so keep +// it simple. +clang::CharUnits align = clang::CharUnits::One(); +return mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 64), + align.getQuantity()); + } + + mlir::StringAttr getUniqueRecordName(const std::string &baseName) { +auto it = recordNames.find(baseName); +if (it == recordNames.end()) { + recordNames[baseName] = 0; + return b.getStringAttr(baseName); +} + +return b.getStringAttr(baseName + "." + + std::to_string(recordNames[baseName]++)); + } + + // General handler for types without a specific test + void testSingleType(mlir::Type ty, + mlir::acc::VariableTypeCategory expectedTypeCategory) { +mlir::Type ptrTy = cir::PointerType::get(ty); + +// cir::PointerType should be castable to acc::PointerLikeType +auto pltTy = dyn_cast_if_present(ptrTy); +ASSERT_NE(pltTy, nullptr); + +EXPECT_EQ(pltTy.getElementType(), ty); + +OwningOpRef varPtrOp = +b.create(loc, ptrTy, ty, "", getAlignOne(&context)); + +mlir::Value val = varPtrOp.get(); +mlir::acc::VariableTypeCategory typeCategory = pltTy.getPointeeTypeCategory( +cast>(val), +mlir::acc::getVarType(varPtrOp.get())); + +EXPECT_EQ(typeCategory, expectedTypeCategory); + } + + void testScalarType(mlir::Type ty) { +testSingleType(ty, mlir::acc::VariableTypeCategory::scalar); + } + + void testNonScalarType(mlir::Type ty) { +testSingleType(ty, mlir::acc::VariableTypeCategory::nonscalar); + } + + void testUncategorizedType(mlir::Type ty) { +testSingleType(ty, mlir::acc::VariableTypeCategory::uncategorized); + } + + void testArrayType(mlir::Type ty) { +// Build the array pointer type. +mlir::Type arrTy = cir::ArrayType::get(ty, 10); +mlir::Type ptrTy = cir::PointerType::get(arrTy); + +// Verify that the pointer points to the array type.. +auto pltTy = dyn_cast_if_present(ptrTy); +ASSERT_NE(pltTy, nullptr); +EXPECT_EQ(pltTy.getElementType(), arrTy); + +// Create an alloca for the array +OwningOpRef varPtrOp = +b.create(loc, ptrTy, arrTy, "", getAlignOne(&context)); + +// Verify that the type category is array. +mlir::Value val = varPtrOp.get(); +mlir::acc::VariableTypeCategory typeCategory = pltTy.getPointeeTypeCategory( +cast>(val), +mlir::acc::getVarType(varPtrOp.get())); +EXPECT_EQ(typeCategory, mlir::acc::VariableTypeCategory::array); + +// Create an array-to-pointer decay cast. +mlir::Type ptrToElemTy = cir::PointerType::get(ty); +OwningOpRef decayPtr = b.create( +loc, ptrToElemTy, cir::CastKind::array_to_ptrdecay, val); +mlir::Value decayVal = decayPtr.get(); + +// Verify that we still get the expected element type. +auto decayPltTy = +dyn_cast_if_present(decayVal.getType()); +ASSERT_NE(decayPltTy, nullptr); +EXPECT_EQ(decayPltTy.getElementType(), ty); + +// Veri
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
https://github.com/andykaylor updated https://github.com/llvm/llvm-project/pull/139768 Rate limit · GitHub body { background-color: #f6f8fa; color: #24292e; font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; font-size: 14px; line-height: 1.5; margin: 0; } .container { margin: 50px auto; max-width: 600px; text-align: center; padding: 0 24px; } a { color: #0366d6; text-decoration: none; } a:hover { text-decoration: underline; } h1 { line-height: 60px; font-size: 48px; font-weight: 300; margin: 0px; text-shadow: 0 1px 0 #fff; } p { color: rgba(0, 0, 0, 0.5); margin: 20px 0 40px; } ul { list-style: none; margin: 25px 0; padding: 0; } li { display: table-cell; font-weight: bold; width: 1%; } .logo { display: inline-block; margin-top: 35px; } .logo-img-2x { display: none; } @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and ( min--moz-device-pixel-ratio: 2), only screen and ( -o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { .logo-img-1x { display: none; } .logo-img-2x { display: inline-block; } } #suggestions { margin-top: 35px; color: #ccc; } #suggestions a { color: #66; font-weight: 200; font-size: 14px; margin: 0 10px; } Whoa there! You have exceeded a secondary rate limit. Please wait a few minutes before you try again; in some cases this may take up to an hour. https://support.github.com/contact";>Contact Support — https://githubstatus.com";>GitHub Status — https://twitter.com/githubstatus";>@githubstatus ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
https://github.com/xlauko approved this pull request. LGTM https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,36 @@ +//===--===// +// +// 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 +// +//===--===// +// +// This file contains external dialect interfaces for CIR. +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H +#define CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" andykaylor wrote: I guess nothing here. I probably thought I was going to need it and added it proactively. https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,160 @@ +//===--===// +// +// 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 +// +//===--===// +// +// Unit tests for CIR implementation of OpenACC's PointertLikeType interface +// +//===--===// + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "mlir/IR/BuiltinTypes.h" +#include "mlir/IR/Diagnostics.h" +#include "mlir/IR/MLIRContext.h" +#include "mlir/IR/Value.h" +#include "clang/CIR/Dialect/Builder/CIRBaseBuilder.h" +#include "clang/CIR/Dialect/IR/CIRDialect.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" +#include "clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h" +#include "clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h" +#include "gtest/gtest.h" + +using namespace mlir; +using namespace cir; + +//===--===// +// Test Fixture +//===--===// + +class CIROpenACCPointerLikeTest : public ::testing::Test { +protected: + CIROpenACCPointerLikeTest() : b(&context), loc(UnknownLoc::get(&context)) { +context.loadDialect(); +context.loadDialect(); + +// Register extension to integrate CIR types with OpenACC. +mlir::DialectRegistry registry; +cir::acc::registerOpenACCExtensions(registry); +context.appendDialectRegistry(registry); + } + + MLIRContext context; + OpBuilder b; + Location loc; + + mlir::IntegerAttr getSizeFromCharUnits(mlir::MLIRContext *ctx, + clang::CharUnits size) { +// Note that mlir::IntegerType is used instead of cir::IntType here +// because we don't need sign information for this to be useful, so keep +// it simple. +return mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 64), + size.getQuantity()); + } + + // General handler for types without a specific test + void testElementType(mlir::Type ty) { +mlir::Type ptrTy = cir::PointerType::get(ty); + +// cir::PointerType should be castable to acc::PointerLikeType +auto pltTy = dyn_cast_if_present(ptrTy); +ASSERT_NE(pltTy, nullptr); + +EXPECT_EQ(pltTy.getElementType(), ty); + +OwningOpRef varPtrOp = b.create( andykaylor wrote: The purpose here is to make have it automatically delete the op on return from the function. https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,160 @@ +//===--===// +// +// 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 +// +//===--===// +// +// Unit tests for CIR implementation of OpenACC's PointertLikeType interface +// +//===--===// + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "mlir/IR/BuiltinTypes.h" +#include "mlir/IR/Diagnostics.h" +#include "mlir/IR/MLIRContext.h" +#include "mlir/IR/Value.h" +#include "clang/CIR/Dialect/Builder/CIRBaseBuilder.h" +#include "clang/CIR/Dialect/IR/CIRDialect.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" +#include "clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h" +#include "clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h" +#include "gtest/gtest.h" + +using namespace mlir; +using namespace cir; + +//===--===// +// Test Fixture +//===--===// + +class CIROpenACCPointerLikeTest : public ::testing::Test { +protected: + CIROpenACCPointerLikeTest() : b(&context), loc(UnknownLoc::get(&context)) { +context.loadDialect(); +context.loadDialect(); + +// Register extension to integrate CIR types with OpenACC. +mlir::DialectRegistry registry; +cir::acc::registerOpenACCExtensions(registry); +context.appendDialectRegistry(registry); + } + + MLIRContext context; + OpBuilder b; + Location loc; + + mlir::IntegerAttr getSizeFromCharUnits(mlir::MLIRContext *ctx, + clang::CharUnits size) { +// Note that mlir::IntegerType is used instead of cir::IntType here +// because we don't need sign information for this to be useful, so keep +// it simple. +return mlir::IntegerAttr::get(mlir::IntegerType::get(ctx, 64), + size.getQuantity()); + } + + // General handler for types without a specific test + void testElementType(mlir::Type ty) { +mlir::Type ptrTy = cir::PointerType::get(ty); + +// cir::PointerType should be castable to acc::PointerLikeType +auto pltTy = dyn_cast_if_present(ptrTy); +ASSERT_NE(pltTy, nullptr); + +EXPECT_EQ(pltTy.getElementType(), ty); + +OwningOpRef varPtrOp = b.create( bcardosolopes wrote: Do you really need a `OwningOpRef` here? Thought those were only for top level operations https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
https://github.com/bcardosolopes approved this pull request. Neat unit tests! LGTM https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
razvanlupusoru wrote: I just had one concern - otherwise looks great! Nice job! https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,36 @@ +//===--===// +// +// 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 +// +//===--===// +// +// This file contains external dialect interfaces for CIR. +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H +#define CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" + +namespace cir::acc { + +template +struct OpenACCPointerLikeModel razvanlupusoru wrote: Maybe this clarifies it a bit? https://mlir.llvm.org/docs/Interfaces/#external-models-for-attribute-operation-and-type-interfaces https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,36 @@ +//===--===// +// +// 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 +// +//===--===// +// +// This file contains external dialect interfaces for CIR. +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H +#define CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" erichkeane wrote: What are we using from this include? https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,41 @@ +//===--===// +// +// 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 +// +//===--===// +// +// Implementation of external dialect interfaces for CIR. +// +//===--===// + +#include "clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h" + +namespace cir::acc { + +template <> +mlir::acc::VariableTypeCategory +OpenACCPointerLikeModel::getPointeeTypeCategory( +mlir::Type pointer, mlir::TypedValue varPtr, +mlir::Type varType) const { + mlir::Type eleTy = mlir::cast(pointer).getPointee(); + + if (auto mappableTy = mlir::dyn_cast(eleTy)) +return mappableTy.getTypeCategory(varPtr); + + if (isAnyIntegerOrFloatingPointType(eleTy) || + mlir::isa(eleTy) || mlir::isa(eleTy)) +return mlir::acc::VariableTypeCategory::scalar; razvanlupusoru wrote: Seems the CIR type system allows computation of interior pointers: https://godbolt.org/z/aPn1j5a69 Which means that scalar categorization might capture things which it shouldn't. More specifically, "a member of a composite variable" is not considered a "scalar" in OpenACC terminology - and the CIR type system by itself does not provide the appropriate features to distinguish this. Here is how we dealt with this case in FIR which allows the same: https://github.com/llvm/llvm-project/blob/main/flang/lib/Optimizer/OpenACC/FIROpenACCTypeInterfaces.cpp#L386 https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
https://github.com/erichkeane commented: I am not a good reviewer for this, hopefully @razvanlupusoru and @clementval can affirm this is right. https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
https://github.com/erichkeane edited https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
@@ -0,0 +1,36 @@ +//===--===// +// +// 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 +// +//===--===// +// +// This file contains external dialect interfaces for CIR. +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H +#define CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" + +namespace cir::acc { + +template +struct OpenACCPointerLikeModel erichkeane wrote: Silly question perhaps, why is this not part of MLIR? It doesn't seem to refer to CIR at all? Or am I missing something? https://github.com/llvm/llvm-project/pull/139768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
llvmbot wrote: @llvm/pr-subscribers-clangir Author: Andy Kaylor (andykaylor) Changes This adds code to attach the OpenACC PointerLikeType interface to cir::PointerType, along with a unit test for the interface. --- Full diff: https://github.com/llvm/llvm-project/pull/139768.diff 11 Files Affected: - (added) clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h (+36) - (added) clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h (+22) - (modified) clang/lib/CIR/CodeGen/CIRGenerator.cpp (+7) - (modified) clang/lib/CIR/CodeGen/CMakeLists.txt (+1) - (modified) clang/lib/CIR/Dialect/CMakeLists.txt (+1) - (added) clang/lib/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.cpp (+41) - (added) clang/lib/CIR/Dialect/OpenACC/CMakeLists.txt (+10) - (added) clang/lib/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.cpp (+27) - (added) clang/unittests/CIR/CMakeLists.txt (+11) - (added) clang/unittests/CIR/PointerLikeTest.cpp (+160) - (modified) clang/unittests/CMakeLists.txt (+10-1) ``diff diff --git a/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h b/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h new file mode 100644 index 0..eccb6838a491f --- /dev/null +++ b/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h @@ -0,0 +1,36 @@ +//===--===// +// +// 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 +// +//===--===// +// +// This file contains external dialect interfaces for CIR. +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H +#define CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" + +namespace cir::acc { + +template +struct OpenACCPointerLikeModel +: public mlir::acc::PointerLikeType::ExternalModel< + OpenACCPointerLikeModel, T> { + mlir::Type getElementType(mlir::Type pointer) const { +return mlir::cast(pointer).getPointee(); + } + mlir::acc::VariableTypeCategory + getPointeeTypeCategory(mlir::Type pointer, + mlir::TypedValue varPtr, + mlir::Type varType) const; +}; + +} // namespace cir::acc + +#endif // CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H diff --git a/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h b/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h new file mode 100644 index 0..13780a01ea1bb --- /dev/null +++ b/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h @@ -0,0 +1,22 @@ +//===--===// +// +// 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 +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H +#define CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H + +namespace mlir { +class DialectRegistry; +} // namespace mlir + +namespace cir::acc { + +void registerOpenACCExtensions(mlir::DialectRegistry ®istry); + +} // namespace cir::acc + +#endif // CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H diff --git a/clang/lib/CIR/CodeGen/CIRGenerator.cpp b/clang/lib/CIR/CodeGen/CIRGenerator.cpp index aa3864deb733c..40252ffecfba1 100644 --- a/clang/lib/CIR/CodeGen/CIRGenerator.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenerator.cpp @@ -18,6 +18,7 @@ #include "clang/AST/DeclGroup.h" #include "clang/CIR/CIRGenerator.h" #include "clang/CIR/Dialect/IR/CIRDialect.h" +#include "clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h" using namespace cir; using namespace clang; @@ -38,6 +39,12 @@ void CIRGenerator::Initialize(ASTContext &astContext) { mlirContext = std::make_unique(); mlirContext->loadDialect(); mlirContext->getOrLoadDialect(); + + // Register extensions to integrate CIR types with OpenACC. + mlir::DialectRegistry registry; + cir::acc::registerOpenACCExtensions(registry); + mlirContext->appendDialectRegistry(registry); + cgm = std::make_unique( *mlirContext.get(), astContext, codeGenOpts, diags); } diff --git a/clang/lib/CIR/CodeGen/CMakeLists.txt b/clang/lib/CIR/CodeGen/CMakeLists.txt index 7a701c3c0b82b..8f5796e59d3bb 100644 --- a/clang/lib/CIR/CodeGen/CMakeLists.txt +++ b/clang/lib/CIR/CodeGen/CMakeLists.txt @@ -35,6 +35,7 @@ add_clang_library(clangCIR clangBasic clangLex ${dialect_libs} + CIROpenACCSupport
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
llvmbot wrote: @llvm/pr-subscribers-clang Author: Andy Kaylor (andykaylor) Changes This adds code to attach the OpenACC PointerLikeType interface to cir::PointerType, along with a unit test for the interface. --- Full diff: https://github.com/llvm/llvm-project/pull/139768.diff 11 Files Affected: - (added) clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h (+36) - (added) clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h (+22) - (modified) clang/lib/CIR/CodeGen/CIRGenerator.cpp (+7) - (modified) clang/lib/CIR/CodeGen/CMakeLists.txt (+1) - (modified) clang/lib/CIR/Dialect/CMakeLists.txt (+1) - (added) clang/lib/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.cpp (+41) - (added) clang/lib/CIR/Dialect/OpenACC/CMakeLists.txt (+10) - (added) clang/lib/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.cpp (+27) - (added) clang/unittests/CIR/CMakeLists.txt (+11) - (added) clang/unittests/CIR/PointerLikeTest.cpp (+160) - (modified) clang/unittests/CMakeLists.txt (+10-1) ``diff diff --git a/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h b/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h new file mode 100644 index 0..eccb6838a491f --- /dev/null +++ b/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h @@ -0,0 +1,36 @@ +//===--===// +// +// 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 +// +//===--===// +// +// This file contains external dialect interfaces for CIR. +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H +#define CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" + +namespace cir::acc { + +template +struct OpenACCPointerLikeModel +: public mlir::acc::PointerLikeType::ExternalModel< + OpenACCPointerLikeModel, T> { + mlir::Type getElementType(mlir::Type pointer) const { +return mlir::cast(pointer).getPointee(); + } + mlir::acc::VariableTypeCategory + getPointeeTypeCategory(mlir::Type pointer, + mlir::TypedValue varPtr, + mlir::Type varType) const; +}; + +} // namespace cir::acc + +#endif // CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H diff --git a/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h b/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h new file mode 100644 index 0..13780a01ea1bb --- /dev/null +++ b/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h @@ -0,0 +1,22 @@ +//===--===// +// +// 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 +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H +#define CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H + +namespace mlir { +class DialectRegistry; +} // namespace mlir + +namespace cir::acc { + +void registerOpenACCExtensions(mlir::DialectRegistry ®istry); + +} // namespace cir::acc + +#endif // CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H diff --git a/clang/lib/CIR/CodeGen/CIRGenerator.cpp b/clang/lib/CIR/CodeGen/CIRGenerator.cpp index aa3864deb733c..40252ffecfba1 100644 --- a/clang/lib/CIR/CodeGen/CIRGenerator.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenerator.cpp @@ -18,6 +18,7 @@ #include "clang/AST/DeclGroup.h" #include "clang/CIR/CIRGenerator.h" #include "clang/CIR/Dialect/IR/CIRDialect.h" +#include "clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h" using namespace cir; using namespace clang; @@ -38,6 +39,12 @@ void CIRGenerator::Initialize(ASTContext &astContext) { mlirContext = std::make_unique(); mlirContext->loadDialect(); mlirContext->getOrLoadDialect(); + + // Register extensions to integrate CIR types with OpenACC. + mlir::DialectRegistry registry; + cir::acc::registerOpenACCExtensions(registry); + mlirContext->appendDialectRegistry(registry); + cgm = std::make_unique( *mlirContext.get(), astContext, codeGenOpts, diags); } diff --git a/clang/lib/CIR/CodeGen/CMakeLists.txt b/clang/lib/CIR/CodeGen/CMakeLists.txt index 7a701c3c0b82b..8f5796e59d3bb 100644 --- a/clang/lib/CIR/CodeGen/CMakeLists.txt +++ b/clang/lib/CIR/CodeGen/CMakeLists.txt @@ -35,6 +35,7 @@ add_clang_library(clangCIR clangBasic clangLex ${dialect_libs} + CIROpenACCSupport
[clang] [CIR] Add PointerLikeType interface support for cir::PointerType (PR #139768)
https://github.com/andykaylor created https://github.com/llvm/llvm-project/pull/139768 This adds code to attach the OpenACC PointerLikeType interface to cir::PointerType, along with a unit test for the interface. >From 6edf90c7beca34320ae53e3984f68e001aee6498 Mon Sep 17 00:00:00 2001 From: Andy Kaylor Date: Tue, 13 May 2025 09:51:04 -0700 Subject: [PATCH] [CIR] Add PointerLikeType interface support for cir::PointerType This adds code to attach the OpenACC PointerLikeType interface to cir::PointerType, along with a unit test for the interface. --- .../OpenACC/CIROpenACCTypeInterfaces.h| 36 .../OpenACC/RegisterOpenACCExtensions.h | 22 +++ clang/lib/CIR/CodeGen/CIRGenerator.cpp| 7 + clang/lib/CIR/CodeGen/CMakeLists.txt | 1 + clang/lib/CIR/Dialect/CMakeLists.txt | 1 + .../OpenACC/CIROpenACCTypeInterfaces.cpp | 41 + clang/lib/CIR/Dialect/OpenACC/CMakeLists.txt | 10 ++ .../OpenACC/RegisterOpenACCExtensions.cpp | 27 +++ clang/unittests/CIR/CMakeLists.txt| 11 ++ clang/unittests/CIR/PointerLikeTest.cpp | 160 ++ clang/unittests/CMakeLists.txt| 11 +- 11 files changed, 326 insertions(+), 1 deletion(-) create mode 100644 clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h create mode 100644 clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h create mode 100644 clang/lib/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.cpp create mode 100644 clang/lib/CIR/Dialect/OpenACC/CMakeLists.txt create mode 100644 clang/lib/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.cpp create mode 100644 clang/unittests/CIR/CMakeLists.txt create mode 100644 clang/unittests/CIR/PointerLikeTest.cpp diff --git a/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h b/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h new file mode 100644 index 0..eccb6838a491f --- /dev/null +++ b/clang/include/clang/CIR/Dialect/OpenACC/CIROpenACCTypeInterfaces.h @@ -0,0 +1,36 @@ +//===--===// +// +// 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 +// +//===--===// +// +// This file contains external dialect interfaces for CIR. +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H +#define CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H + +#include "mlir/Dialect/OpenACC/OpenACC.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" + +namespace cir::acc { + +template +struct OpenACCPointerLikeModel +: public mlir::acc::PointerLikeType::ExternalModel< + OpenACCPointerLikeModel, T> { + mlir::Type getElementType(mlir::Type pointer) const { +return mlir::cast(pointer).getPointee(); + } + mlir::acc::VariableTypeCategory + getPointeeTypeCategory(mlir::Type pointer, + mlir::TypedValue varPtr, + mlir::Type varType) const; +}; + +} // namespace cir::acc + +#endif // CLANG_CIR_DIALECT_OPENACC_CIROPENACCTYPEINTERFACES_H diff --git a/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h b/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h new file mode 100644 index 0..13780a01ea1bb --- /dev/null +++ b/clang/include/clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h @@ -0,0 +1,22 @@ +//===--===// +// +// 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 +// +//===--===// + +#ifndef CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H +#define CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H + +namespace mlir { +class DialectRegistry; +} // namespace mlir + +namespace cir::acc { + +void registerOpenACCExtensions(mlir::DialectRegistry ®istry); + +} // namespace cir::acc + +#endif // CLANG_CIR_DIALECT_OPENACC_REGISTEROPENACCEXTENSIONS_H diff --git a/clang/lib/CIR/CodeGen/CIRGenerator.cpp b/clang/lib/CIR/CodeGen/CIRGenerator.cpp index aa3864deb733c..40252ffecfba1 100644 --- a/clang/lib/CIR/CodeGen/CIRGenerator.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenerator.cpp @@ -18,6 +18,7 @@ #include "clang/AST/DeclGroup.h" #include "clang/CIR/CIRGenerator.h" #include "clang/CIR/Dialect/IR/CIRDialect.h" +#include "clang/CIR/Dialect/OpenACC/RegisterOpenACCExtensions.h" using namespace cir; using namespace clang; @@ -38,6 +39,12 @@ void CIRGenerator::Initialize(ASTContext &astContext) { mlir