// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --version 6 // REQUIRES: amdgpu-registered-target // RUN: %clang_cc1 -fopenmp -x c -triple x86_64-unknown-unknown -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm-bc %s -o %t-ppc-host.bc // RUN: %clang_cc1 -fopenmp -x c -triple x86_64-unknown-unknown -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm %s -o - | FileCheck %s --check-prefix=HOST // RUN: %clang_cc1 -fopenmp -x c -triple amdgcn-amd-amdhsa -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --check-prefix=DEVICE //. // HOST: @__One_var = global i32 1, align 4 // HOST: @__Two_var = global i32 2, align 4 // HOST: @__Three_var = global i32 3, align 4 // HOST: @.offloading.entry_name = internal unnamed_addr constant [10 x i8] c"__Two_var\00", section ".llvm.rodata.offloading", align 1 // HOST: @.offloading.entry.__Two_var = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 0, ptr @__Two_var, ptr @.offloading.entry_name, i64 4, i64 0, ptr null }, section "llvm_offload_entries", align 8 // HOST: @.offloading.entry_name.1 = internal unnamed_addr constant [12 x i8] c"__Three_var\00", section ".llvm.rodata.offloading", align 1 // HOST: @.offloading.entry.__Three_var = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 1, i32 0, ptr @__Three_var, ptr @.offloading.entry_name.1, i64 4, i64 0, ptr null }, section "llvm_offload_entries", align 8 // HOST: @One = weak alias i32 (), ptr @__One // HOST: @One_ = alias i32 (), ptr @__One // HOST: @One_var = weak alias i32, ptr @__One_var // HOST: @One_var_ = alias i32, ptr @__One_var // HOST: @Two = weak alias i32 (), ptr @__Two // HOST: @Two_ = alias i32 (), ptr @__Two // HOST: @Two_var = weak alias i32, ptr @__Two_var // HOST: @Two_var_ = alias i32, ptr @__Two_var // HOST: @Three = weak alias i32 (), ptr @__Three // HOST: @Three_ = alias i32 (), ptr @__Three // HOST: @Three_var = weak alias i32, ptr @__Three_var // HOST: @Three_var_ = alias i32, ptr @__Three_var //. // DEVICE: @__Two_var = addrspace(1) global i32 2, align 4 // DEVICE: @__Three_var = addrspace(1) global i32 3, align 4 // DEVICE: @Two = weak hidden alias i32 (), ptr @__Two // DEVICE: @Two_ = hidden alias i32 (), ptr @__Two // DEVICE: @Two_var = weak alias i32, addrspacecast (ptr addrspace(1) @__Two_var to ptr) // DEVICE: @Two_var_ = alias i32, addrspacecast (ptr addrspace(1) @__Two_var to ptr) // DEVICE: @Three = weak hidden alias i32 (), ptr @__Three // DEVICE: @Three.1 = weak hidden alias i32 (), ptr @__Three // DEVICE: @Three_ = hidden alias i32 (), ptr @__Three // DEVICE: @Three_.2 = hidden alias i32 (), ptr @__Three // DEVICE: @Three_var = weak alias i32, addrspacecast (ptr addrspace(1) @__Three_var to ptr) // DEVICE: @Three_var_ = alias i32, addrspacecast (ptr addrspace(1) @__Three_var to ptr) //. // HOST-LABEL: define dso_local i32 @__One( // HOST-SAME: ) #[[ATTR0:[0-9]+]] { // HOST-NEXT: [[ENTRY:.*:]] // HOST-NEXT: ret i32 1 // int __One(void) { return 1; } int One(void) __attribute__ ((weak, alias("__One"))); int One_(void) __attribute__ ((alias("__One"))); int __One_var = 1; extern int __attribute__((weak, alias("__One_var"))) One_var; extern int __attribute__((alias("__One_var"))) One_var_; #pragma omp declare target // HOST-LABEL: define dso_local i32 @__Two( // HOST-SAME: ) #[[ATTR0]] { // HOST-NEXT: [[ENTRY:.*:]] // HOST-NEXT: ret i32 2 // // DEVICE-LABEL: define hidden i32 @__Two( // DEVICE-SAME: ) #[[ATTR0:[0-9]+]] { // DEVICE-NEXT: [[ENTRY:.*:]] // DEVICE-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5) // DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr // DEVICE-NEXT: ret i32 2 // int __Two(void) { return 2; } int Two(void) __attribute__ ((weak, alias("__Two"))); int Two_(void) __attribute__ ((alias("__Two"))); int __Two_var = 2; extern int __attribute__((weak, alias("__Two_var"))) Two_var; extern int __attribute__((alias("__Two_var"))) Two_var_; #pragma omp end declare target #pragma omp declare target // HOST-LABEL: define dso_local i32 @__Three( // HOST-SAME: ) #[[ATTR0]] { // HOST-NEXT: [[ENTRY:.*:]] // HOST-NEXT: ret i32 3 // // DEVICE-LABEL: define hidden i32 @__Three( // DEVICE-SAME: ) #[[ATTR0]] { // DEVICE-NEXT: [[ENTRY:.*:]] // DEVICE-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5) // DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr // DEVICE-NEXT: ret i32 3 // int __Three(void) { return 3; } int __Three_var = 3; #pragma omp end declare target int Three(void) __attribute__ ((weak, alias("__Three"))); int Three_(void) __attribute__ ((alias("__Three"))); extern int __attribute__((weak, alias("__Three_var"))) Three_var; extern int __attribute__((alias("__Three_var"))) Three_var_; //. // HOST: [[META0:![0-9]+]] = !{i32 1, !"__Two_var", i32 0, i32 0} // HOST: [[META1:![0-9]+]] = !{i32 1, !"__Three_var", i32 0, i32 1} //. // DEVICE: [[META0:![0-9]+]] = !{i32 1, !"__Two_var", i32 0, i32 0} // DEVICE: [[META1:![0-9]+]] = !{i32 1, !"__Three_var", i32 0, i32 1} //.