Zebediah Figura (@zfigura) commented about libs/vkd3d-shader/hlsl.y:
return value->u;case HLSL_TYPE_INT:return value->i;case HLSL_TYPE_FLOAT:case HLSL_TYPE_HALF:return value->f;case HLSL_TYPE_DOUBLE:return value->d;case HLSL_TYPE_BOOL:return !!value->u;default:vkd3d_unreachable();}}
- hlsl_block_init(&block);
- hlsl_block_add_instr(&block, node);
This instruction already belongs to a block; this'll corrupt that list.
Separately, this will only fold the one expression.
I believe both problems will be fixed if you just transform the whole block, and I don't see any reason not to?