Edit

kc3-lang/angle/src/compiler/ForLoopUnroll.h

Branch :

  • Show log

    Commit

  • Author : zmo@google.com
    Date : 2011-08-17 19:39:58
    Hash : 0c6bb7a6
    Message : Add an compile option to unroll for-loops with integer indices. ANGLEBUG=193 TEST=with this option, for-loops with integer indices will be unrolled. Review URL: http://codereview.appspot.com/4899047 git-svn-id: https://angleproject.googlecode.com/svn/trunk@734 736b8ea6-26fd-11df-bfd4-992fa37f6226

  • src/compiler/ForLoopUnroll.h
  • //
    // Copyright (c) 2011 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #include "compiler/intermediate.h"
    
    struct TLoopIndexInfo {
        int id;
        int initValue;
        int stopValue;
        int incrementValue;
        TOperator op;
        int currentValue;
    };
    
    class ForLoopUnroll {
    public:
        ForLoopUnroll() { }
    
        void FillLoopIndexInfo(TIntermLoop* node, TLoopIndexInfo& info);
    
        // Update the info.currentValue for the next loop iteration.
        void Step();
    
        // Return false if loop condition is no longer satisfied.
        bool SatisfiesLoopCondition();
    
        // Check if the symbol is the index of a loop that's unrolled.
        bool NeedsToReplaceSymbolWithValue(TIntermSymbol* symbol);
    
        // Return the current value of a given loop index symbol.
        int GetLoopIndexValue(TIntermSymbol* symbol);
    
        void Push(TLoopIndexInfo& info);
        void Pop();
    
        static void MarkForLoopsWithIntegerIndicesForUnrolling(TIntermNode* root);
    
    private:
        int getLoopIncrement(TIntermLoop* node);
    
        int evaluateIntConstant(TIntermConstantUnion* node);
    
        TVector<TLoopIndexInfo> mLoopIndexStack;
    };