| |
| |
| -- If pattern -- |
| |
| |
| |
| // block A |
| if (check == 10) { |
| atob(); |
| // block B |
| btoc(); |
| } else { |
| atoc(); |
| } |
| // block C |
| |
| |
| |
| -- If-else pattern -- |
| |
| |
| |
| // block A |
| if (check == 15) { |
| // block B |
| } else { |
| // block C |
| } |
| // block D |
| |
| |
| |
| -- Loop + tail pattern -- |
| |
| |
| |
| while(1) { |
| // block A |
| var check = maybe(); |
| // block B |
| if (!(check == 41)) { |
| break; |
| } |
| } |
| // block C |
| |
| |
| |
| -- Loop with phi to head |
| |
| // code 1 |
| var $i_0 = 0;var $x_0 = 5; |
| while(1) { |
| // code 2 |
| if (!($2)) { |
| var $x_1 = $x_0; |
| label = 18; |
| break; |
| } |
| // code 3 |
| if ($6) { |
| break; |
| } else { |
| var $i_0 = $7;var $x_0 = $5; |
| } |
| } |
| if (label == 18) { |
| // code 7 |
| } |
| // code 4 |
| if ($10) { |
| // code 5 |
| } |
| // code 6 |
| var $x_1 = $13; |
| // code 7 |
| |
| |
| |
| -- phi on split dead ends -- |
| |
| |
| |
| // block A................................................................................................... |
| if (chak()) { |
| atob(); |
| // block B................................................................................................... |
| btod(); |
| // block D |
| } else { |
| atoc(); |
| // block C................................................................................................... |
| ctod2(); |
| // block D |
| } |
| |
| |
| |
| -- Unbalanced with a dead end -- |
| |
| |
| |
| // block A |
| if (!(check == 10)) { |
| return C; |
| } |
| while(1) { |
| // block B |
| // block D |
| } |
| |
| |
| |
| -- if (expensive || expensive2) X else Y; Z -- |
| |
| |
| |
| // block A |
| do { |
| if (expensive()) { |
| label = 33; |
| } else { |
| // block B |
| if (expensive2()) { |
| label = 33; |
| break; |
| } |
| // block D |
| } |
| } while(0); |
| if (label == 33) { |
| // block C; |
| } |
| while(1) { |
| // block E |
| // block F |
| } |
| |
| |
| |
| -- conditional loop -- |
| |
| |
| |
| // block A |
| if (shouldLoop()) { |
| while(1) { |
| // block B |
| if (!(moarLoop())) { |
| break; |
| } |
| } |
| } |
| // block C |
| |