CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
93 lines
5.4 KiB
C++
93 lines
5.4 KiB
C++
// RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir
|
|
// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR
|
|
// RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t.ll
|
|
// RUN: FileCheck --input-file=%t.ll %s -check-prefix=LLVM
|
|
// RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll
|
|
// RUN: FileCheck --input-file=%t.ll %s -check-prefix=OGCG
|
|
|
|
using pi1_t = int __attribute__((address_space(1))) *;
|
|
using pi2_t = int __attribute__((address_space(2))) *;
|
|
|
|
using ri1_t = int __attribute__((address_space(1))) &;
|
|
using ri2_t = int __attribute__((address_space(2))) &;
|
|
|
|
// CIR: cir.func {{.*}} @{{.*test_ptr.*}}
|
|
// LLVM: define dso_local void @{{.*test_ptr.*}}
|
|
// OGCG: define dso_local void @{{.*test_ptr.*}}
|
|
void test_ptr() {
|
|
pi1_t ptr1;
|
|
pi2_t ptr2 = (pi2_t)ptr1;
|
|
// CIR: %[[#PTR1:]] = cir.load{{.*}} %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32i, target_address_space(1)>>, !cir.ptr<!s32i, target_address_space(1)>
|
|
// CIR-NEXT: %[[#CAST:]] = cir.cast address_space %[[#PTR1]] : !cir.ptr<!s32i, target_address_space(1)> -> !cir.ptr<!s32i, target_address_space(2)>
|
|
// CIR-NEXT: cir.store{{.*}} %[[#CAST]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(2)>, !cir.ptr<!cir.ptr<!s32i, target_address_space(2)>>
|
|
|
|
// LLVM: %[[#PTR1:]] = load ptr addrspace(1), ptr %{{.*}}
|
|
// LLVM-NEXT: %[[#CAST:]] = addrspacecast ptr addrspace(1) %[[#PTR1]] to ptr addrspace(2)
|
|
// LLVM-NEXT: store ptr addrspace(2) %[[#CAST]], ptr %{{.*}}
|
|
|
|
// OGCG: %{{.*}} = load ptr addrspace(1), ptr %{{.*}}
|
|
// OGCG-NEXT: %{{.*}} = addrspacecast ptr addrspace(1) %{{.*}} to ptr addrspace(2)
|
|
// OGCG-NEXT: store ptr addrspace(2) %{{.*}}, ptr %{{.*}}
|
|
}
|
|
|
|
// CIR: cir.func {{.*}} @{{.*test_ref.*}}
|
|
// LLVM: define dso_local void @{{.*test_ref.*}}
|
|
// OGCG: define dso_local void @{{.*test_ref.*}}
|
|
void test_ref() {
|
|
pi1_t ptr;
|
|
ri1_t ref1 = *ptr;
|
|
ri2_t ref2 = (ri2_t)ref1;
|
|
// CIR: %[[#DEREF:]] = cir.load deref{{.*}} %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32i, target_address_space(1)>>, !cir.ptr<!s32i, target_address_space(1)>
|
|
// CIR-NEXT: cir.store{{.*}} %[[#DEREF]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(1)>, !cir.ptr<!cir.ptr<!s32i, target_address_space(1)>>
|
|
// CIR-NEXT: %[[#REF1:]] = cir.load %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32i, target_address_space(1)>>, !cir.ptr<!s32i, target_address_space(1)>
|
|
// CIR-NEXT: %[[#CAST:]] = cir.cast address_space %[[#REF1]] : !cir.ptr<!s32i, target_address_space(1)> -> !cir.ptr<!s32i, target_address_space(2)>
|
|
// CIR-NEXT: cir.store{{.*}} %[[#CAST]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(2)>, !cir.ptr<!cir.ptr<!s32i, target_address_space(2)>>
|
|
|
|
// LLVM: %[[#DEREF:]] = load ptr addrspace(1), ptr %{{.*}}
|
|
// LLVM-NEXT: store ptr addrspace(1) %[[#DEREF]], ptr %{{.*}}
|
|
// LLVM-NEXT: %[[#REF1:]] = load ptr addrspace(1), ptr %{{.*}}
|
|
// LLVM-NEXT: %[[#CAST:]] = addrspacecast ptr addrspace(1) %[[#REF1]] to ptr addrspace(2)
|
|
// LLVM-NEXT: store ptr addrspace(2) %[[#CAST]], ptr %{{.*}}
|
|
|
|
// OGCG: %{{.*}} = load ptr addrspace(1), ptr %{{.*}}
|
|
// OGCG-NEXT: store ptr addrspace(1) %{{.*}}, ptr %{{.*}}
|
|
// OGCG-NEXT: %{{.*}} = load ptr addrspace(1), ptr %{{.*}}
|
|
// OGCG-NEXT: %{{.*}} = addrspacecast ptr addrspace(1) %{{.*}} to ptr addrspace(2)
|
|
// OGCG-NEXT: store ptr addrspace(2) %{{.*}}, ptr %{{.*}}
|
|
}
|
|
|
|
// CIR: cir.func {{.*}} @{{.*test_nullptr.*}}
|
|
// LLVM: define dso_local void @{{.*test_nullptr.*}}
|
|
// OGCG: define dso_local void @{{.*test_nullptr.*}}
|
|
void test_nullptr() {
|
|
constexpr pi1_t null1 = nullptr;
|
|
pi2_t ptr = (pi2_t)null1;
|
|
// CIR: %[[#NULL1:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, target_address_space(1)>
|
|
// CIR-NEXT: cir.store{{.*}} %[[#NULL1]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(1)>, !cir.ptr<!cir.ptr<!s32i, target_address_space(1)>>
|
|
// CIR-NEXT: %[[#NULL2:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, target_address_space(2)>
|
|
// CIR-NEXT: cir.store{{.*}} %[[#NULL2]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(2)>, !cir.ptr<!cir.ptr<!s32i, target_address_space(2)>>
|
|
|
|
// LLVM: store ptr addrspace(1) null, ptr %{{.*}}
|
|
// LLVM-NEXT: store ptr addrspace(2) null, ptr %{{.*}}
|
|
|
|
// OGCG: store ptr addrspace(1) null, ptr %{{.*}}
|
|
// OGCG-NEXT: store ptr addrspace(2) null, ptr %{{.*}}
|
|
}
|
|
|
|
// CIR: cir.func {{.*}} @{{.*test_side_effect.*}}
|
|
// LLVM: define dso_local void @{{.*test_side_effect.*}}
|
|
// OGCG: define dso_local void @{{.*test_side_effect.*}}
|
|
void test_side_effect(pi1_t b) {
|
|
pi2_t p = (pi2_t)(*b++, (int*)0);
|
|
// CIR: %[[#DEREF:]] = cir.load deref{{.*}} %{{[0-9]+}} : !cir.ptr<!cir.ptr<!s32i, target_address_space(1)>>, !cir.ptr<!s32i, target_address_space(1)>
|
|
// CIR: %[[#STRIDE:]] = cir.ptr_stride %[[#DEREF]], %{{[0-9]+}} : (!cir.ptr<!s32i, target_address_space(1)>, !s32i) -> !cir.ptr<!s32i, target_address_space(1)>
|
|
// CIR: %[[#NULL:]] = cir.const #cir.ptr<null> : !cir.ptr<!s32i, target_address_space(2)>
|
|
// CIR-NEXT: cir.store{{.*}} %[[#NULL]], %{{[0-9]+}} : !cir.ptr<!s32i, target_address_space(2)>, !cir.ptr<!cir.ptr<!s32i, target_address_space(2)>>
|
|
|
|
// LLVM: %{{[0-9]+}} = getelementptr {{.*}}i32, ptr addrspace(1) %{{[0-9]+}}, i{{32|64}} 1
|
|
// LLVM: store ptr addrspace(2) null, ptr %{{.*}}
|
|
|
|
// OGCG: %{{.*}} = getelementptr{{.*}} i32, ptr addrspace(1) %{{.*}}, i32 1
|
|
// OGCG: store ptr addrspace(2) null, ptr %{{.*}}
|
|
}
|