Skip to content

Commit

Permalink
[llvm][NFC] Consolidate equivalent function type parsing code into
Browse files Browse the repository at this point in the history
single function

Differential Revision: https://reviews.llvm.org/D135296
  • Loading branch information
PiJoules committed Oct 5, 2022
1 parent 40126e6 commit 4f6477a
Showing 1 changed file with 28 additions and 36 deletions.
64 changes: 28 additions & 36 deletions llvm/lib/AsmParser/LLParser.cpp
Expand Up @@ -6414,6 +6414,25 @@ bool LLParser::parseIndirectBr(Instruction *&Inst, PerFunctionState &PFS) {
return false;
}

// If RetType is a non-function pointer type, then this is the short syntax
// for the call, which means that RetType is just the return type. Infer the
// rest of the function argument types from the arguments that are present.
static bool resolveFunctionType(Type *RetType, const SmallVector<ParamInfo, 16> &ArgList, FunctionType *&FuncTy) {
FuncTy = dyn_cast<FunctionType>(RetType);
if (!FuncTy) {
// Pull out the types of all of the arguments...
std::vector<Type*> ParamTypes;
for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
ParamTypes.push_back(ArgList[i].V->getType());

if (!FunctionType::isValidReturnType(RetType))
return error(RetTypeLoc, "Invalid result type for LLVM function");

FuncTy = FunctionType::get(RetType, ParamTypes, false);
}
return false;
}

/// parseInvoke
/// ::= 'invoke' OptionalCallingConv OptionalAttrs Type Value ParamList
/// OptionalAttrs 'to' TypeAndValue 'unwind' TypeAndValue
Expand Down Expand Up @@ -6447,18 +6466,9 @@ bool LLParser::parseInvoke(Instruction *&Inst, PerFunctionState &PFS) {
// If RetType is a non-function pointer type, then this is the short syntax
// for the call, which means that RetType is just the return type. Infer the
// rest of the function argument types from the arguments that are present.
FunctionType *Ty = dyn_cast<FunctionType>(RetType);
if (!Ty) {
// Pull out the types of all of the arguments...
std::vector<Type*> ParamTypes;
for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
ParamTypes.push_back(ArgList[i].V->getType());

if (!FunctionType::isValidReturnType(RetType))
return error(RetTypeLoc, "Invalid result type for LLVM function");

Ty = FunctionType::get(RetType, ParamTypes, false);
}
FunctionType *Ty;
if (resolveFunctionType(RetType, ArgList, Ty))
return true;

CalleeID.FTy = Ty;

Expand Down Expand Up @@ -6773,18 +6783,9 @@ bool LLParser::parseCallBr(Instruction *&Inst, PerFunctionState &PFS) {
// If RetType is a non-function pointer type, then this is the short syntax
// for the call, which means that RetType is just the return type. Infer the
// rest of the function argument types from the arguments that are present.
FunctionType *Ty = dyn_cast<FunctionType>(RetType);
if (!Ty) {
// Pull out the types of all of the arguments...
std::vector<Type *> ParamTypes;
for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
ParamTypes.push_back(ArgList[i].V->getType());

if (!FunctionType::isValidReturnType(RetType))
return error(RetTypeLoc, "Invalid result type for LLVM function");

Ty = FunctionType::get(RetType, ParamTypes, false);
}
FunctionType *Ty;
if (resolveFunctionType(RetType, ArgList, Ty))
return true;

CalleeID.FTy = Ty;

Expand Down Expand Up @@ -7178,18 +7179,9 @@ bool LLParser::parseCall(Instruction *&Inst, PerFunctionState &PFS,
// If RetType is a non-function pointer type, then this is the short syntax
// for the call, which means that RetType is just the return type. Infer the
// rest of the function argument types from the arguments that are present.
FunctionType *Ty = dyn_cast<FunctionType>(RetType);
if (!Ty) {
// Pull out the types of all of the arguments...
std::vector<Type*> ParamTypes;
for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
ParamTypes.push_back(ArgList[i].V->getType());

if (!FunctionType::isValidReturnType(RetType))
return error(RetTypeLoc, "Invalid result type for LLVM function");

Ty = FunctionType::get(RetType, ParamTypes, false);
}
FunctionType *Ty;
if (resolveFunctionType(RetType, ArgList, Ty))
return true;

CalleeID.FTy = Ty;

Expand Down

0 comments on commit 4f6477a

Please sign in to comment.