Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spirv_msl.cpp')
-rw-r--r--spirv_msl.cpp13
1 files changed, 3 insertions, 10 deletions
diff --git a/spirv_msl.cpp b/spirv_msl.cpp
index a4f911c3..7b6b0708 100644
--- a/spirv_msl.cpp
+++ b/spirv_msl.cpp
@@ -4649,10 +4649,8 @@ void CompilerMSL::emit_instruction(const Instruction &instruction)
uint32_t result_id = ops[1];
uint32_t op0 = ops[2];
uint32_t op1 = ops[3];
- forced_temporaries.insert(result_id);
auto &type = get<SPIRType>(result_type);
- statement(variable_decl(type, to_name(result_id)), ";");
- set<SPIRExpression>(result_id, to_name(result_id), result_type, true);
+ emit_uninitialized_temporary_expression(result_type, result_id);
auto &res_type = get<SPIRType>(type.member_types[1]);
if (opcode == OpIAddCarry)
@@ -4681,10 +4679,8 @@ void CompilerMSL::emit_instruction(const Instruction &instruction)
uint32_t result_id = ops[1];
uint32_t op0 = ops[2];
uint32_t op1 = ops[3];
- forced_temporaries.insert(result_id);
auto &type = get<SPIRType>(result_type);
- statement(variable_decl(type, to_name(result_id)), ";");
- set<SPIRExpression>(result_id, to_name(result_id), result_type, true);
+ emit_uninitialized_temporary_expression(result_type, result_id);
statement(to_expression(result_id), ".", to_member_name(type, 0), " = ", to_enclosed_expression(op0), " * ",
to_enclosed_expression(op1), ";");
@@ -4966,8 +4962,6 @@ void CompilerMSL::emit_atomic_func_op(uint32_t result_type, uint32_t result_id,
uint32_t mem_order_2, bool has_mem_order_2, uint32_t obj, uint32_t op1,
bool op1_is_pointer, bool op1_is_literal, uint32_t op2)
{
- forced_temporaries.insert(result_id);
-
string exp = string(op) + "(";
auto &type = get_pointee_type(expression_type(obj));
@@ -5006,12 +5000,11 @@ void CompilerMSL::emit_atomic_func_op(uint32_t result_type, uint32_t result_id,
// the CAS loop, otherwise it will loop infinitely, with the comparison test always failing.
// The function updates the comparitor value from the memory value, so the additional
// comparison test evaluates the memory value against the expected value.
- statement(variable_decl(type, to_name(result_id)), ";");
+ emit_uninitialized_temporary_expression(result_type, result_id);
statement("do");
begin_scope();
statement(to_name(result_id), " = ", to_expression(op1), ";");
end_scope_decl(join("while (!", exp, " && ", to_name(result_id), " == ", to_enclosed_expression(op1), ")"));
- set<SPIRExpression>(result_id, to_name(result_id), result_type, true);
}
else
{