Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Fine Slicing: Theory and Applications for Computation Extraction Aharon Abadi,Ran Ettinger,Yishai A. Feldman IBM Research – Haifa.

Similar presentations


Presentation on theme: "1 Fine Slicing: Theory and Applications for Computation Extraction Aharon Abadi,Ran Ettinger,Yishai A. Feldman IBM Research – Haifa."— Presentation transcript:

1 1 Fine Slicing: Theory and Applications for Computation Extraction Aharon Abadi,Ran Ettinger,Yishai A. Feldman IBM Research – Haifa

2 2 Program Slicing Program x := exp Start Slice x := exp Slice The same sequence of values

3 3 Example x := 6 y := 3 f(x,y) x := 9 y : = 2 w : = x*y x := 9 y : = 2 w : = x*y x := 6 y := 3 w : = x*y w := 18 x := 6 y := 2 f(x,y) x := 9 y : = 2 w : = x*y z := w x := 9 y : = 2 w : = x*y z := w w := 18 z := w

4 4 A:Z  0 Control-Flow Path Compression go-to B if-zero-go-to A test X Work in two stages: - Compute the ‘traditional’ slice - Control dependences - Data Dependences - Compute the necessary branches to prevent infeasible control paths test X if-zero-go-to A... L:test Y if-zero-... go-to L B:... B:

5 5 A:Z  0 go-to B if-zero-go-to A test X This algorithm: - preserves behavior - yields a sub-program - one version may turn conditional branches into unconditional ones (“rhetorization”) B:B: go-to B test X... L:test Y if-zero-... go-to L B:... if-zero-go-to A A:Z  0 Control-Flow Path Compression

6 6 Data-Flow Path Compression The result is too large The value of R7 does not depend on the loop R7:=exp1 Out: R0:=R7 + 1 Out: R0:= R7 + 1 Start:R2:=0 R7:=exp1 Loop: R2:=R2 + 1 compare R2, R9 if-not-less-go-to Out use R7 Temp:=R7; spill R7 to memory … ; code that uses ; all registers R7:=Temp; restore R7 go-to Loop Start:R2:=0 R7:=exp1 Loop: R2:=R2 + 1 compare R2, R9 if-not-less-go-to Out Temp:=R7 R7:=Temp go-to Loop Out: R0:=R7 + 1

7 7 Control-Flow Path Compression x<11 FT x:=x+1 goto A4 goto A2 y<T TF y:=y-1 goto A print(x) x<9 TF x:=x-1x:=x+2 goto A2 goto A3 if (x<11) x := x+1 goto A2 A1: if (y<T) y := y–1 goto A1 goto A2 goto A4 x := x-1 A4: if (x<9)goto A3 A3: x := x+2 A2: print(x)

8 8 Compute the ‘Traditional’ Slice x<11 FT x:=x+1 goto A4 goto A2 y<T TF y:=y-1 goto A print(x) x<9 TF x:=x-1x:=x+2 goto A2 goto A3 if (x<11) x := x+1 goto A2 A1: if (y<T) y := y–1 goto A1 goto A2 goto A4 x := x-1 A4: if (x<9)goto A3 A3: x := x+2 print(x) A2: print(x) x:=x+1 x:=x+2 x:=x-1 x<11 x<9 y<T

9 9 Completing Control Flow Paths: Main Lemma precisely identifies the possible sets of branches that may be added to the slice any path in the original program can be chosen optimizations can be performed All paths from the same point in the slice enter the slice at a single point

10 10 Compute the Necessary Branches x<11 FT x:=x+1 goto A4 goto A2 y<T TF y:=y-1 goto A print(x) x<9 TF x:=x-1x:=x+2 goto A2 goto A3 if(x<11) x:=x+1 goto A2 A1: if(y<T) y:=y–1 goto A1 goto A2 goto A4 x:=x-1 A4: if(x<9) goto A3 A3: x:=x+2 A2: print(x)

11 11 Start:R2:=0 R7:=exp1 Loop: R2:=R2 + 1 compare R2, R9 if-not-less-go-to Out use R7 Temp:=R7; spill R7 to ;memory … ; code that uses ;all registers R7:=Temp; restore R7 go-to Loop Out: R0:=R7 + 1 Data-Flow Path Compression R7:=exp1 Out:R0:=R7 + 1 +1 R7:=exp 1 exit R0:=R7+1 R2:=0 R2:=R2+1 compare R2,R9 if-not-less use R7 Temp:=R7 R7:=Temp goto Loop go-to Out

