type CallSite struct {
Callee *ir.Func
Call *ir.CallExpr
+ parent *CallSite
Assign ir.Node
Flags CSPropBits
Score int
ScoreMask scoreAdjustTyp
ID uint
+ aux uint8
}
// CallSiteTab is a table of call sites, keyed by call expr.
// with many calls that share the same auto-generated pos.
type CallSiteTab map[*ir.CallExpr]*CallSite
-// Package-level table of callsites.
-var cstab = CallSiteTab{}
-
-func GetCallSiteScore(ce *ir.CallExpr) (bool, int) {
- cs, ok := cstab[ce]
- if !ok {
- return false, 0
- }
- return true, cs.Score
-}
-
type CSPropBits uint32
const (
CallSiteInInitFunc
)
+type csAuxBits uint8
+
+const (
+ csAuxInlined = 1 << iota
+)
+
// encodedCallSiteTab is a table keyed by "encoded" callsite
// (stringified src.XPos plus call site ID) mapping to a value of call
// property bits and score.
return sb.String()
}
-func encodeCallSiteKey(cs *CallSite) string {
+func EncodeCallSiteKey(cs *CallSite) string {
var sb strings.Builder
// FIXME: maybe rewrite line offsets relative to function start?
sb.WriteString(fmtFullPos(cs.Call.Pos()))
func buildEncodedCallSiteTab(tab CallSiteTab) encodedCallSiteTab {
r := make(encodedCallSiteTab)
for _, cs := range tab {
- k := encodeCallSiteKey(cs)
+ k := EncodeCallSiteKey(cs)
r[k] = propsAndScore{
props: cs.Flags,
score: cs.Score,