88#define __host__ __attribute__ ((host))
99
1010extern "C" {
11-
1211// .
12+ // HOST: @__HostVar = global i32 1, align 4
1313// HOST: @__hip_cuid_ = global i8 0
1414// HOST: @llvm.compiler.used = appending global [1 x ptr] [ptr @__hip_cuid_], section "llvm.metadata"
1515// HOST: @HostFunc = weak alias i32 (), ptr @__HostFunc
16+ // HOST: @HostFunc_ = alias i32 (), ptr @__HostFunc
17+ // HOST: @HostVar = weak alias i32, ptr @__HostVar
18+ // HOST: @HostVar_ = alias i32, ptr @__HostVar
1619// HOST: @Two = weak alias i32 (), ptr @__Two
17- // HOST: @Four = weak alias i32 (), ptr @__Four
20+ // HOST: @Two_ = alias i32 (), ptr @__Two
21+ // HOST: @_Z5Threev = weak alias i32 (), ptr @_Z7__Threev
22+ // HOST: @_Z6Three_v = alias i32 (), ptr @_Z7__Threev
23+ // HOST: @_Z4Fourv = weak alias i32 (), ptr @_Z6__Fourv
24+ // HOST: @_Z4Fourf = weak alias float (float), ptr @_Z6__Fourf
1825// .
1926// DEVICE: @__hip_cuid_ = addrspace(1) global i8 0
2027// DEVICE: @llvm.compiler.used = appending addrspace(1) global [1 x ptr] [ptr addrspacecast (ptr addrspace(1) @__hip_cuid_ to ptr)], section "llvm.metadata"
2128// DEVICE: @One = weak alias i32 (), ptr @__One
29+ // DEVICE: @One_ = alias i32 (), ptr @__One
2230// DEVICE: @Two = weak alias i32 (), ptr @__Two
23- // DEVICE: @Three = weak alias i32 (), ptr @__Three
24- // DEVICE: @Five = weak alias i32 (), ptr @__Five
25- // DEVICE: @_Z3Sixv = weak alias i32 (), ptr @_Z5__Sixv
26- // DEVICE: @_Z3Sixf = weak alias float (float), ptr @_Z5__Sixf
31+ // DEVICE: @Two_ = alias i32 (), ptr @__Two
32+ // DEVICE: @_Z5Threev = weak alias i32 (), ptr @_Z7__Threev
33+ // DEVICE: @_Z6Three_v = alias i32 (), ptr @_Z7__Threev
34+ // DEVICE: @_Z4Fourv = weak alias i32 (), ptr @_Z6__Fourv
35+ // DEVICE: @_Z4Fourf = weak alias float (float), ptr @_Z6__Fourf
2736// .
2837// HOST-LABEL: define dso_local i32 @__HostFunc(
2938// HOST-SAME: ) #[[ATTR0:[0-9]+]] {
3039// HOST-NEXT: [[ENTRY:.*:]]
3140// HOST-NEXT: ret i32 42
3241//
3342int __HostFunc (void ) { return 42 ; }
43+ int __HostVar = 1 ;
3444int HostFunc (void ) __attribute__ ((weak, alias (" __HostFunc" )));
45+ int HostFunc_ (void ) __attribute__ ((alias (" __HostFunc" )));
46+ extern int __attribute__ ((weak, alias (" __HostVar" ))) HostVar;
47+ extern int __attribute__ ((alias (" __HostVar" ))) HostVar_;
3548
3649// DEVICE-LABEL: define dso_local i32 @__One(
3750// DEVICE-SAME: ) #[[ATTR0:[0-9]+]] {
3851// DEVICE-NEXT: [[ENTRY:.*:]]
3952// DEVICE-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5)
4053// DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr
41- // DEVICE-NEXT: ret i32 2
54+ // DEVICE-NEXT: ret i32 1
4255//
43- __device__ int __One (void ) { return 2 ; }
56+ __device__ int __One (void ) { return 1 ; }
4457__device__ int One (void ) __attribute__ ((weak, alias (" __One" )));
58+ __device__ int One_ (void ) __attribute__ ((alias (" __One" )));
4559
4660// HOST-LABEL: define dso_local i32 @__Two(
4761// HOST-SAME: ) #[[ATTR0]] {
@@ -57,45 +71,49 @@ __device__ int One(void) __attribute__((weak, alias("__One")));
5771//
5872__host__ __device__ int __Two (void ) { return 2 ; }
5973__host__ __device__ int Two (void ) __attribute__ ((weak, alias (" __Two" )));
74+ __host__ __device__ int Two_ (void ) __attribute__ ((alias (" __Two" )));
75+ }
6076
61- // DEVICE-LABEL: define linkonce_odr i32 @__Three(
62- // DEVICE-SAME: ) #[[ATTR0]] comdat {
63- // DEVICE-NEXT: [[ENTRY:.*:]]
64- // DEVICE-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5)
65- // DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr
66- // DEVICE-NEXT: ret i32 2
67- //
68- __device__ constexpr int __Three (void ) { return 2 ; }
69- __device__ int Three (void ) __attribute__ ((weak, alias (" __Three" )));
70-
71- // HOST-LABEL: define linkonce_odr i32 @__Four(
77+ // HOST-LABEL: define linkonce_odr noundef i32 @_Z7__Threev(
7278// HOST-SAME: ) #[[ATTR0]] comdat {
7379// HOST-NEXT: [[ENTRY:.*:]]
74- // HOST-NEXT: ret i32 2
80+ // HOST-NEXT: ret i32 5
7581//
76- constexpr int __Four (void ) { return 2 ; }
77- int Four (void ) __attribute__ ((weak, alias (" __Four" )));
78-
79- // DEVICE-LABEL: define linkonce_odr i32 @__Five(
82+ // DEVICE-LABEL: define linkonce_odr noundef i32 @_Z7__Threev(
8083// DEVICE-SAME: ) #[[ATTR0]] comdat {
8184// DEVICE-NEXT: [[ENTRY:.*:]]
8285// DEVICE-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5)
8386// DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr
84- // DEVICE-NEXT: ret i32 2
87+ // DEVICE-NEXT: ret i32 5
8588//
86- __device__ constexpr int __Five (void ) { return 2 ; }
87- __device__ int Five (void ) __attribute__ ((weak, alias (" __Five " )));
88- }
89+ __host__ __device__ constexpr int __Three (void ) { return 5 ; }
90+ __host__ __device__ int Three (void ) __attribute__((weak, alias(" _Z7__Threev " )));
91+ __host__ __device__ int Three_ ( void ) __attribute__((alias( " _Z7__Threev " )));
8992
90- // DEVICE-LABEL: define dso_local noundef i32 @_Z5__Sixv(
93+
94+ // HOST-LABEL: define dso_local noundef i32 @_Z6__Fourv(
95+ // HOST-SAME: ) #[[ATTR0]] {
96+ // HOST-NEXT: [[ENTRY:.*:]]
97+ // HOST-NEXT: ret i32 2
98+ //
99+ // DEVICE-LABEL: define dso_local noundef i32 @_Z6__Fourv(
91100// DEVICE-SAME: ) #[[ATTR0]] {
92101// DEVICE-NEXT: [[ENTRY:.*:]]
93102// DEVICE-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5)
94103// DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr
95104// DEVICE-NEXT: ret i32 2
96105//
97- __device__ int __Six (void ) { return 2 ; }
98- // DEVICE-LABEL: define dso_local noundef float @_Z5__Sixf(
106+ __host__ __device__ int __Four (void ) { return 2 ; }
107+ // HOST-LABEL: define dso_local noundef float @_Z6__Fourf(
108+ // HOST-SAME: float noundef [[F:%.*]]) #[[ATTR0]] {
109+ // HOST-NEXT: [[ENTRY:.*:]]
110+ // HOST-NEXT: [[F_ADDR:%.*]] = alloca float, align 4
111+ // HOST-NEXT: store float [[F]], ptr [[F_ADDR]], align 4
112+ // HOST-NEXT: [[TMP0:%.*]] = load float, ptr [[F_ADDR]], align 4
113+ // HOST-NEXT: [[MUL:%.*]] = fmul contract float 2.000000e+00, [[TMP0]]
114+ // HOST-NEXT: ret float [[MUL]]
115+ //
116+ // DEVICE-LABEL: define dso_local noundef float @_Z6__Fourf(
99117// DEVICE-SAME: float noundef [[F:%.*]]) #[[ATTR0]] {
100118// DEVICE-NEXT: [[ENTRY:.*:]]
101119// DEVICE-NEXT: [[RETVAL:%.*]] = alloca float, align 4, addrspace(5)
@@ -107,9 +125,10 @@ __device__ int __Six(void) { return 2; }
107125// DEVICE-NEXT: [[MUL:%.*]] = fmul contract float 2.000000e+00, [[TMP0]]
108126// DEVICE-NEXT: ret float [[MUL]]
109127//
110- __device__ float __Six (float f) { return 2 .0f * f; }
111- __device__ int Six (void ) __attribute__((weak, alias(" _Z5__Sixv" )));
112- __device__ float Six (float f) __attribute__((weak, alias(" _Z5__Sixf" )));
128+ __host__ __device__ float __Four (float f) { return 2 .0f * f; }
129+ __host__ __device__ int Four (void ) __attribute__((weak, alias(" _Z6__Fourv" )));
130+ __host__ __device__ float Four (float f) __attribute__((weak, alias(" _Z6__Fourf" )));
131+
113132// .
114133// HOST: attributes #[[ATTR0]] = { mustprogress noinline nounwind optnone "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" }
115134// .
0 commit comments