Lines Matching refs:Call

460 static bool buildAtomicInitInst(const SPIRV::IncomingCall *Call,  in buildAtomicInitInst()  argument
462 assert(Call->Arguments.size() == 2 && in buildAtomicInitInst()
464 MIRBuilder.getMRI()->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in buildAtomicInitInst()
465 MIRBuilder.getMRI()->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in buildAtomicInitInst()
467 .addUse(Call->Arguments[0]) in buildAtomicInitInst()
468 .addUse(Call->Arguments[1]); in buildAtomicInitInst()
473 static bool buildAtomicLoadInst(const SPIRV::IncomingCall *Call, in buildAtomicLoadInst() argument
476 Register PtrRegister = Call->Arguments[0]; in buildAtomicLoadInst()
482 if (Call->Arguments.size() > 1) { in buildAtomicLoadInst()
483 ScopeRegister = Call->Arguments[1]; in buildAtomicLoadInst()
489 if (Call->Arguments.size() > 2) { in buildAtomicLoadInst()
491 MemSemanticsReg = Call->Arguments[2]; in buildAtomicLoadInst()
501 .addDef(Call->ReturnRegister) in buildAtomicLoadInst()
502 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in buildAtomicLoadInst()
510 static bool buildAtomicStoreInst(const SPIRV::IncomingCall *Call, in buildAtomicStoreInst() argument
515 Register PtrRegister = Call->Arguments[0]; in buildAtomicStoreInst()
521 MIRBuilder.getMRI()->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in buildAtomicStoreInst()
526 .addUse(Call->Arguments[1]); in buildAtomicStoreInst()
531 static bool buildAtomicCompareExchangeInst(const SPIRV::IncomingCall *Call, in buildAtomicCompareExchangeInst() argument
534 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in buildAtomicCompareExchangeInst()
537 bool IsCmpxchg = Call->Builtin->Name.contains("cmpxchg"); in buildAtomicCompareExchangeInst()
540 Register ObjectPtr = Call->Arguments[0]; // Pointer (volatile A *object.) in buildAtomicCompareExchangeInst()
541 Register ExpectedArg = Call->Arguments[1]; // Comparator (C* expected). in buildAtomicCompareExchangeInst()
542 Register Desired = Call->Arguments[2]; // Value (C Desired). in buildAtomicCompareExchangeInst()
572 if (Call->Arguments.size() >= 4) { in buildAtomicCompareExchangeInst()
573 assert(Call->Arguments.size() >= 5 && in buildAtomicCompareExchangeInst()
576 static_cast<std::memory_order>(getIConstVal(Call->Arguments[3], MRI)); in buildAtomicCompareExchangeInst()
578 static_cast<std::memory_order>(getIConstVal(Call->Arguments[4], MRI)); in buildAtomicCompareExchangeInst()
582 MemSemEqualReg = Call->Arguments[3]; in buildAtomicCompareExchangeInst()
584 MemSemUnequalReg = Call->Arguments[4]; in buildAtomicCompareExchangeInst()
585 MRI->setRegClass(Call->Arguments[3], &SPIRV::IDRegClass); in buildAtomicCompareExchangeInst()
586 MRI->setRegClass(Call->Arguments[4], &SPIRV::IDRegClass); in buildAtomicCompareExchangeInst()
595 if (Call->Arguments.size() >= 6) { in buildAtomicCompareExchangeInst()
596 assert(Call->Arguments.size() == 6 && in buildAtomicCompareExchangeInst()
599 getIConstVal(Call->Arguments[5], MRI)); in buildAtomicCompareExchangeInst()
602 ScopeReg = Call->Arguments[5]; in buildAtomicCompareExchangeInst()
603 MRI->setRegClass(Call->Arguments[5], &SPIRV::IDRegClass); in buildAtomicCompareExchangeInst()
614 : Call->ReturnRegister; in buildAtomicCompareExchangeInst()
631 MIRBuilder.buildICmp(CmpInst::ICMP_EQ, Call->ReturnRegister, Tmp, Expected); in buildAtomicCompareExchangeInst()
637 static bool buildAtomicRMWInst(const SPIRV::IncomingCall *Call, unsigned Opcode, in buildAtomicRMWInst() argument
642 Call->Arguments.size() >= 4 ? Call->Arguments[3] : Register(); in buildAtomicRMWInst()
644 assert(Call->Arguments.size() <= 4 && in buildAtomicRMWInst()
649 Register PtrRegister = Call->Arguments[0]; in buildAtomicRMWInst()
653 Call->Arguments.size() >= 3 ? Call->Arguments[2] : Register(); in buildAtomicRMWInst()
656 MRI->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in buildAtomicRMWInst()
658 .addDef(Call->ReturnRegister) in buildAtomicRMWInst()
659 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in buildAtomicRMWInst()
663 .addUse(Call->Arguments[1]); in buildAtomicRMWInst()
669 static bool buildAtomicFlagInst(const SPIRV::IncomingCall *Call, in buildAtomicFlagInst() argument
673 Register PtrRegister = Call->Arguments[0]; in buildAtomicFlagInst()
676 Call->Arguments.size() >= 2 ? Call->Arguments[1] : Register(); in buildAtomicFlagInst()
686 Call->Arguments.size() >= 3 ? Call->Arguments[2] : Register(); in buildAtomicFlagInst()
692 MIB.addDef(Call->ReturnRegister) in buildAtomicFlagInst()
693 .addUse(GR->getSPIRVTypeID(Call->ReturnType)); in buildAtomicFlagInst()
701 static bool buildBarrierInst(const SPIRV::IncomingCall *Call, unsigned Opcode, in buildBarrierInst() argument
705 unsigned MemFlags = getIConstVal(Call->Arguments[0], MRI); in buildBarrierInst()
719 static_cast<std::memory_order>(getIConstVal(Call->Arguments[1], MRI)); in buildBarrierInst()
727 MemSemanticsReg = Call->Arguments[0]; in buildBarrierInst()
735 if (Call->Arguments.size() >= 2) { in buildBarrierInst()
737 ((Opcode != SPIRV::OpMemoryBarrier && Call->Arguments.size() == 2) || in buildBarrierInst()
738 (Opcode == SPIRV::OpMemoryBarrier && Call->Arguments.size() == 3)) && in buildBarrierInst()
740 Register ScopeArg = (Opcode == SPIRV::OpMemoryBarrier) ? Call->Arguments[2] in buildBarrierInst()
741 : Call->Arguments[1]; in buildBarrierInst()
750 ScopeReg = Call->Arguments[1]; in buildBarrierInst()
794 static bool generateExtInst(const SPIRV::IncomingCall *Call, in generateExtInst() argument
798 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateExtInst()
805 .addDef(Call->ReturnRegister) in generateExtInst()
806 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateExtInst()
810 for (auto Argument : Call->Arguments) in generateExtInst()
815 static bool generateRelationalInst(const SPIRV::IncomingCall *Call, in generateRelationalInst() argument
819 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateRelationalInst()
826 buildBoolRegister(MIRBuilder, Call->ReturnType, GR); in generateRelationalInst()
833 for (auto Argument : Call->Arguments) in generateRelationalInst()
837 return buildSelectInst(MIRBuilder, Call->ReturnRegister, CompareRegister, in generateRelationalInst()
838 Call->ReturnType, GR); in generateRelationalInst()
841 static bool generateGroupInst(const SPIRV::IncomingCall *Call, in generateGroupInst() argument
844 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateGroupInst()
850 Register ConstRegister = Call->Arguments[0]; in generateGroupInst()
855 if (GR->getSPIRVTypeForVReg(Call->Arguments[0])->getOpcode() != in generateGroupInst()
861 Register GroupResultRegister = Call->ReturnRegister; in generateGroupInst()
862 SPIRVType *GroupResultType = Call->ReturnType; in generateGroupInst()
873 buildBoolRegister(MIRBuilder, Call->ReturnType, GR); in generateGroupInst()
887 if (Call->Arguments.size() > 0) { in generateGroupInst()
888 MIB.addUse(Arg0.isValid() ? Arg0 : Call->Arguments[0]); in generateGroupInst()
889 MRI->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateGroupInst()
890 for (unsigned i = 1; i < Call->Arguments.size(); i++) { in generateGroupInst()
891 MIB.addUse(Call->Arguments[i]); in generateGroupInst()
892 MRI->setRegClass(Call->Arguments[i], &SPIRV::IDRegClass); in generateGroupInst()
898 buildSelectInst(MIRBuilder, Call->ReturnRegister, GroupResultRegister, in generateGroupInst()
899 Call->ReturnType, GR); in generateGroupInst()
929 static bool genWorkgroupQuery(const SPIRV::IncomingCall *Call, in genWorkgroupQuery() argument
934 Register IndexRegister = Call->Arguments[0]; in genWorkgroupQuery()
935 const unsigned ResultWidth = Call->ReturnType->getOperand(1).getImm(); in genWorkgroupQuery()
943 Register ToTruncate = Call->ReturnRegister; in genWorkgroupQuery()
952 Register DefaultReg = Call->ReturnRegister; in genWorkgroupQuery()
970 Register Extracted = Call->ReturnRegister; in genWorkgroupQuery()
1005 Register SelectionResult = Call->ReturnRegister; in genWorkgroupQuery()
1023 MIRBuilder.buildZExtOrTrunc(Call->ReturnRegister, ToTruncate); in genWorkgroupQuery()
1027 static bool generateBuiltinVar(const SPIRV::IncomingCall *Call, in generateBuiltinVar() argument
1031 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateBuiltinVar()
1036 return genWorkgroupQuery(Call, MIRBuilder, GR, Value, 0); in generateBuiltinVar()
1039 unsigned BitWidth = GR->getScalarOrVectorBitWidth(Call->ReturnType); in generateBuiltinVar()
1041 if (Call->ReturnType->getOpcode() == SPIRV::OpTypeVector) in generateBuiltinVar()
1043 LLT::fixed_vector(Call->ReturnType->getOperand(2).getImm(), BitWidth); in generateBuiltinVar()
1047 return buildBuiltinVariableLoad(MIRBuilder, Call->ReturnType, GR, Value, in generateBuiltinVar()
1048 LLType, Call->ReturnRegister); in generateBuiltinVar()
1051 static bool generateAtomicInst(const SPIRV::IncomingCall *Call, in generateAtomicInst() argument
1055 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateAtomicInst()
1061 return buildAtomicInitInst(Call, MIRBuilder); in generateAtomicInst()
1063 return buildAtomicLoadInst(Call, MIRBuilder, GR); in generateAtomicInst()
1065 return buildAtomicStoreInst(Call, MIRBuilder, GR); in generateAtomicInst()
1068 return buildAtomicCompareExchangeInst(Call, MIRBuilder, GR); in generateAtomicInst()
1075 return buildAtomicRMWInst(Call, Opcode, MIRBuilder, GR); in generateAtomicInst()
1077 return buildBarrierInst(Call, SPIRV::OpMemoryBarrier, MIRBuilder, GR); in generateAtomicInst()
1080 return buildAtomicFlagInst(Call, Opcode, MIRBuilder, GR); in generateAtomicInst()
1086 static bool generateBarrierInst(const SPIRV::IncomingCall *Call, in generateBarrierInst() argument
1090 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateBarrierInst()
1094 return buildBarrierInst(Call, Opcode, MIRBuilder, GR); in generateBarrierInst()
1097 static bool generateDotOrFMulInst(const SPIRV::IncomingCall *Call, in generateDotOrFMulInst() argument
1100 unsigned Opcode = GR->getSPIRVTypeForVReg(Call->Arguments[0])->getOpcode(); in generateDotOrFMulInst()
1104 .addDef(Call->ReturnRegister) in generateDotOrFMulInst()
1105 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateDotOrFMulInst()
1106 .addUse(Call->Arguments[0]) in generateDotOrFMulInst()
1107 .addUse(Call->Arguments[1]); in generateDotOrFMulInst()
1111 static bool generateGetQueryInst(const SPIRV::IncomingCall *Call, in generateGetQueryInst() argument
1116 SPIRV::lookupGetBuiltin(Call->Builtin->Name, Call->Builtin->Set)->Value; in generateGetQueryInst()
1120 return genWorkgroupQuery(Call, MIRBuilder, GR, Value, IsDefault ? 1 : 0); in generateGetQueryInst()
1123 static bool generateImageSizeQueryInst(const SPIRV::IncomingCall *Call, in generateImageSizeQueryInst() argument
1127 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateImageSizeQueryInst()
1133 SPIRVType *RetTy = Call->ReturnType; in generateImageSizeQueryInst()
1138 SPIRVType *ImgType = GR->getSPIRVTypeForVReg(Call->Arguments[0]); in generateImageSizeQueryInst()
1140 Register QueryResult = Call->ReturnRegister; in generateImageSizeQueryInst()
1141 SPIRVType *QueryResultType = Call->ReturnType; in generateImageSizeQueryInst()
1154 MIRBuilder.getMRI()->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateImageSizeQueryInst()
1158 .addUse(Call->Arguments[0]); in generateImageSizeQueryInst()
1170 .addDef(Call->ReturnRegister) in generateImageSizeQueryInst()
1171 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateImageSizeQueryInst()
1177 .addDef(Call->ReturnRegister) in generateImageSizeQueryInst()
1178 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateImageSizeQueryInst()
1187 static bool generateImageMiscQueryInst(const SPIRV::IncomingCall *Call, in generateImageMiscQueryInst() argument
1190 assert(Call->ReturnType->getOpcode() == SPIRV::OpTypeInt && in generateImageMiscQueryInst()
1194 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateImageMiscQueryInst()
1198 Register Image = Call->Arguments[0]; in generateImageMiscQueryInst()
1218 .addDef(Call->ReturnRegister) in generateImageMiscQueryInst()
1219 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateImageMiscQueryInst()
1257 const SPIRV::IncomingCall *Call, in generateReadImageInst() argument
1260 Register Image = Call->Arguments[0]; in generateReadImageInst()
1263 MRI->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in generateReadImageInst()
1267 MRI->setRegClass(Call->Arguments[2], &SPIRV::IDRegClass); in generateReadImageInst()
1269 Register Sampler = Call->Arguments[1]; in generateReadImageInst()
1293 SPIRVType *TempType = Call->ReturnType; in generateReadImageInst()
1297 GR->getOrCreateSPIRVVectorType(Call->ReturnType, 4, MIRBuilder); in generateReadImageInst()
1306 .addDef(NeedsExtraction ? TempRegister : Call->ReturnRegister) in generateReadImageInst()
1309 .addUse(Call->Arguments[2]) // Coordinate. in generateReadImageInst()
1315 .addDef(Call->ReturnRegister) in generateReadImageInst()
1316 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateReadImageInst()
1321 .addDef(Call->ReturnRegister) in generateReadImageInst()
1322 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateReadImageInst()
1324 .addUse(Call->Arguments[1]) // Coordinate. in generateReadImageInst()
1326 .addUse(Call->Arguments[2]); in generateReadImageInst()
1329 .addDef(Call->ReturnRegister) in generateReadImageInst()
1330 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateReadImageInst()
1332 .addUse(Call->Arguments[1]); // Coordinate. in generateReadImageInst()
1337 static bool generateWriteImageInst(const SPIRV::IncomingCall *Call, in generateWriteImageInst() argument
1340 MIRBuilder.getMRI()->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateWriteImageInst()
1341 MIRBuilder.getMRI()->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in generateWriteImageInst()
1342 MIRBuilder.getMRI()->setRegClass(Call->Arguments[2], &SPIRV::IDRegClass); in generateWriteImageInst()
1344 .addUse(Call->Arguments[0]) // Image. in generateWriteImageInst()
1345 .addUse(Call->Arguments[1]) // Coordinate. in generateWriteImageInst()
1346 .addUse(Call->Arguments[2]); // Texel. in generateWriteImageInst()
1351 const SPIRV::IncomingCall *Call, in generateSampleImageInst() argument
1355 if (Call->Builtin->Name.contains_insensitive( in generateSampleImageInst()
1358 uint64_t Bitmask = getIConstVal(Call->Arguments[0], MRI); in generateSampleImageInst()
1360 Call->ReturnRegister, getSamplerAddressingModeFromBitmask(Bitmask), in generateSampleImageInst()
1362 getSamplerFilterModeFromBitmask(Bitmask), MIRBuilder, Call->ReturnType); in generateSampleImageInst()
1364 } else if (Call->Builtin->Name.contains_insensitive("__spirv_SampledImage")) { in generateSampleImageInst()
1366 Register Image = Call->Arguments[0]; in generateSampleImageInst()
1371 Call->ReturnRegister.isValid() in generateSampleImageInst()
1372 ? Call->ReturnRegister in generateSampleImageInst()
1378 .addUse(Call->Arguments[1]); // Sampler. in generateSampleImageInst()
1380 } else if (Call->Builtin->Name.contains_insensitive( in generateSampleImageInst()
1389 MRI->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateSampleImageInst()
1390 MRI->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in generateSampleImageInst()
1391 MRI->setRegClass(Call->Arguments[3], &SPIRV::IDRegClass); in generateSampleImageInst()
1394 .addDef(Call->ReturnRegister) in generateSampleImageInst()
1396 .addUse(Call->Arguments[0]) // Image. in generateSampleImageInst()
1397 .addUse(Call->Arguments[1]) // Coordinate. in generateSampleImageInst()
1399 .addUse(Call->Arguments[3]); in generateSampleImageInst()
1405 static bool generateSelectInst(const SPIRV::IncomingCall *Call, in generateSelectInst() argument
1407 MIRBuilder.buildSelect(Call->ReturnRegister, Call->Arguments[0], in generateSelectInst()
1408 Call->Arguments[1], Call->Arguments[2]); in generateSelectInst()
1412 static bool generateSpecConstantInst(const SPIRV::IncomingCall *Call, in generateSpecConstantInst() argument
1416 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateSpecConstantInst()
1425 static_cast<unsigned>(getIConstVal(Call->Arguments[0], MRI)); in generateSpecConstantInst()
1426 buildOpDecorate(Call->ReturnRegister, MIRBuilder, SPIRV::Decoration::SpecId, in generateSpecConstantInst()
1429 Register ConstRegister = Call->Arguments[1]; in generateSpecConstantInst()
1437 if (Call->ReturnType->getOpcode() == SPIRV::OpTypeBool) { in generateSpecConstantInst()
1444 .addDef(Call->ReturnRegister) in generateSpecConstantInst()
1445 .addUse(GR->getSPIRVTypeID(Call->ReturnType)); in generateSpecConstantInst()
1447 if (Call->ReturnType->getOpcode() != SPIRV::OpTypeBool) { in generateSpecConstantInst()
1457 .addDef(Call->ReturnRegister) in generateSpecConstantInst()
1458 .addUse(GR->getSPIRVTypeID(Call->ReturnType)); in generateSpecConstantInst()
1459 for (unsigned i = 0; i < Call->Arguments.size(); i++) in generateSpecConstantInst()
1460 MIB.addUse(Call->Arguments[i]); in generateSpecConstantInst()
1468 static bool buildNDRange(const SPIRV::IncomingCall *Call, in buildNDRange() argument
1472 MRI->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in buildNDRange()
1473 SPIRVType *PtrType = GR->getSPIRVTypeForVReg(Call->Arguments[0]); in buildNDRange()
1483 unsigned NumArgs = Call->Arguments.size(); in buildNDRange()
1485 Register GlobalWorkSize = Call->Arguments[NumArgs < 4 ? 1 : 2]; in buildNDRange()
1488 NumArgs == 2 ? Register(0) : Call->Arguments[NumArgs < 4 ? 2 : 3]; in buildNDRange()
1491 Register GlobalWorkOffset = NumArgs <= 3 ? Register(0) : Call->Arguments[1]; in buildNDRange()
1505 unsigned Size = Call->Builtin->Name.equals("ndrange_3D") ? 3 : 2; in buildNDRange()
1533 .addUse(Call->Arguments[0]) in buildNDRange()
1615 static bool buildEnqueueKernel(const SPIRV::IncomingCall *Call, in buildEnqueueKernel() argument
1620 bool HasEvents = Call->Builtin->Name.contains("events"); in buildEnqueueKernel()
1627 if (Call->Builtin->Name.find("_varargs") != StringRef::npos) { in buildEnqueueKernel()
1629 Register GepReg = Call->Arguments[LocalSizeArrayIdx]; in buildEnqueueKernel()
1660 .addDef(Call->ReturnRegister) in buildEnqueueKernel()
1666 MIB.addUse(Call->Arguments[i]); in buildEnqueueKernel()
1677 MachineInstr *BlockMI = getBlockStructInstr(Call->Arguments[BlockFIdx], MRI); in buildEnqueueKernel()
1682 Register BlockLiteralReg = Call->Arguments[BlockFIdx + 1]; in buildEnqueueKernel()
1699 static bool generateEnqueueInst(const SPIRV::IncomingCall *Call, in generateEnqueueInst() argument
1703 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateEnqueueInst()
1710 MIRBuilder.getMRI()->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateEnqueueInst()
1711 return MIRBuilder.buildInstr(Opcode).addUse(Call->Arguments[0]); in generateEnqueueInst()
1715 .addDef(Call->ReturnRegister) in generateEnqueueInst()
1716 .addUse(GR->getSPIRVTypeID(Call->ReturnType)); in generateEnqueueInst()
1718 MIRBuilder.getMRI()->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateEnqueueInst()
1720 .addDef(Call->ReturnRegister) in generateEnqueueInst()
1721 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateEnqueueInst()
1722 .addUse(Call->Arguments[0]); in generateEnqueueInst()
1724 MIRBuilder.getMRI()->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateEnqueueInst()
1725 MIRBuilder.getMRI()->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in generateEnqueueInst()
1727 .addUse(Call->Arguments[0]) in generateEnqueueInst()
1728 .addUse(Call->Arguments[1]); in generateEnqueueInst()
1730 MIRBuilder.getMRI()->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateEnqueueInst()
1731 MIRBuilder.getMRI()->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in generateEnqueueInst()
1732 MIRBuilder.getMRI()->setRegClass(Call->Arguments[2], &SPIRV::IDRegClass); in generateEnqueueInst()
1734 .addUse(Call->Arguments[0]) in generateEnqueueInst()
1735 .addUse(Call->Arguments[1]) in generateEnqueueInst()
1736 .addUse(Call->Arguments[2]); in generateEnqueueInst()
1738 return buildNDRange(Call, MIRBuilder, GR); in generateEnqueueInst()
1740 return buildEnqueueKernel(Call, MIRBuilder, GR); in generateEnqueueInst()
1746 static bool generateAsyncCopy(const SPIRV::IncomingCall *Call, in generateAsyncCopy() argument
1750 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateAsyncCopy()
1758 .addDef(Call->ReturnRegister) in generateAsyncCopy()
1759 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateAsyncCopy()
1761 .addUse(Call->Arguments[0]) in generateAsyncCopy()
1762 .addUse(Call->Arguments[1]) in generateAsyncCopy()
1763 .addUse(Call->Arguments[2]) in generateAsyncCopy()
1765 .addUse(Call->Arguments[3]); in generateAsyncCopy()
1769 .addUse(Call->Arguments[0]) in generateAsyncCopy()
1770 .addUse(Call->Arguments[1]); in generateAsyncCopy()
1777 const SPIRV::IncomingCall *Call, in generateConvertInst() argument
1782 SPIRV::lookupConvertBuiltin(Call->Builtin->Name, Call->Builtin->Set); in generateConvertInst()
1785 buildOpDecorate(Call->ReturnRegister, MIRBuilder, in generateConvertInst()
1788 buildOpDecorate(Call->ReturnRegister, MIRBuilder, in generateConvertInst()
1793 if (GR->isScalarOrVectorOfType(Call->Arguments[0], SPIRV::OpTypeInt)) { in generateConvertInst()
1795 if (GR->isScalarOrVectorOfType(Call->ReturnRegister, SPIRV::OpTypeInt)) { in generateConvertInst()
1803 } else if (GR->isScalarOrVectorOfType(Call->ReturnRegister, in generateConvertInst()
1810 } else if (GR->isScalarOrVectorOfType(Call->Arguments[0], in generateConvertInst()
1813 if (GR->isScalarOrVectorOfType(Call->ReturnRegister, SPIRV::OpTypeInt)) in generateConvertInst()
1817 else if (GR->isScalarOrVectorOfType(Call->ReturnRegister, in generateConvertInst()
1827 .addDef(Call->ReturnRegister) in generateConvertInst()
1828 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateConvertInst()
1829 .addUse(Call->Arguments[0]); in generateConvertInst()
1833 static bool generateVectorLoadStoreInst(const SPIRV::IncomingCall *Call, in generateVectorLoadStoreInst() argument
1838 SPIRV::lookupVectorLoadStoreBuiltin(Call->Builtin->Name, in generateVectorLoadStoreInst()
1839 Call->Builtin->Set); in generateVectorLoadStoreInst()
1843 .addDef(Call->ReturnRegister) in generateVectorLoadStoreInst()
1844 .addUse(GR->getSPIRVTypeID(Call->ReturnType)) in generateVectorLoadStoreInst()
1847 for (auto Argument : Call->Arguments) in generateVectorLoadStoreInst()
1857 static bool generateLoadStoreInst(const SPIRV::IncomingCall *Call, in generateLoadStoreInst() argument
1861 const SPIRV::DemangledBuiltin *Builtin = Call->Builtin; in generateLoadStoreInst()
1868 MIB.addDef(Call->ReturnRegister); in generateLoadStoreInst()
1869 MIB.addUse(GR->getSPIRVTypeID(Call->ReturnType)); in generateLoadStoreInst()
1872 MIB.addUse(Call->Arguments[0]); in generateLoadStoreInst()
1874 MRI->setRegClass(Call->Arguments[0], &SPIRV::IDRegClass); in generateLoadStoreInst()
1877 MIB.addUse(Call->Arguments[1]); in generateLoadStoreInst()
1878 MRI->setRegClass(Call->Arguments[1], &SPIRV::IDRegClass); in generateLoadStoreInst()
1881 unsigned NumArgs = Call->Arguments.size(); in generateLoadStoreInst()
1883 MIB.addImm(getConstFromIntrinsic(Call->Arguments[IsLoad ? 1 : 2], MRI)); in generateLoadStoreInst()
1884 MRI->setRegClass(Call->Arguments[IsLoad ? 1 : 2], &SPIRV::IDRegClass); in generateLoadStoreInst()
1887 MIB.addImm(getConstFromIntrinsic(Call->Arguments[IsLoad ? 2 : 3], MRI)); in generateLoadStoreInst()
1888 MRI->setRegClass(Call->Arguments[IsLoad ? 2 : 3], &SPIRV::IDRegClass); in generateLoadStoreInst()
1918 std::unique_ptr<const IncomingCall> Call = in lowerBuiltin() local
1921 if (!Call) { in lowerBuiltin()
1927 assert(Args.size() >= Call->Builtin->MinNumArgs && in lowerBuiltin()
1929 if (Call->Builtin->MaxNumArgs && Args.size() > Call->Builtin->MaxNumArgs) in lowerBuiltin()
1933 switch (Call->Builtin->Group) { in lowerBuiltin()
1935 return generateExtInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1937 return generateRelationalInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1939 return generateGroupInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1941 return generateBuiltinVar(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1943 return generateAtomicInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1945 return generateBarrierInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1947 return generateDotOrFMulInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1949 return generateGetQueryInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1951 return generateImageSizeQueryInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1953 return generateImageMiscQueryInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1955 return generateReadImageInst(DemangledCall, Call.get(), MIRBuilder, GR); in lowerBuiltin()
1957 return generateWriteImageInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1959 return generateSampleImageInst(DemangledCall, Call.get(), MIRBuilder, GR); in lowerBuiltin()
1961 return generateSelectInst(Call.get(), MIRBuilder); in lowerBuiltin()
1963 return generateSpecConstantInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1965 return generateEnqueueInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1967 return generateAsyncCopy(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1969 return generateConvertInst(DemangledCall, Call.get(), MIRBuilder, GR); in lowerBuiltin()
1971 return generateVectorLoadStoreInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()
1973 return generateLoadStoreInst(Call.get(), MIRBuilder, GR); in lowerBuiltin()