99 fprintf(stderr,
"ir_base[%d].op invalid opcode (%d)\n", i, insn->op);
105 for (
j = 1,
p = insn->ops + 1;
j <=
n;
j++,
p++) {
110 fprintf(stderr,
"ir_base[%d].ops[%d] reference (%d) must not be constant\n", i,
j, use);
113 fprintf(stderr,
"ir_base[%d].ops[%d] constant reference (%d) is out of range\n", i,
j, use);
118 fprintf(stderr,
"ir_base[%d].ops[%d] insn reference (%d) is out of range\n", i,
j, use);
126 || use_insn->type ==
IR_VOID) {
127 fprintf(stderr,
"ir_base[%d].ops[%d] reference (%d) must be DATA\n", i,
j, use);
133 && !(insn->op == IR_PHI && ctx->
ir_base[insn->op1].op == IR_LOOP_BEGIN)) {
134 fprintf(stderr,
"ir_base[%d].ops[%d] invalid forward reference (%d)\n", i,
j, use);
169 if (insn->type != use_insn->type) {
171 && (insn->op == IR_SHL
172 || insn->op == IR_SHR
173 || insn->op == IR_SAR
174 || insn->op == IR_ROL
175 || insn->op == IR_ROR)
180 if (insn->op == IR_NOT && insn->type == IR_BOOL) {
189 fprintf(stderr,
"ir_base[%d].ops[%d] (%d) type is incompatible with result type (%d != %d)\n",
190 i,
j, use, use_insn->type, insn->type);
198 && insn->op != IR_PHI
199 && !ir_check_domination(ctx, use, i)) {
200 fprintf(stderr,
"ir_base[%d].ops[%d] -> %d, %d doesn't dominate %d\n", i,
j, use, use, i);
207 fprintf(stderr,
"ir_base[%d].ops[%d] reference (%d) must be BB_END\n", i,
j, use);
212 fprintf(stderr,
"ir_base[%d].ops[%d] reference (%d) must not be BB_END\n", i,
j, use);
220 && !(insn->op == IR_LOOP_BEGIN)) {
221 fprintf(stderr,
"ir_base[%d].ops[%d] invalid forward reference (%d)\n", i,
j, use);
223 }
else if (insn->op == IR_PHI) {
225 if (merge_insn->op != IR_MERGE && merge_insn->op != IR_LOOP_BEGIN) {
226 fprintf(stderr,
"ir_base[%d].ops[%d] reference (%d) must be MERGE or LOOP_BEGIN\n", i,
j, use);
233 fprintf(stderr,
"ir_base[%d].ops[%d] reference (%d) must be CONTROL\n", i,
j, use);
238 fprintf(stderr,
"ir_base[%d].ops[%d] reference (%d) of unsupported kind\n", i,
j, use);
242 }
else if ((insn->op == IR_RETURN || insn->op == IR_UNREACHABLE) &&
j == 2) {
244 }
else if (insn->op == IR_BEGIN &&
j == 1) {
247 && (insn->op != IR_SNAPSHOT ||
j == 1)) {
248 fprintf(stderr,
"ir_base[%d].ops[%d] missing reference (%d)\n", i,
j, use);
253 && !ir_check_use_list(ctx, use, i)) {
254 fprintf(stderr,
"ir_base[%d].ops[%d] is not in use list (%d)\n", i,
j, use);
261 if (insn->inputs_count != ctx->
ir_base[insn->op1].inputs_count + 1) {
262 fprintf(stderr,
"ir_base[%d] inconsistent PHI inputs_count (%d != %d)\n",
263 i, insn->inputs_count, ctx->
ir_base[insn->op1].inputs_count + 1);
272 fprintf(stderr,
"ir_base[%d].op2 must have ADDR type (%s)\n",
279 if (ctx->
ir_base[insn->op2].op != IR_VAR) {
280 fprintf(stderr,
"ir_base[%d].op2 must be 'VAR' (%s)\n",
287 fprintf(stderr,
"ir_base[%d].type incompatible return type\n", i);
293 fprintf(stderr,
"ir_base[%d].type incompatible return type\n", i);
298 if (i > 2 && ctx->
ir_base[i - 1].op != IR_PARAM) {
299 fprintf(stderr,
"ir_base[%d].op PARAMs must be used only right after START\n", i);
311 if (!ir_check_input_list(ctx, i, use)) {
312 fprintf(stderr,
"ir_base[%d] is in use list of ir_base[%d]\n", use, i);
321 if (use_list->
count < 1) {
322 fprintf(stderr,
"ir_base[%d].op (SWITCH) must have at least 1 successor (%d)\n", i, use_list->
count);
327 if (use_list->
count != 2) {
328 fprintf(stderr,
"ir_base[%d].op (IF) must have 2 successors (%d)\n", i, use_list->
count);
334 if (use_list->
count == 1) {
342 if (use_list->
count != 0) {
343 fprintf(stderr,
"ir_base[%d].op (%s) must not have successors (%d)\n",
358 if (insn->op == IR_CALL &&
count == 2) {
362 if ((insn->op == IR_LOOP_END || insn->op == IR_END) &&
count == 2) {
374 if (
count == 0 && (insn->op == IR_END || insn->op == IR_LOOP_END)) {
378 fprintf(stderr,
"ir_base[%d].op (%s) must have 1 successor (%d)\n",