ssa_assign() creates an SSA variable and assignment at the same time. With this, simple sequences of SSA statements can be easily created. --- src/glsl/ir_builder.cpp | 14 ++++++++++++++ src/glsl/ir_builder.h | 1 + 2 files changed, 15 insertions(+)
diff --git a/src/glsl/ir_builder.cpp b/src/glsl/ir_builder.cpp index 2229cd2..03cb38f 100644 --- a/src/glsl/ir_builder.cpp +++ b/src/glsl/ir_builder.cpp @@ -76,6 +76,20 @@ assign(deref lhs, operand rhs, operand condition) return assign(lhs, rhs, condition, (1 << lhs.val->type->vector_elements) - 1); } +ir_assignment * +ssa_assign(const char *name, operand rhs) +{ + void *mem_ctx = ralloc_parent(rhs.val); + + ir_variable *var = new(mem_ctx) ir_variable(rhs.val->type, name, + ir_var_temporary_ssa); + + ir_assignment *ret = assign(var, rhs); + var->ssa_assignment = ret; + return ret; +} + + ir_return * ret(operand retval) { diff --git a/src/glsl/ir_builder.h b/src/glsl/ir_builder.h index ae10995..415112b 100644 --- a/src/glsl/ir_builder.h +++ b/src/glsl/ir_builder.h @@ -124,6 +124,7 @@ ir_assignment *assign(deref lhs, operand rhs); ir_assignment *assign(deref lhs, operand rhs, int writemask); ir_assignment *assign(deref lhs, operand rhs, operand condition); ir_assignment *assign(deref lhs, operand rhs, operand condition, int writemask); +ir_assignment *ssa_assign(const char *name, operand rhs); ir_return *ret(operand retval); -- 1.8.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev