diff options
author | Clifford Wolf <clifford@clifford.at> | 2019-05-22 13:29:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-22 13:29:04 +0200 |
commit | 5c164d0863078779fd27aefa665b5e6e457ca39b (patch) | |
tree | cfa9b44d815a2c8b0afad4261aef81ba08c8a8f9 | |
parent | 84d91420e4a6b09a70e9588f918aec9e684b3c63 (diff) | |
parent | c4b8575f4322f72dd1b35e2737966db731a26c17 (diff) | |
download | yosys-5c164d0863078779fd27aefa665b5e6e457ca39b.tar.gz yosys-5c164d0863078779fd27aefa665b5e6e457ca39b.tar.bz2 yosys-5c164d0863078779fd27aefa665b5e6e457ca39b.zip |
Merge pull request #1019 from YosysHQ/clifford/fix1016
Add "wreduce -keepdc"
-rw-r--r-- | passes/opt/wreduce.cc | 10 | ||||
-rw-r--r-- | techlibs/common/prep.cc | 6 |
2 files changed, 13 insertions, 3 deletions
diff --git a/passes/opt/wreduce.cc b/passes/opt/wreduce.cc index 58c6e4b4b..1fbc41082 100644 --- a/passes/opt/wreduce.cc +++ b/passes/opt/wreduce.cc @@ -29,6 +29,7 @@ PRIVATE_NAMESPACE_BEGIN struct WreduceConfig { pool<IdString> supported_cell_types; + bool keepdc = false; WreduceConfig() { @@ -82,7 +83,7 @@ struct WreduceWorker SigBit ref = sig_a[i]; for (int k = 0; k < GetSize(sig_s); k++) { - if (ref != Sx && sig_b[k*GetSize(sig_a) + i] != Sx && ref != sig_b[k*GetSize(sig_a) + i]) + if ((config->keepdc || (ref != Sx && sig_b[k*GetSize(sig_a) + i] != Sx)) && ref != sig_b[k*GetSize(sig_a) + i]) goto no_match_ab; if (sig_b[k*GetSize(sig_a) + i] != Sx) ref = sig_b[k*GetSize(sig_a) + i]; @@ -495,6 +496,9 @@ struct WreducePass : public Pass { log(" Do not change the width of memory address ports. Use this options in\n"); log(" flows that use the 'memory_memx' pass.\n"); log("\n"); + log(" -keepdc\n"); + log(" Do not optimize explicit don't-care values.\n"); + log("\n"); } void execute(std::vector<std::string> args, Design *design) YS_OVERRIDE { @@ -509,6 +513,10 @@ struct WreducePass : public Pass { opt_memx = true; continue; } + if (args[argidx] == "-keepdc") { + config.keepdc = true; + continue; + } break; } extra_args(args, argidx, design); diff --git a/techlibs/common/prep.cc b/techlibs/common/prep.cc index 86fb4d6c6..cdd21c3b3 100644 --- a/techlibs/common/prep.cc +++ b/techlibs/common/prep.cc @@ -195,9 +195,11 @@ struct PrepPass : public ScriptPass run(nokeepdc ? "opt" : "opt -keepdc"); if (!ifxmode) { if (help_mode) - run("wreduce [-memx]"); - else + run("wreduce -keepdc [-memx]"); + else if (nokeepdc) run(memxmode ? "wreduce -memx" : "wreduce"); + else + run(memxmode ? "wreduce -keepdc -memx" : "wreduce -keepdc"); } if (!nomemmode) { run(string("memory_dff") + (help_mode ? " [-nordff]" : nordff ? " -nordff" : "")); |