tinygo: github.com/tinygo-org/tinygo/compiler Index | Files

package compiler

import "github.com/tinygo-org/tinygo/compiler"

Index

Package Files

asserts.go calls.go channel.go compiler.go defer.go errors.go func-lowering.go func.go goroutine-lowering.go inlineasm.go interface-lowering.go interface.go llvm.go map.go optimizer.go reflect.go sizes.go syscall.go

Constants

const MaxFieldsPerParam = 3

The maximum number of arguments that can be expanded from a single struct. If a struct contains more fields, it is passed as a struct without expanding.

type Compiler Uses

type Compiler struct {
    Config
    // contains filtered or unexported fields
}

func NewCompiler Uses

func NewCompiler(pkgName string, config Config) (*Compiler, error)

func (*Compiler) ApplyFunctionSections Uses

func (c *Compiler) ApplyFunctionSections()

func (*Compiler) Compile Uses

func (c *Compiler) Compile(mainPath string) error

Compile the given package path or .go file path. Return an error when this fails (in any stage).

func (*Compiler) EmitBitcode Uses

func (c *Compiler) EmitBitcode(path string) error

Emit LLVM bitcode file (.bc).

func (*Compiler) EmitObject Uses

func (c *Compiler) EmitObject(path string) error

Emit object file (.o).

func (*Compiler) EmitText Uses

func (c *Compiler) EmitText(path string) error

Emit LLVM IR source file (.ll).

func (*Compiler) ExternalInt64AsPtr Uses

func (c *Compiler) ExternalInt64AsPtr() error

When -wasm-abi flag set to "js" (default), replace i64 in an external function with a stack-allocated i64*, to work around the lack of 64-bit integers in JavaScript (commonly used together with WebAssembly). Once that's resolved, this pass may be avoided. See also the -wasm-abi= flag https://github.com/WebAssembly/design/issues/1172

func (*Compiler) IR Uses

func (c *Compiler) IR() string

IR returns the whole IR as a human-readable string.

func (*Compiler) LowerFuncValues Uses

func (c *Compiler) LowerFuncValues()

LowerFuncValue lowers the runtime.funcValueWithSignature type and runtime.getFuncPtr function to their final form.

func (*Compiler) LowerGoroutines Uses

func (c *Compiler) LowerGoroutines() error

LowerGoroutines is a pass called during optimization that transforms the IR into one where all blocking functions are turned into goroutines and blocking calls into await calls.

func (*Compiler) LowerInterfaces Uses

func (c *Compiler) LowerInterfaces()

Lower all interface functions. They are emitted by the compiler as higher-level intrinsics that need some lowering before LLVM can work on them. This is done so that a few cleanup passes can run before assigning the final type codes.

func (*Compiler) Module Uses

func (c *Compiler) Module() llvm.Module

Return the LLVM module. Only valid after a successful compile.

func (*Compiler) NonConstGlobals Uses

func (c *Compiler) NonConstGlobals()

Turn 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.

func (*Compiler) Optimize Uses

func (c *Compiler) Optimize(optLevel, sizeLevel int, inlinerThreshold uint) error

Run the LLVM optimizer over the module. The inliner can be disabled (if necessary) by passing 0 to the inlinerThreshold.

func (*Compiler) OptimizeAllocs Uses

func (c *Compiler) OptimizeAllocs()

Basic escape analysis: translate runtime.alloc calls into alloca instructions.

func (*Compiler) OptimizeMaps Uses

func (c *Compiler) OptimizeMaps()

Eliminate created but not used maps.

In the future, this should statically allocate created but never modified maps. This has not yet been implemented, however.

func (*Compiler) OptimizeStringToBytes Uses

func (c *Compiler) OptimizeStringToBytes()

Transform runtime.stringToBytes(...) calls into const []byte slices whenever possible. This optimizes the following pattern:

w.Write([]byte("foo"))

where Write does not store to the slice.

func (*Compiler) Packages Uses

func (c *Compiler) Packages() []*loader.Package

func (*Compiler) TargetData Uses

func (c *Compiler) TargetData() llvm.TargetData

Return the LLVM target data object. Only valid after a successful compile.

func (*Compiler) Verify Uses

func (c *Compiler) Verify() error

type Config Uses

type Config struct {
    Triple    string   // LLVM target triple, e.g. x86_64-unknown-linux-gnu (empty string means default)
    CPU       string   // LLVM CPU name, e.g. atmega328p (empty string means default)
    GOOS      string   //
    GOARCH    string   //
    GC        string   // garbage collection strategy
    CFlags    []string // cflags to pass to cgo
    LDFlags   []string // ldflags to pass to cgo
    DumpSSA   bool     // dump Go SSA, for compiler debugging
    Debug     bool     // add debug symbols for gdb
    RootDir   string   // GOROOT for TinyGo
    GOPATH    string   // GOPATH, like `go env GOPATH`
    BuildTags []string // build tags for TinyGo (empty means {Config.GOOS/Config.GOARCH})
}

Configure the compiler.

type Frame Uses

type Frame struct {
    // contains filtered or unexported fields
}

type Phi Uses

type Phi struct {
    // contains filtered or unexported fields
}

type StdSizes Uses

type StdSizes struct {
    IntSize  int64
    PtrSize  int64
    MaxAlign int64
}

func (*StdSizes) Alignof Uses

func (s *StdSizes) Alignof(T types.Type) int64

func (*StdSizes) Offsetsof Uses

func (s *StdSizes) Offsetsof(fields []*types.Var) []int64

func (*StdSizes) Sizeof Uses

func (s *StdSizes) Sizeof(T types.Type) int64

Package compiler imports 18 packages (graph) and is imported by 3 packages. Updated 2019-04-26. Refresh now. Tools for package owners.