at.dms.kjc.sir.lowering.fusion
Class FusePipelines

java.lang.Object
  extended by at.dms.kjc.sir.lowering.fusion.FusePipelines

public class FusePipelines
extends Object

This class fuses sub-segments of pipelines with various characteristics. Part of the motivation of this class was to increase the granularity of stateless regions so that they can be more effectively fissed for parallel execution. To simplify things, it only fuses stateless neighbors in pipelines. The output of the fusion should also be stateless. If an entire pipeline is fused, then it may be fused further with neighbors in a higher-level pipeline.


Constructor Summary
FusePipelines()
           
 
Method Summary
static SIRStream fusePipelinesOfFilters(SIRStream str)
          Fuses all adjacent filters whos parent is a pipeline.
static SIRStream fusePipelinesOfStatelessFilters(SIRStream str)
          Fuses any two adjacent FILTERS in 'str' so long as: - the shared parent of the filter is a pipeline - the result of fusion will be stateless If a complete pipeline is fused, then it is treated as a single filter in considering fusion within the pipeline's parent.
static SIRStream fusePipelinesOfStatelessStreams(SIRStream str)
          Fuses any two adjacent STREAMS in 'str' so long as: - the shared parent of the filter is a pipeline - the result of fusion will be stateless If a complete pipeline is fused, then it is treated as a single filter in considering fusion within the pipeline's parent.
static SIRStream fusePipelinesOfVectorizableFilters(SIRStream str)
          Fuses any two adjacent FILTERS in 'str' so long as: - the shared parent of the filter is a pipeline - the result of fusion will be naively vectorizable.
static SIRStream fusePipelinesOfVectorizableStreams(SIRStream str)
          Fuses any two adjacent STREAMS in 'str' so long as: - the shared parent of the filter is a pipeline - the result of fusion will be naively vectorizable.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FusePipelines

public FusePipelines()
Method Detail

fusePipelinesOfFilters

public static SIRStream fusePipelinesOfFilters(SIRStream str)
Fuses all adjacent filters whos parent is a pipeline. If a complete pipeline is fused, then it is treated as a single filter in considering fusion within the pipeline's parent.

Parameters:
str - input stream to fuse, may be modified by this method.
Returns:
stream with fusion having taken place

fusePipelinesOfStatelessFilters

public static SIRStream fusePipelinesOfStatelessFilters(SIRStream str)
Fuses any two adjacent FILTERS in 'str' so long as: - the shared parent of the filter is a pipeline - the result of fusion will be stateless If a complete pipeline is fused, then it is treated as a single filter in considering fusion within the pipeline's parent.

Parameters:
str - input stream to fuse, may be modified by this method.
Returns:
stream with fusion having taken place

fusePipelinesOfStatelessStreams

public static SIRStream fusePipelinesOfStatelessStreams(SIRStream str)
Fuses any two adjacent STREAMS in 'str' so long as: - the shared parent of the filter is a pipeline - the result of fusion will be stateless If a complete pipeline is fused, then it is treated as a single filter in considering fusion within the pipeline's parent.

Parameters:
str - input stream to fuse, may be modified by this method.
Returns:
stream with fusion having taken place

fusePipelinesOfVectorizableFilters

public static SIRStream fusePipelinesOfVectorizableFilters(SIRStream str)
Fuses any two adjacent FILTERS in 'str' so long as: - the shared parent of the filter is a pipeline - the result of fusion will be naively vectorizable. If a complete pipeline is fused, then it is treated as a single filter in considering fusion within the pipeline's parent.

Parameters:
str - input stream to fuse, may be modified by this method.
Returns:
stream with fusion having taken place

fusePipelinesOfVectorizableStreams

public static SIRStream fusePipelinesOfVectorizableStreams(SIRStream str)
Fuses any two adjacent STREAMS in 'str' so long as: - the shared parent of the filter is a pipeline - the result of fusion will be naively vectorizable. If a complete pipeline is fused, then it is treated as a single filter in considering fusion within the pipeline's parent.

Parameters:
str - input stream to fuse, may be modified by this method.
Returns:
stream with fusion having taken place