rose_build_bytecode: tidy up addPredBlocks

This commit is contained in:
Justin Viiret 2016-06-10 16:10:03 +10:00 committed by Matthew Barr
parent 2761e0105d
commit b8f771e824

View File

@ -3404,7 +3404,7 @@ void buildLeftInfoTable(const RoseBuildImpl &tbi, build_context &bc,
} }
static static
u32 addPredBlocksSingle( void addPredBlocksSingle(
map<u32, vector<vector<RoseInstruction>>> &predProgramLists, map<u32, vector<vector<RoseInstruction>>> &predProgramLists,
vector<RoseInstruction> &program) { vector<RoseInstruction> &program) {
@ -3426,7 +3426,6 @@ u32 addPredBlocksSingle(
auto prog = flattenProgram(prog_blocks); auto prog = flattenProgram(prog_blocks);
program.insert(end(program), begin(prog), end(prog)); program.insert(end(program), begin(prog), end(prog));
return 0; // No iterator.
} }
static static
@ -3439,7 +3438,7 @@ u32 programLength(const vector<RoseInstruction> &program) {
} }
static static
u32 addPredBlocksMulti(build_context &bc, void addPredBlocksMulti(build_context &bc,
map<u32, vector<vector<RoseInstruction>>> &predProgramLists, map<u32, vector<vector<RoseInstruction>>> &predProgramLists,
vector<RoseInstruction> &program) { vector<RoseInstruction> &program) {
assert(!predProgramLists.empty()); assert(!predProgramLists.empty());
@ -3514,24 +3513,24 @@ u32 addPredBlocksMulti(build_context &bc,
} }
program.insert(end(program), begin(sparse_program), end(sparse_program)); program.insert(end(program), begin(sparse_program), end(sparse_program));
return iter_offset;
} }
static static
u32 addPredBlocks(build_context &bc, void addPredBlocks(build_context &bc,
map<u32, vector<vector<RoseInstruction>>> &predProgramLists, map<u32, vector<vector<RoseInstruction>>> &predProgramLists,
vector<RoseInstruction> &program, vector<RoseInstruction> &program) {
bool force_sparse_iter) {
const size_t num_preds = predProgramLists.size(); const size_t num_preds = predProgramLists.size();
if (num_preds == 0) { if (num_preds == 0) {
program = flattenProgram({program}); program = flattenProgram({program});
return 0; // No iterator. return;
} else if (!force_sparse_iter && num_preds == 1) {
return addPredBlocksSingle(predProgramLists, program);
} else {
return addPredBlocksMulti(bc, predProgramLists, program);
} }
if (num_preds == 1) {
addPredBlocksSingle(predProgramLists, program);
return;
}
addPredBlocksMulti(bc, predProgramLists, program);
} }
/** /**
@ -3554,7 +3553,7 @@ vector<RoseInstruction> makeSparseIterProgram(build_context &bc,
// Add blocks to deal with non-root edges (triggered by sparse iterator or // Add blocks to deal with non-root edges (triggered by sparse iterator or
// mmbit_isset checks). This operation will flatten the program up to this // mmbit_isset checks). This operation will flatten the program up to this
// point. // point.
addPredBlocks(bc, predProgramLists, program, false); addPredBlocks(bc, predProgramLists, program);
// If we have a root program, replace the END instruction with it. Note // If we have a root program, replace the END instruction with it. Note
// that the root program has already been flattened. // that the root program has already been flattened.
@ -4046,7 +4045,7 @@ u32 writeEodAnchorProgram(RoseBuildImpl &build, build_context &bc) {
vector<RoseInstruction> program; vector<RoseInstruction> program;
if (!predProgramLists.empty()) { if (!predProgramLists.empty()) {
addPredBlocks(bc, predProgramLists, program, false); addPredBlocks(bc, predProgramLists, program);
} }
if (hasEodAnchoredSuffix(build)) { if (hasEodAnchoredSuffix(build)) {
@ -4118,7 +4117,7 @@ void addGeneralEodAnchorProgram(RoseBuildImpl &build, build_context &bc,
assert(program.back().code() == ROSE_INSTR_END); assert(program.back().code() == ROSE_INSTR_END);
program.pop_back(); program.pop_back();
} }
addPredBlocks(bc, predProgramLists, program, false); addPredBlocks(bc, predProgramLists, program);
} }
static static