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);