transform: do not track const globals

Этот коммит содержится в:
Jaden Weiss 2020-02-24 15:04:51 -05:00 коммит произвёл GitHub
родитель c0b8716d7f
коммит 67229af879
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 13 добавлений и 5 удалений

Просмотреть файл

@ -271,7 +271,7 @@ func AddGlobalsBitmap(mod llvm.Module) bool {
var trackedGlobals []llvm.Value var trackedGlobals []llvm.Value
var trackedGlobalTypes []llvm.Type var trackedGlobalTypes []llvm.Type
for global := mod.FirstGlobal(); !global.IsNil(); global = llvm.NextGlobal(global) { for global := mod.FirstGlobal(); !global.IsNil(); global = llvm.NextGlobal(global) {
if global.IsDeclaration() { if global.IsDeclaration() || global.IsGlobalConstant() {
continue continue
} }
typ := global.Type().ElementType() typ := global.Type().ElementType()

10
transform/testdata/gc-globals.ll предоставленный
Просмотреть файл

@ -4,9 +4,11 @@ target triple = "wasm32-unknown-unknown-wasm"
%runtime._string = type { i8*, i32 } %runtime._string = type { i8*, i32 }
%runtime._interface = type { i32, i8* } %runtime._interface = type { i32, i8* }
@globalInt = constant i32 5 @globalInt = global i32 5
@globalString = constant %runtime._string zeroinitializer @globalString = global %runtime._string zeroinitializer
@globalInterface = constant %runtime._interface zeroinitializer @globalInterface = global %runtime._interface zeroinitializer
@constString = constant %runtime._string zeroinitializer
@constInterface = constant %runtime._interface zeroinitializer
@runtime.trackedGlobalsLength = external global i32 @runtime.trackedGlobalsLength = external global i32
@runtime.trackedGlobalsBitmap = external global [0 x i8] @runtime.trackedGlobalsBitmap = external global [0 x i8]
@runtime.trackedGlobalsStart = external global i32 @runtime.trackedGlobalsStart = external global i32
@ -15,6 +17,8 @@ define void @main() {
%1 = load i32, i32* @globalInt %1 = load i32, i32* @globalInt
%2 = load %runtime._string, %runtime._string* @globalString %2 = load %runtime._string, %runtime._string* @globalString
%3 = load %runtime._interface, %runtime._interface* @globalInterface %3 = load %runtime._interface, %runtime._interface* @globalInterface
%4 = load %runtime._string, %runtime._string* @constString
%5 = load %runtime._interface, %runtime._interface* @constInterface
ret void ret void
} }

6
transform/testdata/gc-globals.out.ll предоставленный
Просмотреть файл

@ -4,7 +4,9 @@ target triple = "wasm32-unknown-unknown-wasm"
%runtime._string = type { i8*, i32 } %runtime._string = type { i8*, i32 }
%runtime._interface = type { i32, i8* } %runtime._interface = type { i32, i8* }
@globalInt = constant i32 5 @globalInt = global i32 5
@constString = constant %runtime._string zeroinitializer
@constInterface = constant %runtime._interface zeroinitializer
@runtime.trackedGlobalsLength = global i32 4 @runtime.trackedGlobalsLength = global i32 4
@runtime.trackedGlobalsBitmap = external global [0 x i8] @runtime.trackedGlobalsBitmap = external global [0 x i8]
@runtime.trackedGlobalsStart = global i32 ptrtoint ({ %runtime._string, %runtime._interface }* @tinygo.trackedGlobals to i32) @runtime.trackedGlobalsStart = global i32 ptrtoint ({ %runtime._string, %runtime._interface }* @tinygo.trackedGlobals to i32)
@ -15,6 +17,8 @@ define void @main() {
%1 = load i32, i32* @globalInt %1 = load i32, i32* @globalInt
%2 = load %runtime._string, %runtime._string* getelementptr inbounds ({ %runtime._string, %runtime._interface }, { %runtime._string, %runtime._interface }* @tinygo.trackedGlobals, i32 0, i32 0) %2 = load %runtime._string, %runtime._string* getelementptr inbounds ({ %runtime._string, %runtime._interface }, { %runtime._string, %runtime._interface }* @tinygo.trackedGlobals, i32 0, i32 0)
%3 = load %runtime._interface, %runtime._interface* getelementptr inbounds ({ %runtime._string, %runtime._interface }, { %runtime._string, %runtime._interface }* @tinygo.trackedGlobals, i32 0, i32 1) %3 = load %runtime._interface, %runtime._interface* getelementptr inbounds ({ %runtime._string, %runtime._interface }, { %runtime._string, %runtime._interface }* @tinygo.trackedGlobals, i32 0, i32 1)
%4 = load %runtime._string, %runtime._string* @constString
%5 = load %runtime._interface, %runtime._interface* @constInterface
ret void ret void
} }