1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
// 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: @__omp_rtl_debug_kind = weak_odr hidden addrspace(1) constant i32 0
// DEVICE: @__omp_rtl_assume_teams_oversubscription = weak_odr hidden addrspace(1) constant i32 0
// DEVICE: @__omp_rtl_assume_threads_oversubscription = weak_odr hidden addrspace(1) constant i32 0
// DEVICE: @__omp_rtl_assume_no_thread_state = weak_odr hidden addrspace(1) constant i32 0
// DEVICE: @__omp_rtl_assume_no_nested_parallelism = weak_odr hidden addrspace(1) constant i32 0
// 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: 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: 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: attributes #[[ATTR0]] = { noinline nounwind optnone "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" }
//.
// DEVICE: attributes #[[ATTR0]] = { convergent noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
//.
// HOST: [[META0:![0-9]+]] = !{i32 1, !"__Two_var", i32 0, i32 0}
// HOST: [[META1:![0-9]+]] = !{i32 1, !"__Three_var", i32 0, i32 1}
// HOST: [[META2:![0-9]+]] = !{ptr @.offloading.entry_name}
// HOST: [[META3:![0-9]+]] = !{ptr @.offloading.entry_name.1}
// HOST: [[META4:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
// HOST: [[META5:![0-9]+]] = !{i32 7, !"openmp", i32 51}
// HOST: [[META6:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
//.
// DEVICE: [[META0:![0-9]+]] = !{i32 1, !"__Two_var", i32 0, i32 0}
// DEVICE: [[META1:![0-9]+]] = !{i32 1, !"__Three_var", i32 0, i32 1}
// DEVICE: [[META2:![0-9]+]] = !{i32 1, !"amdhsa_code_object_version", i32 600}
// DEVICE: [[META3:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
// DEVICE: [[META4:![0-9]+]] = !{i32 7, !"openmp", i32 51}
// DEVICE: [[META5:![0-9]+]] = !{i32 7, !"openmp-device", i32 51}
// DEVICE: [[META6:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
//.
|