mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-11 22:43:40 +00:00
compiler: move ApplyFunctionSections to transform package
This commit is contained in:
committed by
Ron Evans
parent
945ff4d160
commit
b6314fa6ab
@@ -0,0 +1,20 @@
|
||||
package transform
|
||||
|
||||
import "tinygo.org/x/go-llvm"
|
||||
|
||||
// This file implements small transformations on globals (functions and global
|
||||
// variables) for specific ABIs/architectures.
|
||||
|
||||
// ApplyFunctionSections puts every function in a separate section. This makes
|
||||
// it possible for the linker to remove dead code. It is the equivalent of
|
||||
// passing -ffunction-sections to a C compiler.
|
||||
func ApplyFunctionSections(mod llvm.Module) {
|
||||
llvmFn := mod.FirstFunction()
|
||||
for !llvmFn.IsNil() {
|
||||
if !llvmFn.IsDeclaration() {
|
||||
name := llvmFn.Name()
|
||||
llvmFn.SetSection(".text." + name)
|
||||
}
|
||||
llvmFn = llvm.NextFunction(llvmFn)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package transform
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"tinygo.org/x/go-llvm"
|
||||
)
|
||||
|
||||
func TestApplyFunctionSections(t *testing.T) {
|
||||
t.Parallel()
|
||||
testTransform(t, "testdata/globals-function-sections", func(mod llvm.Module) {
|
||||
ApplyFunctionSections(mod)
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7em-none-eabi"
|
||||
|
||||
declare void @foo()
|
||||
|
||||
define void @bar() {
|
||||
ret void
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "armv7em-none-eabi"
|
||||
|
||||
declare void @foo()
|
||||
|
||||
define void @bar() section ".text.bar" {
|
||||
ret void
|
||||
}
|
||||
Reference in New Issue
Block a user