[flang-dev] Fwd: Internal linkage for private subroutines

Alexey Zhikhartsev via flang-dev flang-dev at lists.llvm.org
Wed Dec 4 17:51:30 PST 2019


Yes, the question is with respect to the legacy flang.

Best,
Alexey

On Wed., Dec. 4, 2019, 8:45 p.m. Doerfert, Johannes, <jdoerfert at anl.gov>
wrote:

> This concernes legacy flang, correct? (I ask because there are linkage
> issues with mlir as well)
>
> --
> written from my phone
>
> ------------------------------
> *From:* flang-dev <flang-dev-bounces at lists.llvm.org> on behalf of Stephen
> Scalpone via flang-dev <flang-dev at lists.llvm.org>
> *Sent:* Wednesday, December 4, 2019 8:40:54 PM
> *To:* Alexey Zhikhartsev <alexey.zhikhar at gmail.com>;
> flang-dev at lists.llvm.org <flang-dev at lists.llvm.org>
> *Subject:* Re: [flang-dev] Fwd: Internal linkage for private subroutines
>
>
> This looks promising:
>
>
>
> ll_write.cpp:  fprintf(out, "define %s %s %s ",
> ll_get_linkage_string(function->linkage),
>
>
>
> *From: *flang-dev <flang-dev-bounces at lists.llvm.org> on behalf of Alexey
> Zhikhartsev via flang-dev <flang-dev at lists.llvm.org>
> *Reply-To: *Alexey Zhikhartsev <alexey.zhikhar at gmail.com>
> *Date: *Wednesday, December 4, 2019 at 4:49 PM
> *To: *"flang-dev at lists.llvm.org" <flang-dev at lists.llvm.org>
> *Subject: *[flang-dev] Fwd: Internal linkage for private subroutines
>
>
>
> Hi all,
>
>
>
> In the code below, every function in module m is private by default, and
> only bar() is declared public:
>
>
>
> module m
>
>
>
> implicit none
>
> private
>
> public :: bar
>
> integer :: arr1(42)
>
>
>
> contains
>
>
>
>   subroutine foo(a)
>
>   integer :: a
>
>
>
>   arr1(1) = 2
>
>
>
>   end subroutine foo
>
>
>
>   subroutine bar(a)
>
>   integer :: a
>
>
>
>   call foo(a)
>
>
>
>   end subroutine bar
>
> end module m
>
>
>
> However, in the resulting LLVM IR, no function is declared with an
> attribute “internal”:
>
>
>
> define void @m_foo_(i64* %a) !dbg !5 {
>
> L.entry:
>
>   br label %L.LB2_313
>
>
>
> L.LB2_313:                                        ; preds = %L.entry
>
>   %0 = bitcast %struct_m_4_* @_m_4_ to i32*, !dbg
> !10
>
>   store i32 2, i32* %0, align 4, !dbg !10, !tbaa !12
>
>   ret void, !dbg !16
>
> }
>
>
>
> define void @m_bar_(i64* %a) !dbg !17 {
>
> L.entry:
>
>   br label %L.LB3_314
>
>
>
> L.LB3_314:                                        ; preds = %L.entry
>
>   call void @m_foo_(i64* %a), !dbg !18
>
>   ret void, !dbg !20
>
> }
>
>
>
> Am I missing something? I tried to find where it might be implemented in
> flang by grepping the flang codebase for SC_STATIC but there’s just too
> many places. Any pointers would be much appreciated.
>
>
>
> Alexey
>
>
> ------------------------------
> This email message is for the sole use of the intended recipient(s) and
> may contain confidential information.  Any unauthorized review, use,
> disclosure or distribution is prohibited.  If you are not the intended
> recipient, please contact the sender by reply email and destroy all copies
> of the original message.
> ------------------------------
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/flang-dev/attachments/20191204/704be15b/attachment-0001.html>


More information about the flang-dev mailing list