Reducing Code Size Using Outlining Jessica Paquette Apple Outline - - PowerPoint PPT Presentation

reducing code size using outlining
SMART_READER_LITE
LIVE PREVIEW

Reducing Code Size Using Outlining Jessica Paquette Apple Outline - - PowerPoint PPT Presentation

Reducing Code Size Using Outlining Jessica Paquette Apple Outline Code size Outlining Results Future work Motivating Example callq _printf movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl


slide-1
SLIDE 1

Reducing Code Size Using Outlining

Jessica Paquette Apple

slide-2
SLIDE 2

Outline

  • Code size
  • Outlining
  • Results
  • Future work
slide-3
SLIDE 3

Motivating Example

slide-4
SLIDE 4

callq _printf movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl -20(%rbp), %ecx movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp)

… …

slide-5
SLIDE 5

NEW_FUNC: movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) retq

… …

callq _printf movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl -20(%rbp), %ecx movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp)

slide-6
SLIDE 6

callq _printf movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl -20(%rbp), %ecx movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp)

… …

NEW_FUNC: movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) retq callq _printf callq NEW_FUNC movl -20(%rbp), %ecx callq NEW_FUNC callq NEW_FUNC

… …

slide-7
SLIDE 7

callq _printf callq NEW_FUNC movl -20(%rbp), %ecx callq NEW_FUNC callq NEW_FUNC

… …

NEW_FUNC: movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) retq

slide-8
SLIDE 8

Outlining

Replacing repeated sequences

  • f instructions with calls to

equivalent functions

slide-9
SLIDE 9

Outliner

A pass that finds repeated instruction sequences and

  • utlines them.
slide-10
SLIDE 10

callq _printf movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl -20(%rbp), %ecx movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp)

… …

G G C A T C G C A T G C A T

slide-11
SLIDE 11

callq _printf movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl -20(%rbp), %ecx movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp) movl $2, %edx movl -8(%rbp), %esi addl $1, %esi movl %esi, -8(%rbp)

… …

A B C D E F B C D E B C D E

slide-12
SLIDE 12

Programs are like strings

slide-13
SLIDE 13

Find repeated substrings

slide-14
SLIDE 14

Suffix Tree

A data structure for string searching

(Not a suffix trie!)

slide-15
SLIDE 15

$ CAB$0 C A B $ $0 C A B $ B AB $0

A B C A B $0

slide-16
SLIDE 16

$ CAB$0 C A B $ $0 C A B $ B AB $0

A B C A B $0

slide-17
SLIDE 17

$ CAB$0 C A B $ $0 C A B $ B AB $0

A B C A B $0

slide-18
SLIDE 18

$ CAB$0 C A B $ $0 C A B $ B AB $0

A B C A B $0

slide-19
SLIDE 19

$ CAB$0 C A B $ $0 C A B $ B AB $0

A B C A B $0

slide-20
SLIDE 20

$ CAB$0 C A B $ $0 C A B $ B AB $0

A B C A B $0

slide-21
SLIDE 21

Advantages

  • O(L) construction
  • O(L) longest repeated substring
  • O(L) time most frequent

substring Given a string of length L…

slide-22
SLIDE 22

Simplified Suffix Tree Construction

slide-23
SLIDE 23

Suffixes A B C A B $0

slide-24
SLIDE 24

Suffixes A B C A B $0

slide-25
SLIDE 25

A Suffixes A B C A B $0

slide-26
SLIDE 26

A

Suffixes A B C A B $0

slide-27
SLIDE 27

A

B, AB Suffixes A B C A B $0

slide-28
SLIDE 28

AB

B Suffixes A B C A B $0

slide-29
SLIDE 29

AB B

Suffixes A B C A B $0

slide-30
SLIDE 30

ABC B C

C Suffixes A B C A B $0

slide-31
SLIDE 31

ABC B C C

Suffixes A B C A B $0

slide-32
SLIDE 32

ABCA B C A C A

A Suffixes A B C A B $0

