Ignore:
Timestamp:
Nov 6, 2016, 8:37:11 PM (3 years ago)
Author:
nmedfort
Message:

Initial work on adding types to PabloAST and mutable Var objects.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/UCD/ucd_compiler.cpp

    r5160 r5202  
    184184            generateRange(inner, range.first, range.second, inner_block);
    185185
    186             std::vector<Assign *> targets;
    187186            for (auto ti = intersectingTargets.begin(); ti != intersectingTargets.end(); ) {
    188187                auto f = mTargetMap.find(ti->first);
     
    192191                    continue;
    193192                }
    194                 Assign * escapedValue = inner_block.createAssign("m", f->second);
    195                 targets.push_back(escapedValue);
    196                 f->second = escapedValue;
     193                Var * m = builder.createVar("m", builder.createZeroes());
     194                inner_block.createAssign(m, f->second);
     195                f->second = m;
    197196                ++ti;
    198197            }
    199 
    200198            // If this range is empty, just skip creating the if block
    201             if (!targets.empty()) {
    202                 builder.createIf(ifTestCompiler(range.first, range.second, builder), std::move(targets), inner_block);
     199            if (intersectingTargets.size() > 0) {
     200                builder.createIf(ifTestCompiler(range.first, range.second, builder), inner_block);
    203201                for (const auto ti : intersectingTargets) {
    204202                    auto f = mTargetMap.find(ti.first);
    205203                    assert (f != mTargetMap.end());
    206                     assert (isa<Assign>(f->second));
    207204                    f->second = builder.createOr(ti.second, f->second);
    208205                }
     
    271268                const auto lo_byte = encodingByte(lo, byte_no, isUTF_16);
    272269                const auto hi_byte = encodingByte(hi, byte_no, isUTF_16);
    273                 if (lo_byte != hi_byte) {
    274                     unsigned num = isUTF_16 ? 10 : 6;
     270                if (lo_byte != hi_byte) {
     271                    unsigned num = isUTF_16 ? 10 : 6;
    275272                    if (!isLowCodePointAfterByte(lo, byte_no, isUTF_16)) {
    276273                        const codepoint_t mid = lo | ((1 << (num * (min - byte_no))) - 1);
     
    291288                        target = builder.createOr(target, var);
    292289                    }
    293                 }
    294                 else { // lbyte == hbyte
     290                } else { // lbyte == hbyte
    295291                    PabloAST * var = mCharacterClassCompiler.compileCC(makeCC(lo_byte, hi_byte), builder);
    296292                    if (byte_no > 1) {
     
    541537            std::string name = t.first->getName();
    542538            if (Statement * result = dyn_cast<Statement>(f->second)) {
    543                 result->setName(entry.getName(name, false));
     539                result->setName(entry.getName(name));
    544540                t.second = result;
    545541            } else {
    546                 t.second = entry.createAssign(std::move(name), f->second);
     542                Var * var = entry.createVar(name);
     543                entry.createAssign(var, f->second);
     544                t.second = var;
    547545            }
    548546        }
Note: See TracChangeset for help on using the changeset viewer.