Ignore:
Timestamp:
Oct 15, 2014, 10:07:10 AM (5 years ago)
Author:
nmedfort
Message:

Intergrated Meng's uadd with overflow patch; untested for now. Minor misc changes to Pablo Compiler.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/pablo_compiler.h

    r4237 r4240  
    88#define PABLO_COMPILER_H
    99
    10 //define this indicates that we use llvm.uadd.with.overflow for genAddWithCarry
     10//indicates that we use llvm.uadd.with.overflow.carryin for genAddWithCarry
    1111//#define USE_UADD_OVERFLOW
    1212
     
    1515#include <pablo/pe_pabloe.h>
    1616#include "unicode_categories.h"
    17 //#include "unicode_categories-flat.h"
    18 //#include "unicode_categories-simple.h"
    1917#include <iostream>
    2018#include <string>
     
    6765#include <llvm/IR/IRBuilder.h>
    6866
    69 #include "include/simd-lib/bitblock.hpp"
    70 
    7167using namespace llvm;
    7268
     
    7975};
    8076
    81 struct SumWithOverflowPack {
    82   Value *sum;
    83   Value *obit;
    84 };
    85 
    8677class PabloCompiler {
     78    #ifdef USE_UADD_OVERFLOW
     79    struct SumWithOverflowPack {
     80        Value * sum;
     81        Value * obit;
     82    };
     83    #endif
    8784public:
    8885    PabloCompiler(std::map<std::string, std::string> name_map, std::string basis_pattern, int bits);
    8986    ~PabloCompiler();
    90 
    91 
    9287    LLVM_Gen_RetVal compile(const PabloBlock & cg_state);
    9388private:
     
    10095    void SetReturnMarker(Value * marker, const unsigned output_idx);
    10196
    102     Value * GetMarker(const std::string & name);
     97    Value* GetMarker(const std::string & name);
    10398
    104     Value * compileStatements(const ExpressionList & stmts);
    105     Value * compileStatement(PabloE *stmt);
     99    Value* compileStatements(const ExpressionList & stmts);
     100    Value* compileStatement(const PabloE * stmt);
    106101
    107     Value* compileExpression(PabloE * expr);
     102    Value* compileExpression(const PabloE * expr);
    108103    Value* genCarryInLoad(Value* ptr_carry_q, int carryq_idx);
    109104    Value* genCarryOutStore(Value* carryout, Value* ptr_carry_q, int carryq_idx);
     
    115110    Value* genNot(Value* e, const Twine &namehint = "");
    116111
    117     SumWithOverflowPack callUaddOverflow(Value *e1, Value *e2);
     112    #ifdef USE_UADD_OVERFLOW
     113    SumWithOverflowPack callUaddOverflow(Value *e1, Value *e2, Value *cin);
     114    #endif
    118115
    119116    std::map<std::string, Value*>       mCalleeMap;
     
    125122    std::string                         mBasisBitPattern;
    126123
    127 
    128 
    129     Module*                             mMod;
     124    Module* const                       mMod;
    130125    BasicBlock*                         mBasicBlock;
    131126    ExecutionEngine*                    mExecutionEngine;
    132127
    133     VectorType*                         mXi64Vect;
    134 
    135     VectorType*                         mXi128Vect;
    136 
     128    VectorType* const                   mXi64Vect;
     129    VectorType* const                   mXi128Vect;
    137130    PointerType*                        mBasisBitsInputPtr;
    138131    PointerType*                        mOutputPtr;
     
    143136    int                                 mCarryQueueSize;
    144137
    145     ConstantInt*                        mConst_int64_neg1;
    146     ConstantAggregateZero*              mZeroInitializer;
    147     Constant*                           mAllOneInitializer;
     138    ConstantAggregateZero* const        mZeroInitializer;
     139    Constant* const                     mAllOneInitializer;
    148140
    149141    FunctionType*                       mFuncTy_0;
Note: See TracChangeset for help on using the changeset viewer.