Ignore:
Timestamp:
Jan 14, 2018, 3:30:04 PM (21 months ago)
Author:
nmedfort
Message:

Potential bug fix for 32-bit

File:
1 edited

Legend:

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

    r5828 r5831  
    4242using TypeId = PabloAST::ClassTypeId;
    4343
    44 inline static unsigned getAlignment(const Value * const type) {
    45     return type->getType()->getPrimitiveSizeInBits() / 8;
     44inline static unsigned getAlignment(const Type * const type) {
     45    return type->getPrimitiveSizeInBits() / 8;
     46}
     47
     48inline static unsigned getAlignment(const Value * const expr) {
     49    return getAlignment(expr->getType());
    4650}
    4751
    4852inline static unsigned getPointerElementAlignment(const Value * const ptr) {
    49     return ptr->getType()->getPointerElementType()->getPrimitiveSizeInBits() / 8;
     53    return getAlignment(ptr->getType()->getPointerElementType());
    5054}
    5155
     
    672676                    lhvStreamIndex = compileExpression(b, cast<Extract>(lh)->getIndex());
    673677                } else {
    674                     baseLhv = compileExpression(b, lh, false);
     678                    baseLhv = compileExpression(b, lh);
    675679                }
    676680
     
    682686                    rhvStreamIndex = compileExpression(b, cast<Extract>(rh)->getIndex());
    683687                } else {
    684                     baseRhv = compileExpression(b, rh, false);
     688                    baseRhv = compileExpression(b, rh);
    685689                }
    686690
     
    688692
    689693                if (LLVM_UNLIKELY(typeId == TypeId::Add || typeId == TypeId::Subtract)) {
    690 
    691 
    692694
    693695                    value = b->CreateAlloca(vTy, b->getInt32(n));
     
    700702                        } else {
    701703                            lhv = getPointerToVar(b, cast<Var>(lh), lhvStreamIndex, index);
    702                             lhv = b->CreateAlignedLoad(lhv, getAlignment(lhv));
     704                            lhv = b->CreateBlockAlignedLoad(lhv);
    703705                        }
    704706                        lhv = b->CreateBitCast(lhv, vTy);
     
    709711                        } else {
    710712                            rhv = getPointerToVar(b, cast<Var>(rh), rhvStreamIndex, index);
    711                             rhv = b->CreateAlignedLoad(rhv, getAlignment(rhv));
     713                            rhv = b->CreateBlockAlignedLoad(rhv);
    712714                        }
    713715                        rhv = b->CreateBitCast(rhv, vTy);
     
    716718                        if (typeId == TypeId::Add) {
    717719                            result = b->CreateAdd(lhv, rhv);
    718                         } else {
     720                        } else { // if (typeId == TypeId::Subtract) {
    719721                            result = b->CreateSub(lhv, rhv);
    720722                        }
    721723                        b->CreateAlignedStore(result, b->CreateGEP(value, {b->getInt32(0), b->getInt32(i)}), getAlignment(result));
    722724                    }
    723 
    724 
    725725
    726726                } else {
     
    735735                        } else {
    736736                            lhv = getPointerToVar(b, cast<Var>(lh), lhvStreamIndex, index);
    737                             lhv = b->CreateAlignedLoad(lhv, getAlignment(lhv));
     737                            lhv = b->CreateBlockAlignedLoad(lhv);
    738738                        }
    739739                        lhv = b->CreateBitCast(lhv, vTy);
     
    744744                        } else {
    745745                            rhv = getPointerToVar(b, cast<Var>(rh), rhvStreamIndex, index);
    746                             rhv = b->CreateAlignedLoad(rhv, getAlignment(rhv));
     746                            rhv = b->CreateBlockAlignedLoad(rhv);
    747747                        }
    748748                        rhv = b->CreateBitCast(rhv, vTy);
     
    764764                            default: llvm_unreachable("invalid vector operator id");
    765765                        }
    766                         Value * const mask = b->CreateBitCast(b->hsimd_signmask(n, comp), fw);
     766                        Value * const mask = b->CreateZExtOrTrunc(b->hsimd_signmask(n, comp), fw);
    767767                        value = b->mvmd_insert(m, value, mask, i);
    768768                    }
Note: See TracChangeset for help on using the changeset viewer.