mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-23 05:29:23 +00:00
This is useful for functions that are not actually available externally but referenced by a vtable of some kind. Clang emits functions like this for the MS ABI. PR20182. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212337 91177308-0d34-0410-b5e6-96231b3b80d8
44 lines
1.0 KiB
LLVM
44 lines
1.0 KiB
LLVM
; RUN: opt < %s -globaldce -S | FileCheck %s
|
|
|
|
; test_function should not be emitted to the .s file.
|
|
; CHECK-NOT: @test_function
|
|
define available_externally i32 @test_function() {
|
|
ret i32 4
|
|
}
|
|
|
|
; test_global should not be emitted to the .s file.
|
|
; CHECK-NOT: @test_global
|
|
@test_global = available_externally global i32 4
|
|
|
|
; CHECK: @x = external constant void ()*
|
|
@x = available_externally constant void()* @f
|
|
; CHECK: @y = external constant i32
|
|
@y = available_externally constant i32 ptrtoint (void()* @g to i32)
|
|
; @h is still alive, so don't remove the initializer too eagerly.
|
|
; CHECK: @z = available_externally constant i8 ptrtoint (void (i8)* @h to i8)
|
|
@z = available_externally constant i8 ptrtoint (void(i8)* @h to i8)
|
|
|
|
; CHECK-NOT: @f
|
|
define linkonce_odr void @f() {
|
|
ret void
|
|
}
|
|
|
|
; CHECK-NOT: @g
|
|
define linkonce_odr void @g() {
|
|
ret void
|
|
}
|
|
|
|
; CHECK: define linkonce_odr void @h
|
|
define linkonce_odr void @h(i8) {
|
|
ret void
|
|
}
|
|
|
|
define i32 @main() {
|
|
%f = load void()** @x
|
|
call void %f()
|
|
%g = load i32* @y
|
|
%h = load i8* @z
|
|
call void @h(i8 %h)
|
|
ret i32 %g
|
|
}
|