@@ -639,6 +639,13 @@ class DXBuilder {
639639 return dxsa::DclFunctionBody::create (builder, loc, index);
640640 }
641641
642+ Instruction buildDclFunctionTable (uint32_t index, ArrayRef<int32_t > functions,
643+ Location loc) {
644+ auto *ctx = builder.getContext ();
645+ return dxsa::DclFunctionTable::create (
646+ builder, loc, index, DenseI32ArrayAttr::get (ctx, functions));
647+ }
648+
642649private:
643650 MLIRContext *context;
644651 ModuleOp module ;
@@ -1184,6 +1191,24 @@ class Parser {
11841191 return builder.buildDclFunctionBody (*index, loc);
11851192 }
11861193
1194+ FailureOr<Instruction> parseDclFunctionTable (Location loc) {
1195+ Token index = parseToken ();
1196+ FAILURE_IF_FAILED (index);
1197+
1198+ Token numFunctions = parseToken ();
1199+ FAILURE_IF_FAILED (numFunctions);
1200+
1201+ SmallVector<int32_t , 16 > functions;
1202+ functions.resize (*numFunctions);
1203+ for (uint32_t i = 0 ; i < numFunctions; ++i) {
1204+ Token functionIndex = parseToken ();
1205+ FAILURE_IF_FAILED (functionIndex);
1206+ functions[i] = *functionIndex;
1207+ }
1208+
1209+ return builder.buildDclFunctionTable (*index, functions, loc);
1210+ }
1211+
11871212 OptionalParseResult parseDclInstruction (uint32_t opcodeToken, Location loc,
11881213 Instruction &out) {
11891214 FailureOr<Instruction> result;
@@ -1233,6 +1258,9 @@ class Parser {
12331258 case D3D11_SB_OPCODE_DCL_FUNCTION_BODY:
12341259 result = parseDclFunctionBody (loc);
12351260 break ;
1261+ case D3D11_SB_OPCODE_DCL_FUNCTION_TABLE:
1262+ result = parseDclFunctionTable (loc);
1263+ break ;
12361264 default :
12371265 return std::nullopt ;
12381266 }
0 commit comments