blob: 725a78016e50e6b56957fabf08a27e39148ad701 [file]
// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa \
// RUN: -fclangir -emit-cir %s -o %t.cir
// RUN: FileCheck --input-file=%t.cir %s --check-prefix=CIR
// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa \
// RUN: -fclangir -emit-llvm %s -o %t.ll
// RUN: FileCheck --input-file=%t.ll %s --check-prefix=LLVM
// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa \
// RUN: -emit-llvm %s -o %t.ll
// RUN: FileCheck --input-file=%t.ll %s --check-prefix=OGCG
void foo() {
const char fmt[] = "hello";
const char *tmp = fmt;
while (*tmp++)
;
}
// CIR-LABEL: cir.func{{.*}} @_Z3foov()
// CIR: %[[FMT_RAW:.*]] = cir.alloca !cir.array<!s8i x 6>, !cir.ptr<!cir.array<!s8i x 6>, target_address_space(5)>, ["fmt"
// CIR-NEXT: %[[TMP_RAW:.*]] = cir.alloca !cir.ptr<!s8i>, !cir.ptr<!cir.ptr<!s8i>, target_address_space(5)>, ["tmp"
// CIR-DAG: %[[FMT:.*]] = cir.cast address_space %[[FMT_RAW]] : !cir.ptr<!cir.array<!s8i x 6>, target_address_space(5)> -> !cir.ptr<!cir.array<!s8i x 6>>
// CIR-DAG: %[[TMP:.*]] = cir.cast address_space %[[TMP_RAW]] : !cir.ptr<!cir.ptr<!s8i>, target_address_space(5)> -> !cir.ptr<!cir.ptr<!s8i>>
// CIR: %[[DECAY:.*]] = cir.cast array_to_ptrdecay %[[FMT]] : !cir.ptr<!cir.array<!s8i x 6>> -> !cir.ptr<!s8i>
// CIR: cir.store{{.*}} %[[DECAY]], %[[TMP]] : !cir.ptr<!s8i>, !cir.ptr<!cir.ptr<!s8i>>
// LLVM-LABEL: define{{.*}} void @_Z3foov()
// LLVM: %[[FMT:.*]] = alloca [6 x i8], i64 1, align 1, addrspace(5)
// LLVM-NEXT: %[[TMP:.*]] = alloca ptr, i64 1, align 8, addrspace(5)
// LLVM-DAG: %[[FMT_CAST:.*]] = addrspacecast ptr addrspace(5) %[[FMT]] to ptr
// LLVM-DAG: %[[TMP_CAST:.*]] = addrspacecast ptr addrspace(5) %[[TMP]] to ptr
// LLVM: %[[DECAY:.*]] = getelementptr {{.*}} ptr %[[FMT_CAST]],
// LLVM: store ptr %[[DECAY]], ptr %[[TMP_CAST]], align 8
// OGCG-LABEL: define{{.*}} void @_Z3foov()
// OGCG: %[[FMT:.*]] = alloca [6 x i8], align 1, addrspace(5)
// OGCG-NEXT: %[[TMP:.*]] = alloca ptr, align 8, addrspace(5)
// OGCG-NEXT: %[[FMT_CAST:.*]] = addrspacecast ptr addrspace(5) %[[FMT]] to ptr
// OGCG-NEXT: %[[TMP_CAST:.*]] = addrspacecast ptr addrspace(5) %[[TMP]] to ptr
// OGCG: %[[DECAY:.*]] = getelementptr inbounds [6 x i8], ptr %[[FMT_CAST]], i64 0, i64 0
// OGCG: store ptr %[[DECAY]], ptr %[[TMP_CAST]], align 8