Compiladores - Otimização de código Intermediário

Preview:

DESCRIPTION

Seminário apresentado por alunos da Universidade de Pernambuco Caruaru sobre Otimizaçãod e Código Intermediário

Citation preview

CODE OPTIMIZATIONCODE OPTIMIZATION

Presented By:

Amita das

Jayanti bhattacharya

Jaistha Upadhyay

Designer da compilação

Analise Léxica

Analise Sintática

Analise Semântica

Geração do Código

Otimização de Código

Tabela de Símbolos

Exibição deErros

Código fonte

Código Objeto

Geração do Código Intermediário

O que é otimização?O que é otimização?

Em computação, otimização é o processo de modificar Em computação, otimização é o processo de modificar fazer algum aspecto de um sistema para que trabalhe com fazer algum aspecto de um sistema para que trabalhe com mais eficiência ou utilize menos recursos. mais eficiência ou utilize menos recursos.

Por exemplo, um programa de computador pode ser Por exemplo, um programa de computador pode ser otimizada de modo que ele seja executado mais rápido, ou otimizada de modo que ele seja executado mais rápido, ou seja capaz de operar com o menos armazenamento de seja capaz de operar com o menos armazenamento de memória ou outros recursos, ou consomem menos memória ou outros recursos, ou consomem menos energia. O sistema pode ser um programa único de energia. O sistema pode ser um programa único de computador, um conjunto de computadores ou mesmo computador, um conjunto de computadores ou mesmo toda uma rede como a internet.toda uma rede como a internet.

““Níveis” de otimizaçãoNíveis” de otimizaçãoOtimização pode ocorrer em um número de "níveis":Otimização pode ocorrer em um número de "níveis":

Nível de designNível de design

No nível mais alto, o projeto pode ser otimizado para fazer o No nível mais alto, o projeto pode ser otimizado para fazer o melhor uso dos recursos disponíveis. A implementação deste melhor uso dos recursos disponíveis. A implementação deste projeto irá se beneficiar do uso de algoritmos eficientes e projeto irá se beneficiar do uso de algoritmos eficientes e adequados a implementação destes algoritmos irão beneficiar de adequados a implementação destes algoritmos irão beneficiar de escrever código de boa qualidade. O projeto arquitetônico de escrever código de boa qualidade. O projeto arquitetônico de um sistema predominantemente afeta seu desempenho. A um sistema predominantemente afeta seu desempenho. A escolha do algoritmo afeta a eficiência mais do que qualquer escolha do algoritmo afeta a eficiência mais do que qualquer outro item do projeto.outro item do projeto.

Nível de compilaçãoNível de compilação

O uso de um compilador otimizado tende a assegurar que o O uso de um compilador otimizado tende a assegurar que o programa executável é optimizada, pelo menos tanto quanto o programa executável é optimizada, pelo menos tanto quanto o compilador pode prever.compilador pode prever.

Nível AssemblyNível Assembly

No nível mais baixo, escrevendo código usando uma linguagem de No nível mais baixo, escrevendo código usando uma linguagem de montagem projetado para uma plataforma de hardware específico, montagem projetado para uma plataforma de hardware específico, normalmente, produzem o código mais eficiente, pois o programador normalmente, produzem o código mais eficiente, pois o programador pode aproveitar o repertório completo de instruções de máquina. Os pode aproveitar o repertório completo de instruções de máquina. Os sistemas de operação da maior parte das máquinas tem sido sistemas de operação da maior parte das máquinas tem sido tradicionalmente escrito em código Assembler por esta razão.tradicionalmente escrito em código Assembler por esta razão.

Runtime (tempo de execução)Runtime (tempo de execução)Apenas compiladores e programadores Apenas compiladores e programadores assemblerassembler são capazes de são capazes de realizar a otimização de tempo de execução.realizar a otimização de tempo de execução.

Quando a otimizar?Quando a otimizar?

Optimização é muitas vezes realizada no final do estágio de Optimização é muitas vezes realizada no final do estágio de desenvolvimento, uma vez que:desenvolvimento, uma vez que:

• Reduz a legibilidadeReduz a legibilidade• Adiciona código que é utilizado para melhorar o Adiciona código que é utilizado para melhorar o

desempenhodesempenho

Critérios para a otimização

Uma otimização deve preservar o significado de um programa:

- Não pode alterar a saída produzida para qualquer entrada.

- Não pode introduzir um erro

Deve, em média, acelerar os programas

Transformação deve valer a pena o esforço

As melhorias podem ser feitas em várias fases:

Código Fonte:

- Alterações no algoritmo podem produzir melhorias espetaculares- Criação de perfil pode ser útil para chamar a atenção de um programador no código de suma importância.

Código Intermediário:

- Compilador pode melhorar loops, chamadas de procedimento e cálculos de endereço- Normalmente apenas compiladores otimizando incluir esta fase.

Código Alvo:

- Os compiladores podem usar registros com eficiência.- Transformação Peephole pode ser aplicado

