소스 검색

nir: Add some asserts that we don't put derefs in phis

The lcssa and phis_to_regs passes are used by various NIR optimizations
that modify the CFG.  Putting a couple of asserts will help ensure that
we don't accidentally put derefs in phis as part of an optimization
pass.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
tags/18.3-branchpoint
Jason Ekstrand 7 년 전
부모
커밋
976046a8d8
3개의 변경된 파일6개의 추가작업 그리고 0개의 파일을 삭제
  1. 2
    0
      src/compiler/nir/nir_from_ssa.c
  2. 3
    0
      src/compiler/nir/nir_to_lcssa.c
  3. 1
    0
      src/compiler/nir/nir_validate.c

+ 2
- 0
src/compiler/nir/nir_from_ssa.c 파일 보기

@@ -901,6 +901,8 @@ nir_lower_phis_to_regs_block(nir_block *block)

nir_foreach_phi_src(src, phi) {
assert(src->src.is_ssa);
/* We don't want derefs ending up in phi sources */
assert(!nir_src_as_deref(src->src));
place_phi_read(shader, reg, src->src.ssa, src->pred);
}


+ 3
- 0
src/compiler/nir/nir_to_lcssa.c 파일 보기

@@ -111,6 +111,9 @@ convert_loop_exit_for_ssa(nir_ssa_def *def, void *void_state)
if (all_uses_inside_loop)
return true;

/* We don't want derefs ending up in phi sources */
assert(def->parent_instr->type != nir_instr_type_deref);

/* Initialize a phi-instruction */
nir_phi_instr *phi = nir_phi_instr_create(state->shader);
nir_ssa_dest_init(&phi->instr, &phi->dest,

+ 1
- 0
src/compiler/nir/nir_validate.c 파일 보기

@@ -669,6 +669,7 @@ validate_phi_src(nir_phi_instr *instr, nir_block *pred, validate_state *state)
nir_foreach_phi_src(src, instr) {
if (src->pred == pred) {
validate_assert(state, src->src.is_ssa);
validate_assert(state, src->src.ssa->parent_instr->type != nir_instr_type_deref);
validate_src(&src->src, state, instr->dest.ssa.bit_size,
instr->dest.ssa.num_components);
state->instr = NULL;

Loading…
취소
저장