[Scummvm-cvs-logs] SF.net SVN: scummvm:[42264] tools/branches/gsoc2009-decompiler/decompiler
kjdf at users.sourceforge.net
kjdf at users.sourceforge.net
Wed Jul 8 16:35:31 CEST 2009
Revision: 42264
http://scummvm.svn.sourceforge.net/scummvm/?rev=42264&view=rev
Author: kjdf
Date: 2009-07-08 14:35:31 +0000 (Wed, 08 Jul 2009)
Log Message:
-----------
decompiler: commandline switch to check script reducibility
Modified Paths:
--------------
tools/branches/gsoc2009-decompiler/decompiler/decompiler.cpp
tools/branches/gsoc2009-decompiler/decompiler/graph.cpp
tools/branches/gsoc2009-decompiler/decompiler/graph.h
Modified: tools/branches/gsoc2009-decompiler/decompiler/decompiler.cpp
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/decompiler.cpp 2009-07-08 13:08:51 UTC (rev 42263)
+++ tools/branches/gsoc2009-decompiler/decompiler/decompiler.cpp 2009-07-08 14:35:31 UTC (rev 42264)
@@ -16,6 +16,7 @@
options_description visible("Allowed options");
visible.add_options()
("help", "this message")
+ ("check-reducibility", "check if the graph is reducible")
("disasm", "print disassembly")
("blocks", "print basic blocks")
("graph-intervals", value<unsigned>(), "print arg-th graph intervals")
@@ -62,6 +63,13 @@
cfg.orderBlocks();
cfg.removeUnreachableBlocks();
cfg.assignDominators();
+ if (vars.count("check-reducibility")) {
+ if (cfg.isReducible())
+ exit(0);
+ foreach (Block *interval, cfg.intervals())
+ cout << phex(interval->_instructions.front()->_addr) << endl;
+ exit(1);
+ }
if (vars.count("graph-intervals")) {
cfg.assignIntervals();
for (unsigned i = 0; i < vars["graph-intervals"].as<unsigned>(); i++)
Modified: tools/branches/gsoc2009-decompiler/decompiler/graph.cpp
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/graph.cpp 2009-07-08 13:08:51 UTC (rev 42263)
+++ tools/branches/gsoc2009-decompiler/decompiler/graph.cpp 2009-07-08 14:35:31 UTC (rev 42264)
@@ -203,6 +203,13 @@
}
+bool ControlFlowGraph::isReducible() {
+ for (size_t size = _blocks.size()+1; size > intervals().size(); size = intervals().size(), extendIntervals())
+ ;
+ return intervals().size() == 1;
+}
+
+
Block *ControlFlowGraph::loopFollow(Block *head, Block *latch) {
if (head->_loopType == PRE_TESTED)
return head->outEdgeOutsideLoop(head);
Modified: tools/branches/gsoc2009-decompiler/decompiler/graph.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/graph.h 2009-07-08 13:08:51 UTC (rev 42263)
+++ tools/branches/gsoc2009-decompiler/decompiler/graph.h 2009-07-08 14:35:31 UTC (rev 42264)
@@ -126,6 +126,7 @@
void assignIntervals(); // can be called multiple times
void extendIntervals();
+ bool isReducible();
void assignDominators();
private:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list