Summary: WebAssembly memories are zero-initialized, so when module does not import its memory initializing .bss sections is guaranteed to be a no-op. To reduce binary size and initialization time, .bss sections are simply not emitted into the final binary unless the memory is imported. Reviewers: sbc100 Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D68965 llvm-svn: 374940
52 lines
1.0 KiB
LLVM
52 lines
1.0 KiB
LLVM
target triple = "wasm32-unknown-unknown"
|
|
|
|
; Will collide: local (internal linkage) with global (external) linkage
|
|
@colliding_global1 = default global i32 1, align 4
|
|
; Will collide: global with local
|
|
@colliding_global2 = internal default global i32 1, align 4
|
|
; Will collide: local with local
|
|
@colliding_global3 = internal default global i32 1, align 4
|
|
|
|
; Will collide: local with global
|
|
define i32 @colliding_func1() {
|
|
entry:
|
|
ret i32 2
|
|
}
|
|
; Will collide: global with local
|
|
define internal i32 @colliding_func2() {
|
|
entry:
|
|
ret i32 2
|
|
}
|
|
; Will collide: local with local
|
|
define internal i32 @colliding_func3() {
|
|
entry:
|
|
ret i32 2
|
|
}
|
|
|
|
|
|
define i32* @get_global1B() {
|
|
entry:
|
|
ret i32* @colliding_global1
|
|
}
|
|
define i32* @get_global2B() {
|
|
entry:
|
|
ret i32* @colliding_global2
|
|
}
|
|
define i32* @get_global3B() {
|
|
entry:
|
|
ret i32* @colliding_global3
|
|
}
|
|
|
|
define i32 ()* @get_func1B() {
|
|
entry:
|
|
ret i32 ()* @colliding_func1
|
|
}
|
|
define i32 ()* @get_func2B() {
|
|
entry:
|
|
ret i32 ()* @colliding_func2
|
|
}
|
|
define i32 ()* @get_func3B() {
|
|
entry:
|
|
ret i32 ()* @colliding_func3
|
|
}
|