8
8
9
9
declare void @bar ()
10
10
11
+ ;.
12
+ ; INSTRUMENT: @foo_alias = weak_odr unnamed_addr alias void (i32, ptr), ptr @foo
11
13
;.
12
14
; LOWERING: @__llvm_ctx_profile_callsite = external hidden thread_local global ptr
13
15
; LOWERING: @__llvm_ctx_profile_expected_callee = external hidden thread_local global ptr
@@ -19,6 +21,8 @@ declare void @bar()
19
21
; LOWERING: @[[GLOB5:[0-9]+]] = internal global { ptr, ptr, ptr, ptr, i8 } zeroinitializer
20
22
; LOWERING: @[[GLOB6:[0-9]+]] = internal global { ptr, ptr, ptr, ptr, i8 } zeroinitializer
21
23
; LOWERING: @[[GLOB7:[0-9]+]] = internal global { ptr, ptr, ptr, ptr, i8 } { ptr null, ptr null, ptr inttoptr (i64 1 to ptr), ptr null, i8 0 }
24
+ ; LOWERING: @[[GLOB8:[0-9]+]] = internal global { ptr, ptr, ptr, ptr, i8 } zeroinitializer
25
+ ; LOWERING: @foo_alias = weak_odr unnamed_addr alias void (i32, ptr), ptr @foo
22
26
;.
23
27
define void @foo (i32 %a , ptr %fct ) {
24
28
; INSTRUMENT-LABEL: define void @foo(
@@ -335,6 +339,41 @@ define void @unreachable() {
335
339
;
336
340
unreachable
337
341
}
342
+
343
+ @foo_alias = weak_odr unnamed_addr alias void (i32 , ptr ), ptr @foo
344
+
345
+ define void @call_alias (ptr %a ) {
346
+ ; INSTRUMENT-LABEL: define void @call_alias(
347
+ ; INSTRUMENT-SAME: ptr [[A:%.*]]) {
348
+ ; INSTRUMENT-NEXT: entry:
349
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @call_alias, i64 742261418966908927, i32 1, i32 0)
350
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.callsite(ptr @call_alias, i64 742261418966908927, i32 1, i32 0, ptr @foo_alias)
351
+ ; INSTRUMENT-NEXT: call void @foo_alias(i32 0, ptr [[A]])
352
+ ; INSTRUMENT-NEXT: ret void
353
+ ;
354
+ ; LOWERING-LABEL: define void @call_alias(
355
+ ; LOWERING-SAME: ptr [[A:%.*]]) !guid [[META10:![0-9]+]] {
356
+ ; LOWERING-NEXT: entry:
357
+ ; LOWERING-NEXT: [[TMP0:%.*]] = call ptr @__llvm_ctx_profile_get_context(ptr @[[GLOB8]], ptr @call_alias, i64 2172368043968427688, i32 1, i32 1)
358
+ ; LOWERING-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[TMP0]] to i64
359
+ ; LOWERING-NEXT: [[TMP2:%.*]] = and i64 [[TMP1]], 1
360
+ ; LOWERING-NEXT: [[TMP3:%.*]] = call ptr @llvm.threadlocal.address.p0(ptr @__llvm_ctx_profile_expected_callee)
361
+ ; LOWERING-NEXT: [[TMP4:%.*]] = getelementptr ptr, ptr [[TMP3]], i64 [[TMP2]]
362
+ ; LOWERING-NEXT: [[TMP5:%.*]] = call ptr @llvm.threadlocal.address.p0(ptr @__llvm_ctx_profile_callsite)
363
+ ; LOWERING-NEXT: [[TMP6:%.*]] = getelementptr i32, ptr [[TMP5]], i64 [[TMP2]]
364
+ ; LOWERING-NEXT: [[TMP7:%.*]] = and i64 [[TMP1]], -2
365
+ ; LOWERING-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr
366
+ ; LOWERING-NEXT: store volatile ptr @foo_alias, ptr [[TMP4]], align 8
367
+ ; LOWERING-NEXT: [[TMP9:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [1 x i64], [1 x ptr] }, ptr [[TMP0]], i32 0, i32 2, i32 0
368
+ ; LOWERING-NEXT: store volatile ptr [[TMP9]], ptr [[TMP6]], align 8
369
+ ; LOWERING-NEXT: call void @foo_alias(i32 0, ptr [[A]])
370
+ ; LOWERING-NEXT: call void @__llvm_ctx_profile_release_context(ptr @[[GLOB8]])
371
+ ; LOWERING-NEXT: ret void
372
+ ;
373
+ entry:
374
+ call void @foo_alias (i32 0 , ptr %a )
375
+ ret void
376
+ }
338
377
;.
339
378
; LOWERING: attributes #[[ATTR0]] = { noreturn }
340
379
; LOWERING: attributes #[[ATTR1:[0-9]+]] = { nounwind }
@@ -353,4 +392,5 @@ define void @unreachable() {
353
392
; LOWERING: [[META7]] = !{i64 -4680624981836544329}
354
393
; LOWERING: [[META8]] = !{i64 5519225910966780583}
355
394
; LOWERING: [[META9]] = !{i64 -565652589829076809}
395
+ ; LOWERING: [[META10]] = !{i64 2172368043968427688}
356
396
;.
0 commit comments