Chuanqi Xu bacdf80f42 Use @llvm.threadlocal.address intrinsic to access TLS variable
This is successor for D125291. This revision would try to use
@llvm.threadlocal.address in clang to access TLS variable. The reason
why the OpenMP tests contains a lot of change is that they uses
utils/update_cc_test_checks.py to update their tests.

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D129833
2022-08-01 11:05:00 +08:00

24 lines
701 B
C++

// RUN: %clang_cc1 -emit-llvm -std=c++11 -triple x86_64-pc-linux-gnu -o- %s | FileCheck %s
// Global @x:
// CHECK: [[X_GLOBAL:@[^ ]+]]{{.*}}thread_local global
// returned somewhere in TLS wrapper:
// CHECK: define {{.+}} ptr @_ZTW1x(
// CHECK: [[X_GLOBAL_ADDR:%[^ ]+]] = call ptr @llvm.threadlocal.address.p0(ptr [[X_GLOBAL]])
// CHECK: ret{{.*}}[[X_GLOBAL_ADDR]]
template <typename T> class unique_ptr {
template <typename F, typename S> struct pair {
F first;
S second;
};
pair<T *, int> data;
public:
constexpr unique_ptr() noexcept : data() {}
explicit unique_ptr(T *p) noexcept : data() {}
};
thread_local unique_ptr<int> x;
int main() { x = unique_ptr<int>(new int(5)); }