From d574d29102aa78c0243738d905d59c08b7e359cc Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 30 Aug 2023 20:58:43 -0500 Subject: [PATCH] nak: Add helpers to BasicBlock to get phis Part-of: --- src/nouveau/compiler/nak_ir.rs | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/nouveau/compiler/nak_ir.rs b/src/nouveau/compiler/nak_ir.rs index 62f7a8dc43e..73f31e250cd 100644 --- a/src/nouveau/compiler/nak_ir.rs +++ b/src/nouveau/compiler/nak_ir.rs @@ -4001,6 +4001,54 @@ impl BasicBlock { self.instrs = instrs; } + pub fn phi_dsts(&self) -> Option<&OpPhiDsts> { + for instr in self.instrs.iter() { + match &instr.op { + Op::PhiDsts(phi) => return Some(phi), + _ => break, + } + } + None + } + + pub fn phi_dsts_mut(&mut self) -> Option<&mut OpPhiDsts> { + for instr in self.instrs.iter_mut() { + match &mut instr.op { + Op::PhiDsts(phi) => return Some(phi), + _ => break, + } + } + None + } + + pub fn phi_srcs(&self) -> Option<&OpPhiSrcs> { + for instr in self.instrs.iter().rev() { + if instr.is_branch() { + continue; + } + + match &instr.op { + Op::PhiSrcs(phi) => return Some(phi), + _ => break, + } + } + None + } + + pub fn phi_srcs_mut(&mut self) -> Option<&mut OpPhiSrcs> { + for instr in self.instrs.iter_mut().rev() { + if instr.is_branch() { + continue; + } + + match &mut instr.op { + Op::PhiSrcs(phi) => return Some(phi), + _ => break, + } + } + None + } + pub fn branch(&self) -> Option<&Instr> { if let Some(i) = self.instrs.last() { if i.is_branch() {