mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-09 05:23:40 +00:00
compiler: move NonConstGlobals pass to transform package
This commit is contained in:
committed by
Ron Evans
parent
b6314fa6ab
commit
c5cb2cec9b
@@ -18,3 +18,16 @@ func ApplyFunctionSections(mod llvm.Module) {
|
||||
llvmFn = llvm.NextFunction(llvmFn)
|
||||
}
|
||||
}
|
||||
|
||||
// NonConstGlobals turns all global constants into global variables. This works
|
||||
// around a limitation on Harvard architectures (e.g. AVR), where constant and
|
||||
// non-constant pointers point to a different address space. Normal pointer
|
||||
// behavior is restored by using the data space only, at the cost of RAM for
|
||||
// constant global variables.
|
||||
func NonConstGlobals(mod llvm.Module) {
|
||||
global := mod.FirstGlobal()
|
||||
for !global.IsNil() {
|
||||
global.SetGlobalConstant(false)
|
||||
global = llvm.NextGlobal(global)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,3 +12,10 @@ func TestApplyFunctionSections(t *testing.T) {
|
||||
ApplyFunctionSections(mod)
|
||||
})
|
||||
}
|
||||
|
||||
func TestNonConstGlobals(t *testing.T) {
|
||||
t.Parallel()
|
||||
testTransform(t, "testdata/globals-non-const", func(mod llvm.Module) {
|
||||
NonConstGlobals(mod)
|
||||
})
|
||||
}
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7em-none-eabi"
|
||||
|
||||
@globalIntConst = constant i32 3
|
||||
@globalIntVar = global i32 5
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7em-none-eabi"
|
||||
|
||||
@globalIntConst = global i32 3
|
||||
@globalIntVar = global i32 5
|
||||
Reference in New Issue
Block a user