slide-33
SLIDE 33

ABCA B C A C A

A Suffixes A B C A B $0

slide-34
SLIDE 34

ABCAB B C A B C A B

Suffixes A B C A B $0 A B B

slide-35
SLIDE 35

ABCAB B C A B C A B

Suffixes A B C A B $0 A B B

slide-36
SLIDE 36

ABCAB$0 B C A B $ C A B $

Suffixes A B C A B $0 A B $0 B $0 $0

slide-37
SLIDE 37

AB B C A B $ C A B $ $ CAB$0

Suffixes A B C A B $0 B $0 $0

slide-38
SLIDE 38

Suffixes A B C A B $0 B $0 $0

AB B C A B $ C A B $ $ CAB$0

slide-39
SLIDE 39

AB B C A B $ $ CAB$0 C A B $ $0

Suffixes A B C A B $0 $0

slide-40
SLIDE 40

$ CAB$0 C A B $ $0 C A B $ B AB $0

Suffixes A B C A B $0

slide-41
SLIDE 41

$ CAB$0 C A B $ $0 C A B $ B AB $0

*Note: Real construction is more complex Need to store links between internal nodes

slide-42
SLIDE 42

Representation

slide-43
SLIDE 43

Suffix Tree Struct

struct SuffixTree { Node *Root; size_t LeafEnd; ActiveState Active; … };

slide-44
SLIDE 44

Suffix Tree Struct

struct SuffixTree { Node *Root; size_t LeafEnd; ActiveState Active; StringType longestRepeatedSubstring(); void findOccurrences(std::vector<int> &Occurrences, const StringType &QueryStr); void prune(const StringType &Str); … };

slide-45
SLIDE 45

Node Struct

struct Node { Node *Parent; std::map<CharacterType, Node *> Children; size_t StartIdx; size_t EndIdx; size_t SuffixIndex; … };

slide-46
SLIDE 46

Node Struct

struct Node { Node *Parent; std::map<CharacterType, Node *> Children; size_t StartIdx; size_t EndIdx; size_t SuffixIndex; bool Valid; … };

slide-47
SLIDE 47

Outlining Example

slide-48
SLIDE 48

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R7 = 0xFEEDFACE

FOO ( )

R1 = R1 - 1

A B C D E

BAR ( )

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R7 = 0xFACEFEED R7 = R3 + R2 R1 = R1 - 1

A B C A B C G F E

slide-49
SLIDE 49

A B C D E F A B C G A B C E

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R7 = 0xFEEDFACE

FOO ( )

R1 = R1 - 1

A B C D E

BAR ( )

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R7 = 0xFACEFEED R7 = R3 + R2 R1 = R1 - 1

A B C A B C G F E

String Encoding

slide-50
SLIDE 50

Unique terminators

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R7 = 0xFEEDFACE

FOO ( )

R1 = R1 - 1

BAR ( )

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5 R7 = 0xFACEFEED R7 = R3 + R2 R1 = R1 - 1

A B C D E $0 F A B C G A B C E $1

A B C D E A B C A B C G F E

String Encoding

slide-51
SLIDE 51

A B C D E $0 F A B C G A B C E $1

String Encoding

slide-52
SLIDE 52

A B C D E $0 F A B C G A B C E $1

String Encoding

slide-53
SLIDE 53

Find Candidates

slide-54
SLIDE 54

A B C D E $0 F A B C G A B C E $1

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

slide-55
SLIDE 55

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring None Length Occurrences

slide-56
SLIDE 56

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring None Length Occurrences

slide-57
SLIDE 57

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring C Length 1 Occurrences 3

slide-58
SLIDE 58

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-59
SLIDE 59

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-60
SLIDE 60

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-61
SLIDE 61

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-62
SLIDE 62

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-63
SLIDE 63

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-64
SLIDE 64

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-65
SLIDE 65

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

X

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-66
SLIDE 66

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

X X X

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3

slide-67
SLIDE 67

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

X X X

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string N/A

