Skip to content

Commit 1fbc6b2

Browse files
committed
[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
1 parent fb9d676 commit 1fbc6b2

File tree

3 files changed

+39
-41
lines changed

3 files changed

+39
-41
lines changed

llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,11 +1534,12 @@ static bool generateVectorLoadStoreInst(const SPIRV::IncomingCall *Call,
15341534
/// Lowers a builtin funtion call using the provided \p DemangledCall skeleton
15351535
/// and external instruction \p Set.
15361536
namespace SPIRV {
1537-
std::pair<bool, bool>
1538-
lowerBuiltin(const StringRef DemangledCall, InstructionSet::InstructionSet Set,
1539-
MachineIRBuilder &MIRBuilder, const Register OrigRet,
1540-
const Type *OrigRetTy, const SmallVectorImpl<Register> &Args,
1541-
SPIRVGlobalRegistry *GR) {
1537+
Optional<bool> lowerBuiltin(const StringRef DemangledCall,
1538+
SPIRV::InstructionSet::InstructionSet Set,
1539+
MachineIRBuilder &MIRBuilder,
1540+
const Register OrigRet, const Type *OrigRetTy,
1541+
const SmallVectorImpl<Register> &Args,
1542+
SPIRVGlobalRegistry *GR) {
15421543
LLVM_DEBUG(dbgs() << "Lowering builtin call: " << DemangledCall << "\n");
15431544

15441545
// SPIR-V type and return register.
@@ -1558,7 +1559,7 @@ lowerBuiltin(const StringRef DemangledCall, InstructionSet::InstructionSet Set,
15581559

15591560
if (!Call) {
15601561
LLVM_DEBUG(dbgs() << "Builtin record was not found!");
1561-
return {false, false};
1562+
return {};
15621563
}
15631564

15641565
// TODO: check if the provided args meet the builtin requirments.
@@ -1570,48 +1571,45 @@ lowerBuiltin(const StringRef DemangledCall, InstructionSet::InstructionSet Set,
15701571
// Match the builtin with implementation based on the grouping.
15711572
switch (Call->Builtin->Group) {
15721573
case SPIRV::Extended:
1573-
return {true, generateExtInst(Call.get(), MIRBuilder, GR)};
1574+
return generateExtInst(Call.get(), MIRBuilder, GR);
15741575
case SPIRV::Relational:
1575-
return {true, generateRelationalInst(Call.get(), MIRBuilder, GR)};
1576+
return generateRelationalInst(Call.get(), MIRBuilder, GR);
15761577
case SPIRV::Group:
1577-
return {true, generateGroupInst(Call.get(), MIRBuilder, GR)};
1578+
return generateGroupInst(Call.get(), MIRBuilder, GR);
15781579
case SPIRV::Variable:
1579-
return {true, generateBuiltinVar(Call.get(), MIRBuilder, GR)};
1580+
return generateBuiltinVar(Call.get(), MIRBuilder, GR);
15801581
case SPIRV::Atomic:
1581-
return {true, generateAtomicInst(Call.get(), MIRBuilder, GR)};
1582+
return generateAtomicInst(Call.get(), MIRBuilder, GR);
15821583
case SPIRV::Barrier:
1583-
return {true, generateBarrierInst(Call.get(), MIRBuilder, GR)};
1584+
return generateBarrierInst(Call.get(), MIRBuilder, GR);
15841585
case SPIRV::Dot:
1585-
return {true, generateDotOrFMulInst(Call.get(), MIRBuilder, GR)};
1586+
return generateDotOrFMulInst(Call.get(), MIRBuilder, GR);
15861587
case SPIRV::GetQuery:
1587-
return {true, generateGetQueryInst(Call.get(), MIRBuilder, GR)};
1588+
return generateGetQueryInst(Call.get(), MIRBuilder, GR);
15881589
case SPIRV::ImageSizeQuery:
1589-
return {true, generateImageSizeQueryInst(Call.get(), MIRBuilder, GR)};
1590+
return generateImageSizeQueryInst(Call.get(), MIRBuilder, GR);
15901591
case SPIRV::ImageMiscQuery:
1591-
return {true, generateImageMiscQueryInst(Call.get(), MIRBuilder, GR)};
1592+
return generateImageMiscQueryInst(Call.get(), MIRBuilder, GR);
15921593
case SPIRV::ReadImage:
1593-
return {true,
1594-
generateReadImageInst(DemangledCall, Call.get(), MIRBuilder, GR)};
1594+
return generateReadImageInst(DemangledCall, Call.get(), MIRBuilder, GR);
15951595
case SPIRV::WriteImage:
1596-
return {true, generateWriteImageInst(Call.get(), MIRBuilder, GR)};
1596+
return generateWriteImageInst(Call.get(), MIRBuilder, GR);
15971597
case SPIRV::SampleImage:
1598-
return {true,
1599-
generateSampleImageInst(DemangledCall, Call.get(), MIRBuilder, GR)};
1598+
return generateSampleImageInst(DemangledCall, Call.get(), MIRBuilder, GR);
16001599
case SPIRV::Select:
1601-
return {true, generateSelectInst(Call.get(), MIRBuilder)};
1600+
return generateSelectInst(Call.get(), MIRBuilder);
16021601
case SPIRV::SpecConstant:
1603-
return {true, generateSpecConstantInst(Call.get(), MIRBuilder, GR)};
1602+
return generateSpecConstantInst(Call.get(), MIRBuilder, GR);
16041603
case SPIRV::Enqueue:
1605-
return {true, generateEnqueueInst(Call.get(), MIRBuilder, GR)};
1604+
return generateEnqueueInst(Call.get(), MIRBuilder, GR);
16061605
case SPIRV::AsyncCopy:
1607-
return {true, generateAsyncCopy(Call.get(), MIRBuilder, GR)};
1606+
return generateAsyncCopy(Call.get(), MIRBuilder, GR);
16081607
case SPIRV::Convert:
1609-
return {true,
1610-
generateConvertInst(DemangledCall, Call.get(), MIRBuilder, GR)};
1608+
return generateConvertInst(DemangledCall, Call.get(), MIRBuilder, GR);
16111609
case SPIRV::VectorLoadStore:
1612-
return {true, generateVectorLoadStoreInst(Call.get(), MIRBuilder, GR)};
1610+
return generateVectorLoadStoreInst(Call.get(), MIRBuilder, GR);
16131611
}
1614-
return {true, false};
1612+
return false;
16151613
}
16161614
} // namespace SPIRV
16171615
} // namespace llvm

llvm/lib/Target/SPIRV/SPIRVBuiltins.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,20 @@ namespace SPIRV {
2222
/// Lowers a builtin funtion call using the provided \p DemangledCall skeleton
2323
/// and external instruction \p Set.
2424
///
25-
/// \return a pair of boolean values, the first true means the call recognized
26-
/// as a builtin, the second one indicates the successful lowering.
25+
/// \return the lowering success status if the called function is a recognized
26+
/// builtin, None otherwise.
2727
///
2828
/// \p DemangledCall is the skeleton of the lowered builtin function call.
2929
/// \p Set is the external instruction set containing the given builtin.
3030
/// \p OrigRet is the single original virtual return register if defined,
3131
/// Register(0) otherwise. \p OrigRetTy is the type of the \p OrigRet. \p Args
3232
/// are the arguments of the lowered builtin call.
33-
std::pair<bool, bool>
34-
lowerBuiltin(const StringRef DemangledCall, InstructionSet::InstructionSet Set,
35-
MachineIRBuilder &MIRBuilder, const Register OrigRet,
36-
const Type *OrigRetTy, const SmallVectorImpl<Register> &Args,
37-
SPIRVGlobalRegistry *GR);
33+
Optional<bool> lowerBuiltin(const StringRef DemangledCall,
34+
InstructionSet::InstructionSet Set,
35+
MachineIRBuilder &MIRBuilder,
36+
const Register OrigRet, const Type *OrigRetTy,
37+
const SmallVectorImpl<Register> &Args,
38+
SPIRVGlobalRegistry *GR);
3839
} // namespace SPIRV
3940
} // namespace llvm
4041
#endif // LLVM_LIB_TARGET_SPIRV_SPIRVBUILTINS_H

llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,11 +301,10 @@ bool SPIRVCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
301301
SPIRVType *SPIRVTy = GR->getOrCreateSPIRVType(Arg.Ty, MIRBuilder);
302302
GR->assignSPIRVTypeToVReg(SPIRVTy, Arg.Regs[0], MIRBuilder.getMF());
303303
}
304-
auto Res =
305-
SPIRV::lowerBuiltin(DemangledName, SPIRV::InstructionSet::OpenCL_std,
306-
MIRBuilder, ResVReg, OrigRetTy, ArgVRegs, GR);
307-
if (Res.first)
308-
return Res.second;
304+
if (auto Res = SPIRV::lowerBuiltin(
305+
DemangledName, SPIRV::InstructionSet::OpenCL_std, MIRBuilder,
306+
ResVReg, OrigRetTy, ArgVRegs, GR))
307+
return *Res;
309308
}
310309
if (CF && CF->isDeclaration() &&
311310
!GR->find(CF, &MIRBuilder.getMF()).isValid()) {

0 commit comments

Comments
 (0)