compiler: move NonConstGlobals pass to transform package

This commit is contained in:
Ayke van Laethem
2020-03-18 20:41:19 +01:00
committed by Ron Evans
parent b6314fa6ab
commit c5cb2cec9b
6 changed files with 31 additions and 12 deletions
+13
View File
@@ -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)
}
}
+7
View File
@@ -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
View File
@@ -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
View File
@@ -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