Browse Source

Conditional jumps now alone in basic block so that they can be expressed as single bool expression.

pull/1/head^2
David Srbecký 18 years ago
parent
commit
7abcfaa3ed
  1. 64
      bin/Debug/output.cs
  2. 7
      src/ControlFlow/Nodes.cs

64
bin/Debug/output.cs

@ -152,21 +152,21 @@ namespace Reversi
if (!((j - dc) == col)) { if (!((j - dc) == col)) {
} }
else { else {
goto BasicBlock_179; goto BasicBlock_202;
} }
} }
if (!((@this.squares).Get(i, j) == color)) { if (!((@this.squares).Get(i, j) == color)) {
} }
else { else {
goto BasicBlock_180; goto BasicBlock_203;
} }
} }
} }
} }
} }
BasicBlock_179: BasicBlock_202:
return 0; return 0;
BasicBlock_180: BasicBlock_203:
return 1; return 1;
} }
private void UpdateCounts() private void UpdateCounts()
@ -291,12 +291,12 @@ namespace Reversi
if (!((@this.safeDiscs).Get(row, k))) { if (!((@this.safeDiscs).Get(row, k))) {
} }
else { else {
goto BasicBlock_401; goto BasicBlock_451;
} }
} }
V_5 = 1; V_5 = 1;
} }
BasicBlock_401: BasicBlock_451:
k = (k + 1); k = (k + 1);
} }
else { else {
@ -317,12 +317,12 @@ namespace Reversi
if (!((@this.safeDiscs).Get(row, k))) { if (!((@this.safeDiscs).Get(row, k))) {
} }
else { else {
goto BasicBlock_410; goto BasicBlock_462;
} }
} }
V_6 = 1; V_6 = 1;
} }
BasicBlock_410: BasicBlock_462:
k = (k + 1); k = (k + 1);
} }
else { else {
@ -333,19 +333,19 @@ namespace Reversi
if (!(V_4)) { if (!(V_4)) {
} }
else { else {
goto BasicBlock_419; goto BasicBlock_471;
} }
} }
if (!(!V_3)) { if (!(!V_3)) {
if (!(V_6)) { if (!(V_6)) {
} }
else { else {
goto BasicBlock_419; goto BasicBlock_471;
} }
} }
if (!(!V_5)) { if (!(!V_5)) {
if (!(!V_4)) { if (!(!V_4)) {
BasicBlock_419: BasicBlock_471:
return 1; return 1;
} }
} }
@ -366,12 +366,12 @@ namespace Reversi
if (!((@this.safeDiscs).Get(j, col))) { if (!((@this.safeDiscs).Get(j, col))) {
} }
else { else {
goto BasicBlock_426; goto BasicBlock_480;
} }
} }
V_5 = 1; V_5 = 1;
} }
BasicBlock_426: BasicBlock_480:
j = (j + 1); j = (j + 1);
} }
else { else {
@ -392,12 +392,12 @@ namespace Reversi
if (!((@this.safeDiscs).Get(j, col))) { if (!((@this.safeDiscs).Get(j, col))) {
} }
else { else {
goto BasicBlock_435; goto BasicBlock_491;
} }
} }
V_6 = 1; V_6 = 1;
} }
BasicBlock_435: BasicBlock_491:
j = (j + 1); j = (j + 1);
} }
else { else {
@ -408,19 +408,19 @@ namespace Reversi
if (!(V_4)) { if (!(V_4)) {
} }
else { else {
goto BasicBlock_444; goto BasicBlock_500;
} }
} }
if (!(!V_3)) { if (!(!V_3)) {
if (!(V_6)) { if (!(V_6)) {
} }
else { else {
goto BasicBlock_444; goto BasicBlock_500;
} }
} }
if (!(!V_5)) { if (!(!V_5)) {
if (!(!V_4)) { if (!(!V_4)) {
BasicBlock_444: BasicBlock_500:
return 1; return 1;
} }
} }
@ -444,12 +444,12 @@ namespace Reversi
if (!((@this.safeDiscs).Get(j, k))) { if (!((@this.safeDiscs).Get(j, k))) {
} }
else { else {
goto BasicBlock_451; goto BasicBlock_509;
} }
} }
V_5 = 1; V_5 = 1;
} }
BasicBlock_451: BasicBlock_509:
j = (j - 1); j = (j - 1);
k = (k - 1); k = (k - 1);
} }
@ -477,12 +477,12 @@ namespace Reversi
if (!((@this.safeDiscs).Get(j, k))) { if (!((@this.safeDiscs).Get(j, k))) {
} }
else { else {
goto BasicBlock_461; goto BasicBlock_521;
} }
} }
V_6 = 1; V_6 = 1;
} }
BasicBlock_461: BasicBlock_521:
j = (j + 1); j = (j + 1);
k = (k + 1); k = (k + 1);
} }
@ -498,19 +498,19 @@ namespace Reversi
if (!(V_4)) { if (!(V_4)) {
} }
else { else {
goto BasicBlock_471; goto BasicBlock_531;
} }
} }
if (!(!V_3)) { if (!(!V_3)) {
if (!(V_6)) { if (!(V_6)) {
} }
else { else {
goto BasicBlock_471; goto BasicBlock_531;
} }
} }
if (!(!V_5)) { if (!(!V_5)) {
if (!(!V_4)) { if (!(!V_4)) {
BasicBlock_471: BasicBlock_531:
return 1; return 1;
} }
} }
@ -534,12 +534,12 @@ namespace Reversi
if (!((@this.safeDiscs).Get(j, k))) { if (!((@this.safeDiscs).Get(j, k))) {
} }
else { else {
goto BasicBlock_478; goto BasicBlock_540;
} }
} }
V_5 = 1; V_5 = 1;
} }
BasicBlock_478: BasicBlock_540:
j = (j - 1); j = (j - 1);
k = (k + 1); k = (k + 1);
} }
@ -567,12 +567,12 @@ namespace Reversi
if (!((@this.safeDiscs).Get(j, k))) { if (!((@this.safeDiscs).Get(j, k))) {
} }
else { else {
goto BasicBlock_488; goto BasicBlock_552;
} }
} }
V_6 = 1; V_6 = 1;
} }
BasicBlock_488: BasicBlock_552:
j = (j + 1); j = (j + 1);
k = (k - 1); k = (k - 1);
} }
@ -588,19 +588,19 @@ namespace Reversi
if (!(V_4)) { if (!(V_4)) {
} }
else { else {
goto BasicBlock_498; goto BasicBlock_562;
} }
} }
if (!(!V_3)) { if (!(!V_3)) {
if (!(V_6)) { if (!(V_6)) {
} }
else { else {
goto BasicBlock_498; goto BasicBlock_562;
} }
} }
if (!(!V_5)) { if (!(!V_5)) {
if (!(!V_4)) { if (!(!V_4)) {
BasicBlock_498: BasicBlock_562:
return 1; return 1;
} }
} }

7
src/ControlFlow/Nodes.cs

@ -66,7 +66,12 @@ namespace Decompiler.ControlFlow
// - this is first expression // - this is first expression
// - last expression was branch // - last expression was branch
// - this expression is branch target // - this expression is branch target
if (i == 0 || exprs[i - 1].BranchTarget != null || exprs[i].BranchesHere.Count > 0){ // - this expression is a branch
if (i == 0 ||
exprs[i - 1].BranchTarget != null ||
exprs[i].BranchesHere.Count > 0 ||
exprs[i].BranchTarget != null)
{
basicBlock = new BasicBlock(); basicBlock = new BasicBlock();
this.Childs.Add(basicBlock); this.Childs.Add(basicBlock);
} }

Loading…
Cancel
Save