Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/MLRISC/mlrisc/flowgraph.sml
ViewVC logotype

Annotation of /sml/trunk/src/MLRISC/mlrisc/flowgraph.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 93 - (view) (download)
Original Path: sml/branches/SMLNJ/src/MLRISC/mlrisc/flowgraph.sml

1 : monnier 16 (* flowgraph.sml
2 :     *
3 :     * COPYRIGHT (c) 1995 AT&T Bell Laboratories.
4 :     *
5 :     * Defines the flowgraph data structure used as the intermediate program
6 :     * representation.
7 :     *
8 :     *)
9 :    
10 :     signature FLOWGRAPH = sig
11 :    
12 :     structure C : CELLS
13 :     structure I : INSTRUCTIONS
14 :     structure P : PSEUDO_OPS
15 :     sharing I.C = C
16 :    
17 :    
18 :     datatype block =
19 :     PSEUDO of P.pseudo_op
20 :     | LABEL of Label.label
21 :     | BBLOCK of { blknum : int,
22 :     liveIn : C.cellset ref,
23 :     liveOut : C.cellset ref,
24 :     succ : block list ref,
25 :     pred : block list ref,
26 :     insns : I.instruction list ref
27 :     }
28 :     | ENTRY of {blknum : int,
29 :     succ : block list ref}
30 :     | EXIT of {blknum : int,
31 :     pred : block list ref}
32 :     | ORDERED of block list
33 :    
34 :     datatype cluster =
35 :     CLUSTER of {
36 :     blocks: block list,
37 :     entry : block,
38 :     exit : block,
39 :     regmap: int Intmap.intmap,
40 :     blkCounter : int ref
41 :     }
42 :    
43 :     val prBlock : block -> unit
44 :     end
45 :    
46 :    
47 :     (* Create the flowgraph data structure specialized towards
48 :     * a specific type of cells and instructions.
49 :     *)
50 :     functor FlowGraph(structure I : INSTRUCTIONS
51 :     structure P : PSEUDO_OPS) : FLOWGRAPH =
52 :     struct
53 :     structure I = I
54 :     structure C = I.C
55 :     structure P = P
56 :    
57 :     datatype block =
58 :     PSEUDO of P.pseudo_op
59 :     | LABEL of Label.label
60 :     | BBLOCK of { blknum : int,
61 :     liveIn : C.cellset ref,
62 :     liveOut : C.cellset ref,
63 :     succ : block list ref,
64 :     pred : block list ref,
65 :     insns : I.instruction list ref
66 :     }
67 :     | ENTRY of {blknum : int,
68 :     succ : block list ref}
69 :     | EXIT of {blknum : int,
70 :     pred : block list ref}
71 :     | ORDERED of block list
72 :    
73 :     datatype cluster =
74 :     CLUSTER of {
75 :     blocks: block list,
76 :     entry : block,
77 :     exit : block,
78 :     regmap: int Intmap.intmap,
79 :     blkCounter : int ref
80 :     }
81 :    
82 :     fun prBlock(PSEUDO pOp) = print (P.toString pOp)
83 :     | prBlock(LABEL lab) = print ("LABEL " ^ Label.nameOf lab ^ "\n")
84 :     | prBlock(BBLOCK{blknum,succ,pred,liveOut,liveIn,...}) = let
85 :    
86 :     fun prBlkList [] = print "\n"
87 :     | prBlkList (BBLOCK{blknum, ...}::blocks) =
88 :     (print (Int.toString blknum ^ ","); prBlkList blocks)
89 :    
90 :     fun prCells cells =
91 :     (print (C.cellset2string cells);
92 :     print "\n")
93 :     in
94 :     print("BLOCK" ^ Int.toString blknum ^ "\n");
95 :     print("\t liveIn: "); prCells(!liveIn);
96 :     print("\t succ: "); prBlkList(!succ);
97 :     print("\t pred: "); prBlkList(!pred);
98 :     print("\t liveOut: "); prCells(!liveOut)
99 :     end
100 :     | prBlock(ORDERED blks) = app prBlock blks
101 :     end
102 :    
103 :    
104 :    
105 :    
106 :     (*
107 :     * $Log: flowgraph.sml,v $
108 : monnier 93 * Revision 1.1.1.1 1998/04/08 18:39:02 george
109 :     * Version 110.5
110 : monnier 16 *
111 :     *)

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0