Optimize.xcc
Benoit Dupont de Dinechin (Benoit.Dupont-de-Dinechin@st.com).
Copyright 2002 - 2007 STMicroelectronics. Copyright 1995 - 1998 Commissariat a l'Energie Atomique.
This program is free software; you can redistribute it and/or modify it under the terms of either (at your option): the GNU General Public License (GPL) version 2; the GNU Lesser General Public License (LGPL) version 2.1; any later version of these licences as published by the Free Software Foundation.
OptimizeActivation— Activation of LAO phases.
typedef enum { OptimizeActivation_Encode = 0x1, // Encoding of instructions. OptimizeActivation_PostPass = 0x2, // Post-pass optimizations. OptimizeActivation_RegAlloc = 0x4, // Register allocation OptimizeActivation_PrePass = 0x8, // Pre-pass optimizations. } enum_OptimizeActivation; typedef uint8_t OptimizeActivation; #define OptimizeActivation_default ( \ 0 )
OptimizeRegionType— enumerates the OptimizeRegionType types.
typedef enum { OptimizeRegionType_SuperBlock = 0x1, // Superblock region. OptimizeRegionType_TraceBlock = 0x2, // TraceBlock region. OptimizeRegionType_HyperBlock = 0x4, // Hyperblock region. OptimizeRegionType_InnerLoop = 0x8, // Inner loop region. } enum_OptimizeRegionType; typedef uint8_t OptimizeRegionType; #define OptimizeRegionType_default ( \ OptimizeRegionType_SuperBlock | \ 0 )
OptimizeProfiling— Enumeration of the code profiling levels.
typedef enum { OptimizeProfiling_Static = 0x1, // Static profiling OptimizeProfiling_Edge = 0x2, // Dynamic edge profiling. OptimizeProfiling_Path = 0x4, // Dynamic path profiling. } enum_OptimizeProfiling; typedef uint8_t OptimizeProfiling; #define OptimizeProfiling_default ( \ 0 )
OptimizeScheduling— Enumeration of the pre- and post-scheduler levels.
typedef enum { OptimizeScheduling_None, // No scheduling. OptimizeScheduling_Unwinding, // Unwinding modulo scheduling. OptimizeScheduling_Insertion, // Insertion modulo scheduling. OptimizeScheduling_Iterative, // Iterative modulo scheduling. OptimizeScheduling__ } enum_OptimizeScheduling; typedef uint8_t OptimizeScheduling; #define OptimizeScheduling_default ( \ OptimizeScheduling_Insertion | \ 0 )
OptimizeAllocation— Enumeration of the register allocation types.
typedef enum { OptimizeAllocation_ELinearScan = 0x1, // Linear Scan of Sarkar & Barik. OptimizeAllocation_DomTreeScan = 0x2, // Tree Scan of Rastello et al. OptimizeAllocation_GraphColoring = 0x4, // Some Graph Coloring allocator. } enum_OptimizeAllocation; typedef uint8_t OptimizeAllocation; #define OptimizeAllocation_default ( \ 0 )
OptimizeConversion— SSA form conversion flags.
typedef enum { OptimizeConversion_Folding = 0x1, // Copy Folding during SSA construction. OptimizeConversion_Cleaning = 0x2, // Code Cleaning during SSA construction. OptimizeConversion_SemiPruned = 0x4, // Semi-pruned improved SSA construction. OptimizeConversion_SigmaGoTo = 0x8, // Sigma operations for the GoTo conditions. OptimizeConversion_Dedicated = 0x10, // Associate Variable(s) to Dedicated. } enum_OptimizeConversion; typedef uint8_t OptimizeConversion; #define OptimizeConversion_default ( \ OptimizeConversion_Folding | \ OptimizeConversion_Cleaning | \ OptimizeConversion_SemiPruned | \ 0 )
OptimizeCoalescing— SSA form coalescing flags.
typedef enum { OptimizeCoalescing_Sreedhar = 0x1, // Sreedhar CSSA conversion. OptimizeCoalescing_Boissinot = 0x2, // Boissinot CSSA conversion. OptimizeCoalescing_Decoalesce = 0x4, // Decoalesce the SSA-webs (Budimlic). OptimizeCoalescing_Virtualize = 0x8, // Virtualize COPY insertion (Method III). OptimizeCoalescing_Congruence = 0x10, // Congruence-based coalescing. OptimizeCoalescing_SeqCopies = 0x20, // Use sequential copies (parallel by default). } enum_OptimizeCoalescing; typedef uint8_t OptimizeCoalescing; #define OptimizeCoalescing_default ( \ OptimizeCoalescing_Sreedhar | \ OptimizeCoalescing_Virtualize | \ OptimizeCoalescing_Congruence | \ 0 )
OptimizeNumbering— Value Numbering flags.
typedef enum { OptimizeNumbering_Basic = 0x1, // Basic value numbering. OptimizeNumbering_SCCVN = 0x2, // Simpson's SCCVN improved by Cooper. OptimizeNumbering_Avail = 0x4, // AVAIL-based removal (else use Dominance). } enum_OptimizeNumbering; typedef uint8_t OptimizeNumbering;
OptimizePropagation— Data-flow facts Propagation flags.
typedef enum { OptimizePropagation_Constant = 0x1, // Sparse conditional constant propagation. } enum_OptimizePropagation; typedef uint8_t OptimizePropagation;
OptimizePredication— Code Predication level.
typedef enum { OptimizePredication_None, // Disable code predication. OptimizePredication_Select, // Select-only code predication. OptimizePredication__ } enum_OptimizePredication; typedef uint8_t OptimizePredication;
OptimizeRCMSSolving— Enumerate the RCMSSolving flags.
typedef enum { OptimizeRCMSSolving_Dinechin = 0x1, // Formulation of Dinechin. OptimizeRCMSSolving_LNSScan1 = 0x2, // LSB of LNS scanning value. OptimizeRCMSSolving_LNSScan2 = 0x4, // MSB of LNS scanning value. OptimizeRCMSSolving_EicDavAb = 0x8, // Formulation of Eichenberger et al. OptimizeRCMSSolving_AggrDeps = 0x10, // Use aggregated dependences. OptimizeRCMSSolving_Rational = 0x20, // Allow rational solution. OptimizeRCMSSolving_PostPass = 0x40, // Apply to postpass problems. OptimizeRCMSSolving_Acyclic = 0x80, // Apply to acyclic problems. } enum_OptimizeRCMSSolving; typedef uint8_t OptimizeRCMSSolving; #define OptimizeRCMSSolving_default ( \ 0 )
OptimizeRCMSProblem— RCMS problem description.
typedef enum { OptimizeRCMSProblem_Regular = 0x1, // Pass regular nodes and arcs. OptimizeRCMSProblem_Overlap = 0x2, // Pass pipeline overlap-limiting arc. OptimizeRCMSProblem_Lifetime = 0x4, // Pass lifetine nodes and arcs. OptimizeRCMSProblem_Renaming = 0x8, // Pass modulo renaming-limiting arcs. OptimizeRCMSProblem_Margins = 0x10, // Pass margin-enforcing arcs. } enum_OptimizeRCMSProblem; typedef uint8_t OptimizeRCMSProblem; #define OptimizeRCMSProblem_default ( \ 0 )
OptimizeLogTimeOut— Enumerate the LogTimeOut flags.
typedef enum { OptimizeLogTimeOut_Times2 = 0x1, // TimeOut *= 2. OptimizeLogTimeOut_Times4 = 0x2, // TimeOut *= 4. OptimizeLogTimeOut_Times16 = 0x4, // TimeOut *= 16. OptimizeLogTimeOut_Times256 = 0x8, // TimeOut *= 256. } enum_OptimizeLogTimeOut; typedef uint8_t OptimizeLogTimeOut; #define OptimizeLogTimeOut_default ( \ 0 )
OptimizeScoreboarding— Scoreboarder scheduling levels.
typedef enum { OptimizeScoreboarding_Fixup = 0x1, // Fixup pass over the BasicBlock(s). OptimizeScoreboarding_Iterate = 0x2, // Iterate forward data-flow problem. OptimizeScoreboarding_Priority = 0x4, // Pre-order Operation(s) by priority. } enum_OptimizeScoreboarding; typedef uint8_t OptimizeScoreboarding; #define OptimizeScoreboarding_default ( \ OptimizeScoreboarding_Iterate | \ 0 )
OptimizeItem— Enumerate the Optimize items.
Each OptimizeItem maps to a set of flags.
typedef enum { OptimizeItem_Activation, // See OptimizeActivation. OptimizeItem_LogMaxBBOC, // Log2 of max BasicBlock Operation count. OptimizeItem_Convention, // Calling Convention in use. OptimizeItem_Profiling, // See OptimizeProfiling. OptimizeItem_RegionType, // See OptimizeRegionType. OptimizeItem_Conversion, // See OptimizeConversion. OptimizeItem_Coalescing, // See OptimizeCoalescing. OptimizeItem_Numbering, // See OptimizeNumbering. OptimizeItem_Propagation, // See OptimizePropagation. OptimizeItem_Predication, // See OptimizePredication. OptimizeItem_Scheduling, // See OptimizeScheduling. OptimizeItem_Allocation, // See OptimizeAllocation. OptimizeItem_RCMSSolving, // See OptimizeRCMSSolving. OptimizeItem_RCMSProblem, // See OptimizeRCMSProblem. OptimizeItem_LogTimeOut, // See OptimizeLogTimeOut. OptimizeItem_Scoreboarding, // See OptimizeScoreboarding. OptimizeItem_WindowSize, // Scoreboard window size OptimizeItem_PrePadding, // See OptimizePrePadding. OptimizeItem_PostPadding, // See OptimizePostPadding. OptimizeItem__ } enum_OptimizeItem; typedef uint8_t OptimizeItem; extern const char * OptimizeItem_name_(OptimizeItem this);
Optimize— Array of OptimizeItem values.
struct Optimize_ { //@args OptimizeFlags ITEMS[OptimizeItem__]; //@access ACTIVATION (*Optimize__ACTIVATION(this) + 0) //@mutate ACTIVATION (Optimize_ITEMS(this) + OptimizeItem_Activation) //@access LOGMAXBBOC (*Optimize__LOGMAXBBOC(this) + 0) //@mutate LOGMAXBBOC (Optimize_ITEMS(this) + OptimizeItem_LogMaxBBOC) //@access CONVENTION (*Optimize__CONVENTION(this) + 0) //@mutate CONVENTION (Optimize_ITEMS(this) + OptimizeItem_Convention) //@access PROFILING (*Optimize__PROFILING(this) + 0) //@mutate PROFILING (Optimize_ITEMS(this) + OptimizeItem_Profiling) //@access REGIONTYPE (*Optimize__REGIONTYPE(this) + 0) //@mutate REGIONTYPE (Optimize_ITEMS(this) + OptimizeItem_RegionType) //@access CONVERSION (*Optimize__CONVERSION(this) + 0) //@mutate CONVERSION (Optimize_ITEMS(this) + OptimizeItem_Conversion) //@access COALESCING (*Optimize__COALESCING(this) + 0) //@mutate COALESCING (Optimize_ITEMS(this) + OptimizeItem_Coalescing) //@access NUMBERING (*Optimize__NUMBERING(this) + 0) //@mutate NUMBERING (Optimize_ITEMS(this) + OptimizeItem_Numbering) //@access PROPAGATION (*Optimize__PROPAGATION(this) + 0) //@mutate PROPAGATION (Optimize_ITEMS(this) + OptimizeItem_Propagation) //@access PREDICATION (*Optimize__PREDICATION(this) + 0) //@mutate PREDICATION (Optimize_ITEMS(this) + OptimizeItem_Predication) //@access SCHEDULING (*Optimize__SCHEDULING(this) + 0) //@mutate SCHEDULING (Optimize_ITEMS(this) + OptimizeItem_Scheduling) //@access ALLOCATION (*Optimize__ALLOCATION(this) + 0) //@mutate ALLOCATION (Optimize_ITEMS(this) + OptimizeItem_Allocation) //@access RCMSSOLVING (*Optimize__RCMSSOLVING(this) + 0) //@mutate RCMSSOLVING (Optimize_ITEMS(this) + OptimizeItem_RCMSSolving) //@access RCMSPROBLEM (*Optimize__RCMSPROBLEM(this) + 0) //@mutate RCMSPROBLEM (Optimize_ITEMS(this) + OptimizeItem_RCMSProblem) //@access LOGTIMEOUT (*Optimize__LOGTIMEOUT(this) + 0) //@mutate LOGTIMEOUT (Optimize_ITEMS(this) + OptimizeItem_LogTimeOut) //@access SCOREBOARDING (*Optimize__SCOREBOARDING(this) + 0) //@mutate SCOREBOARDING (Optimize_ITEMS(this) + OptimizeItem_Scoreboarding) //@access WINDOWSIZE (*Optimize__WINDOWSIZE(this) + 0) //@mutate WINDOWSIZE (Optimize_ITEMS(this) + OptimizeItem_WindowSize) //@access PREPADDING (*Optimize__PREPADDING(this) + 0) //@mutate PREPADDING (Optimize_ITEMS(this) + OptimizeItem_PrePadding) //@access POSTPADDING (*Optimize__POSTPADDING(this) + 0) //@mutate POSTPADDING (Optimize_ITEMS(this) + OptimizeItem_PostPadding) };
Optimize_pretty— Print this Optimize item values.
bool Optimize_pretty(Optimize this, FILE *file);
Optimize_loadVA— Load this Optimize from a va_list.
void Optimize_loadVA(Optimize this, int item, va_list va);
Optimize_load— Load this Optimize from variable arguments.
void Optimize_load(Optimize this, OptimizeItem item, ...);
Optimize_print— Print this Optimize item values.
bool Optimize_print(Optimize this, FILE *file);