
This is really just a simple workaround. When such an instruction is encountered, it will just fall back to marking the entire function as having side effects. Ideally it should trace all affected instructions and check if they would have any side effects, but this at least fixes a number of compile errors. This commit gets the following packages to compile: * context * database/sql/driver * image/jpeg * image/png
61 строка
1,1 КиБ
LLVM
61 строка
1,1 КиБ
LLVM
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64--linux"
|
|
|
|
define i64 @returnsConst() {
|
|
ret i64 0
|
|
}
|
|
|
|
define i64 @returnsArg(i64 %arg) {
|
|
ret i64 %arg
|
|
}
|
|
|
|
declare i64 @externalCall()
|
|
|
|
define i64 @externalCallOnly() {
|
|
%result = call i64 @externalCall()
|
|
ret i64 0
|
|
}
|
|
|
|
define i64 @externalCallAndReturn() {
|
|
%result = call i64 @externalCall()
|
|
ret i64 %result
|
|
}
|
|
|
|
define i64 @externalCallBranch() {
|
|
%result = call i64 @externalCall()
|
|
%zero = icmp eq i64 %result, 0
|
|
br i1 %zero, label %if.then, label %if.done
|
|
|
|
if.then:
|
|
ret i64 2
|
|
|
|
if.done:
|
|
ret i64 4
|
|
}
|
|
|
|
@cleanGlobalInt = global i64 5
|
|
define i64 @readCleanGlobal() {
|
|
%global = load i64, i64* @cleanGlobalInt
|
|
ret i64 %global
|
|
}
|
|
|
|
@dirtyGlobalInt = global i64 5
|
|
define i64 @readDirtyGlobal() {
|
|
%global = load i64, i64* @dirtyGlobalInt
|
|
ret i64 %global
|
|
}
|
|
|
|
declare i64* @getDirtyPointer()
|
|
|
|
define void @storeToPointer() {
|
|
%ptr = call i64* @getDirtyPointer()
|
|
store i64 3, i64* %ptr
|
|
ret void
|
|
}
|
|
|
|
@functionPointer = global i64()* null
|
|
define i64 @callFunctionPointer() {
|
|
%fp = load i64()*, i64()** @functionPointer
|
|
%result = call i64 %fp()
|
|
ret i64 %result
|
|
}
|