Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/goallc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ concurrency:
cancel-in-progress: true

env:
PINNED_LLVM_RELEASE: goallc-llvm23.1.0-20260812T002702Z
PINNED_LLVM_REVISION: d9a0149bdda5b9fb1f63bf5c8cd2dbe71d7bf523
PINNED_LLVM_RELEASE: goallc-llvm23.1.0-20260813T171727Z
PINNED_LLVM_REVISION: 1d142acb4dab7262347b57ac341235913b210f40

jobs:
llvm-payload:
Expand Down
11 changes: 0 additions & 11 deletions src/cmd/compile/internal/ssa/llvmdata.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,6 @@ func attachGoObjSymbolRef(value llvm.Value, s *obj.LSym) {
}))
}

func setGoObjABI0SymbolNameMetadata(value llvm.Value, name string, cc llvm.CallConv) {
if cc != goABI0CallConv {
return
}
value.SetGlobalMetadata(GlobalCtxt.MDKindID(goObjSymbolNameMD), GlobalCtxt.MDNode([]llvm.Metadata{
GlobalCtxt.MDString(name),
}))
}

// attachGoObjABISymbolRef is for LLVM-generated runtime calls that do not
// carry an SSA AuxCall. Use the compiler's ABI-aware symbol table so their
// builtin/non-package classification stays identical to the native writer.
Expand Down Expand Up @@ -472,13 +463,11 @@ func llvmExternalDataRef(s *obj.LSym, data map[*obj.LSym]bool) llvm.Value {
storageName := llvmFunctionStorageName(s.Name, llvmCallConv(s.ABI()))
if f := CurrentModule.NamedFunction(storageName); !f.IsNil() {
attachGoObjSymbolRef(f, s)
setGoObjABI0SymbolNameMetadata(f, s.Name, llvmCallConv(s.ABI()))
return f
}
f := llvm.AddFunction(CurrentModule, storageName, llvm.FunctionType(GlobalCtxt.VoidType(), nil, false))
f.SetFunctionCallConv(llvmCallConv(s.ABI()))
attachGoObjSymbolRef(f, s)
setGoObjABI0SymbolNameMetadata(f, s.Name, llvmCallConv(s.ABI()))
return f
}
if g := CurrentModule.NamedGlobal(s.Name); !g.IsNil() {
Expand Down
3 changes: 0 additions & 3 deletions src/cmd/compile/internal/ssa/llvmdebug.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,6 @@ func llvmDebugSubprogramValue(sym *obj.LSym, sp llvm.Metadata, abstractValues ma
llvm.FunctionType(GlobalCtxt.VoidType(), nil, false))
value.SetFunctionCallConv(llvmCallConv(sym.ABI()))
value.SetLinkage(llvm.WeakAnyLinkage)
value.SetGlobalMetadata(GlobalCtxt.MDKindID(goObjSymbolNameMD), GlobalCtxt.MDNode([]llvm.Metadata{
GlobalCtxt.MDString(canonicalName),
}))
value.SetSubprogram(sp)
b := GlobalCtxt.NewBuilder()
b.SetInsertPointAtEnd(GlobalCtxt.AddBasicBlock(value, "goobj.abstract"))
Expand Down
9 changes: 6 additions & 3 deletions src/cmd/compile/internal/ssa/ssa2llvm.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"cmd/internal/src"
"fmt"
"internal/buildcfg"
"strings"

"github.com/goallc/go-llvm"
)
Expand Down Expand Up @@ -64,6 +65,7 @@ type llvmAddressedResult struct {
// the standard Go linker can call directly.
const goABIInternalCallConv llvm.CallConv = 22
const goABI0CallConv llvm.CallConv = 23
const goABI0SymbolSuffix = "<ABI0>"
const goResultsTupleAttr = "go_results_tuple"
const goGCStrategy = "goallc"
const goGCLeafFunctionAttr = "gc-leaf-function"
Expand All @@ -76,7 +78,6 @@ const goDeferResultMD = "goallc.defer_result"
const goOpenDeferBitsMD = "goallc.open_defer_bits"
const goOpenDeferSlotsMD = "goallc.open_defer_slots"
const goObjMarkerRelocMD = "goobj.marker_reloc"
const goObjSymbolNameMD = "goobj.symbol.name"
const goObjSymbolIndexMD = "goobj.symbol.index"
const llvmFramePointerAttr = "frame-pointer"
const llvmFramePointerNonLeaf = "non-leaf"
Expand Down Expand Up @@ -241,8 +242,11 @@ func configureLLVMCall(call llvm.Value, sig llvmFuncSignature) {
}

func llvmFunctionStorageName(name string, cc llvm.CallConv) string {
if strings.HasSuffix(name, goABI0SymbolSuffix) {
base.Fatalf("Go symbol name %q uses reserved LLVM ABI suffix", name)
}
if cc == goABI0CallConv {
return name + ".goallc.abi0"
return name + goABI0SymbolSuffix
}
return name
}
Expand Down Expand Up @@ -272,7 +276,6 @@ func getOrInsertLLVMFunction(name string, sig llvmFuncSignature, cc llvm.CallCon
replacement.SetName(storageName)
fn = replacement
}
setGoObjABI0SymbolNameMetadata(fn, name, cc)
configureLLVMFunction(fn, sig, cc)
return fn
}
Expand Down
15 changes: 15 additions & 0 deletions src/cmd/compile/internal/ssa/ssa2llvm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,21 @@ func TestLLVMCurrentGRegister(t *testing.T) {
}
}

func TestLLVMFunctionStorageName(t *testing.T) {
for _, test := range []struct {
name string
cc llvm.CallConv
want string
}{
{"runtime.morestack", goABI0CallConv, "runtime.morestack<ABI0>"},
{"runtime.morestack", goABIInternalCallConv, "runtime.morestack"},
} {
if got := llvmFunctionStorageName(test.name, test.cc); got != test.want {
t.Errorf("llvmFunctionStorageName(%q, %d) = %q, want %q", test.name, test.cc, got, test.want)
}
}
}

func TestLLVMAMD64MapPackedByteLowering(t *testing.T) {
oldTypes := type2lTypes
oldModule := CurrentModule
Expand Down
Loading
Loading