slide-68
SLIDE 68

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

X X X

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2]

slide-69
SLIDE 69

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

X X X

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9]

slide-70
SLIDE 70

A B C

C

D E $0 F A B C G A B C E $1 G A B C E $ 1 E$1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 B C E $0 F A B C G A B C E $1 $1 F A B C G A B C E G A B C E $1 D E $0 F A B C G A B C E $1 G A B C E $1 E$1 D E $0 F A B C G A B C E $1

X X X

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

slide-71
SLIDE 71

Outlining

slide-72
SLIDE 72

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

FOO ( ) BAR ( )

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

Outlining ABC

slide-73
SLIDE 73

FOO ( ) BAR ( )

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

OUTLINED ( )

Insert Function

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

slide-74
SLIDE 74

A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

BAR ( )

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

FOO ( )

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

Insert Calls

OUTLINED ( )

slide-75
SLIDE 75

A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

FOO ( ) BAR ( )

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

A B C D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

Insert Calls

OUTLINED ( )

slide-76
SLIDE 76

A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

FOO ( ) BAR ( )

call OUTLINED( )

X

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

X D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

Insert Calls

OUTLINED ( )

slide-77
SLIDE 77

A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

FOO ( ) BAR ( )

call OUTLINED( )

X

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

X D E $0 F A B C G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

Insert Calls

OUTLINED ( )

slide-78
SLIDE 78

A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

FOO ( ) BAR ( )

call OUTLINED( )

X

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

call OUTLINED( )

X

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

Insert Calls

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

OUTLINED ( )

X D E $0 F X G A B C E $1

slide-79
SLIDE 79

A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

FOO ( ) BAR ( )

call OUTLINED( )

X

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

call OUTLINED( )

X

R1 = 0xDEADBEEF

A

R3 = R2 + R1

B

R1 = *R5

C

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

X D E $0 F X G A B C E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

Insert Calls

OUTLINED ( )

slide-80
SLIDE 80

A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

FOO ( ) BAR ( )

call OUTLINED( )

X

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

call OUTLINED( )

X

call OUTLINED( )

X

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

X D E $0 F X G X E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

Insert Calls

OUTLINED ( )

slide-81
SLIDE 81

A B C

R1 = 0xDEADBEEF R3 = R2 + R1 R1 = *R5

FOO ( ) BAR ( )

call OUTLINED( )

X

R7 = 0xFEEDFACE

D

R1 = R1 - 1

E

call OUTLINED( )

X

call OUTLINED( )

X

R7 = 0xFACEFEED

G

R7 = R3 + R2

F

R1 = R1 - 1

E

Done!

X D E $0 F X G X E $1

Longest repeated substring ABC Length 3 Occurrences 3 Locations in string [0,2], [7,9], [11,13]

OUTLINED ( )

slide-82
SLIDE 82

Limitations

slide-83
SLIDE 83

Unsafe Sequences

slide-84
SLIDE 84

subq $16, %rsp movl $0, -4(%rbp) movl $99, -8(%rbp) cmpl $0, -8(%rbp) jle LEQ_ZERO movl -8(%rbp), %eax addl $1, %eax movl %eax, -8(%rbp) jmp PRINT_RESULT LEQ_ZERO: movl $0, -8(%rbp) PRINT_RESULT: leaq STRING(%rip), %rdi movl -8(%rbp), %esi movb $0, %al callq _printf … … cmpl $0, -8(%rbp) jle LEQ_ZERO movl -8(%rbp), %eax addl $1, %eax movl %eax, -8(%rbp) jmp PRINT_RESULT LEQ_ZERO: movl $0, -8(%rbp)

slide-85
SLIDE 85

