[llvm-dev] ASM disappears when NOT optimizing

Carlo Kok via llvm-dev llvm-dev at lists.llvm.org
Tue Jan 4 12:05:04 PST 2022


When compiling:
; ModuleID = 'ExternalCalls-6069268ae2f83f7c993054596767686a'
source_filename = "ExternalCalls-6069268ae2f83f7c993054596767686a"
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-linux-gnu"


define weak void @_start() #1 {
BasicBlock107:
  call void asm "\0D\0A       mov  x29, #0x0\0D\0A       mov  x30, #0x0\0D\0A       mov  x5, x0\0D\0A       ldr  x1, [sp]\0D\0A      add  x2, sp, #0x8\0D\0A      mov  x6, sp\0D\0A      adrp  x0, __elements_entry_point_helper\0D\0A      add x0, x0, :lo12:__elements_entry_point_helper\0D\0A      adrp  x3, __elements_init\0D\0A      add x3, x3, :lo12:__elements_init\0D\0A      adrp  x4, __elements_fini\0D\0A      add x4, x4, :lo12:__elements_fini\0D\0A      bl  __libc_start_main\0D\0A\0D\0A      ", ""()
  ret void
}
attributes #1 = { naked uwtable }


I get this in -O0 (with LLC)

_start:                                 // @_start
        ret

In O1/2/3 I get:
_start:                                 // @_start

        mov     x29, #0
        mov     x30, #0
        mov     x5, x0
        ldr     x1, [sp]
        add     x2, sp, #8
        mov     x6, sp
        adrp    x0, __elements_entry_point_helper
        add     x0, x0, :lo12:__elements_entry_point_helper
        adrp    x3, __elements_init
        add     x3, x3, :lo12:__elements_init
        adrp    x4, __elements_fini
        add     x4, x4, :lo12:__elements_fini
        bl      __libc_start_main

        ret

godbolt repro:
https://godbolt.org/z/MoMzE9Kha

Can anyone tell me what I'm doing wrong here?

--
Carlo Kok


More information about the llvm-dev mailing list