shader: Fix Phi node types
This commit is contained in:
		| @@ -275,10 +275,6 @@ void Inst::AddPhiOperand(Block* predecessor, const Value& value) { | ||||
|     if (!value.IsImmediate()) { | ||||
|         Use(value); | ||||
|     } | ||||
|     if (Flags<IR::Type>() == IR::Type::Void) { | ||||
|         // Set the type of the phi node | ||||
|         SetFlags<IR::Type>(value.Type()); | ||||
|     } | ||||
|     phi_args.emplace_back(predecessor, value); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -176,6 +176,8 @@ public: | ||||
|                 } else if (!sealed_blocks.contains(block)) { | ||||
|                     // Incomplete CFG | ||||
|                     IR::Inst* phi{&*block->PrependNewInst(block->begin(), IR::Opcode::Phi)}; | ||||
|                     phi->SetFlags(IR::TypeOf(UndefOpcode(variable))); | ||||
|  | ||||
|                     incomplete_phis[block].insert_or_assign(variable, phi); | ||||
|                     stack.back().result = IR::Value{&*phi}; | ||||
|                 } else if (const std::span imm_preds{block->ImmediatePredecessors()}; | ||||
| @@ -187,6 +189,8 @@ public: | ||||
|                 } else { | ||||
|                     // Break potential cycles with operandless phi | ||||
|                     IR::Inst* const phi{&*block->PrependNewInst(block->begin(), IR::Opcode::Phi)}; | ||||
|                     phi->SetFlags(IR::TypeOf(UndefOpcode(variable))); | ||||
|  | ||||
|                     WriteVariable(variable, block, IR::Value{phi}); | ||||
|  | ||||
|                     stack.back().phi = phi; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ReinUsesLisp
					ReinUsesLisp