spirv: Add support for self-referencing phi nodes
This commit is contained in:
		| @@ -217,9 +217,16 @@ Id EmitPhi(EmitContext& ctx, IR::Inst* inst) { | ||||
|             IR::Inst* const arg_inst{arg.Inst()}; | ||||
|             def = arg_inst->Definition<Id>(); | ||||
|             if (!Sirit::ValidId(def)) { | ||||
|                 // If it hasn't been defined, get a forward declaration | ||||
|                 def = ctx.ForwardDeclarationId(); | ||||
|                 arg_inst->SetDefinition<Id>(def); | ||||
|                 if (arg_inst == inst) { | ||||
|                     // This is a self referencing phi node | ||||
|                     def = ctx.CurrentId(); | ||||
|                     // Self-referencing definition will be set by the caller | ||||
|                 } else { | ||||
|                     // If it hasn't been defined and it's not a self reference, | ||||
|                     // get a forward declaration | ||||
|                     def = ctx.ForwardDeclarationId(); | ||||
|                     arg_inst->SetDefinition<Id>(def); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         IR::Block* const phi_block{inst->PhiBlock(index)}; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user