[llvm] 1fbc6b2 - [SPIR-V] Use llvm::Optional for builtin lowering result.
Aleksandr Bezzubikov via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 30 23:25:58 PDT 2022
Author: Aleksandr Bezzubikov
Date: 2022-08-30T23:25:49-07:00
New Revision: 1fbc6b26a237f01b8f1a5c5228450918bd055ca2
URL: https://github.com/llvm/llvm-project/commit/1fbc6b26a237f01b8f1a5c5228450918bd055ca2
DIFF: https://github.com/llvm/llvm-project/commit/1fbc6b26a237f01b8f1a5c5228450918bd055ca2.diff
LOG: [SPIR-V] Use llvm::Optional for builtin lowering result.
Replace result type std::pair<bool, bool> of lowerBuiltin with
a nice and convenient Optional<bool>.
Reviewed By: iliya-diyachkov, MaskRay
Differential Revision: https://reviews.llvm.org/D132802
Added:
Modified:
llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
llvm/lib/Target/SPIRV/SPIRVBuiltins.h
llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp b/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
index 6af5f58146d16..892b3a015f534 100644
--- a/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp
@@ -1534,11 +1534,12 @@ static bool generateVectorLoadStoreInst(const SPIRV::IncomingCall *Call,
/// Lowers a builtin funtion call using the provided \p DemangledCall skeleton
/// and external instruction \p Set.
namespace SPIRV {
-std::pair<bool, bool>
-lowerBuiltin(const StringRef DemangledCall, InstructionSet::InstructionSet Set,
- MachineIRBuilder &MIRBuilder, const Register OrigRet,
- const Type *OrigRetTy, const SmallVectorImpl<Register> &Args,
- SPIRVGlobalRegistry *GR) {
+Optional<bool> lowerBuiltin(const StringRef DemangledCall,
+ SPIRV::InstructionSet::InstructionSet Set,
+ MachineIRBuilder &MIRBuilder,
+ const Register OrigRet, const Type *OrigRetTy,
+ const SmallVectorImpl<Register> &Args,
+ SPIRVGlobalRegistry *GR) {
LLVM_DEBUG(dbgs() << "Lowering builtin call: " << DemangledCall << "\n");
// SPIR-V type and return register.
@@ -1558,7 +1559,7 @@ lowerBuiltin(const StringRef DemangledCall, InstructionSet::InstructionSet Set,
if (!Call) {
LLVM_DEBUG(dbgs() << "Builtin record was not found!");
- return {false, false};
+ return {};
}
// TODO: check if the provided args meet the builtin requirments.
@@ -1570,48 +1571,45 @@ lowerBuiltin(const StringRef DemangledCall, InstructionSet::InstructionSet Set,
// Match the builtin with implementation based on the grouping.
switch (Call->Builtin->Group) {
case SPIRV::Extended:
- return {true, generateExtInst(Call.get(), MIRBuilder, GR)};
+ return generateExtInst(Call.get(), MIRBuilder, GR);
case SPIRV::Relational:
- return {true, generateRelationalInst(Call.get(), MIRBuilder, GR)};
+ return generateRelationalInst(Call.get(), MIRBuilder, GR);
case SPIRV::Group:
- return {true, generateGroupInst(Call.get(), MIRBuilder, GR)};
+ return generateGroupInst(Call.get(), MIRBuilder, GR);
case SPIRV::Variable:
- return {true, generateBuiltinVar(Call.get(), MIRBuilder, GR)};
+ return generateBuiltinVar(Call.get(), MIRBuilder, GR);
case SPIRV::Atomic:
- return {true, generateAtomicInst(Call.get(), MIRBuilder, GR)};
+ return generateAtomicInst(Call.get(), MIRBuilder, GR);
case SPIRV::Barrier:
- return {true, generateBarrierInst(Call.get(), MIRBuilder, GR)};
+ return generateBarrierInst(Call.get(), MIRBuilder, GR);
case SPIRV::Dot:
- return {true, generateDotOrFMulInst(Call.get(), MIRBuilder, GR)};
+ return generateDotOrFMulInst(Call.get(), MIRBuilder, GR);
case SPIRV::GetQuery:
- return {true, generateGetQueryInst(Call.get(), MIRBuilder, GR)};
+ return generateGetQueryInst(Call.get(), MIRBuilder, GR);
case SPIRV::ImageSizeQuery:
- return {true, generateImageSizeQueryInst(Call.get(), MIRBuilder, GR)};
+ return generateImageSizeQueryInst(Call.get(), MIRBuilder, GR);
case SPIRV::ImageMiscQuery:
- return {true, generateImageMiscQueryInst(Call.get(), MIRBuilder, GR)};
+ return generateImageMiscQueryInst(Call.get(), MIRBuilder, GR);
case SPIRV::ReadImage:
- return {true,
- generateReadImageInst(DemangledCall, Call.get(), MIRBuilder, GR)};
+ return generateReadImageInst(DemangledCall, Call.get(), MIRBuilder, GR);
case SPIRV::WriteImage:
- return {true, generateWriteImageInst(Call.get(), MIRBuilder, GR)};
+ return generateWriteImageInst(Call.get(), MIRBuilder, GR);
case SPIRV::SampleImage:
- return {true,
- generateSampleImageInst(DemangledCall, Call.get(), MIRBuilder, GR)};
+ return generateSampleImageInst(DemangledCall, Call.get(), MIRBuilder, GR);
case SPIRV::Select:
- return {true, generateSelectInst(Call.get(), MIRBuilder)};
+ return generateSelectInst(Call.get(), MIRBuilder);
case SPIRV::SpecConstant:
- return {true, generateSpecConstantInst(Call.get(), MIRBuilder, GR)};
+ return generateSpecConstantInst(Call.get(), MIRBuilder, GR);
case SPIRV::Enqueue:
- return {true, generateEnqueueInst(Call.get(), MIRBuilder, GR)};
+ return generateEnqueueInst(Call.get(), MIRBuilder, GR);
case SPIRV::AsyncCopy:
- return {true, generateAsyncCopy(Call.get(), MIRBuilder, GR)};
+ return generateAsyncCopy(Call.get(), MIRBuilder, GR);
case SPIRV::Convert:
- return {true,
- generateConvertInst(DemangledCall, Call.get(), MIRBuilder, GR)};
+ return generateConvertInst(DemangledCall, Call.get(), MIRBuilder, GR);
case SPIRV::VectorLoadStore:
- return {true, generateVectorLoadStoreInst(Call.get(), MIRBuilder, GR)};
+ return generateVectorLoadStoreInst(Call.get(), MIRBuilder, GR);
}
- return {true, false};
+ return false;
}
} // namespace SPIRV
} // namespace llvm
diff --git a/llvm/lib/Target/SPIRV/SPIRVBuiltins.h b/llvm/lib/Target/SPIRV/SPIRVBuiltins.h
index 827f06e03dd7d..8b105f7a81cfd 100644
--- a/llvm/lib/Target/SPIRV/SPIRVBuiltins.h
+++ b/llvm/lib/Target/SPIRV/SPIRVBuiltins.h
@@ -22,19 +22,20 @@ namespace SPIRV {
/// Lowers a builtin funtion call using the provided \p DemangledCall skeleton
/// and external instruction \p Set.
///
-/// \return a pair of boolean values, the first true means the call recognized
-/// as a builtin, the second one indicates the successful lowering.
+/// \return the lowering success status if the called function is a recognized
+/// builtin, None otherwise.
///
/// \p DemangledCall is the skeleton of the lowered builtin function call.
/// \p Set is the external instruction set containing the given builtin.
/// \p OrigRet is the single original virtual return register if defined,
/// Register(0) otherwise. \p OrigRetTy is the type of the \p OrigRet. \p Args
/// are the arguments of the lowered builtin call.
-std::pair<bool, bool>
-lowerBuiltin(const StringRef DemangledCall, InstructionSet::InstructionSet Set,
- MachineIRBuilder &MIRBuilder, const Register OrigRet,
- const Type *OrigRetTy, const SmallVectorImpl<Register> &Args,
- SPIRVGlobalRegistry *GR);
+Optional<bool> lowerBuiltin(const StringRef DemangledCall,
+ InstructionSet::InstructionSet Set,
+ MachineIRBuilder &MIRBuilder,
+ const Register OrigRet, const Type *OrigRetTy,
+ const SmallVectorImpl<Register> &Args,
+ SPIRVGlobalRegistry *GR);
} // namespace SPIRV
} // namespace llvm
#endif // LLVM_LIB_TARGET_SPIRV_SPIRVBUILTINS_H
diff --git a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
index 381f64fe20d37..ce26a9a497626 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
@@ -301,11 +301,10 @@ bool SPIRVCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
SPIRVType *SPIRVTy = GR->getOrCreateSPIRVType(Arg.Ty, MIRBuilder);
GR->assignSPIRVTypeToVReg(SPIRVTy, Arg.Regs[0], MIRBuilder.getMF());
}
- auto Res =
- SPIRV::lowerBuiltin(DemangledName, SPIRV::InstructionSet::OpenCL_std,
- MIRBuilder, ResVReg, OrigRetTy, ArgVRegs, GR);
- if (Res.first)
- return Res.second;
+ if (auto Res = SPIRV::lowerBuiltin(
+ DemangledName, SPIRV::InstructionSet::OpenCL_std, MIRBuilder,
+ ResVReg, OrigRetTy, ArgVRegs, GR))
+ return *Res;
}
if (CF && CF->isDeclaration() &&
!GR->find(CF, &MIRBuilder.getMF()).isValid()) {
More information about the llvm-commits
mailing list