Tipos de OtimizaçãoTipos de Otimização

Remoção de sub-expressão comum.Remoção de sub-expressão comum. Otimização de Códigos MortosOtimização de Códigos Mortos Otimização de Loops.Otimização de Loops.

Remoção de sub-expressão comum.Remoção de sub-expressão comum.

Remoção de sub-expressão comum é uma otimização que procura por ocorrências de expressões idênticas (ou seja, todos eles avaliar o mesmo valor), e as análises se vale a penas em substituir por uma única variável mantendo o valor calculado.

a=b * c + g

d=b * c * d

temp=b * c

a=temp + g

d=temp * d

Eliminação de código morto é uma otimização do compilador que remove código que não afeta um programa. Remoção de tal código

tem duas vantagens encolhe o tamanho do programa, uma consideração importante em alguns contextos. Ele permite que o

programa em execução evitar a execução de operações irrelevantes, o que reduz seu tempo de execução.

Eliminação de código morto é de dois tipos:

- Código Inacessível

- Declaração redundante

Otimização de Código Morto

Código Inacessivel

Em Programação de Computadores, código inacessível ou código morto é o código que existe no código fonte de um programa, mas nunca pode ser executado.

Program Code

If (a>b)

m=a

elseif (a<b)

m=b

elseif (a==b)

m=0

else

m=-1

Optimized Code

If (a>b)

m=a

elseif (a<b)

m=b

else

m=0

Código redundante

Código redundante é o código que é executado mas não tem qualquer efeito sobre a saída a partir de um programa

main(){

int a,b,c,r;

a=5;

b=6;

c=a + b;

r=2;

r++;

printf(“%d”,c);

}

Adicionando complexidade de tempo e espaço

Otimização de LoopOtimização de Loop

Otimização de Loop desempenha um papel importante na melhoria do desempenho do código fonte, reduzindo despesas gerais associadas com loops de execução.

Otimização de loop pode ser feito através da remoção:

- Loop invariante

- Variáveis de indução

Loop InvarianteLoop Invariante

i = 1

s= 0

