• Home
  • Raw
  • Download

Lines Matching full:ir

29  * Translate GLSL IR to Mesa's gl_program representation.
40 #include "compiler/glsl/ir.h"
157 /** Pointer to the ir source this tree came from for debugging */
158 ir_instruction *ir; member in __anon77ed54e80211::ir_to_mesa_instruction
201 * Mesa IR.
228 void reladdr_to_temp(ir_instruction *ir, src_reg *reg, int *num_reladdr);
275 ir_to_mesa_instruction *emit(ir_instruction *ir, enum prog_opcode op);
277 ir_to_mesa_instruction *emit(ir_instruction *ir, enum prog_opcode op,
280 ir_to_mesa_instruction *emit(ir_instruction *ir, enum prog_opcode op,
283 ir_to_mesa_instruction *emit(ir_instruction *ir, enum prog_opcode op,
290 ir_to_mesa_instruction * emit_dp(ir_instruction *ir,
296 void emit_scalar(ir_instruction *ir, enum prog_opcode op,
299 void emit_scalar(ir_instruction *ir, enum prog_opcode op,
302 bool try_emit_mad(ir_expression *ir,
304 bool try_emit_mad_for_and_not(ir_expression *ir,
307 void emit_swz(ir_expression *ir);
309 void emit_equality_comparison(ir_expression *ir, enum prog_opcode op,
313 inline void emit_sne(ir_expression *ir, dst_reg dst, in emit_sne() argument
316 emit_equality_comparison(ir, OPCODE_SLT, dst, src0, src1); in emit_sne()
319 inline void emit_seq(ir_expression *ir, dst_reg dst, in emit_seq() argument
322 emit_equality_comparison(ir, OPCODE_SGE, dst, src0, src1); in emit_seq()
325 bool process_move_condition(ir_rvalue *ir);
355 ir_to_mesa_visitor::emit(ir_instruction *ir, enum prog_opcode op, in emit() argument
371 reladdr_to_temp(ir, &src2, &num_reladdr); in emit()
372 reladdr_to_temp(ir, &src1, &num_reladdr); in emit()
373 reladdr_to_temp(ir, &src0, &num_reladdr); in emit()
376 emit(ir, OPCODE_ARL, address_reg, *dst.reladdr); in emit()
386 inst->ir = ir; in emit()
395 ir_to_mesa_visitor::emit(ir_instruction *ir, enum prog_opcode op, in emit() argument
398 return emit(ir, op, dst, src0, src1, undef_src); in emit()
402 ir_to_mesa_visitor::emit(ir_instruction *ir, enum prog_opcode op, in emit() argument
406 return emit(ir, op, dst, src0, undef_src, undef_src); in emit()
410 ir_to_mesa_visitor::emit(ir_instruction *ir, enum prog_opcode op) in emit() argument
412 return emit(ir, op, undef_dst, undef_src, undef_src, undef_src); in emit()
416 ir_to_mesa_visitor::emit_dp(ir_instruction *ir, in emit_dp() argument
424 return emit(ir, dot_opcodes[elements - 2], dst, src0, src1); in emit_dp()
436 ir_to_mesa_visitor::emit_scalar(ir_instruction *ir, enum prog_opcode op, in emit_scalar() argument
474 inst = emit(ir, op, dst, src0, src1); in emit_scalar()
481 ir_to_mesa_visitor::emit_scalar(ir_instruction *ir, enum prog_opcode op, in emit_scalar() argument
488 emit_scalar(ir, op, dst, src0, undef); in emit_scalar()
512 * pass over the Mesa IR later.
546 ir_to_mesa_visitor::visit(ir_variable *ir) in visit() argument
548 if (ir->data.mode == ir_var_uniform && strncmp(ir->name, "gl_", 3) == 0) { in visit()
550 const ir_state_slot *const slots = ir->get_state_slots(); in visit()
559 for (i = 0; i < ir->get_num_state_slots(); i++) { in visit()
567 if (i == ir->get_num_state_slots()) { in visit()
569 storage = new(mem_ctx) variable_storage(ir, PROGRAM_STATE_VAR, -1); in visit()
578 assert((int) ir->get_num_state_slots() == type_size(ir->type)); in visit()
580 storage = new(mem_ctx) variable_storage(ir, PROGRAM_TEMPORARY, in visit()
583 this->next_temp += type_size(ir->type); in visit()
589 for (unsigned int i = 0; i < ir->get_num_state_slots(); i++) { in visit()
602 emit(ir, OPCODE_MOV, dst, src); in visit()
609 dst.index != storage->index + (int) ir->get_num_state_slots()) { in visit()
613 ir->name, dst.index - storage->index, in visit()
614 type_size(ir->type)); in visit()
620 ir_to_mesa_visitor::visit(ir_loop *ir) in visit() argument
624 visit_exec_list(&ir->body_instructions, this); in visit()
630 ir_to_mesa_visitor::visit(ir_loop_jump *ir) in visit() argument
632 switch (ir->mode) { in visit()
644 ir_to_mesa_visitor::visit(ir_function_signature *ir) in visit() argument
647 (void)ir; in visit()
651 ir_to_mesa_visitor::visit(ir_function *ir) in visit() argument
656 if (strcmp(ir->name, "main") == 0) { in visit()
660 sig = ir->matching_signature(NULL, &empty, false); in visit()
664 foreach_in_list(ir_instruction, ir, &sig->body) { in visit()
665 ir->accept(this); in visit()
671 ir_to_mesa_visitor::try_emit_mad(ir_expression *ir, int mul_operand) in try_emit_mad() argument
676 ir_expression *expr = ir->operands[mul_operand]->as_expression(); in try_emit_mad()
684 ir->operands[nonmul_operand]->accept(this); in try_emit_mad()
687 this->result = get_temp(ir->type); in try_emit_mad()
688 emit(ir, OPCODE_MAD, dst_reg(this->result), a, b, c); in try_emit_mad()
711 ir_to_mesa_visitor::try_emit_mad_for_and_not(ir_expression *ir, int try_operand) in try_emit_mad_for_and_not() argument
716 ir_expression *expr = ir->operands[try_operand]->as_expression(); in try_emit_mad_for_and_not()
720 ir->operands[other_operand]->accept(this); in try_emit_mad_for_and_not()
727 this->result = get_temp(ir->type); in try_emit_mad_for_and_not()
728 emit(ir, OPCODE_MAD, dst_reg(this->result), a, b, a); in try_emit_mad_for_and_not()
734 ir_to_mesa_visitor::reladdr_to_temp(ir_instruction *ir, in reladdr_to_temp() argument
740 emit(ir, OPCODE_ARL, address_reg, *reg->reladdr); in reladdr_to_temp()
745 emit(ir, OPCODE_MOV, dst_reg(temp), *reg); in reladdr_to_temp()
753 ir_to_mesa_visitor::emit_swz(ir_expression *ir) in emit_swz() argument
764 for (unsigned i = 0; i < ir->type->vector_elements; i++) { in emit_swz()
765 ir_rvalue *op = ir->operands[i]; in emit_swz()
856 const src_reg result_src = get_temp(ir->type); in emit_swz()
863 result_dst.writemask = (1 << ir->type->vector_elements) - 1; in emit_swz()
865 emit(ir, OPCODE_SWZ, result_dst, src); in emit_swz()
870 ir_to_mesa_visitor::emit_equality_comparison(ir_expression *ir, in emit_equality_comparison() argument
881 * consumes the generated IR is pretty dumb, take special care when one in emit_equality_comparison()
900 emit(ir, OPCODE_ADD, dst_reg(difference), tmp_src, src1); in emit_equality_comparison()
903 emit(ir, OPCODE_ABS, dst_reg(abs_difference), difference); in emit_equality_comparison()
906 emit(ir, op, dst, abs_difference, zero); in emit_equality_comparison()
910 ir_to_mesa_visitor::visit(ir_expression *ir) in visit() argument
913 src_reg op[ARRAY_SIZE(ir->operands)]; in visit()
919 if (ir->operation == ir_binop_add) { in visit()
920 if (try_emit_mad(ir, 1)) in visit()
922 if (try_emit_mad(ir, 0)) in visit()
928 if (ir->operation == ir_binop_logic_and) { in visit()
929 if (try_emit_mad_for_and_not(ir, 1)) in visit()
931 if (try_emit_mad_for_and_not(ir, 0)) in visit()
935 if (ir->operation == ir_quadop_vector) { in visit()
936 this->emit_swz(ir); in visit()
940 for (operand = 0; operand < ir->num_operands; operand++) { in visit()
942 ir->operands[operand]->accept(this); in visit()
945 ir->operands[operand]->print(); in visit()
954 assert(!ir->operands[operand]->type->is_matrix()); in visit()
957 int vector_elements = ir->operands[0]->type->vector_elements; in visit()
958 if (ir->operands[1]) { in visit()
960 ir->operands[1]->type->vector_elements); in visit()
968 result_src = get_temp(ir->type); in visit()
975 result_dst.writemask = (1 << ir->type->vector_elements) - 1; in visit()
977 switch (ir->operation) { in visit()
985 emit(ir, OPCODE_ADD, result_dst, op[0], src_reg_for_float(1.0)); in visit()
992 emit(ir, OPCODE_ABS, result_dst, op[0]); in visit()
995 emit(ir, OPCODE_SSG, result_dst, op[0]); in visit()
998 emit_scalar(ir, OPCODE_RCP, result_dst, op[0]); in visit()
1002 emit_scalar(ir, OPCODE_EX2, result_dst, op[0]); in visit()
1011 emit_scalar(ir, OPCODE_LG2, result_dst, op[0]); in visit()
1014 emit_scalar(ir, OPCODE_SIN, result_dst, op[0]); in visit()
1017 emit_scalar(ir, OPCODE_COS, result_dst, op[0]); in visit()
1021 emit(ir, OPCODE_DDX, result_dst, op[0]); in visit()
1024 emit(ir, OPCODE_DDY, result_dst, op[0]); in visit()
1028 ir_to_mesa_instruction *inst = emit(ir, OPCODE_MOV, in visit()
1035 emit(ir, OPCODE_ADD, result_dst, op[0], op[1]); in visit()
1038 emit(ir, OPCODE_SUB, result_dst, op[0], op[1]); in visit()
1042 emit(ir, OPCODE_MUL, result_dst, op[0], op[1]); in visit()
1049 assert(ir->type->is_integer_32()); in visit()
1050 emit(ir, OPCODE_MUL, result_dst, op[0], op[1]); in visit()
1054 emit(ir, OPCODE_SLT, result_dst, op[0], op[1]); in visit()
1057 emit(ir, OPCODE_SGE, result_dst, op[0], op[1]); in visit()
1060 emit_seq(ir, result_dst, op[0], op[1]); in visit()
1063 emit_sne(ir, result_dst, op[0], op[1]); in visit()
1067 if (ir->operands[0]->type->is_vector() || in visit()
1068 ir->operands[1]->type->is_vector()) { in visit()
1070 emit_sne(ir, dst_reg(temp), op[0], op[1]); in visit()
1075 emit_dp(ir, result_dst, temp, temp, vector_elements); in visit()
1083 emit(ir, OPCODE_SGE, result_dst, sge_src, src_reg_for_float(0.0)); in visit()
1085 emit_seq(ir, result_dst, op[0], op[1]); in visit()
1090 if (ir->operands[0]->type->is_vector() || in visit()
1091 ir->operands[1]->type->is_vector()) { in visit()
1093 if (ir->operands[0]->type->is_boolean() && in visit()
1094 ir->operands[1]->as_constant() && in visit()
1095 ir->operands[1]->as_constant()->is_zero()) { in visit()
1098 emit_sne(ir, dst_reg(temp), op[0], op[1]); in visit()
1105 emit_dp(ir, result_dst, temp, temp, vector_elements); in visit()
1118 emit(ir, OPCODE_SLT, result_dst, slt_src, src_reg_for_float(0.0)); in visit()
1121 emit_sne(ir, result_dst, op[0], op[1]); in visit()
1126 emit_sne(ir, result_dst, op[0], op[1]); in visit()
1135 emit(ir, OPCODE_ADD, result_dst, op[0], op[1]); in visit()
1143 emit(ir, OPCODE_MAX, result_dst, op[0], op[1]); in visit()
1150 emit(ir, OPCODE_MUL, result_dst, op[0], op[1]); in visit()
1154 assert(ir->operands[0]->type->is_vector()); in visit()
1155 assert(ir->operands[0]->type == ir->operands[1]->type); in visit()
1156 emit_dp(ir, result_dst, op[0], op[1], in visit()
1157 ir->operands[0]->type->vector_elements); in visit()
1162 emit_scalar(ir, OPCODE_RSQ, result_dst, op[0]); in visit()
1163 emit(ir, OPCODE_MUL, result_dst, result_src, op[0]); in visit()
1166 emit(ir, OPCODE_CMP, result_dst, in visit()
1170 emit_scalar(ir, OPCODE_RSQ, result_dst, op[0]); in visit()
1178 /* Mesa IR lacks types, ints are stored as truncated floats. */ in visit()
1183 emit(ir, OPCODE_TRUNC, result_dst, op[0]); in visit()
1187 emit_sne(ir, result_dst, op[0], src_reg_for_float(0.0)); in visit()
1195 emit(ir, OPCODE_TRUNC, result_dst, op[0]); in visit()
1199 emit(ir, OPCODE_FLR, result_dst, op[0]); in visit()
1203 emit(ir, OPCODE_FLR, result_dst, op[0]); in visit()
1206 emit(ir, OPCODE_FRC, result_dst, op[0]); in visit()
1236 emit(ir, OPCODE_MIN, result_dst, op[0], op[1]); in visit()
1239 emit(ir, OPCODE_MAX, result_dst, op[0], op[1]); in visit()
1242 emit_scalar(ir, OPCODE_POW, result_dst, op[0], op[1]); in visit()
1245 /* GLSL 1.30 integer ops are unsupported in Mesa IR, but since in visit()
1246 * hardware backends have no way to avoid Mesa IR generation in visit()
1255 emit(ir, OPCODE_ADD, result_dst, op[0], op[1]); in visit()
1260 emit(ir, OPCODE_MOV, result_dst, op[0]); in visit()
1271 emit(ir, OPCODE_LRP, result_dst, op[2], op[1], op[0]); in visit()
1279 emit(ir, OPCODE_CMP, result_dst, op[0], op[1], op[2]); in visit()
1366 ir_to_mesa_visitor::visit(ir_swizzle *ir) in visit() argument
1377 ir->val->accept(this); in visit()
1380 assert(ir->type->vector_elements > 0); in visit()
1383 if (i < ir->type->vector_elements) { in visit()
1386 swizzle[i] = GET_SWZ(src.swizzle, ir->mask.x); in visit()
1389 swizzle[i] = GET_SWZ(src.swizzle, ir->mask.y); in visit()
1392 swizzle[i] = GET_SWZ(src.swizzle, ir->mask.z); in visit()
1395 swizzle[i] = GET_SWZ(src.swizzle, ir->mask.w); in visit()
1402 swizzle[i] = swizzle[ir->type->vector_elements - 1]; in visit()
1412 ir_to_mesa_visitor::visit(ir_dereference_variable *ir) in visit() argument
1414 variable_storage *entry = find_variable_storage(ir->var); in visit()
1415 ir_variable *var = ir->var; in visit()
1466 ir_to_mesa_visitor::visit(ir_dereference_array *ir) in visit() argument
1470 int element_size = type_size(ir->type); in visit()
1472 index = ir->array_index->constant_expression_value(ralloc_parent(ir)); in visit()
1474 ir->array->accept(this); in visit()
1484 ir->array_index->accept(this); in visit()
1493 emit(ir, OPCODE_MUL, dst_reg(index_reg), in visit()
1503 emit(ir, OPCODE_ADD, dst_reg(accum_reg), in visit()
1514 if (ir->type->is_scalar() || ir->type->is_vector()) in visit()
1515 src.swizzle = swizzle_for_size(ir->type->vector_elements); in visit()
1523 ir_to_mesa_visitor::visit(ir_dereference_record *ir) in visit() argument
1526 const glsl_type *struct_type = ir->record->type; in visit()
1529 ir->record->accept(this); in visit()
1531 assert(ir->field_idx >= 0); in visit()
1533 if (i == (unsigned) ir->field_idx) in visit()
1539 if (ir->type->is_scalar() || ir->type->is_vector()) in visit()
1540 this->result.swizzle = swizzle_for_size(ir->type->vector_elements); in visit()
1553 get_assignment_lhs(ir_dereference *ir, ir_to_mesa_visitor *v) in get_assignment_lhs() argument
1559 assert(ir->as_dereference()); in get_assignment_lhs()
1560 ir_dereference_array *deref_array = ir->as_dereference_array(); in get_assignment_lhs()
1568 ir->accept(v); in get_assignment_lhs()
1660 ir_to_mesa_visitor::process_move_condition(ir_rvalue *ir) in process_move_condition() argument
1662 ir_rvalue *src_ir = ir; in process_move_condition()
1666 ir_expression *const expr = ir->as_expression(); in process_move_condition()
1687 if (src_ir != ir) { in process_move_condition()
1703 src_ir = ir; in process_move_condition()
1723 ir_to_mesa_visitor::visit(ir_assignment *ir) in visit() argument
1729 ir->rhs->accept(this); in visit()
1732 l = get_assignment_lhs(ir->lhs, this); in visit()
1738 if (ir->write_mask == 0) { in visit()
1739 assert(!ir->lhs->type->is_scalar() && !ir->lhs->type->is_vector()); in visit()
1741 } else if (ir->lhs->type->is_scalar()) { in visit()
1751 assert(ir->lhs->type->is_vector()); in visit()
1752 l.writemask = ir->write_mask; in visit()
1763 * glsl ir treats write_mask as dictating how many channels are in visit()
1764 * present on the RHS while Mesa IR treats write_mask as just in visit()
1780 if (ir->condition) { in visit()
1781 const bool switch_order = this->process_move_condition(ir->condition); in visit()
1784 for (i = 0; i < type_size(ir->lhs->type); i++) { in visit()
1786 emit(ir, OPCODE_CMP, l, condition, src_reg(l), r); in visit()
1788 emit(ir, OPCODE_CMP, l, condition, r, src_reg(l)); in visit()
1795 for (i = 0; i < type_size(ir->lhs->type); i++) { in visit()
1796 emit(ir, OPCODE_MOV, l, r); in visit()
1805 ir_to_mesa_visitor::visit(ir_constant *ir) in visit() argument
1818 if (ir->type->is_struct()) { in visit()
1819 src_reg temp_base = get_temp(ir->type); in visit()
1822 for (i = 0; i < ir->type->length; i++) { in visit()
1823 ir_constant *const field_value = ir->get_record_field(i); in visit()
1832 emit(ir, OPCODE_MOV, temp, src); in visit()
1842 if (ir->type->is_array()) { in visit()
1843 src_reg temp_base = get_temp(ir->type); in visit()
1845 int size = type_size(ir->type->fields.array); in visit()
1849 for (i = 0; i < ir->type->length; i++) { in visit()
1850 ir->const_elements[i]->accept(this); in visit()
1853 emit(ir, OPCODE_MOV, temp, src); in visit()
1863 if (ir->type->is_matrix()) { in visit()
1864 src_reg mat = get_temp(ir->type); in visit()
1867 for (i = 0; i < ir->type->matrix_columns; i++) { in visit()
1868 assert(ir->type->is_float()); in visit()
1869 values = &ir->value.f[i * ir->type->vector_elements]; in visit()
1874 ir->type->vector_elements, in visit()
1876 emit(ir, OPCODE_MOV, mat_column, src); in visit()
1886 switch (ir->type->base_type) { in visit()
1888 values = &ir->value.f[0]; in visit()
1891 for (i = 0; i < ir->type->vector_elements; i++) { in visit()
1892 values[i] = ir->value.u[i]; in visit()
1896 for (i = 0; i < ir->type->vector_elements; i++) { in visit()
1897 values[i] = ir->value.i[i]; in visit()
1901 for (i = 0; i < ir->type->vector_elements; i++) { in visit()
1902 values[i] = ir->value.b[i]; in visit()
1909 this->result = src_reg(PROGRAM_CONSTANT, -1, ir->type); in visit()
1912 ir->type->vector_elements, in visit()
1923 ir_to_mesa_visitor::visit(ir_texture *ir) in visit() argument
1930 if (ir->op == ir_txs) in visit()
1933 ir->coordinate->accept(this); in visit()
1937 * we're doing plain old texturing. Mesa IR optimization should in visit()
1942 emit(ir, OPCODE_MOV, coord_dst, this->result); in visit()
1944 if (ir->projector) { in visit()
1945 ir->projector->accept(this); in visit()
1955 switch (ir->op) { in visit()
1962 ir->lod_info.bias->accept(this); in visit()
1969 ir->lod_info.lod->accept(this); in visit()
1974 ir->lod_info.grad.dPdx->accept(this); in visit()
1976 ir->lod_info.grad.dPdy->accept(this); in visit()
1997 const glsl_type *sampler_type = ir->sampler->type; in visit()
1999 if (ir->projector) { in visit()
2003 emit(ir, OPCODE_MOV, coord_dst, projector); in visit()
2015 emit(ir, OPCODE_RCP, coord_dst, projector); in visit()
2021 if (ir->shadow_comparator) { in visit()
2025 ir->shadow_comparator->accept(this); in visit()
2034 emit(ir, OPCODE_MOV, tmp_dst, this->result); in visit()
2037 emit(ir, OPCODE_MOV, tmp_dst, coord); in visit()
2041 emit(ir, OPCODE_MUL, coord_dst, tmp_src, coord_w); in visit()
2052 if (ir->shadow_comparator && (!ir->projector || opcode == OPCODE_TXP)) { in visit()
2056 ir->shadow_comparator->accept(this); in visit()
2066 emit(ir, OPCODE_MOV, coord_dst, this->result); in visit()
2071 /* Mesa IR stores lod or lod bias in the last channel of the coords. */ in visit()
2073 emit(ir, OPCODE_MOV, coord_dst, lod_info); in visit()
2078 inst = emit(ir, opcode, result_dst, coord, dx, dy); in visit()
2080 inst = emit(ir, opcode, result_dst, coord); in visit()
2082 if (ir->shadow_comparator) in visit()
2085 inst->sampler = get_sampler_uniform_value(ir->sampler, shader_program, in visit()
2120 ir_to_mesa_visitor::visit(ir_return *ir) in visit() argument
2125 assert(!ir->get_value()); in visit()
2126 emit(ir, OPCODE_RET); in visit()
2130 ir_to_mesa_visitor::visit(ir_discard *ir) in visit() argument
2132 if (!ir->condition) in visit()
2133 ir->condition = new(mem_ctx) ir_constant(true); in visit()
2135 ir->condition->accept(this); in visit()
2137 emit(ir, OPCODE_KIL, undef_dst, this->result); in visit()
2141 ir_to_mesa_visitor::visit(ir_demote *ir) in visit() argument
2147 ir_to_mesa_visitor::visit(ir_if *ir) in visit() argument
2151 ir->condition->accept(this); in visit()
2154 if_inst = emit(ir->condition, OPCODE_IF, undef_dst, this->result); in visit()
2158 visit_exec_list(&ir->then_instructions, this); in visit()
2160 if (!ir->else_instructions.is_empty()) { in visit()
2161 emit(ir->condition, OPCODE_ELSE); in visit()
2162 visit_exec_list(&ir->else_instructions, this); in visit()
2165 emit(ir->condition, OPCODE_ENDIF); in visit()
2310 ir_instruction *ir = mesa_instruction_annotation[i]; in print_program() local
2314 if (last_ir != ir && ir) { in print_program()
2320 ir->print(); in print_program()
2322 last_ir = ir; in print_program()
2458 foreach_in_list(ir_instruction, node, sh->ir) { in _mesa_generate_parameters_list_for_uniforms()
2811 * Convert a shader's GLSL IR into a Mesa gl_program.
2828 validate_ir_tree(shader->ir); in get_mesa_program()
2840 /* Emit Mesa IR for main(). */ in get_mesa_program()
2841 visit_exec_list(shader->ir, &v); in get_mesa_program()
2873 mesa_instruction_annotation[i] = inst->ir; in get_mesa_program()
2931 fprintf(stderr, "GLSL IR for linked %s program %d:\n", target_string, in get_mesa_program()
2933 _mesa_print_ir(stderr, shader->ir, NULL); in get_mesa_program()
2936 fprintf(stderr, "Mesa IR for linked %s program %d:\n", target_string, in get_mesa_program()
2951 do_set_program_inouts(shader->ir, prog, shader->Stage); in get_mesa_program()
2986 * This actually involves converting GLSL IR into Mesa gl_programs with
2999 exec_list *ir = prog->_LinkedShaders[i]->ir; in _mesa_ir_link_shader() local
3007 do_mat_op_to_vec(ir); in _mesa_ir_link_shader()
3008 lower_instructions(ir, (MOD_TO_FLOOR | DIV_TO_MUL_RCP | EXP_TO_EXP2 in _mesa_ir_link_shader()
3013 progress = do_common_optimization(ir, true, true, in _mesa_ir_link_shader()
3017 progress = lower_quadop_vector(ir, true) || progress; in _mesa_ir_link_shader()
3020 progress = lower_discard(ir) || progress; in _mesa_ir_link_shader()
3022 progress = lower_if_to_cond_assign((gl_shader_stage)i, ir, in _mesa_ir_link_shader()
3031 lower_variable_index_to_cond_assign(prog->_LinkedShaders[i]->Stage, ir, in _mesa_ir_link_shader()
3038 progress = do_vec_index_to_cond_assign(ir) || progress; in _mesa_ir_link_shader()
3039 progress = lower_vector_insert(ir, true) || progress; in _mesa_ir_link_shader()
3042 validate_ir_tree(ir); in _mesa_ir_link_shader()