- /* change node to complex1 node */
- node->op = gpir_op_complex1;
- alu->children[0] = &impl->node;
- alu->children[1] = &complex2->node;
- alu->children[2] = child;
- alu->num_child = 3;
- gpir_node_add_dep(node, &impl->node, GPIR_DEP_INPUT);
- gpir_node_add_dep(node, &complex2->node, GPIR_DEP_INPUT);
+ gpir_alu_node *complex1 = gpir_node_create(block, gpir_op_complex1);
+ complex1->children[0] = &impl->node;
+ complex1->children[1] = &complex2->node;
+ complex1->children[2] = child;
+ complex1->num_child = 3;
+ gpir_node_add_dep(&complex1->node, child, GPIR_DEP_INPUT);
+ gpir_node_add_dep(&complex1->node, &impl->node, GPIR_DEP_INPUT);
+ gpir_node_add_dep(&complex1->node, &complex2->node, GPIR_DEP_INPUT);
+ list_addtail(&complex1->node.list, &node->list);
+
+ gpir_node *result = &complex1->node;
+
+ if (node->op == gpir_op_log2) {
+ gpir_alu_node *postlog2 = gpir_node_create(block, gpir_op_postlog2);
+ if (unlikely(!postlog2))
+ return false;
+
+ postlog2->children[0] = result;
+ postlog2->num_child = 1;
+ gpir_node_add_dep(&postlog2->node, result, GPIR_DEP_INPUT);
+ list_addtail(&postlog2->node.list, &node->list);
+
+ result = &postlog2->node;
+ }
+
+ gpir_node_replace_succ(result, node);
+ gpir_node_delete(node);