12 12 ++ exp1 Data-Flow Path Compression R7:=exp1 exit R7:=R7+1 R2:=0 R2:=R2+1 compare R2,R9 if-not-less use R7 Temp:=R7 R7:=Temp goto-Loop R7,Temp carry the value of exp1 Use data edges instead of variables go-to Out out data port holds the last value in data port holds the next value d1d1 d2d2 d1d1 Start:R2:=0 R7:=exp1 Loop: R2:=R2 + 1 compare R2, R9 if-not-less-go-to Out use R7 Temp:=R7; spill R7 to ; memory … ; code that uses ; all registers R7:=Temp; restore R7 go-to Loop Out: R0:=R7+1 0 The Plan Calculus: The Programmer’s Apprentice, Rich and Waters, 1990

13 13 exp1 entry 0 exit ++ R7 R0 R9 R2 ++ R2 T F compare R2,R9 R7:= exp1 R0:=R7 + 1 Start:R2:=0 Loop: R2:=R2 + 1 compare R2, R9 if-not-less-go-to Out use R7 Temp:=R7; spill R7 to ; memory … ; code that uses ; all registers R7:=Temp; restore R7 go-to Loop Out: R0:=R7 + 1 R7:=exp1 Out: R0:=R7 + 1 R7:=exp1 if-not-less use R7

14 14 exp1 0 exit ++ R7 R0 R9 R2 ++ R2 T F compare R2,R9 Start:R2:=0 Loop:R2:=R2 + 1 compare R2, R9 if-not-less- use R7 ; spill R7 to ; memory … ; code that uses ; all registers ; restore R7 go-to Loop Out: R0:=R7 + 1 R7:=exp1 if-not-less use R7 Decompression go-to Out Temp:=R7 R7:=Temp R7:=exp1 R0:=R7 + 1 go-to Out entry Out:

15 15 If(q) print(x) If(i>10) + If(q) If(q) goto Skip x := 1 goto Out x := 2Skip: Out : print(x) x := 1 If(i>10) goto Out i := i + 1 goto loop x := 2 If(q) goto Skip print(x) Loop: Skip: Out: print(x) 2 1 goto Skip goto out x := 2 x := 1 0 i x := 2 x := 1 i := 0

16 16 out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); printPicture(out, picture); } out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; I < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); } display(out, start, end, pictures); void display(PrintStream out, int start, int end, Queue pictures) { out.println(" "); for (int i = start; i < end; i++) { printPicture(out,pictures.remove()); } out.println(" "); } Fine Slicing Motivating Example Automatically extracts Out computation (The view model)

17 17 slice (v.): to cut with or as if with a knife Merriam-Webster slice (n.): a thin flat piece cut from something

18 18 Fine Slicing A generalization of traditional program slicing Fine slices can be precisely bounded –Slicing criteria include set of data and control dependences to ignore Fine slices are executable and extractable Complement slices (co-slices) are also fine slices Oracle-based semantics for fine slices Algorithm for computing data-structure representing the oracle

19 19 Extract Computation A new refactoring Extracts a fine slice into contiguous code Computes the co-slice Computation can then be extracted into a separate method using Extract Method Passes necessary “oracle” variables between slice and co-slice Generates new containers if series of values need to be passed

20 20 ++ out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); printPicture(out, picture); } out.println(" "); entry println out * album getPictures size page min + out start end TF < getPicture i out end printPicture out println i " 20 " exit p1p1 p1p1 p2p2 p2p2 Token Semantics

21 21 ++ out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); printPicture(out, picture); } out.println(" "); entry println out * album getPictures size page min + out start end TF < getPicture i out end printPicture out println i " 20 " exit printPicture Fine Slicing

22 22 ++ out.println(" "); for (int i = start; i < end; i++) { printPicture(out, picture); } out.println(" "); entry println out TF < i end printPicture out println i " exit printPicture start picture The Fine Slice p1p1 p2p2 p3p3

23 23 ++ out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); printPicture(out, picture); } out.println(" "); entry println out * album getPictures size page min + out start end TF < getPicture i out end printPicture out println i " 20 " exit printPicture Co-Slicing

24 24 ++ int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); } entry * album getPictures size page min + start end TF < getPicture i end out i 20 exit start picture The Co- Slice

