forked from eden-emu/eden
		
	shader: Add pools and rename files
This commit is contained in:
		
							parent
							
								
									be94ee88d2
								
							
						
					
					
						commit
						16cb00c521
					
				
					 30 changed files with 255 additions and 108 deletions
				
			
		|  | @ -19,7 +19,7 @@ | |||
| #include "shader_recompiler/frontend/ir/basic_block.h" | ||||
| #include "shader_recompiler/frontend/ir/function.h" | ||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | ||||
| #include "shader_recompiler/frontend/ir/opcode.h" | ||||
| #include "shader_recompiler/frontend/ir/opcodes.h" | ||||
| #include "shader_recompiler/frontend/ir/pred.h" | ||||
| #include "shader_recompiler/frontend/ir/reg.h" | ||||
| #include "shader_recompiler/ir_opt/passes.h" | ||||
|  | @ -150,52 +150,52 @@ private: | |||
| 
 | ||||
| void SsaRewritePass(IR::Function& function) { | ||||
|     Pass pass; | ||||
|     for (const auto& block : function.blocks) { | ||||
|     for (IR::Block* const block : function.blocks) { | ||||
|         for (IR::Inst& inst : block->Instructions()) { | ||||
|             switch (inst.Opcode()) { | ||||
|             case IR::Opcode::SetRegister: | ||||
|                 if (const IR::Reg reg{inst.Arg(0).Reg()}; reg != IR::Reg::RZ) { | ||||
|                     pass.WriteVariable(reg, block.get(), inst.Arg(1)); | ||||
|                     pass.WriteVariable(reg, block, inst.Arg(1)); | ||||
|                 } | ||||
|                 break; | ||||
|             case IR::Opcode::SetPred: | ||||
|                 if (const IR::Pred pred{inst.Arg(0).Pred()}; pred != IR::Pred::PT) { | ||||
|                     pass.WriteVariable(pred, block.get(), inst.Arg(1)); | ||||
|                     pass.WriteVariable(pred, block, inst.Arg(1)); | ||||
|                 } | ||||
|                 break; | ||||
|             case IR::Opcode::SetZFlag: | ||||
|                 pass.WriteVariable(ZeroFlagTag{}, block.get(), inst.Arg(0)); | ||||
|                 pass.WriteVariable(ZeroFlagTag{}, block, inst.Arg(0)); | ||||
|                 break; | ||||
|             case IR::Opcode::SetSFlag: | ||||
|                 pass.WriteVariable(SignFlagTag{}, block.get(), inst.Arg(0)); | ||||
|                 pass.WriteVariable(SignFlagTag{}, block, inst.Arg(0)); | ||||
|                 break; | ||||
|             case IR::Opcode::SetCFlag: | ||||
|                 pass.WriteVariable(CarryFlagTag{}, block.get(), inst.Arg(0)); | ||||
|                 pass.WriteVariable(CarryFlagTag{}, block, inst.Arg(0)); | ||||
|                 break; | ||||
|             case IR::Opcode::SetOFlag: | ||||
|                 pass.WriteVariable(OverflowFlagTag{}, block.get(), inst.Arg(0)); | ||||
|                 pass.WriteVariable(OverflowFlagTag{}, block, inst.Arg(0)); | ||||
|                 break; | ||||
|             case IR::Opcode::GetRegister: | ||||
|                 if (const IR::Reg reg{inst.Arg(0).Reg()}; reg != IR::Reg::RZ) { | ||||
|                     inst.ReplaceUsesWith(pass.ReadVariable(reg, block.get())); | ||||
|                     inst.ReplaceUsesWith(pass.ReadVariable(reg, block)); | ||||
|                 } | ||||
|                 break; | ||||
|             case IR::Opcode::GetPred: | ||||
|                 if (const IR::Pred pred{inst.Arg(0).Pred()}; pred != IR::Pred::PT) { | ||||
|                     inst.ReplaceUsesWith(pass.ReadVariable(pred, block.get())); | ||||
|                     inst.ReplaceUsesWith(pass.ReadVariable(pred, block)); | ||||
|                 } | ||||
|                 break; | ||||
|             case IR::Opcode::GetZFlag: | ||||
|                 inst.ReplaceUsesWith(pass.ReadVariable(ZeroFlagTag{}, block.get())); | ||||
|                 inst.ReplaceUsesWith(pass.ReadVariable(ZeroFlagTag{}, block)); | ||||
|                 break; | ||||
|             case IR::Opcode::GetSFlag: | ||||
|                 inst.ReplaceUsesWith(pass.ReadVariable(SignFlagTag{}, block.get())); | ||||
|                 inst.ReplaceUsesWith(pass.ReadVariable(SignFlagTag{}, block)); | ||||
|                 break; | ||||
|             case IR::Opcode::GetCFlag: | ||||
|                 inst.ReplaceUsesWith(pass.ReadVariable(CarryFlagTag{}, block.get())); | ||||
|                 inst.ReplaceUsesWith(pass.ReadVariable(CarryFlagTag{}, block)); | ||||
|                 break; | ||||
|             case IR::Opcode::GetOFlag: | ||||
|                 inst.ReplaceUsesWith(pass.ReadVariable(OverflowFlagTag{}, block.get())); | ||||
|                 inst.ReplaceUsesWith(pass.ReadVariable(OverflowFlagTag{}, block)); | ||||
|                 break; | ||||
|             default: | ||||
|                 break; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 ReinUsesLisp
						ReinUsesLisp