optimizing compilers for modern architectures interprocedural analysis and optimization chapter 11,...
DESCRIPTION
Optimizing Compilers for Modern Architectures Overview: Interprocedural Analysis Examples of Interprocedural problems Classification of Interprocedural problems Solve two Interprocedural problems —Side-effect Analysis —Alias AnalysisTRANSCRIPT
![Page 1: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/1.jpg)
Optimizing Compilers for Modern Architectures
Interprocedural Analysis and Optimization
Chapter 11, through Section 11.2.4
![Page 2: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/2.jpg)
Optimizing Compilers for Modern Architectures
Introduction• Interprocedural Analysis
—Gathering information about the whole program instead of a single procedure
• Interprocedural Optimization—Program transformation modifying more than one
procedure using interprocedural analysis
![Page 3: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/3.jpg)
Optimizing Compilers for Modern Architectures
Overview: Interprocedural Analysis• Examples of Interprocedural problems• Classification of Interprocedural problems• Solve two Interprocedural problems
—Side-effect Analysis—Alias Analysis
![Page 4: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/4.jpg)
Optimizing Compilers for Modern Architectures
Some Interprocedural Problems• Modification and Reference Side-effect
COMMON X,Y...DO I = 1, N
S0: CALL PS1: X(I) = X(I) + Y(I)
ENDDO
• Can vectorize if P 1. neither modifies nor uses X2. does not modify Y
![Page 5: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/5.jpg)
Optimizing Compilers for Modern Architectures
x∉REF(S0)∧x∉MOD(S0) ∧y∉REF(S0)
Modification and Reference Side Effect• MOD(s): set of variables that may be modified as a
side effect of call at s• REF(s): set of variables that may be referenced as a
side effect of call at sDO I = 1, N
S0: CALL PS1: X(I) = X(I) + Y(I)
ENDDO• Can vectorize S1 if
![Page 6: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/6.jpg)
Optimizing Compilers for Modern Architectures
Alias AnalysisSUBROUTINE S(A,X,N)
COMMON YDO I = 1, N
S0: X = X + Y*A(I)ENDDO
END• Could have kept X and Y in different registers and
stored in X outside the loop• What happens when there is a call, CALL S(A,Y,N)?
—Then Y is aliased to X on entry to S—Can’t delay update to X in the loop any more
• ALIAS(p,x): set of variables that may refer to the same location as formal parameter x on entry to p
![Page 7: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/7.jpg)
Optimizing Compilers for Modern Architectures
Call Graph Construction• Call Graph G=(N,E)
—N: one vertex for each procedure—E: one edge for each possible call
– Edge (p,q) is in E if procedure p calls procedure q• Looks easy• Construction difficult in presence of procedure
parameters
![Page 8: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/8.jpg)
Optimizing Compilers for Modern Architectures
Call Graph ConstructionSUBROUTINE S(X,P)
S0: CALL P(X)RETURN
END• P is a procedure parameter to S• What values can P have on entry to S?• CALL(s): set of all procedures that may be invoked at s• Resembles closely to the alias analysis problem
![Page 9: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/9.jpg)
Optimizing Compilers for Modern Architectures
Live and Use AnalysisDO I = 1, N
T = X(I)*CA(I) = T + B(I)C(I) = T + D(I)
ENDDO
• This loop can be parallelized by making T a local variable in the loop
PARALLEL DO I = 1, NLOCAL tt = X(I)*CA(I) = t + B(I)C(I) = t + D(I)IF(I.EQ.N) T = t
ENDDO
• Copy of local version of T to the global version of T is required to ensure correctness
• What if T was not live outside the loop?
![Page 10: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/10.jpg)
Optimizing Compilers for Modern Architectures
Live and Use Analysis• Solve Live analysis using Use Analysis• USE(s): set of variables having an upward exposed use
in procedure p called at s• If a call site, s is in a single basic block(b), x is live if
either —x in USE(s) or—P doesn’t assign a new value to x and x is live in some
control flow successor of b
![Page 11: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/11.jpg)
Optimizing Compilers for Modern Architectures
Kill AnalysisDO I = 1, N
S0: CALL INIT(T,I)T = T + B(I)A(I) = A(I) + T
ENDDO
• To parallelize the loop:—INIT must not create a recurrence with respect to the loop—T must not be upward exposed (otherwise it cannot be
privatized)
![Page 12: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/12.jpg)
Optimizing Compilers for Modern Architectures
Kill AnalysisDO I = 1, N
S0: CALL INIT(T,I)T = T + B(I)A(I) = A(I) + T
ENDDO
• T has to be assigned before being used on every path through INIT
SUBROUTINE INIT(T,I)REAL TINTEGER ICOMMON X(100)T = X(I)
END
• If INIT is of this form we can see that T can be privatized
![Page 13: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/13.jpg)
Optimizing Compilers for Modern Architectures
T ∈(KILL(S0)∩ ¬USE(S0))
LIVE(s) =USE(s)∪ (¬KILL(s)∩ LIVE(b))
b∈succ(s)U
Kill Analysis• KILL(s): set of variables assigned on every path through
procedure p called at s and through procedures invoked in p
• T in the previous example can be privatized under the following condition
• Also we can express LIVE(s) as following
![Page 14: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/14.jpg)
Optimizing Compilers for Modern Architectures
Constant PropagationSUBROUTINE S(A,B,N,IS,I1)
REAL A(*), B(*)DO I = 0, N-1
S0: A(IS*I+I1) = A(IS*I+I1) + B(I+1)ENDDO
END• If IS=0 the loop around S0 is a reduction• If IS!=0 the loop can be vectorized • CONST(p): set of variables with known constant values
on every invocation of p• Knowledge of CONST(p) useful for interprocedural
constant propagation
![Page 15: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/15.jpg)
Optimizing Compilers for Modern Architectures
Overview: Interprocedural Analysis• Examples of Interprocedural problems• Classification of Interprocedural problems• Solve two Interprocedural problems
—Side-effect Analysis—Alias Analysis
![Page 16: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/16.jpg)
Optimizing Compilers for Modern Architectures
Interprocedural Problem Classification• May and Must problems
—MOD, REF and USE are ‘May’ problems—KILL is a ‘Must’ problem
• Flow sensitive and flow insensitive problems—Flow sensitive: control flow info important—Flow insensitive: control flow info unimportant
![Page 17: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/17.jpg)
Optimizing Compilers for Modern Architectures
A
BBA
R1 R2
MOD(R1) =MOD(A)∪ MOD(B)MOD(R2) =MOD(A)∪ MOD(B)
REF(R1) =REF(A)∪ REF(B)REF(R2) =REF(A)∪ REF(B)
KILL(R1) =KILL(A)∪ KILL(B)KILL(R2)=KILL(A)∩ KILL(B)
USE(R1)=USE(A)∪ (¬KILL(A)∩ USE(B))USE(R2)=USE(A)∪ USE(B)
Flow Sensitive vs Flow Insensitive
![Page 18: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/18.jpg)
Optimizing Compilers for Modern Architectures
Classification (continued)• A problem is flow insensitive iff solution of both
sequential and alternately composed regions is determined by taking union of subregions
• Side-effect vs Propagation problems—MOD, REF, KILL and USE are side-effect—ALIAS, CALL and CONST are propagation
![Page 19: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/19.jpg)
Optimizing Compilers for Modern Architectures
Overview: Interprocedural Analysis• Examples of Interprocedural problems• Classification of Interprocedural problems• Solve two Interprocedural problems
—Side-effect Analysis—Alias Analysis
![Page 20: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/20.jpg)
Optimizing Compilers for Modern Architectures
μ
Flow Insensitive Side-effect Analysis• Assumptions
—No procedure nesting—All parameters passed by reference—Size of the parameter list bounded by a constant,
• We will formulate and solve MOD(s) problem
![Page 21: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/21.jpg)
Optimizing Compilers for Modern Architectures
• DMOD(s): set of variables which are directly modified as side-effect of call at s
• GMOD(p): set of global variables and formal parameters of p that are modified, either directly or indirectly as a result of invocation of p
MOD(s) =DMOD(s)∪ ALIAS(p,x)
x∈DMOD(s)U
DMOD(s) ={v|s⇒ p,v s ⏐ → ⏐ w,w∈GMOD(p)}
Solving MOD
![Page 22: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/22.jpg)
Optimizing Compilers for Modern Architectures
Example: DMOD and GMODS0: CALL P(A,B,C)
…SUBROUTINE P(X,Y,Z)
INTEGER X,Y,ZX = X*ZY = Y*Z
END• GMOD(P)={X,Y}• DMOD(S0)={A,B}
![Page 23: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/23.jpg)
Optimizing Compilers for Modern Architectures
Solving GMOD• GMOD(p) contains two types of variables
—Variables explicitly modified in body of P: This constitutes the set IMOD(p)
—Variables modified as a side-effect of some procedure invoked in p– Global variables are viewed as parameters to a called
procedure
GMOD(p) =IMOD(p)∪ {z|z s ⏐ → ⏐
s=(p,q)U w,w∈GMOD(q)}
![Page 24: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/24.jpg)
Optimizing Compilers for Modern Architectures
Solving GMOD• The previous iterative method may take a long time to
converge—Problem with recursive calls
SUBROUTINE P(F0,F1,F2,…,Fn)INTEGER X,F0,F1,F2,..,Fn…
S0: F0 = <some expr>…
S1: CALL P(F1,F2,…,Fn,X)…
END
![Page 25: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/25.jpg)
Optimizing Compilers for Modern Architectures
Solving GMOD• Decompose GMOD(p) differently to get an efficient
solution• Key: Treat side-effects to global variables and reference
formal parameters separately
GMOD(p) =IMOD+(p)∪
s=( p,q)U GMOD(q)∩ ¬LOCAL
![Page 26: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/26.jpg)
Optimizing Compilers for Modern Architectures
• if— or— and x is a formal parameter of p
• Formally defined
• RMOD(p): set of formal parameters in p that may be modified in p, either directly or by assignment to a reference formal parameter of q as a side effect of a call of q in p
x∈IMOD+(p)x∈IMOD(p)x s ⏐ → ⏐ z,z∈GMOD(q),s=(p,q)
IMOD+(p) =IMOD(p)∪ {z|z s ⏐ → ⏐
s=( p,q)U w,w∈RMOD(q)}
Solving for IMOD+
![Page 27: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/27.jpg)
Optimizing Compilers for Modern Architectures
Solving for RMOD• RMOD(p) construction needs binding graph GB=(NB,EB)
—One vertex for each formal parameter of each procedure—Directed edge from formal parameter, f1 of p to formal
parameter, f2 of q if there exists a call site s=(p,q) in p such that f1 is bound to f2
• Use a marking algorithm to solve RMOD
![Page 28: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/28.jpg)
Optimizing Compilers for Modern Architectures
X Y Z
P Q
• IMOD(A)={X,Y}• IMOD(B)={I}
(0) (0) (0)
(0)(0)
Solving for RMODSUBROUTINE A(X,Y,Z)
INTEGER X,Y,ZX = Y + ZY = Z + 1
END
SUBROUTINE B(P,Q)INTEGER P,Q,II = 2CALL A(P,Q,I)CALL A(Q,P,I)
END
![Page 29: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/29.jpg)
Optimizing Compilers for Modern Architectures
X Y Z
P Q
• IMOD(A)={X,Y}• IMOD(B)={I}• Worklist={X,Y}
(1) (1) (0)
(0)(0)
Solving for RMODSUBROUTINE A(X,Y,Z)
INTEGER X,Y,ZX = Y + ZY = Z + 1
END
SUBROUTINE B(P,Q)INTEGER P,Q,II = 2CALL A(P,Q,I)CALL A(Q,P,I)
END
![Page 30: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/30.jpg)
Optimizing Compilers for Modern Architectures
X Y Z
P Q
• RMOD(A)={X,Y}• RMOD(B)={P,Q}• Complexity:
(1) (1) (0)
(1)(1)
Solving for RMODSUBROUTINE A(X,Y,Z)
INTEGER X,Y,ZX = Y + ZY = Z + 1
END
SUBROUTINE B(P,Q)INTEGER P,Q,II = 2CALL A(P,Q,I)CALL A(Q,P,I)
END
O(NB +EB)
NB ≤μN EB ≤μE
O(N +E)
![Page 31: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/31.jpg)
Optimizing Compilers for Modern Architectures
Solving for IMOD+
• After gathering RMOD(p) for all procedures, update RMOD(p) to IMOD+(p) using this equation
• This can be done in O(NV+E) time
IMOD+(p) =IMOD(p)∪ {z|z s ⏐ → ⏐
s=( p,q)U w,w∈RMOD(q)}
![Page 32: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/32.jpg)
Optimizing Compilers for Modern Architectures
Solving for GMOD• After gathering IMOD+(p) for all procedures, calculate
GMOD(p) according to the following equation
• This can be solved using a DFS algorithm based on Tarjan’s SCR algorithm on the Call Graph
GMOD(p) =IMOD+(p)∪
s=( p,q)U GMOD(q)∩ ¬LOCAL
![Page 33: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/33.jpg)
Optimizing Compilers for Modern Architectures
Solving for GMOD
rq
p
s
rq
p
s 1
2 3
4
Initialize GMOD(p) to IMOD+(p) on discovery
Update GMOD(p) computation while backing up
![Page 34: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/34.jpg)
Optimizing Compilers for Modern Architectures
Solving for GMOD
rq
p
s
rq
p
s 1
3 2
4
Initialize GMOD(p) to IMOD+(p) on discovery
Update GMOD(p) computation while backing up
For each node u in a SCR update GMOD(u) in a cycle
O((N+E)V) Algorithm
![Page 35: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/35.jpg)
Optimizing Compilers for Modern Architectures
Overview: Interprocedural Analysis• Examples of Interprocedural problems• Classification of Interprocedural problems• Solve two Interprocedural problems
—Side-effect Analysis—Alias Analysis
![Page 36: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/36.jpg)
Optimizing Compilers for Modern Architectures
• Recall definition of MOD(s)
• Task is to —Compute ALIAS(p,x)—Update DMOD to MOD using ALIAS(p,x)
MOD(s) =DMOD(s)∪ ALIAS(p,x)
x∈DMOD(s)U
Alias Analysis
![Page 37: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/37.jpg)
Optimizing Compilers for Modern Architectures
GMOD(Q)={Z}
MOD(S1)={X,Y}
DMOD(S1)={X}
Update DMOD to MODSUBROUTINE P
INTEGER AS0: CALL S(A,A)END
SUBROUTINE S(X,Y)INTEGER X,Y
S1: CALL Q(X)END
SUBROUTINE Q(Z)INTEGER ZZ = 0
END
![Page 38: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/38.jpg)
Optimizing Compilers for Modern Architectures
procedure findMod(N,E,n,IMOD+,LOCAL)for each call site s do begin
MOD[s]:=DMOD[s]; for each x in DMOD[s] do
for each v in ALIAS[p,x] doMOD[s]:=MOD[s] {v};
endend findMod
• O(EV2) algorithm; need to do better
∪
Naïve Update of DMOD to MOD
![Page 39: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/39.jpg)
Optimizing Compilers for Modern Architectures
Update of DMOD to MOD• Key Observations
—Two global variables can never be aliases of each other. Global variables can only be aliased to a formal parameter
—ALIAS(p,x) contains less than entries if x is global—ALIAS(p,f) for formal parameter f can contain any global
variable or other formal parameters (O(V))
μ
![Page 40: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/40.jpg)
Optimizing Compilers for Modern Architectures
Update of DMOD to MOD• Break down update into two parts
—If x is global we need to add less than elements but need to do it O(V) times
—If x is a formal parameter we need to add O(V) elements but need to do it only O( ) times
• This gives O( V)=O(V) update time per call, implying O(VE) for all calls
μμ
μ
![Page 41: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/41.jpg)
Optimizing Compilers for Modern Architectures
Computing Aliases• Compute A(f): the set of global variables a formal
parameter f can be aliased to—Use binding graph[with cycles reduced to single nodes]
—Compute Alias(p,g) for all global variables• Expand A(f) to Alias(p,f) for formal parameters
—Find alias introduction sites (eg. CALL P(X,X))—Propagate aliases
g→ f0 → f1 → ...→ fn = f
![Page 42: Optimizing Compilers for Modern Architectures Interprocedural Analysis and Optimization Chapter 11, through Section 11.2.4](https://reader035.vdocuments.us/reader035/viewer/2022062401/5a4d1b557f8b9ab0599a934c/html5/thumbnails/42.jpg)
Optimizing Compilers for Modern Architectures
Summary• Some Interprocedural problems and their application in
parallelization and vectorization• Classified Interprocedural problems • Solved the modification side-effect problem and the
alias side-effect problem