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

SCM Repository

[smlnj] Diff of /sml/trunk/src/MLRISC/x86/mltree/x86-fp.sml
ViewVC logotype

Diff of /sml/trunk/src/MLRISC/x86/mltree/x86-fp.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 983, Wed Nov 21 18:44:55 2001 UTC revision 984, Wed Nov 21 19:00:08 2001 UTC
# Line 65  Line 65 
65  in  in
66  functor X86FP  functor X86FP
67     (structure X86Instr  : X86INSTR     (structure X86Instr  : X86INSTR
68      structure X86Props  : INSN_PROPERTIES where I = X86Instr      structure X86Props  : INSN_PROPERTIES
69      structure Flowgraph : CONTROL_FLOW_GRAPH where I = X86Instr                                where I = X86Instr
70      structure Liveness  : LIVENESS where CFG = Flowgraph      structure Flowgraph : CONTROL_FLOW_GRAPH
71      structure Asm       : INSTRUCTION_EMITTER where I = X86Instr and P = Flowgraph.P                                where I = X86Instr
72        structure Liveness  : LIVENESS
73                                  where CFG = Flowgraph
74        structure Asm       : INSTRUCTION_EMITTER
75                                  where I = X86Instr
76                                    and S.P = Flowgraph.P
77     ) : CFG_OPTIMIZATION =     ) : CFG_OPTIMIZATION =
78  struct  struct
79     structure CFG = Flowgraph     structure CFG = Flowgraph
# Line 79  Line 84 
84     structure C  = I.C     structure C  = I.C
85     structure A  = Array     structure A  = Array
86     structure L  = Label     structure L  = Label
    structure LE = I.LabelExp  
87     structure An = Annotations     structure An = Annotations
88     structure CB = CellsBasis     structure CB = CellsBasis
89     structure SL = CB.SortedCells     structure SL = CB.SortedCells
# Line 782  Line 786 
786              *)              *)
787             fun find([], _, best) = best             fun find([], _, best) = best
788               | find((source, _, _)::edges, highestFreq, best) =               | find((source, _, _)::edges, highestFreq, best) =
789                 let val CFG.BLOCK{freq, data, ...} = #node_info cfg source                 let val CFG.BLOCK{freq, ...} = #node_info cfg source
790                 in  case A.sub(bindingsOut, source) of                 in  case A.sub(bindingsOut, source) of
791                        NONE => find(edges, highestFreq, best)                        NONE => find(edges, highestFreq, best)
792                      | this as SOME stack =>                      | this as SOME stack =>
793                        if source = b-1 andalso List.null(!data)                        if source = b-1
794                        then (* falls into b *)                        then this (* falls into b *)
795                           this                        else if highestFreq < !freq then find(edges, !freq, this)
796                        else if highestFreq < !freq then                          else find(edges, highestFreq, best)
                          find(edges, !freq, this)  
                       else  
                          find(edges, highestFreq, best)  
797                 end                 end
798    
799             fun splitAllDoneEdges [] = ()             fun splitAllDoneEdges [] = ()
# Line 1119  Line 1120 
1120                             CFG.BLOCK{id=n,                             CFG.BLOCK{id=n,
1121                                       kind=CFG.NORMAL,                                       kind=CFG.NORMAL,
1122                                       freq=ref 0, (* XXX Wrong frequency! *)                                       freq=ref 0, (* XXX Wrong frequency! *)
                                      data=ref [],  
1123                                       labels=ref [label],                                       labels=ref [label],
1124                                       insns=ref code,                                       insns=ref code,
1125                                       annotations=ref comment                                       annotations=ref comment,
1126                                         align=ref NONE
1127                                      }                                      }
1128    
1129                         (*                         (*
# Line 1153  Line 1154 
1154                  *)                  *)
1155                 fun renumber(n, [], repairCode') =  transRepair(n, repairCode')                 fun renumber(n, [], repairCode') =  transRepair(n, repairCode')
1156                   | renumber(n, (blknum, block as                   | renumber(n, (blknum, block as
1157                                   CFG.BLOCK{kind,annotations,insns,freq,                                   CFG.BLOCK{kind,annotations,insns,freq,align,labels, ...})::rest,
                                            data, labels, ...})::rest,  
1158                             repairCode') =                             repairCode') =
1159                     let (* If we have outstanding repair code and this is                     let (* If we have outstanding repair code and this is
1160                          * NOT a fallsthru entry, then insert them here.                          * NOT a fallsthru entry, then insert them here.
# Line 1175  Line 1175 
1175                         val this = CFG.BLOCK{id=n,                         val this = CFG.BLOCK{id=n,
1176                                              kind=kind,                                              kind=kind,
1177                                              freq=freq,                                              freq=freq,
1178                                              data=data,                                              align=align,
1179                                              labels=labels,                                              labels=labels,
1180                                              insns=insns,                                              insns=insns,
1181                                              annotations=annotations                                              annotations=annotations

Legend:
Removed from v.983  
changed lines
  Added in v.984

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