If we use vkd3d_shader_instruction, the simplest way to get traces is use the existing backend. Emitting DXIL-specific traces either requires another IR for that purpose, or passing the raw DXIL records to trace.c. Neither of these are particularly desirable, so we could just rely on dxc when a DXIL trace is needed.
VKD3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER creates another issue. It uses vectors, and TPF may rearrange the data for better access. I wouldn't try to replicate that. Support for 16-bit types is required. The simplest approach is a new register type containing an array of scalar constants. This makes addressing easy. We also need more types in enum vkd3d_data_type:
VKD3D_DATA_HALF, VKD3D_DATA_UINT8, VKD3D_DATA_UINT16, VKD3D_DATA_UINT64
UINT8 is often used in dx.op instructions to encode e.g. resource types, so it's not exclusive to int8 support.