@@ -111,6 +111,7 @@ class SPIRVEmitIntrinsics
111111 unsigned OperandToReplace,
112112 IRBuilder<> &B);
113113 void insertPtrCastOrAssignTypeInstr (Instruction *I, IRBuilder<> &B);
114+ void insertSpirvDecorations (Instruction *I, IRBuilder<> &B);
114115 void processGlobalValue (GlobalVariable &GV, IRBuilder<> &B);
115116 void processParamTypes (Function *F, IRBuilder<> &B);
116117 void processParamTypesByFunHeader (Function *F, IRBuilder<> &B);
@@ -1116,6 +1117,15 @@ void SPIRVEmitIntrinsics::insertAssignTypeIntrs(Instruction *I,
11161117 }
11171118}
11181119
1120+ void SPIRVEmitIntrinsics::insertSpirvDecorations (Instruction *I,
1121+ IRBuilder<> &B) {
1122+ if (MDNode *MD = I->getMetadata (" spirv.Decorations" )) {
1123+ B.SetInsertPoint (I->getNextNode ());
1124+ B.CreateIntrinsic (Intrinsic::spv_assign_decoration, {I->getType ()},
1125+ {I, MetadataAsValue::get (I->getContext (), MD)});
1126+ }
1127+ }
1128+
11191129void SPIRVEmitIntrinsics::processInstrAfterVisit (Instruction *I,
11201130 IRBuilder<> &B) {
11211131 auto *II = dyn_cast<IntrinsicInst>(I);
@@ -1287,6 +1297,7 @@ bool SPIRVEmitIntrinsics::runOnFunction(Function &Func) {
12871297 insertAssignPtrTypeIntrs (I, B);
12881298 insertAssignTypeIntrs (I, B);
12891299 insertPtrCastOrAssignTypeInstr (I, B);
1300+ insertSpirvDecorations (I, B);
12901301 }
12911302
12921303 for (auto &I : instructions (Func))
0 commit comments