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

7
src/ControlFlow/Nodes.cs

@ -66,7 +66,12 @@ namespace Decompiler.ControlFlow @@ -66,7 +66,12 @@ namespace Decompiler.ControlFlow
// - this is first expression
// - last expression was branch
// - 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();
this.Childs.Add(basicBlock);
}

Loading…
Cancel
Save