Skip to content

Commit 542a378

Browse files
committedFeb 9, 2021
SIL: add FunctionRefInst::getReferencedFunction()
If we know that we have a FunctionRefInst (and not another variant of FunctionRefBaseInst), we know that getting the referenced function will not be null (in contrast to FunctionRefBaseInst::getReferencedFunctionOrNull). NFC
1 parent ffeb1d5 commit 542a378

26 files changed

+41
-54
lines changed
 

‎include/swift/SIL/SILCloner.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -967,7 +967,7 @@ template<typename ImplClass>
967967
void
968968
SILCloner<ImplClass>::visitFunctionRefInst(FunctionRefInst *Inst) {
969969
SILFunction *OpFunction =
970-
getOpFunction(Inst->getInitiallyReferencedFunction());
970+
getOpFunction(Inst->getReferencedFunction());
971971
getBuilder().setCurrentDebugScope(getOpScope(Inst->getDebugScope()));
972972
recordClonedInstruction(Inst, getBuilder().createFunctionRef(
973973
getOpLocation(Inst->getLoc()), OpFunction));

‎include/swift/SIL/SILInstruction.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -2756,9 +2756,9 @@ class LiteralInst : public SingleValueInstruction {
27562756
};
27572757

27582758
class FunctionRefBaseInst : public LiteralInst {
2759+
protected:
27592760
SILFunction *f;
27602761

2761-
protected:
27622762
FunctionRefBaseInst(SILInstructionKind Kind, SILDebugLocation DebugLoc,
27632763
SILFunction *F, TypeExpansionContext context);
27642764

@@ -2819,6 +2819,9 @@ class FunctionRefInst : public FunctionRefBaseInst {
28192819
TypeExpansionContext context);
28202820

28212821
public:
2822+
/// Return the referenced function.
2823+
SILFunction *getReferencedFunction() const { return f; }
2824+
28222825
static bool classof(SILNodePointer node) {
28232826
return node->getKind() == SILNodeKind::FunctionRefInst;
28242827
}

‎include/swift/SIL/TypeSubstCloner.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class TypeSubstCloner : public SILClonerWithScopes<ImplClass> {
6969

7070
if (!Cloner.Inlining) {
7171
FunctionRefInst *FRI = dyn_cast<FunctionRefInst>(AI.getCallee());
72-
if (FRI && FRI->getInitiallyReferencedFunction() == AI.getFunction() &&
72+
if (FRI && FRI->getReferencedFunction() == AI.getFunction() &&
7373
Subs == Cloner.SubsMap) {
7474
// Handle recursions by replacing the apply to the callee with an
7575
// apply to the newly specialized function, but only if substitutions

‎lib/SIL/IR/Linker.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ void SILLinkerVisitor::visitPartialApplyInst(PartialApplyInst *PAI) {
175175
}
176176

177177
void SILLinkerVisitor::visitFunctionRefInst(FunctionRefInst *FRI) {
178-
maybeAddFunctionToWorklist(FRI->getInitiallyReferencedFunction());
178+
maybeAddFunctionToWorklist(FRI->getReferencedFunction());
179179
}
180180

181181
void SILLinkerVisitor::visitDynamicFunctionRefInst(

‎lib/SIL/IR/SILGlobalVariable.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ SILFunction *swift::getCalleeOfOnceCall(BuiltinInst *BI) {
241241
"Expected C function representation!");
242242

243243
if (auto *FR = dyn_cast<FunctionRefInst>(Callee))
244-
return FR->getReferencedFunctionOrNull();
244+
return FR->getReferencedFunction();
245245

246246
return nullptr;
247247
}

‎lib/SIL/IR/SILInstruction.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -475,8 +475,7 @@ namespace {
475475

476476
bool visitFunctionRefInst(const FunctionRefInst *RHS) {
477477
auto *X = cast<FunctionRefInst>(LHS);
478-
return X->getInitiallyReferencedFunction() ==
479-
RHS->getInitiallyReferencedFunction();
478+
return X->getReferencedFunction() == RHS->getReferencedFunction();
480479
}
481480
bool visitDynamicFunctionRefInst(const DynamicFunctionRefInst *RHS) {
482481
auto *X = cast<DynamicFunctionRefInst>(LHS);

‎lib/SIL/IR/SILPrinter.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -957,7 +957,7 @@ class SILPrinter : public SILInstructionVisitor<SILPrinter> {
957957
void print(const SILInstruction *I) {
958958
if (auto *FRI = dyn_cast<FunctionRefInst>(I))
959959
*this << " // function_ref "
960-
<< demangleSymbol(FRI->getInitiallyReferencedFunction()->getName())
960+
<< demangleSymbol(FRI->getReferencedFunction()->getName())
961961
<< "\n";
962962
else if (auto *FRI = dyn_cast<DynamicFunctionRefInst>(I))
963963
*this << " // dynamic_function_ref "
@@ -1270,7 +1270,7 @@ class SILPrinter : public SILInstructionVisitor<SILPrinter> {
12701270
}
12711271

12721272
void visitFunctionRefInst(FunctionRefInst *FRI) {
1273-
FRI->getInitiallyReferencedFunction()->printName(PrintState.OS);
1273+
FRI->getReferencedFunction()->printName(PrintState.OS);
12741274
*this << " : " << FRI->getType();
12751275
}
12761276
void visitDynamicFunctionRefInst(DynamicFunctionRefInst *FRI) {

‎lib/SILOptimizer/Analysis/ArraySemantic.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ ArrayCallKind swift::getArraySemanticsKind(SILFunction *f) {
6666
static ParameterConvention
6767
getSelfParameterConvention(ApplyInst *SemanticsCall) {
6868
FunctionRefInst *FRI = cast<FunctionRefInst>(SemanticsCall->getCallee());
69-
SILFunction *F = FRI->getInitiallyReferencedFunction();
69+
SILFunction *F = FRI->getReferencedFunction();
7070
auto FnTy = F->getLoweredFunctionType();
7171

7272
return FnTy->getSelfParameter().getConvention();
@@ -78,7 +78,7 @@ bool swift::ArraySemanticsCall::isValidSignature() {
7878
assert(SemanticsCall && getKind() != ArrayCallKind::kNone &&
7979
"Need an array semantic call");
8080
FunctionRefInst *FRI = cast<FunctionRefInst>(SemanticsCall->getCallee());
81-
SILFunction *F = FRI->getInitiallyReferencedFunction();
81+
SILFunction *F = FRI->getReferencedFunction();
8282
auto FnTy = F->getLoweredFunctionType();
8383
auto &Mod = F->getModule();
8484

@@ -203,7 +203,7 @@ ArrayCallKind swift::ArraySemanticsCall::getKind() const {
203203
return ArrayCallKind::kNone;
204204

205205
auto F = cast<FunctionRefInst>(SemanticsCall->getCallee())
206-
->getInitiallyReferencedFunction();
206+
->getReferencedFunction();
207207

208208
return getArraySemanticsKind(F);
209209
}

‎lib/SILOptimizer/Analysis/BasicCalleeAnalysis.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ CalleeList CalleeCache::getCalleeListForCalleeKind(SILValue Callee) const {
256256

257257
case ValueKind::FunctionRefInst:
258258
return CalleeList(
259-
cast<FunctionRefInst>(Callee)->getInitiallyReferencedFunction());
259+
cast<FunctionRefInst>(Callee)->getReferencedFunction());
260260

261261
case ValueKind::DynamicFunctionRefInst:
262262
case ValueKind::PreviousDynamicFunctionRefInst:

‎lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ using namespace swift::autodiff;
2929

3030
static bool isWithoutDerivative(SILValue v) {
3131
if (auto *fnRef = dyn_cast<FunctionRefInst>(v))
32-
return fnRef->getReferencedFunctionOrNull()->hasSemanticsAttr(
32+
return fnRef->getReferencedFunction()->hasSemanticsAttr(
3333
"autodiff.nonvarying");
3434
return false;
3535
}

‎lib/SILOptimizer/Differentiation/Thunk.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -852,7 +852,7 @@ getOrCreateSubsetParametersThunkForDerivativeFunction(
852852
StringRef origName;
853853
if (auto *origFnRef =
854854
peerThroughFunctionConversions<FunctionRefInst>(origFnOperand)) {
855-
origName = origFnRef->getInitiallyReferencedFunction()->getName();
855+
origName = origFnRef->getReferencedFunction()->getName();
856856
} else if (auto *origMethodInst =
857857
peerThroughFunctionConversions<MethodInst>(origFnOperand)) {
858858
origName = origMethodInst->getMember()
@@ -905,7 +905,7 @@ getOrCreateSubsetParametersThunkForDerivativeFunction(
905905
SILValue assocRef;
906906
if (auto *derivativeFnRef =
907907
peerThroughFunctionConversions<FunctionRefInst>(derivativeFn)) {
908-
auto *assoc = derivativeFnRef->getReferencedFunctionOrNull();
908+
auto *assoc = derivativeFnRef->getReferencedFunction();
909909
assocRef = builder.createFunctionRef(loc, assoc);
910910
} else if (auto *assocMethodInst =
911911
peerThroughFunctionConversions<WitnessMethodInst>(

‎lib/SILOptimizer/IPO/ClosureSpecializer.cpp

+4-8
Original file line numberDiff line numberDiff line change
@@ -184,18 +184,15 @@ class CallSiteDescriptor {
184184
CallSiteDescriptor &operator=(CallSiteDescriptor &&) =default;
185185

186186
SILFunction *getApplyCallee() const {
187-
return cast<FunctionRefInst>(AI.getCallee())
188-
->getInitiallyReferencedFunction();
187+
return cast<FunctionRefInst>(AI.getCallee())->getReferencedFunction();
189188
}
190189

191190
SILFunction *getClosureCallee() const {
192191
if (auto *PAI = dyn_cast<PartialApplyInst>(getClosure()))
193-
return cast<FunctionRefInst>(PAI->getCallee())
194-
->getInitiallyReferencedFunction();
192+
return cast<FunctionRefInst>(PAI->getCallee())->getReferencedFunction();
195193

196194
auto *TTTFI = cast<ThinToThickFunctionInst>(getClosure());
197-
return cast<FunctionRefInst>(TTTFI->getCallee())
198-
->getInitiallyReferencedFunction();
195+
return cast<FunctionRefInst>(TTTFI->getCallee())->getReferencedFunction();
199196
}
200197

201198
bool closureHasRefSemanticContext() const {
@@ -565,8 +562,7 @@ static bool isSupportedClosure(const SILInstruction *Closure) {
565562
// Bail if any of the arguments are passed by address and
566563
// are not @inout.
567564
// This is a temporary limitation.
568-
auto ClosureCallee = FRI->getReferencedFunctionOrNull();
569-
assert(ClosureCallee);
565+
auto ClosureCallee = FRI->getReferencedFunction();
570566
auto ClosureCalleeConv = ClosureCallee->getConventions();
571567
unsigned ClosureArgIdx =
572568
ClosureCalleeConv.getNumSILArguments() - PAI->getNumArguments();

‎lib/SILOptimizer/IPO/DeadFunctionElimination.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ class FunctionLivenessComputation {
334334
MethodInfo *mi = getMethodInfo(funcDecl, /*isWitnessTable*/ false);
335335
ensureAliveClassMethod(mi, dyn_cast<FuncDecl>(funcDecl), MethodCl);
336336
} else if (auto *FRI = dyn_cast<FunctionRefInst>(&I)) {
337-
ensureAlive(FRI->getInitiallyReferencedFunction());
337+
ensureAlive(FRI->getReferencedFunction());
338338
} else if (auto *FRI = dyn_cast<DynamicFunctionRefInst>(&I)) {
339339
ensureAlive(FRI->getInitiallyReferencedFunction());
340340
} else if (auto *FRI = dyn_cast<PreviousDynamicFunctionRefInst>(&I)) {

‎lib/SILOptimizer/Mandatory/CapturePromotion.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ SILFunction *ClosureCloner::constructClonedFunction(
539539
SILFunction *f = pai->getFunction();
540540

541541
// Create the Cloned Name for the function.
542-
SILFunction *origF = fri->getReferencedFunctionOrNull();
542+
SILFunction *origF = fri->getReferencedFunction();
543543

544544
IsSerialized_t isSerialized = IsNotSerialized;
545545
if (f->isSerialized() && origF->isSerialized())

‎lib/SILOptimizer/Mandatory/Differentiation.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ static SILValue reapplyFunctionConversion(
416416
// `differentiable_function` of the function-typed thunk argument.
417417
auto isReabstractionThunkCallee = [&]() -> bool {
418418
auto *fri = dyn_cast<FunctionRefInst>(oldFunc);
419-
return fri && fri->getReferencedFunctionOrNull()->isThunk() ==
419+
return fri && fri->getReferencedFunction()->isThunk() ==
420420
IsReabstractionThunk;
421421
};
422422
if (isReabstractionThunkCallee()) {
@@ -513,8 +513,7 @@ emitDerivativeFunctionReference(
513513
if (auto *originalFRI =
514514
peerThroughFunctionConversions<FunctionRefInst>(original)) {
515515
auto loc = originalFRI->getLoc();
516-
auto *originalFn = originalFRI->getReferencedFunctionOrNull();
517-
assert(originalFn);
516+
auto *originalFn = originalFRI->getReferencedFunction();
518517
auto originalFnTy = originalFn->getLoweredFunctionType();
519518
auto *desiredParameterIndices = desiredConfig.parameterIndices;
520519
auto *desiredResultIndices = desiredConfig.resultIndices;
@@ -1005,7 +1004,7 @@ static SILValue promoteCurryThunkApplicationToDifferentiableFunction(
10051004
auto *thunkRef = dyn_cast<FunctionRefInst>(ai->getCallee());
10061005
if (!thunkRef)
10071006
return nullptr;
1008-
auto *thunk = thunkRef->getReferencedFunctionOrNull();
1007+
auto *thunk = thunkRef->getReferencedFunction();
10091008
auto thunkTy = thunk->getLoweredFunctionType();
10101009
auto thunkResult = thunkTy->getSingleResult();
10111010
auto resultFnTy = thunkResult.getInterfaceType()->getAs<SILFunctionType>();

‎lib/SILOptimizer/Mandatory/MandatoryInlining.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ getCalleeFunction(SILFunction *F, FullApplySite AI, bool &IsThick,
741741
if (!FRI)
742742
return nullptr;
743743

744-
SILFunction *CalleeFunction = FRI->getReferencedFunctionOrNull();
744+
SILFunction *CalleeFunction = FRI->getReferencedFunction();
745745

746746
switch (CalleeFunction->getRepresentation()) {
747747
case SILFunctionTypeRepresentation::Thick:

‎lib/SILOptimizer/SILCombiner/SILCombinerApplyVisitors.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1422,7 +1422,7 @@ static bool knowHowToEmitReferenceCountInsts(ApplyInst *Call) {
14221422
FunctionRefInst *FRI = dyn_cast<FunctionRefInst>(Call->getCallee());
14231423
if (!FRI)
14241424
return false;
1425-
SILFunction *F = FRI->getReferencedFunctionOrNull();
1425+
SILFunction *F = FRI->getReferencedFunction();
14261426
auto FnTy = F->getLoweredFunctionType();
14271427

14281428
// Look at the result type.
@@ -1445,7 +1445,7 @@ static bool knowHowToEmitReferenceCountInsts(ApplyInst *Call) {
14451445
/// Add reference counting operations equal to the effect of the call.
14461446
static void emitMatchingRCAdjustmentsForCall(ApplyInst *Call, SILValue OnX) {
14471447
FunctionRefInst *FRI = cast<FunctionRefInst>(Call->getCallee());
1448-
SILFunction *F = FRI->getReferencedFunctionOrNull();
1448+
SILFunction *F = FRI->getReferencedFunction();
14491449
auto FnTy = F->getLoweredFunctionType();
14501450
assert(FnTy->getNumResults() == 1);
14511451
auto ResultInfo = FnTy->getResults()[0];

‎lib/SILOptimizer/Transforms/AllocBoxToStack.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,7 @@ specializeApplySite(SILOptFunctionBuilder &FuncBuilder, ApplySite Apply,
888888
AllocBoxToStackState &pass) {
889889
auto *FRI = cast<FunctionRefInst>(Apply.getCallee());
890890
assert(FRI && "Expected a direct ApplySite");
891-
auto *F = FRI->getReferencedFunctionOrNull();
891+
auto *F = FRI->getReferencedFunction();
892892
assert(F && "Expected a referenced function!");
893893

894894
IsSerialized_t Serialized = IsNotSerialized;

‎lib/SILOptimizer/Transforms/CSE.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ class HashVisitor : public SILInstructionVisitor<HashVisitor, llvm::hash_code> {
144144
}
145145

146146
hash_code visitFunctionRefInst(FunctionRefInst *X) {
147-
return llvm::hash_combine(X->getKind(),
148-
X->getInitiallyReferencedFunction());
147+
return llvm::hash_combine(X->getKind(), X->getReferencedFunction());
149148
}
150149

151150
hash_code visitGlobalAddrInst(GlobalAddrInst *X) {

‎lib/SILOptimizer/Transforms/Outliner.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ static bool matchSwitch(SwitchInfo &SI, SILInstruction *Inst,
485485

486486
// Check that we call the _unconditionallyBridgeFromObjectiveC witness.
487487
auto NativeType = Apply->getType().getASTType();
488-
auto *BridgeFun = FunRef->getInitiallyReferencedFunction();
488+
auto *BridgeFun = FunRef->getReferencedFunction();
489489
auto *SwiftModule = BridgeFun->getModule().getSwiftModule();
490490
// Not every type conforms to the ObjectiveCBridgeable protocol in such a case
491491
// getBridgeFromObjectiveC returns SILDeclRef().
@@ -821,7 +821,7 @@ BridgedArgument BridgedArgument::match(unsigned ArgIdx, SILValue Arg,
821821

822822
// Make sure we are calling the actual bridge witness.
823823
auto NativeType = BridgedValue->getType().getASTType();
824-
auto *BridgeFun = FunRef->getInitiallyReferencedFunction();
824+
auto *BridgeFun = FunRef->getReferencedFunction();
825825
auto *SwiftModule = BridgeFun->getModule().getSwiftModule();
826826
// Not every type conforms to the ObjectiveCBridgeable protocol in such a case
827827
// getBridgeToObjectiveC returns SILDeclRef().

‎lib/SILOptimizer/UtilityPasses/BugReducerTester.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class BugReducerTester : public SILFunctionTransform {
127127
}
128128

129129
auto *FRI = dyn_cast<FunctionRefInst>(FAS.getCallee());
130-
if (!FRI || !FRI->getInitiallyReferencedFunction()->getName().equals(
130+
if (!FRI || !FRI->getReferencedFunction()->getName().equals(
131131
FunctionTarget)) {
132132
++II;
133133
continue;

‎lib/SILOptimizer/Utils/ConstExpr.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ SymbolicValue ConstExprFunctionState::computeConstantValue(SILValue value) {
287287
return SymbolicValue::getString(sli->getValue(), evaluator.getAllocator());
288288

289289
if (auto *fri = dyn_cast<FunctionRefInst>(value))
290-
return SymbolicValue::getFunction(fri->getInitiallyReferencedFunction());
290+
return SymbolicValue::getFunction(fri->getReferencedFunction());
291291

292292
// If we have a reference to a metatype, constant fold any substitutable
293293
// types.

‎lib/SILOptimizer/Utils/Generics.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2521,7 +2521,7 @@ void swift::trySpecializeApplyOfGeneric(
25212521
assert(Apply.hasSubstitutions() && "Expected an apply with substitutions!");
25222522
auto *F = Apply.getFunction();
25232523
auto *RefF =
2524-
cast<FunctionRefInst>(Apply.getCallee())->getReferencedFunctionOrNull();
2524+
cast<FunctionRefInst>(Apply.getCallee())->getReferencedFunction();
25252525

25262526
LLVM_DEBUG(llvm::dbgs() << "\n\n*** ApplyInst in function " << F->getName()
25272527
<< ":\n";

‎lib/SILOptimizer/Utils/InstOptUtils.cpp

+1-10
Original file line numberDiff line numberDiff line change
@@ -603,17 +603,8 @@ void swift::recursivelyDeleteTriviallyDeadInstructions(
603603

604604
// If we have a function ref inst, we need to especially drop its function
605605
// argument so that it gets a proper ref decrement.
606-
auto *fri = dyn_cast<FunctionRefInst>(inst);
607-
if (fri && fri->getInitiallyReferencedFunction())
606+
if (auto *fri = dyn_cast<FunctionRefBaseInst>(inst))
608607
fri->dropReferencedFunction();
609-
610-
auto *dfri = dyn_cast<DynamicFunctionRefInst>(inst);
611-
if (dfri && dfri->getInitiallyReferencedFunction())
612-
dfri->dropReferencedFunction();
613-
614-
auto *pfri = dyn_cast<PreviousDynamicFunctionRefInst>(inst);
615-
if (pfri && pfri->getInitiallyReferencedFunction())
616-
pfri->dropReferencedFunction();
617608
}
618609

619610
for (auto inst : deadInsts) {

‎lib/SILOptimizer/Utils/SpecializationMangler.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,12 @@ FunctionSignatureSpecializationMangler::mangleClosureProp(SILInstruction *Inst)
182182
// restriction is removed, the assert here will fire.
183183
if (auto *TTTFI = dyn_cast<ThinToThickFunctionInst>(Inst)) {
184184
auto *FRI = cast<FunctionRefInst>(TTTFI->getCallee());
185-
appendIdentifier(FRI->getInitiallyReferencedFunction()->getName());
185+
appendIdentifier(FRI->getReferencedFunction()->getName());
186186
return;
187187
}
188188
auto *PAI = cast<PartialApplyInst>(Inst);
189189
auto *FRI = cast<FunctionRefInst>(PAI->getCallee());
190-
appendIdentifier(FRI->getInitiallyReferencedFunction()->getName());
190+
appendIdentifier(FRI->getReferencedFunction()->getName());
191191

192192
// Then we mangle the types of the arguments that the partial apply is
193193
// specializing.

‎lib/Serialization/SerializeSIL.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1416,7 +1416,7 @@ void SILSerializer::writeSILInstruction(const SILInstruction &SI) {
14161416
// Use SILOneOperandLayout to specify the function type and the function
14171417
// name (IdentifierID).
14181418
const FunctionRefInst *FRI = cast<FunctionRefInst>(&SI);
1419-
SILFunction *ReferencedFunction = FRI->getInitiallyReferencedFunction();
1419+
SILFunction *ReferencedFunction = FRI->getReferencedFunction();
14201420
unsigned abbrCode = SILAbbrCodes[SILOneOperandLayout::Code];
14211421
SILOneOperandLayout::emitRecord(Out, ScratchRecord, abbrCode,
14221422
(unsigned)SI.getKind(), 0,

0 commit comments

Comments
 (0)