35 class SpecialiseClone;
49 G(
const G &that) : Symbol(that.Symbol), Offset(that.Offset) {}
50 G(
Global *symbol, int64_t offset) : Symbol(symbol), Offset(offset) {}
52 bool operator==(
const G &that)
const
54 return Symbol == that.Symbol && Offset == that.Offset;
58 Parameter(
const Parameter &that);
59 Parameter(
const APInt &v) : K(Kind::INT), IntVal(v) {}
60 Parameter(
const APFloat &v) : K(Kind::FLOAT), FloatVal(v) {}
61 Parameter(
Global *g, int64_t i) : K(Kind::GLOBAL), GlobalVal(g, i) {}
64 bool operator==(
const Parameter &that)
const;
66 Parameter &operator=(
const Parameter &that);
68 Value *ToValue()
const;
80 using Parameters = std::map<unsigned, Parameter>;
83 struct ParameterHash {
84 size_t operator()(
const Parameter ¶m)
const;
87 struct ParametersHash {
88 size_t operator()(
const Parameters ¶m)
const;
94 const Parameters ¶ms,
95 const std::set<CallSite *> &callSites
98 Func *Specialise(
Func *oldFunc,
const Parameters ¶ms);
100 std::pair<std::vector<Ref<Inst>>, std::vector<TypeFlag>>
101 Specialise(CallSite *inst,
const Parameters ¶ms);