do{

s= s + i

a =5

i = i + 1

{

while (i < =n)

i = 1

s= 0

a =5

do{

s= s + i

i = i + 1

{

while (i < =n)

Trazendo a = 5

fazer fora do loop while, é chamado movimento de código.

Variáveis de InduçãoVariáveis de Indução

i = 1

s= 0

S1=0

S2=0

while (i < =n)

{

s= s + a[ i ]

t1 = i * 4

s= s + b[ t1 ]

t2 = t1 +2

s2= s2 + c[ t2 ]

i = i + 1

}

i = 1

s= 0

S1=0

S2=0

t2=0

while (i < =n)

{

s= s + a[ i ]

t1 = t1+ 4

s= s + b[ t1 ]

s2= s2 + c[t1 +2 ]

i = i + 1

}

t1, t2 são variáveis de indução. i está induzindo t1 e t1 está induzindo t2

“+” replaced “ * ”, t1 was made independent of i

Common Sub-expression RemovalCommon Sub-expression Removal

It is used to remove redundant computations which usually improves It is used to remove redundant computations which usually improves the execution time of a program.the execution time of a program.

Three Address Code of Quick SortThree Address Code of Quick Sorti = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto (5) < v goto (5)

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto (9) > v goto (9)

if i >= j goto (23)if i >= j goto (23)

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

11

22

33

44

55

66

77

88

99

1010

1111

1212

1313

1414

1515

tt77 = 4 * I = 4 * I

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[ta[t77] = t] = t99

tt1010 = 4 * j = 4 * j

a[ta[t1010] = x] = x

goto (5)goto (5)

tt1111 = 4 * I = 4 * I

x = a[tx = a[t1111]]

tt1212 = 4 * i = 4 * i

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[ta[t1212] = t] = t1414

tt1515 = 4 * n = 4 * n

a[ta[t1515] = x] = x

1616

1717

1818

1919

2020

2121

2222

2323

2424

2525

2626

2727

2828

2929

3030

Find The Basic BlockFind The Basic Blocki = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto (5) < v goto (5)

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto (9) > v goto (9)

if i >= j goto (23)if i >= j goto (23)

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

11

22

33

44

55

66

77

88

99

1010

1111

1212

1313

1414

1515

tt77 = 4 * I = 4 * I

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[ta[t77] = t] = t99

tt1010 = 4 * j = 4 * j

a[ta[t1010] = x] = x

goto (5)goto (5)

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1212 = 4 * i = 4 * i

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[ta[t1212] = t] = t1414

tt1515 = 4 * n = 4 * n

a[ta[t1515] = x] = x

1616

1717

1818

1919

2020

2121

2222

2323

2424

2525

2626

2727

2828

2929

3030

Flow GraphFlow Graphi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

tt77 = 4 * i = 4 * i

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[ta[t77] = t] = t99

tt1010 = 4 * j = 4 * j

a[ta[t1010] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1212 = 4 * i = 4 * i

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[ta[t1212] = t] = t1414

tt1515 = 4 * n = 4 * n

a[ta[t1515] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

tt77 = 4 * i = 4 * i

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[ta[t77] = t] = t99

tt1010 = 4 * j = 4 * j

a[ta[t1010] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1212 = 4 * i = 4 * i

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[ta[t1212] = t] = t1414

tt1515 = 4 * n = 4 * n

a[ta[t1515] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[a[tt66] = t] = t99

tt1010 = 4 * = 4 * jj

a[ta[t1010] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1212 = 4 * i = 4 * i

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[ta[t1212] = t] = t1414

tt1515 = 4 * n = 4 * n

a[ta[t1515] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[a[tt66] = t] = t99

a[a[tt88] = x] = x

goto Bgoto B22

tt1111 = 4 *i = 4 *i

x = a[tx = a[t1111]]

tt1212 = 4 * i = 4 * i

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[ta[t1212] = t] = t1414

tt1515 = 4 * n = 4 * n

a[ta[t1515] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[a[tt66] = t] = t99

a[a[tt88] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1212 = 4 * i = 4 * i

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[ta[t1212] = t] = t1414

tt1515 = 4 * n = 4 * n

a[ta[t1515] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[a[tt66] = t] = t99

a[a[tt88] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[a[tt1111] = t] = t1414

tt1515 = 4 * n = 4 * n

a[ta[t1515] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[a[tt66] = t] = t99

a[a[tt88] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[a[tt1111] = t] = t1414

a[a[tt1313] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

tt6 6 = 4 * i = 4 * i

x = a[tx = a[t66]]

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[a[tt66] = t] = t99

a[a[tt88] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[a[tt1111] = t] = t1414

a[a[tt1313] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

x = a[x = a[tt22]]

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[a[tt22] = t] = t99

a[a[tt88] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[a[tt1111] = t] = t1414

a[a[tt1313] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

x = tx = t3 3

tt88 = 4 * j = 4 * j

tt99 = a[t = a[t88]]

a[a[tt22] = t] = t99

a[a[tt88] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[a[tt1111] = t] = t1414

a[a[tt1313] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

x = tx = t3 3

a[a[tt22] = t] = t55

a[a[tt44] = x] = x

goto Bgoto B22

tt1111 = 4 * i = 4 * i

x = a[tx = a[t1111]]

tt1313 = 4 * n = 4 * n

tt1414 = a[t = a[t1313]]

a[a[tt1111] = t] = t1414

a[a[tt1313] = x] = x

B1

B2

B3

B4

B5 B6

Common Subexpression EliminationCommon Subexpression Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

x = tx = t3 3

a[a[tt22] = t] = t55

a[a[tt44] = x] = x

goto Bgoto B22

x = tx = t33

tt1414 = a[t = a[t11]]

a[a[tt22] = t] = t1414

a[a[tt11] = x] = x

B1

B2

B3

B4

B5 B6

Similarly for B6

Dead Code EliminationDead Code Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

x = tx = t3 3

a[a[tt22] = t] = t55

a[a[tt44] = x] = x

goto Bgoto B22

x = tx = t33

tt1414 = a[t = a[t11]]

a[a[tt22] = t] = t1414

a[a[tt11] = x] = x

B1

B2

B3

B4

B5 B6

Dead Code EliminationDead Code Eliminationi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

a[a[tt22] = t] = t55

a[a[tt44] = t] = t33

goto Bgoto B22

tt1414 = a[t = a[t11]]

a[a[tt22] = t] = t1414

a[a[tt11] = t] = t33

B1

B2

B3

B4

B5 B6

Reduction in StrengthReduction in Strengthi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

i = i + 1i = i + 1

tt22 = 4 * i = 4 * i

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

j = j – 1j = j – 1

tt44 = 4 * j = 4 * j

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

a[a[tt22] = t] = t55

a[a[tt44] = t] = t33

goto Bgoto B22

tt1414 = a[t = a[t11]]

a[a[tt22] = t] = t1414

a[a[tt11] = t] = t33

B1

B2

B3

B4

B5 B6

Reduction in StrengthReduction in Strengthi = m - 1i = m - 1

j = nj = n

tt1 1 =4 * n=4 * n

v = a[tv = a[t11]]

tt2 2 = 4 * i= 4 * i

tt44 = 4 * j = 4 * j

tt22 = t = t22 + 4 + 4

tt33 = a[t = a[t22]]

if tif t33 < v goto B < v goto B22

tt44 = t = t44 - 4 - 4

tt55 = a[t = a[t44]]

if tif t55 > v goto B > v goto B33

if i >= j goto B6

a[a[tt22] = t] = t55

a[a[tt44] = t] = t33

goto Bgoto B22

tt1414 = a[t = a[t11]]

a[a[tt22] = t] = t1414

a[a[tt11] = t] = t33

B1

B2

B3

B4

B5 B6

Recommended