[llvm] 4f6477a - [llvm][NFC] Consolidate equivalent function type parsing code into
Leonard Chan via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 5 11:41:39 PDT 2022
Author: Leonard Chan
Date: 2022-10-05T18:41:19Z
New Revision: 4f6477a615d18dac6cc3aa0d3fb946191f8168c9
URL: https://github.com/llvm/llvm-project/commit/4f6477a615d18dac6cc3aa0d3fb946191f8168c9
DIFF: https://github.com/llvm/llvm-project/commit/4f6477a615d18dac6cc3aa0d3fb946191f8168c9.diff
LOG: [llvm][NFC] Consolidate equivalent function type parsing code into
single function
Differential Revision: https://reviews.llvm.org/D135296
Added:
Modified:
llvm/lib/AsmParser/LLParser.cpp
Removed:
################################################################################
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 1b072f8451a06..99c369c0ef588 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -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
@@ -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;
@@ -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;
@@ -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;
More information about the llvm-commits
mailing list