; RUN: llc -mtriple=x86_64 -relocation-model=pic < %s | FileCheck %s ;; With a module flag SemanticInterposition=0, infer dso_local flags even if PIC. ;; Local aliases will be generated for applicable variables and functions. @var = global i32 0, align 4 @ifunc = ifunc i32 (), bitcast (i32 ()* ()* @ifunc_resolver to i32 ()*) define i32 @ifunc_impl() { entry: ret i32 0 } define i32 ()* @ifunc_resolver() { entry: ret i32 ()* @ifunc_impl } declare i32 @external() define i32 @func() { ret i32 0 } ;; Don't set dso_local on declarations or ifuncs. define i32 @foo() { ; CHECK: movl .Lvar$local(%rip), %ebp ; CHECK: callq external@PLT ; CHECK: callq ifunc@PLT ; CHECK: callq .Lfunc$local{{$}} entry: %0 = load i32, i32* @var, align 4 %call = tail call i32 @external() %add = add nsw i32 %call, %0 %call1 = tail call i32 @ifunc() %add2 = add nsw i32 %add, %call1 %call2 = tail call i32 @func() %add3 = add nsw i32 %add, %call2 ret i32 %add3 } !llvm.module.flags = !{!0, !1} !0 = !{i32 1, !"SemanticInterposition", i32 0} !1 = !{i32 7, !"PIC Level", i32 2}