Lines Matching defs:program

37 aco_log(Program* program, enum aco_compiler_debug_level level, const char* prefix,
42 if (program->debug.shorten_messages) {
51 if (program->debug.func)
52 program->debug.func(program->debug.private_data, level, msg);
54 fprintf(program->debug.output, "%s\n", msg);
60 _aco_perfwarn(Program* program, const char* file, unsigned line, const char* fmt, ...)
65 aco_log(program, ACO_COMPILER_DEBUG_LEVEL_PERFWARN, "ACO PERFWARN:\n", file, line, fmt, args);
70 _aco_err(Program* program, const char* file, unsigned line, const char* fmt, ...)
75 aco_log(program, ACO_COMPILER_DEBUG_LEVEL_ERROR, "ACO ERROR:\n", file, line, fmt, args);
80 validate_ir(Program* program)
83 auto check = [&program, &is_valid](bool success, const char* msg,
97 aco_err(program, "%s", out);
104 auto check_block = [&program, &is_valid](bool success, const char* msg,
108 aco_err(program, "%s: BB%u", msg, block->index);
113 for (Block& block : program->blocks) {
156 check(program->gfx_level >= GFX8, "SDWA is GFX8 to GFX10.3 only", instr.get());
157 check(program->gfx_level < GFX11, "SDWA is GFX8 to GFX10.3 only", instr.get());
160 check(sdwa.omod == 0 || program->gfx_level >= GFX9, "SDWA omod only supported on GFX9+",
163 check(sdwa.clamp == false || program->gfx_level == GFX8,
166 program->gfx_level >= GFX9,
219 program->gfx_level == GFX8 &&
228 check(vop3.opsel == 0 || program->gfx_level >= GFX9, "Opsel is only supported on GFX9+",
293 (!instr->isVOP3() || program->gfx_level >= GFX10) &&
294 (!instr->isVOP3P() || program->gfx_level >= GFX10),
311 if (program->gfx_level >= GFX10 && !is_shift64)
316 scalar_mask = program->gfx_level >= GFX9 ? 0x7 : 0x4;
419 check(program->gfx_level >= GFX9 ||
437 check(program->gfx_level >= GFX9 || !def.regClass().is_subdword(),
537 instr->reduction().cluster_size == program->wave_size)
539 program->wave_size == 32,
629 check(instr->operands.size() == 4 || program->gfx_level >= GFX10,
686 if (instr->format == Format::SCRATCH && program->gfx_level < GFX10_3)
703 for (unsigned i = 0; i < program->blocks.size(); i++) {
704 Block& block = program->blocks[i];
724 check_block(program->blocks[pred].linear_succs.size() == 1,
725 "linear critical edges are not allowed", &program->blocks[pred]);
727 check_block(program->blocks[pred].logical_succs.size() == 1,
728 "logical critical edges are not allowed", &program->blocks[pred]);
753 ra_fail(Program* program, Location loc, Location loc2, const char* fmt, ...)
781 aco_err(program, "%s", out);
885 get_subdword_bytes_written(Program* program, const aco_ptr<Instruction>& instr, unsigned index)
887 amd_gfx_level gfx_level = program->gfx_level;
905 return program->dev.sram_ecc_enabled ? def.size() * 4u : def.bytes();
933 case aco_opcode::ds_read_u16_d16_hi: return program->dev.sram_ecc_enabled ? 4 : 2;
935 case aco_opcode::tbuffer_load_format_d16_xyz: return program->dev.sram_ecc_enabled ? 8 : 6;
941 validate_instr_defs(Program* program, std::array<unsigned, 2048>& regs,
956 ra_fail(program, loc, assignments[regs[reg.reg_b + j]].defloc,
962 unsigned written = get_subdword_bytes_written(program, instr, i);
968 err |= ra_fail(program, loc, assignments[regs[written_reg]].defloc,
991 validate_ra(Program* program)
997 aco::live live_vars = aco::live_var_analysis(program);
998 std::vector<std::vector<Temp>> phi_sgpr_ops(program->blocks.size());
999 uint16_t sgpr_limit = get_addr_sgpr_from_waves(program, program->num_waves);
1001 std::vector<Assignment> assignments(program->peekAllocationId());
1002 for (Block& block : program->blocks) {
1021 err |= ra_fail(program, loc, Location(), "Operand %d is not assigned a register", i);
1024 ra_fail(program, loc, assignments[op.tempId()].firstloc,
1027 op.physReg().reg_b + op.bytes() > (256 + program->config->num_vgprs) * 4) ||
1029 op.physReg() + op.size() > program->config->num_sgprs &&
1031 err |= ra_fail(program, loc, assignments[op.tempId()].firstloc,
1033 if (op.physReg() == vcc && !program->needs_vcc)
1034 err |= ra_fail(program, loc, Location(),
1037 !validate_subdword_operand(program->gfx_level, instr, i))
1038 err |= ra_fail(program, loc, Location(), "Operand %d not aligned correctly", i);
1053 ra_fail(program, loc, Location(), "Definition %d is not assigned a register", i);
1055 err |= ra_fail(program, loc, assignments[def.tempId()].defloc,
1058 def.physReg().reg_b + def.bytes() > (256 + program->config->num_vgprs) * 4) ||
1060 def.physReg() + def.size() > program->config->num_sgprs &&
1062 err |= ra_fail(program, loc, assignments[def.tempId()].firstloc,
1064 if (def.physReg() == vcc && !program->needs_vcc)
1065 err |= ra_fail(program, loc, Location(),
1068 !validate_subdword_definition(program->gfx_level, instr))
1069 err |= ra_fail(program, loc, Location(), "Definition %d not aligned correctly", i);
1079 for (Block& block : program->blocks) {
1093 Temp tmp(id, program->temp_rc[id]);
1097 err |= ra_fail(program, loc, Location(),
1116 program, loc, Location(),
1142 Temp tmp(id, program->temp_rc[id]);
1172 err |= validate_instr_defs(program, regs, assignments, loc, instr);
1184 program->blocks[block.linear_preds[0]].linear_succs.size() == 1) {
1186 aco_ptr<Instruction>& br = program->blocks[pred].instructions.back();
1188 err |= validate_instr_defs(program, regs, assignments, loc, br);