topics advanced compilers - people.cs.umass.edu

3
1 UNIVERSITY NIVERSITY OF OF MASSACHUSETTS, ASSACHUSETTS, AMHERST MHERST DEPARTMENT EPARTMENT OF OF COMPUTER OMPUTER SCIENCE CIENCE Emery Berger University of Massachusetts, Amherst Advanced Compilers CMPSCI 710 Spring 2003 Basic Loop Optimizations UNIVERSITY NIVERSITY OF OF MASSACHUSETTS, ASSACHUSETTS, AMHERST MHERST DEPARTMENT EPARTMENT OF OF COMPUTER OMPUTER SCIENCE CIENCE 2 Topics Last time Optimizations using SSA form Constant propagation & dead code elimination Loop invariant code motion This time Loop optimizations Induction variable Linear test replacement Loop unrolling Scalar replacement UNIVERSITY NIVERSITY OF OF MASSACHUSETTS, ASSACHUSETTS, AMHERST MHERST DEPARTMENT EPARTMENT OF OF COMPUTER OMPUTER SCIENCE CIENCE 3 Easy Detection of Loop Induction Variables Pattern match & check: Search for “i = i + b” in loop i is induction variable if no other assignment to i in loop Pros & Cons: + Easy! - Does not catch all loop induction variables e.g., “i = a * c + 2” UNIVERSITY NIVERSITY OF OF MASSACHUSETTS, ASSACHUSETTS, AMHERST MHERST DEPARTMENT EPARTMENT OF OF COMPUTER OMPUTER SCIENCE CIENCE 4 Taxonomy of Induction Variables basic induction variable: only definition in loop is assignment j = j ± c, where c is loop invariant mutual induction variable: definition is linear function of other induction variable i : i = c1 * i ± c2 i = i / c1 ± c2 family of basic induction variable j: set of induction variables i such that i is always assigned linear function of j UNIVERSITY NIVERSITY OF OF MASSACHUSETTS, ASSACHUSETTS, AMHERST MHERST DEPARTMENT EPARTMENT OF OF COMPUTER OMPUTER SCIENCE CIENCE 5 Strength Reduction Replace “expensive” op by “cheaper” one E.g., replace multiply by addition Apply to induction variable families Especially: array indexing UNIVERSITY NIVERSITY OF OF MASSACHUSETTS, ASSACHUSETTS, AMHERST MHERST DEPARTMENT EPARTMENT OF OF COMPUTER OMPUTER SCIENCE CIENCE 6 Strength Reduction Algorithm Let i be induction variable in the family of basic induction variable j: i = c1 * j + c2 Create new variable i’ Initialize in pre-header: i’ = c1*j + c2 Track value of j: after j = j + c3, add i’ = i’ + (c1 * c3)

Upload: others

Post on 09-May-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Topics Advanced Compilers - people.cs.umass.edu

1

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE

Emery BergerUniversity of Massachusetts, Amherst

Advanced CompilersCMPSCI 710Spring 2003

Basic Loop Optimizations

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 2

Topics

Last timeOptimizations using SSA form

Constant propagation & dead code eliminationLoop invariant code motion

This timeLoop optimizations

Induction variableLinear test replacementLoop unrollingScalar replacement

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 3

Easy Detectionof Loop Induction Variables

Pattern match & check:Search for “i = i + b” in loopi is induction variable if no other assignment to i in loop

Pros & Cons:+ Easy!- Does not catch all loop induction variables

e.g., “i = a * c + 2”

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 4

Taxonomy of Induction Variables

basic induction variable:only definition in loop is assignmentj = j ± c, where c is loop invariant

mutual induction variable:definition is linear function of other induction variable i‘:

i = c1 * i‘ ± c2i = i‘ / c1 ± c2

family of basic induction variable j:set of induction variables i such that i is always assigned linear function of j

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 5

Strength Reduction

Replace “expensive” op by “cheaper” oneE.g., replace multiply by addition

Apply to induction variable familiesEspecially: array indexing

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 6

Strength Reduction Algorithm

Let i be induction variable in the family of basic induction variable j:

i = c1 * j + c2Create new variable i’Initialize in pre-header: i’ = c1*j + c2Track value of j: after j = j + c3, add i’ = i’ + (c1 * c3)

Page 2: Topics Advanced Compilers - people.cs.umass.edu

2

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 7

Strength Reduction Example

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 8

Candidates for Strength Reduction

Induction variable IV multiplied by invariant

Recursively:IV * IV, IV mod constant, IV + IV

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 9

Strength Reduction Algorithm

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 10

Strength Reduction Examples

basic induction variable:only definition in loop is assignmentj = j ± c, where c is loop invariant

mutual induction variable:definition is linear function of other induction variable i‘:

i = c1 * i‘ ± c2i = i‘ / c1 ± c2

family of basic induction variable j:set of induction variables i such that i is always assigned linear function of j

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 11

Linear Test Replacement

Eliminates induction variable!After strength reduction, loop test is often last use of induction variable

Algorithm:If only use of IV is loop test and its own increment, and test is always computed

i.e., only one exit from loopReplace test with equivalent one:

E.g., “i comp k” ⇒ “i_50 comp k*50”

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 12

Linear Test Replacement Example

Page 3: Topics Advanced Compilers - people.cs.umass.edu

3

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 13

Loop Unrolling

To reduce loop overhead, we can unroll loops

Advantages:+ Execute fewer total instructions+ More fodder for common subexpression

elimination, strength reduction, etc.+ Move consecutive access closer together

Disadvantages:- Code bloat- Still updating

through memory

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 14

Scalar Replacement

Problem: register allocators never keep a[i] in registerIdea: trick allocator

Locate patterns of consistent reuseReplace load with copy into temporaryReplace store with copy from temporaryMay need copies at end of loop

E.g., when reuse spans > 1 iterationAdvantages:

Decreases number of loads and storesKeeps reused values in registersBig performance impact (2x, 3x!)

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 15

Scalar Replacement Example

Scalar replacement exposes the reuse of a[i]Traditional scalar analysis – inadequateUse dependence analysis to understand array references (later)

UUNIVERSITYNIVERSITY OFOF MMASSACHUSETTS, ASSACHUSETTS, AAMHERSTMHERST • • DDEPARTMENTEPARTMENT OF OF CCOMPUTER OMPUTER SSCIENCECIENCE 16

Next Time

Common Subexpression EliminationRead ACDI:

Ch. 12, pp. 343-355Ch. 13, pp. 378-396