xref: /llvm-project/llvm/test/Transforms/Util/call-promotion-utils-ptrcast-attribute.ll (revision eda6ff347272f52e1344d43d956e383a1c039155)
1; RUN: opt -S -passes=pgo-icall-prom -icp-total-percent-threshold=0 < %s 2>&1 | FileCheck %s
2
3; Test that CallPromotionUtils will promote calls which require pointer cast
4; safely, i.e. drop incompatible attributes.
5
6@foo = common global ptr null, align 8
7
8; casting to i64 and pointer attribute at callsite dropped.
9define i64 @func2(i64 %a) {
10  ret i64 undef
11}
12
13; no casting needed, attribute at callsite preserved.
14define ptr @func4(ptr %a) {
15  ret ptr undef
16}
17
18define ptr @bar(ptr %arg) {
19  %tmp = load ptr, ptr @foo, align 8
20
21; Make sure callsite attributes are preserved on arguments and retval.
22; CHECK: call noalias ptr @func4(ptr nonnull
23
24; Make sure callsite attributes are dropped on arguments and retval.
25; CHECK: [[ARG:%[0-9]+]] = ptrtoint ptr %arg to i64
26; CHECK-NEXT: call i64 @func2(i64 [[ARG]])
27
28  %call = call noalias ptr %tmp(ptr nonnull %arg), !prof !1
29  ret ptr %call
30}
31
32!1 = !{!"VP", i32 0, i64 1440, i64 7651369219802541373, i64 1030, i64 -4377547752858689819, i64 410}
33