
Summary: A previous patch changed the logic to force external visibliity on declare target variables. This is because they need to be exported in the dynamic symbol table to be usable as the standard depicts. However, the logic was always setting the visibility to `protected`, which would override some symbols. For example, when calling `libc` functions for CPU offloading. This patch changes the logic to only fire if the variable has hidden visibliity to start with.
41 lines
1.5 KiB
C++
41 lines
1.5 KiB
C++
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals --prefix-filecheck-ir-name _ --global-value-regex "llvm.compiler.used" "_[0-9a-zA-Z]+A[0-9a-zA-Z]+pi[0-9a-zA-Z]+" "_[0-9a-zA-Z]+anotherPi" --version 2
|
|
// REQUIRES: amdgpu-registered-target
|
|
|
|
|
|
// Test target codegen - host bc file has to be created first.
|
|
// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc
|
|
// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-target-debug -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --check-prefix=CHECK
|
|
|
|
// expected-no-diagnostics
|
|
|
|
#ifndef HEADER
|
|
#define HEADER
|
|
|
|
#pragma omp declare target
|
|
class A {
|
|
public:
|
|
static constexpr double pi = 3.141592653589793116;
|
|
//.
|
|
// CHECK: @_ZN1A2piE = linkonce_odr constant double 0x400921FB54442D18, comdat, align 8
|
|
// CHECK: @_ZL9anotherPi = internal constant double 3.140000e+00, align 8
|
|
// CHECK: @llvm.compiler.used = appending global [2 x ptr] [ptr @"__ZN1A2piE$ref", ptr @"__ZL9anotherPi$ref"], section "llvm.metadata"
|
|
//.
|
|
A() { ; }
|
|
~A() { ; }
|
|
};
|
|
#pragma omp end declare target
|
|
|
|
void F(const double &);
|
|
void Test() { F(A::pi); }
|
|
|
|
#pragma omp declare target
|
|
constexpr static double anotherPi = 3.14;
|
|
#pragma omp end declare target
|
|
|
|
#endif
|
|
|
|
|
|
//
|
|
//// NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
|
|
// CHECK: {{.*}}
|