mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 21:35:07 +00:00
3a3465b71d
optimizations when emitting calls to the function; instead those calls may use faster relocations which require the function to be immediately resolved upon loading the dynamic object featuring the call. This is useful when it is known that the function will be called frequently and pervasively and therefore there is no merit in delaying binding of the function. Currently only implemented for x86-64, where it turns into a call through the global offset table. Patch by Dan Gohman, who assures me that he's going to add LangRef documentation for this once it's committed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133080 91177308-0d34-0410-b5e6-96231b3b80d8
25 lines
728 B
LLVM
25 lines
728 B
LLVM
; RUN: llvm-as < %s | llvm-dis > %t1.ll
|
|
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
|
|
; RUN: diff %t1.ll %t2.ll
|
|
|
|
%ZFunTy = type i32(i8 zeroext)
|
|
%SFunTy = type i32(i8 signext)
|
|
|
|
declare i16 @"test"(i16 signext %arg) signext
|
|
declare i8 @"test2" (i16 zeroext %a2) zeroext
|
|
|
|
declare i32 @"test3"(i32* noalias %p)
|
|
|
|
declare void @exit(i32) noreturn nounwind
|
|
|
|
define i32 @main(i32 inreg %argc, i8 ** inreg %argv) nounwind {
|
|
%val = trunc i32 %argc to i16
|
|
%res1 = call i16 (i16 signext) signext *@test(i16 signext %val) signext
|
|
%two = add i16 %res1, %res1
|
|
%res2 = call i8 @test2(i16 %two zeroext) zeroext
|
|
%retVal = sext i16 %two to i32
|
|
ret i32 %retVal
|
|
}
|
|
|
|
declare void @function_to_resolve_eagerly() nonlazybind
|