25 25 ++ entry * album getPictures size page min + start end TF < getPicture i end out i 20 exit start picture ++ entry println out TF < end out println i " exit printPicture start picture Fine slice Co-slice out p1p1 p2p2 p3p3 A place for The call

26 26 How do we distinguish between sequence of values and single value? ++ entry println out TF < i end printPicture out println i " exit printPicture start picture Every cycle of control that passes through d in does not pass through d out Therefore d in requires single value

27 27 ++ entry println out TF < i end printPicture out println i " exit printPicture start picture There is a cycle of control that passes through d in and d out Therefore d in may require multiple single value How do we distinguish between sequence of values and single value?

28 28 out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); printPicture(out, picture); } out.println(" "); Adding Container void display(PrintStream out, int start, int end, Picture picture) { out.println(" "); for (int i = start; i < end; i++) { printPicture(out,picture); } out.println(" "); } out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); printPicture(out,pictures.remove()); } out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); printPicture(out,pictures.remove()); } out.println(" "); void display(PrintStream out, int start, int end, Queue pictures) { out.println(" "); for (int i = start; i < end; i++) { printPicture(out,pictures.remove()); } out.println(" "); }

29 29 Adding Container out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); printPicture(out,pictures.remove()); } out.println(" "); void display(PrintStream out, int start, int end, Queue pictures) { out.println(" "); for (int i = start; i < end; i++) { printPicture(out,pictures.remove()); } out.println(" "); } int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; I < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); } display(out, start, end, pictures);

30 30 ++ println < remove printPicture println ++ out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); printPicture(out,pictures.remove()); } out.println(" "); entry println out * album getPictures size page min + out start end TF < getPicture i out end printPicture out println i " 20 " exit new remove add picture pictures picture pictures Adding a Container pictures

31 31 ++ println < remove printPicture println ++ void display(PrintStream out, int start, int end, Queue pictures){ out.println(" "); for (int i = start; i < end; i++) { printPicture(out, pictures.remove()); } out.println(" "); } entry println out start TF < out end printPicture out println i " exit pictures remove entry i out The Fine Slice pictures picture

32 32 ++ println < remove printPicture println ++ entry println out * album getPictures size page min + out start end TF < getPicture i out end printPicture out println i " 20 " exit new remove add out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); printPicture(out,pictures.remove()); } out.println(" "); Program with Container pictures picture

33 33 ++ < int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); } display(out, start, end, pictures); entry * album getPictures size page min + out start end TF < getPicture i end i 20 exit new pictures add display pictures start out The Co- Slice pictures picture

34 34 out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); printPicture(out, picture); } out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); Queue pictures = new LinkedList (); for (int i = start; I < end; i++) { Picture picture = album.getPicture(i); pictures.add(picture); } display(out, start, end, pictures); void display(PrintStream out, int start, int end, Queue pictures) { out.println(" "); for (int i = start; i < end; i++) { printPicture(out,pictures.remove()); } out.println(" "); } Fine Slicing Motivating Example Automatically extracts Out computation (The view model)

35 35 Fine Slicing Algorithm Compute the core slice by following unfiltered data and control dependence relations backwards in the plan. (Semantic Restoration) Add necessary tests to make the slice executable. out.println(" "); int start = page * 20; int end = start + 20; end = Math.min(end, album.getPictures().size()); for (int i = start; i < end; i++) { Picture picture = album.getPicture(i); printPicture(out, picture); } out.println(" ");

36 36 Stat1; if(q){ x = x + 1;; }else{ y = x + 2; } Fine Slicing Algorithm Compute the core slice by following unfiltered data and control dependence relations backwards in the plan. (Semantic Restoration) Add necessary tests to make the slice executable. stat1 ; x = x + 1;; y = x + 2; Stat1; if(q){ x = x + 1;; }else{ y = x + 2; }

37 37 Extract Computation Get as input the program (P) and slicing criteria (SC) Compute the fine slice (FS) corresponding to P and SC Compute the Co-Slice: –Compute fine slice starting from P\FS –Disconnect the return values according to SC Add containers to the fine slice and co-slice Add the call from co-slice to the fine slice


Download ppt "1 Fine Slicing: Theory and Applications for Computation Extraction Aharon Abadi,Ran Ettinger,Yishai A. Feldman IBM Research – Haifa."

Similar presentations


Ads by Google