diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp
index c76b45b8b..022b6584c 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp
@@ -58,7 +58,9 @@ void EmitPhiMove(EmitContext& ctx, const IR::Value& phi_value, const IR::Value&
     }
     const Register phi_reg{ctx.reg_alloc.Consume(IR::Value{&phi})};
     const Value eval_value{ctx.reg_alloc.Consume(value)};
-
+    if (!value.IsImmediate() && IR::IsUndef(RegAlloc::AliasInst(*value.Inst()))) {
+        return;
+    }
     if (phi_reg == eval_value) {
         return;
     }
diff --git a/src/shader_recompiler/frontend/ir/value.h b/src/shader_recompiler/frontend/ir/value.h
index 0c6bf684d..090cc1739 100644
--- a/src/shader_recompiler/frontend/ir/value.h
+++ b/src/shader_recompiler/frontend/ir/value.h
@@ -395,4 +395,17 @@ inline f64 Value::F64() const {
     return inst.GetOpcode() == Opcode::Phi;
 }
 
+[[nodiscard]] inline bool IsUndef(const Inst& inst) {
+    switch (inst.GetOpcode()) {
+    case Opcode::UndefU1:
+    case Opcode::UndefU8:
+    case Opcode::UndefU16:
+    case Opcode::UndefU32:
+    case Opcode::UndefU64:
+        return true;
+    default:
+        return false;
+    }
+}
+
 } // namespace Shader::IR