subq $16, %rsp movl $0, -4(%rbp) movl $99, -8(%rbp) cmpl $0, -8(%rbp) jle LEQ_ZERO movl -8(%rbp), %eax addl $1, %eax movl %eax, -8(%rbp) jmp PRINT_RESULT LEQ_ZERO: movl $0, -8(%rbp) PRINT_RESULT: leaq STRING(%rip), %rdi movl -8(%rbp), %esi movb $0, %al callq _printf … … cmpl $0, -8(%rbp) jle LEQ_ZERO movl -8(%rbp), %eax addl $1, %eax movl %eax, -8(%rbp) jmp PRINT_RESULT LEQ_ZERO: movl $0, -8(%rbp)

slide-86
SLIDE 86

subq $16, %rsp movl $0, -4(%rbp) movl $99, -8(%rbp) cmpl $0, -8(%rbp) jle LEQ_ZERO movl -8(%rbp), %eax addl $1, %eax movl %eax, -8(%rbp) jmp PRINT_RESULT LEQ_ZERO: movl $0, -8(%rbp) PRINT_RESULT: leaq STRING(%rip), %rdi movl -8(%rbp), %esi movb $0, %al callq _printf … …

slide-87
SLIDE 87

OUTLINED: cmpl $0, -8(%rbp) jle LEQ_ZERO movl -8(%rbp), %eax addl $1, %eax movl %eax, -8(%rbp) jmp PRINT_RESULT LEQ_ZERO: movl $0, -8(%rbp) retq subq $16, %rsp movl $0, -4(%rbp) movl $99, -8(%rbp) callq OUTLINED PRINT_RESULT: leaq STRING(%rip), %rdi movl -8(%rbp), %esi movb $0, %al callq _printf … … jmp PRINT_RESULT

slide-88
SLIDE 88

subq $16, %rsp movl $0, -4(%rbp) movl $99, -8(%rbp) callq OUTLINED PRINT_RESULT: leaq STRING(%rip), %rdi movl -8(%rbp), %esi movb $0, %al callq _printf OUTLINED: cmpl $0, -8(%rbp) jle LEQ_ZERO movl -8(%rbp), %eax addl $1, %eax movl %eax, -8(%rbp) jmp PRINT_RESULT LEQ_ZERO: movl $0, -8(%rbp) retq … …

slide-89
SLIDE 89

Memory Overhead

slide-90
SLIDE 90

Memory Reduction

  • Suffix arrays
  • Sliding window
  • Hierarchical approach
slide-91
SLIDE 91

Results

slide-92
SLIDE 92

Outlining on the LLVM Test Suite (x86-64)

10 20 30 40 enc-3des.test StatementReordering-flt.test Recurrences-flt.test Recurrences-dbl.test StatementReordering-dbl.test NodeSplitting-flt.test Symbolics-flt.test IndirectAddressing-flt.test main.test shootout-cxx-wordfreq.test deriv2.test gcc-loops.test 179.art.test 470.lbm.test sphereflake.test cdecl.test shootout-cxx-hash2.test fftbench.test scimark2.test

Percent Reduction of Text Size

slide-93
SLIDE 93

Outliner-Friendly Programs

  • Heavy macro usage
  • Manually unrolled loops
  • Heavy template usage
  • Automatically generated code
slide-94
SLIDE 94
  • Very small
  • Lots of unsafe cases
  • Unfortunate register allocation

Outliner-Unfriendly Programs

slide-95
SLIDE 95

Future Work

  • Performance impact and outlining
  • ARM outlining
  • IR outlining, pre-register allocation
  • utlining
  • String algorithms and code analysis
slide-96
SLIDE 96

Summary

  • Good preliminary results
  • Potential problems can be avoided
  • Lots in the future for outlining

RFC: http://lists.llvm.org/pipermail/llvm-dev/2016-August/104170.html

slide-97
SLIDE 97

Questions

slide-98
SLIDE 98

References

  • Ukkonen’s algorithm: https://www.cs.helsinki.fi/u/ukkonen/SuffixT1withFigs.pdf
  • Suffix Trees and Suffix Arrays: http://web.cs.iastate.edu/~cs548/suffix.pdf
  • Generalized suffix trees for biological sequence data: applications and

implementation: http://ieeexplore.ieee.org/document/323593/? reload=true&arnumber=323593