int soma(int a, int b) {
int resultado = 0;
if (a > 0) {
resultado = a + b;
} else {
resultado = b;
}
return resultado;
}
A: x = 5 // Escrita
B: y = x + 1 // Leitura após escrita
A: y = x + 1 // Leitura
B: x = 5 // Escrita após leitura
A: x = 5 // Escrita
B: x = 10 // Escrita após escrita
// Antes da otimização
for (int i = 0; i < n; i++) {
x[i] = y[i] * (a + b);
}
// Após code motion
int temp = a + b;
for (int i = 0; i < n; i++) {
x[i] = y[i] * temp;
}
// Código original
a = b + c;
d = a * 2;
e = b + c;
f = e * 2;
g = d + f;
// Código otimizado
a = b + c;
d = a * 2;
f = d; // Eliminada a computação redundante
g = d + f;
int calcular(int n) {
int resultado = 0;
if (n > 10) {
resultado = n * 2;
} else {
for (int i = 0; i < n; i++) {
resultado += i;
}
}
return resultado;
}
1: i = 0
2: j = 10
3: if i >= 5 goto 8
4: t1 = i * 2
5: j = t1
6: i = i + 1
7: goto 3
8: return j
1: a = b + c
2: d = a * 2
3: e = b - c
4: f = a + e
5: g = f / 2
6: h = a + g
import networkx as nx
import matplotlib.pyplot as plt
# Criar o grafo
G = nx.DiGraph()
# Adicionar nós (blocos básicos)
G.add_node("inicio", label="i=0; j=10")
G.add_node("cond", label="i >= 5 ?")
G.add_node("corpo", label="t1=i*2; j=t1; i=i+1")
G.add_node("fim", label="return j")
# Adicionar arestas (fluxo de controle)
G.add_edge("inicio", "cond")
G.add_edge("cond", "corpo", label="falso")
G.add_edge("cond", "fim", label="verdadeiro")
G.add_edge("corpo", "cond")
# Visualizar o grafo
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_color="lightblue")
nx.draw_networkx_edge_labels(G, pos)
plt.show()
int soma_quadrados(int n) {
int soma = 0;
for (int i = 1; i <= n; i++) {
int quadrado = i * i;
soma = soma + quadrado;
}
return soma;
}