@@ -445,12 +445,12 @@ static std::tuple<Register, SPIRVType *>
445445buildBoolRegister (MachineIRBuilder &MIRBuilder, const SPIRVType *ResultType,
446446 SPIRVGlobalRegistry *GR) {
447447 LLT Type;
448- SPIRVType *BoolType = GR->getOrCreateSPIRVBoolType (MIRBuilder);
448+ SPIRVType *BoolType = GR->getOrCreateSPIRVBoolType (MIRBuilder, true );
449449
450450 if (ResultType->getOpcode () == SPIRV::OpTypeVector) {
451451 unsigned VectorElements = ResultType->getOperand (2 ).getImm ();
452- BoolType =
453- GR-> getOrCreateSPIRVVectorType (BoolType, VectorElements, MIRBuilder);
452+ BoolType = GR-> getOrCreateSPIRVVectorType (BoolType, VectorElements,
453+ MIRBuilder, true );
454454 const FixedVectorType *LLVMVectorType =
455455 cast<FixedVectorType>(GR->getTypeForSPIRVType (BoolType));
456456 Type = LLT::vector (LLVMVectorType->getElementCount (), 1 );
@@ -480,8 +480,8 @@ static bool buildSelectInst(MachineIRBuilder &MIRBuilder,
480480 GR->getOrCreateConsIntVector (AllOnes, MIRBuilder, ReturnType, true );
481481 FalseConst = GR->getOrCreateConsIntVector (0 , MIRBuilder, ReturnType, true );
482482 } else {
483- TrueConst = GR->buildConstantInt (1 , MIRBuilder, ReturnType);
484- FalseConst = GR->buildConstantInt (0 , MIRBuilder, ReturnType);
483+ TrueConst = GR->buildConstantInt (1 , MIRBuilder, ReturnType, true );
484+ FalseConst = GR->buildConstantInt (0 , MIRBuilder, ReturnType, true );
485485 }
486486
487487 return MIRBuilder.buildSelect (ReturnRegister, SourceRegister, TrueConst,
@@ -581,8 +581,8 @@ static SPIRV::Scope::Scope getSPIRVScope(SPIRV::CLMemoryScope ClScope) {
581581static Register buildConstantIntReg32 (uint64_t Val,
582582 MachineIRBuilder &MIRBuilder,
583583 SPIRVGlobalRegistry *GR) {
584- return GR->buildConstantInt (Val, MIRBuilder,
585- GR->getOrCreateSPIRVIntegerType (32 , MIRBuilder));
584+ return GR->buildConstantInt (
585+ Val, MIRBuilder, GR->getOrCreateSPIRVIntegerType (32 , MIRBuilder), true );
586586}
587587
588588static Register buildScopeReg (Register CLScopeRegister,
@@ -1153,7 +1153,7 @@ static bool generateGroupInst(const SPIRV::IncomingCall *Call,
11531153
11541154 Register Arg0;
11551155 if (GroupBuiltin->HasBoolArg ) {
1156- SPIRVType *BoolType = GR->getOrCreateSPIRVBoolType (MIRBuilder);
1156+ SPIRVType *BoolType = GR->getOrCreateSPIRVBoolType (MIRBuilder, true );
11571157 Register BoolReg = Call->Arguments [0 ];
11581158 SPIRVType *BoolRegType = GR->getSPIRVTypeForVReg (BoolReg);
11591159 if (!BoolRegType)
@@ -1162,14 +1162,15 @@ static bool generateGroupInst(const SPIRV::IncomingCall *Call,
11621162 if (ArgInstruction->getOpcode () == TargetOpcode::G_CONSTANT) {
11631163 if (BoolRegType->getOpcode () != SPIRV::OpTypeBool)
11641164 Arg0 = GR->buildConstantInt (getIConstVal (BoolReg, MRI), MIRBuilder,
1165- BoolType);
1165+ BoolType, true );
11661166 } else {
11671167 if (BoolRegType->getOpcode () == SPIRV::OpTypeInt) {
11681168 Arg0 = MRI->createGenericVirtualRegister (LLT::scalar (1 ));
11691169 MRI->setRegClass (Arg0, &SPIRV::iIDRegClass);
11701170 GR->assignSPIRVTypeToVReg (BoolType, Arg0, MIRBuilder.getMF ());
1171- MIRBuilder.buildICmp (CmpInst::ICMP_NE, Arg0, BoolReg,
1172- GR->buildConstantInt (0 , MIRBuilder, BoolRegType));
1171+ MIRBuilder.buildICmp (
1172+ CmpInst::ICMP_NE, Arg0, BoolReg,
1173+ GR->buildConstantInt (0 , MIRBuilder, BoolRegType, true ));
11731174 insertAssignInstr (Arg0, nullptr , BoolType, GR, MIRBuilder,
11741175 MIRBuilder.getMF ().getRegInfo ());
11751176 } else if (BoolRegType->getOpcode () != SPIRV::OpTypeBool) {
@@ -1214,7 +1215,7 @@ static bool generateGroupInst(const SPIRV::IncomingCall *Call,
12141215 LLT::fixed_vector (VecLen, MRI->getType (ElemReg)));
12151216 MRI->setRegClass (VecReg, &SPIRV::vIDRegClass);
12161217 SPIRVType *VecType =
1217- GR->getOrCreateSPIRVVectorType (ElemType, VecLen, MIRBuilder);
1218+ GR->getOrCreateSPIRVVectorType (ElemType, VecLen, MIRBuilder, true );
12181219 GR->assignSPIRVTypeToVReg (VecType, VecReg, MIRBuilder.getMF ());
12191220 auto MIB =
12201221 MIRBuilder.buildInstr (TargetOpcode::G_BUILD_VECTOR).addDef (VecReg);
@@ -1462,7 +1463,7 @@ static bool genWorkgroupQuery(const SPIRV::IncomingCall *Call,
14621463 MIRBuilder.buildCopy (DefaultReg, NewRegister);
14631464 } else { // If it could be in range, we need to load from the given builtin.
14641465 auto Vec3Ty =
1465- GR->getOrCreateSPIRVVectorType (PointerSizeType, 3 , MIRBuilder);
1466+ GR->getOrCreateSPIRVVectorType (PointerSizeType, 3 , MIRBuilder, true );
14661467 Register LoadedVector =
14671468 buildBuiltinVariableLoad (MIRBuilder, Vec3Ty, GR, BuiltinValue,
14681469 LLT::fixed_vector (3 , PointerSize));
@@ -1485,7 +1486,7 @@ static bool genWorkgroupQuery(const SPIRV::IncomingCall *Call,
14851486 *MRI);
14861487
14871488 auto IndexType = GR->getSPIRVTypeForVReg (IndexRegister);
1488- auto BoolType = GR->getOrCreateSPIRVBoolType (MIRBuilder);
1489+ auto BoolType = GR->getOrCreateSPIRVBoolType (MIRBuilder, true );
14891490
14901491 Register CompareRegister =
14911492 MRI->createGenericVirtualRegister (LLT::scalar (1 ));
@@ -1814,7 +1815,7 @@ static bool generateImageSizeQueryInst(const SPIRV::IncomingCall *Call,
18141815 MIRBuilder.getMRI ()->setRegClass (QueryResult, &SPIRV::vIDRegClass);
18151816 SPIRVType *IntTy = GR->getOrCreateSPIRVIntegerType (32 , MIRBuilder);
18161817 QueryResultType = GR->getOrCreateSPIRVVectorType (
1817- IntTy, NumActualRetComponents, MIRBuilder);
1818+ IntTy, NumActualRetComponents, MIRBuilder, true );
18181819 GR->assignSPIRVTypeToVReg (QueryResultType, QueryResult, MIRBuilder.getMF ());
18191820 }
18201821 bool IsDimBuf = ImgType->getOperand (2 ).getImm () == SPIRV::Dim::DIM_Buffer;
@@ -1971,7 +1972,7 @@ static bool generateReadImageInst(const StringRef DemangledCall,
19711972
19721973 if (Call->ReturnType ->getOpcode () != SPIRV::OpTypeVector) {
19731974 SPIRVType *TempType =
1974- GR->getOrCreateSPIRVVectorType (Call->ReturnType , 4 , MIRBuilder);
1975+ GR->getOrCreateSPIRVVectorType (Call->ReturnType , 4 , MIRBuilder, true );
19751976 Register TempRegister =
19761977 MRI->createGenericVirtualRegister (GR->getRegType (TempType));
19771978 MRI->setRegClass (TempRegister, GR->getRegClass (TempType));
@@ -2069,7 +2070,7 @@ static bool generateSampleImageInst(const StringRef DemangledCall,
20692070 SPIRVType *Type =
20702071 Call->ReturnType
20712072 ? Call->ReturnType
2072- : GR->getOrCreateSPIRVTypeByName (ReturnType, MIRBuilder);
2073+ : GR->getOrCreateSPIRVTypeByName (ReturnType, MIRBuilder, true );
20732074 if (!Type) {
20742075 std::string DiagMsg =
20752076 " Unable to recognize SPIRV type name: " + ReturnType;
@@ -2267,7 +2268,8 @@ static bool buildNDRange(const SPIRV::IncomingCall *Call,
22672268 unsigned BitWidth = GR->getPointerSize () == 64 ? 64 : 32 ;
22682269 Type *BaseTy = IntegerType::get (MF.getFunction ().getContext (), BitWidth);
22692270 Type *FieldTy = ArrayType::get (BaseTy, Size);
2270- SPIRVType *SpvFieldTy = GR->getOrCreateSPIRVType (FieldTy, MIRBuilder);
2271+ SPIRVType *SpvFieldTy = GR->getOrCreateSPIRVType (
2272+ FieldTy, MIRBuilder, SPIRV::AccessQualifier::ReadWrite, true );
22712273 GlobalWorkSize = MRI->createVirtualRegister (&SPIRV::iIDRegClass);
22722274 GR->assignSPIRVTypeToVReg (SpvFieldTy, GlobalWorkSize, MF);
22732275 MIRBuilder.buildInstr (SPIRV::OpLoad)
@@ -2305,7 +2307,8 @@ getOrCreateSPIRVDeviceEventPointer(MachineIRBuilder &MIRBuilder,
23052307 LLVMContext &Context = MIRBuilder.getMF ().getFunction ().getContext ();
23062308 unsigned SC1 = storageClassToAddressSpace (SPIRV::StorageClass::Generic);
23072309 Type *PtrType = PointerType::get (Context, SC1);
2308- return GR->getOrCreateSPIRVType (PtrType, MIRBuilder);
2310+ return GR->getOrCreateSPIRVType (PtrType, MIRBuilder,
2311+ SPIRV::AccessQualifier::ReadWrite, true );
23092312}
23102313
23112314static bool buildEnqueueKernel (const SPIRV::IncomingCall *Call,
@@ -2454,7 +2457,7 @@ static bool generateAsyncCopy(const SPIRV::IncomingCall *Call,
24542457 SPIRVType *NewType =
24552458 Call->ReturnType ->getOpcode () == SPIRV::OpTypeEvent
24562459 ? nullptr
2457- : GR->getOrCreateSPIRVTypeByName (" spirv.Event" , MIRBuilder);
2460+ : GR->getOrCreateSPIRVTypeByName (" spirv.Event" , MIRBuilder, true );
24582461 Register TypeReg = GR->getSPIRVTypeID (NewType ? NewType : Call->ReturnType );
24592462 unsigned NumArgs = Call->Arguments .size ();
24602463 Register EventReg = Call->Arguments [NumArgs - 1 ];
@@ -2955,12 +2958,13 @@ static SPIRVType *getCoopMatrType(const TargetExtType *ExtensionType,
29552958 assert (ExtensionType->getNumTypeParameters () == 1 &&
29562959 " SPIR-V coop matrices builtin type must have a type parameter!" );
29572960 const SPIRVType *ElemType =
2958- GR->getOrCreateSPIRVType (ExtensionType->getTypeParameter (0 ), MIRBuilder);
2961+ GR->getOrCreateSPIRVType (ExtensionType->getTypeParameter (0 ), MIRBuilder,
2962+ SPIRV::AccessQualifier::ReadWrite, true );
29592963 // Create or get an existing type from GlobalRegistry.
29602964 return GR->getOrCreateOpTypeCoopMatr (
29612965 MIRBuilder, ExtensionType, ElemType, ExtensionType->getIntParameter (0 ),
29622966 ExtensionType->getIntParameter (1 ), ExtensionType->getIntParameter (2 ),
2963- ExtensionType->getIntParameter (3 ));
2967+ ExtensionType->getIntParameter (3 ), true );
29642968}
29652969
29662970static SPIRVType *
@@ -2970,7 +2974,8 @@ getImageType(const TargetExtType *ExtensionType,
29702974 assert (ExtensionType->getNumTypeParameters () == 1 &&
29712975 " SPIR-V image builtin type must have sampled type parameter!" );
29722976 const SPIRVType *SampledType =
2973- GR->getOrCreateSPIRVType (ExtensionType->getTypeParameter (0 ), MIRBuilder);
2977+ GR->getOrCreateSPIRVType (ExtensionType->getTypeParameter (0 ), MIRBuilder,
2978+ SPIRV::AccessQualifier::ReadWrite, true );
29742979 assert ((ExtensionType->getNumIntParameters () == 7 ||
29752980 ExtensionType->getNumIntParameters () == 6 ) &&
29762981 " Invalid number of parameters for SPIR-V image builtin!" );
0 commit comments