当前位置: 首页>>代码示例>>C++>>正文


C++ SmallVectorImpl::begin方法代码示例

本文整理汇总了C++中SmallVectorImpl::begin方法的典型用法代码示例。如果您正苦于以下问题:C++ SmallVectorImpl::begin方法的具体用法?C++ SmallVectorImpl::begin怎么用?C++ SmallVectorImpl::begin使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在SmallVectorImpl的用法示例。


在下文中一共展示了SmallVectorImpl::begin方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: lookupFilename

StringRef HeaderMap::lookupFilename(StringRef Filename,
                                    SmallVectorImpl<char> &DestPath) const {
  const HMapHeader &Hdr = getHeader();
  unsigned NumBuckets = getEndianAdjustedWord(Hdr.NumBuckets);

  // If the number of buckets is not a power of two, the headermap is corrupt.
  // Don't probe infinitely.
  if (NumBuckets & (NumBuckets-1))
    return StringRef();

  // Linearly probe the hash table.
  for (unsigned Bucket = HashHMapKey(Filename);; ++Bucket) {
    HMapBucket B = getBucket(Bucket & (NumBuckets-1));
    if (B.Key == HMAP_EmptyBucketKey) return StringRef(); // Hash miss.

    // See if the key matches.  If not, probe on.
    if (!Filename.equals_lower(getString(B.Key)))
      continue;

    // If so, we have a match in the hash table.  Construct the destination
    // path.
    StringRef Prefix = getString(B.Prefix);
    StringRef Suffix = getString(B.Suffix);
    DestPath.clear();
    DestPath.append(Prefix.begin(), Prefix.end());
    DestPath.append(Suffix.begin(), Suffix.end());
    return StringRef(DestPath.begin(), DestPath.size());
  }
}
开发者ID:ADonut,项目名称:LLVM-GPGPU,代码行数:29,代码来源:HeaderMap.cpp

示例2: OutputPossibleOverflows

// OutputPossibleOverflows - We've found a possible overflow earlier,
// now check whether Body might contain a comparison which might be
// preventing the overflow.
// This doesn't do flow analysis, range analysis, or points-to analysis; it's
// just a dumb "is there a comparison" scan.  The aim here is to
// detect the most blatent cases of overflow and educate the
// programmer.
void MallocOverflowSecurityChecker::OutputPossibleOverflows(
  SmallVectorImpl<MallocOverflowCheck> &PossibleMallocOverflows,
  const Decl *D, BugReporter &BR, AnalysisManager &mgr) const {
  // By far the most common case: nothing to check.
  if (PossibleMallocOverflows.empty())
    return;

  // Delete any possible overflows which have a comparison.
  CheckOverflowOps c(PossibleMallocOverflows, BR.getContext());
  c.Visit(mgr.getAnalysisDeclContext(D)->getBody());

  // Output warnings for all overflows that are left.
  for (CheckOverflowOps::theVecType::iterator
       i = PossibleMallocOverflows.begin(),
       e = PossibleMallocOverflows.end();
       i != e;
       ++i) {
    BR.EmitBasicReport(
        D, this, "malloc() size overflow", categories::UnixAPI,
        "the computation of the size of the memory allocation may overflow",
        PathDiagnosticLocation::createOperatorLoc(i->mulop,
                                                  BR.getSourceManager()),
        i->mulop->getSourceRange());
  }
}
开发者ID:Fairly,项目名称:opencor,代码行数:32,代码来源:MallocOverflowSecurityChecker.cpp

示例3: GetIndiceDifference

/// GetIndiceDifference - Dest and Src are the variable indices from two
/// decomposed GetElementPtr instructions GEP1 and GEP2 which have common base
/// pointers.  Subtract the GEP2 indices from GEP1 to find the symbolic
/// difference between the two pointers. 
static void GetIndiceDifference(
                      SmallVectorImpl<std::pair<const Value*, int64_t> > &Dest,
                const SmallVectorImpl<std::pair<const Value*, int64_t> > &Src) {
  if (Src.empty()) return;

  for (unsigned i = 0, e = Src.size(); i != e; ++i) {
    const Value *V = Src[i].first;
    int64_t Scale = Src[i].second;
    
    // Find V in Dest.  This is N^2, but pointer indices almost never have more
    // than a few variable indexes.
    for (unsigned j = 0, e = Dest.size(); j != e; ++j) {
      if (Dest[j].first != V) continue;
      
      // If we found it, subtract off Scale V's from the entry in Dest.  If it
      // goes to zero, remove the entry.
      if (Dest[j].second != Scale)
        Dest[j].second -= Scale;
      else
        Dest.erase(Dest.begin()+j);
      Scale = 0;
      break;
    }
    
    // If we didn't consume this entry, add it to the end of the Dest list.
    if (Scale)
      Dest.push_back(std::make_pair(V, -Scale));
  }
}
开发者ID:nobled,项目名称:llvm-mirror,代码行数:33,代码来源:BasicAliasAnalysis.cpp

示例4: EmitCodeContext

void SDiagsWriter::EmitCodeContext(SmallVectorImpl<CharSourceRange> &Ranges,
                                   ArrayRef<FixItHint> Hints,
                                   const SourceManager &SM) {
    llvm::BitstreamWriter &Stream = State->Stream;
    RecordData &Record = State->Record;
    AbbreviationMap &Abbrevs = State->Abbrevs;

    // Emit Source Ranges.
    for (ArrayRef<CharSourceRange>::iterator I = Ranges.begin(), E = Ranges.end();
            I != E; ++I)
        if (I->isValid())
            EmitCharSourceRange(*I, SM);

    // Emit FixIts.
    for (ArrayRef<FixItHint>::iterator I = Hints.begin(), E = Hints.end();
            I != E; ++I) {
        const FixItHint &Fix = *I;
        if (Fix.isNull())
            continue;
        Record.clear();
        Record.push_back(RECORD_FIXIT);
        AddCharSourceRangeToRecord(Fix.RemoveRange, Record, SM);
        Record.push_back(Fix.CodeToInsert.size());
        Stream.EmitRecordWithBlob(Abbrevs.get(RECORD_FIXIT), Record,
                                  Fix.CodeToInsert);
    }
}
开发者ID:hfinkel,项目名称:lfort,代码行数:27,代码来源:SerializedDiagnosticPrinter.cpp

示例5: getSpecializationCost

// getSpecializationCost - The heuristic used to determine the code-size
// impact of creating a specialized version of Callee with argument
// SpecializedArgNo replaced by a constant.
InlineCost InlineCostAnalyzer::getSpecializationCost(Function *Callee,
                               SmallVectorImpl<unsigned> &SpecializedArgNos)
{
  // Don't specialize functions which can be redefined at link-time to mean
  // something else.
  if (Callee->mayBeOverridden())
    return llvm::InlineCost::getNever();
  
  // Get information about the callee.
  FunctionInfo *CalleeFI = &CachedFunctionInfo[Callee];
  
  // If we haven't calculated this information yet, do so now.
  if (CalleeFI->Metrics.NumBlocks == 0)
    CalleeFI->analyzeFunction(Callee);

  int Cost = 0;
  
  // Look at the orginal size of the callee.  Each instruction counts as 5.
  Cost += CalleeFI->Metrics.NumInsts * InlineConstants::InstrCost;

  // Offset that with the amount of code that can be constant-folded
  // away with the given arguments replaced by constants.
  for (SmallVectorImpl<unsigned>::iterator an = SpecializedArgNos.begin(),
       ae = SpecializedArgNos.end(); an != ae; ++an)
  {
    Cost -= CalleeFI->ArgumentWeights[*an].ConstantWeight;
  }

  return llvm::InlineCost::get(Cost);
}
开发者ID:chorfa672m,项目名称:llvm-js-backend,代码行数:33,代码来源:InlineCost.cpp

示例6: LowerReturn

SDValue WebAssemblyTargetLowering::LowerReturn(
    SDValue Chain, CallingConv::ID CallConv, bool /*IsVarArg*/,
    const SmallVectorImpl<ISD::OutputArg> &Outs,
    const SmallVectorImpl<SDValue> &OutVals, const SDLoc &DL,
    SelectionDAG &DAG) const {
  assert(Outs.size() <= 1 && "WebAssembly can only return up to one value");
  if (!CallingConvSupported(CallConv))
    fail(DL, DAG, "WebAssembly doesn't support non-C calling conventions");

  SmallVector<SDValue, 4> RetOps(1, Chain);
  RetOps.append(OutVals.begin(), OutVals.end());
  Chain = DAG.getNode(WebAssemblyISD::RETURN, DL, MVT::Other, RetOps);

  // Record the number and types of the return values.
  for (const ISD::OutputArg &Out : Outs) {
    assert(!Out.Flags.isByVal() && "byval is not valid for return values");
    assert(!Out.Flags.isNest() && "nest is not valid for return values");
    assert(Out.IsFixed && "non-fixed return value is not valid");
    if (Out.Flags.isInAlloca())
      fail(DL, DAG, "WebAssembly hasn't implemented inalloca results");
    if (Out.Flags.isInConsecutiveRegs())
      fail(DL, DAG, "WebAssembly hasn't implemented cons regs results");
    if (Out.Flags.isInConsecutiveRegsLast())
      fail(DL, DAG, "WebAssembly hasn't implemented cons regs last results");
  }

  return Chain;
}
开发者ID:CSI-LLVM,项目名称:llvm,代码行数:28,代码来源:WebAssemblyISelLowering.cpp

示例7: sizeof

// Include the debug info compression header:
// "ZLIB" followed by 8 bytes representing the uncompressed size of the section,
// useful for consumers to preallocate a buffer to decompress into.
static bool
prependCompressionHeader(uint64_t Size,
                         SmallVectorImpl<char> &CompressedContents) {
    const StringRef Magic = "ZLIB";
    if (Size <= Magic.size() + sizeof(Size) + CompressedContents.size())
        return false;
    if (sys::IsLittleEndianHost)
        sys::swapByteOrder(Size);
    CompressedContents.insert(CompressedContents.begin(),
                              Magic.size() + sizeof(Size), 0);
    std::copy(Magic.begin(), Magic.end(), CompressedContents.begin());
    std::copy(reinterpret_cast<char *>(&Size),
              reinterpret_cast<char *>(&Size + 1),
              CompressedContents.begin() + Magic.size());
    return true;
}
开发者ID:hmalphettes,项目名称:llvm,代码行数:19,代码来源:ELFObjectWriter.cpp

示例8: reorderSubVector

static void reorderSubVector(MVT VT, SmallVectorImpl<Value *> &TransposedMatrix,
  ArrayRef<Value *> Vec, ArrayRef<uint32_t> VPShuf,
  unsigned VecElems, unsigned Stride,
  IRBuilder<> Builder) {

  if (VecElems == 16) {
    for (unsigned i = 0; i < Stride; i++)
      TransposedMatrix[i] = Builder.CreateShuffleVector(
        Vec[i], UndefValue::get(Vec[i]->getType()), VPShuf);
    return;
  }

  SmallVector<uint32_t, 32> OptimizeShuf;
  Value *Temp[8];

  for (unsigned i = 0; i < (VecElems / 16) * Stride; i += 2) {
    genShuffleBland(VT, VPShuf, OptimizeShuf, (i / Stride) * 16,
      (i + 1) / Stride * 16);
    Temp[i / 2] = Builder.CreateShuffleVector(
      Vec[i % Stride], Vec[(i + 1) % Stride], OptimizeShuf);
    OptimizeShuf.clear();
  }

  if (VecElems == 32) {
    std::copy(Temp, Temp + Stride, TransposedMatrix.begin());
    return;
  }
  else
    for (unsigned i = 0; i < Stride; i++)
      TransposedMatrix[i] =
      Builder.CreateShuffleVector(Temp[2 * i], Temp[2 * i + 1], Concat);
}
开发者ID:BNieuwenhuizen,项目名称:llvm,代码行数:32,代码来源:X86InterleavedAccess.cpp

示例9: VerifySubExpr

static bool VerifySubExpr(Value *Expr,
                          SmallVectorImpl<Instruction*> &InstInputs) {
  // If this is a non-instruction value, there is nothing to do.
  Instruction *I = dyn_cast<Instruction>(Expr);
  if (I == 0) return true;
  
  // If it's an instruction, it is either in Tmp or its operands recursively
  // are.
  SmallVectorImpl<Instruction*>::iterator Entry =
    std::find(InstInputs.begin(), InstInputs.end(), I);
  if (Entry != InstInputs.end()) {
    InstInputs.erase(Entry);
    return true;
  }
  
  // If it isn't in the InstInputs list it is a subexpr incorporated into the
  // address.  Sanity check that it is phi translatable.
  if (!CanPHITrans(I)) {
    errs() << "Non phi translatable instruction found in PHITransAddr, either "
              "something is missing from InstInputs or CanPHITrans is wrong:\n";
    errs() << *I << '\n';
    return false;
  }
  
  // Validate the operands of the instruction.
  for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
    if (!VerifySubExpr(I->getOperand(i), InstInputs))
      return false;

  return true;
}
开发者ID:wodeaei,项目名称:VC-Project,代码行数:31,代码来源:PHITransAddr.cpp

示例10: doMerge

bool GlobalMerge::doMerge(SmallVectorImpl<GlobalVariable*> &Globals,
                          Module &M, bool isConst, unsigned AddrSpace) const {
  const TargetLowering *TLI = TM->getTargetLowering();
  const DataLayout *DL = TLI->getDataLayout();

  // FIXME: Infer the maximum possible offset depending on the actual users
  // (these max offsets are different for the users inside Thumb or ARM
  // functions)
  unsigned MaxOffset = TLI->getMaximalGlobalOffset();

  // FIXME: Find better heuristics
  std::stable_sort(Globals.begin(), Globals.end(),
                   [DL](const GlobalVariable *GV1, const GlobalVariable *GV2) {
    Type *Ty1 = cast<PointerType>(GV1->getType())->getElementType();
    Type *Ty2 = cast<PointerType>(GV2->getType())->getElementType();

    return (DL->getTypeAllocSize(Ty1) < DL->getTypeAllocSize(Ty2));
  });

  Type *Int32Ty = Type::getInt32Ty(M.getContext());

  for (size_t i = 0, e = Globals.size(); i != e; ) {
    size_t j = 0;
    uint64_t MergedSize = 0;
    std::vector<Type*> Tys;
    std::vector<Constant*> Inits;
    for (j = i; j != e; ++j) {
      Type *Ty = Globals[j]->getType()->getElementType();
      MergedSize += DL->getTypeAllocSize(Ty);
      if (MergedSize > MaxOffset) {
        break;
      }
      Tys.push_back(Ty);
      Inits.push_back(Globals[j]->getInitializer());
    }

    StructType *MergedTy = StructType::get(M.getContext(), Tys);
    Constant *MergedInit = ConstantStruct::get(MergedTy, Inits);
    GlobalVariable *MergedGV = new GlobalVariable(M, MergedTy, isConst,
                                                  GlobalValue::InternalLinkage,
                                                  MergedInit, "_MergedGlobals",
                                                  0, GlobalVariable::NotThreadLocal,
                                                  AddrSpace);
    for (size_t k = i; k < j; ++k) {
      Constant *Idx[2] = {
        ConstantInt::get(Int32Ty, 0),
        ConstantInt::get(Int32Ty, k-i)
      };
      Constant *GEP = ConstantExpr::getInBoundsGetElementPtr(MergedGV, Idx);
      Globals[k]->replaceAllUsesWith(GEP);
      Globals[k]->eraseFromParent();
      NumMerged++;
    }
    i = j;
  }

  return true;
}
开发者ID:AmesianX,项目名称:dagger,代码行数:58,代码来源:GlobalMerge.cpp

示例11: uniqueTypeVariables

/// Unique the given set of type variables.
static void uniqueTypeVariables(SmallVectorImpl<TypeVariableType *> &typeVars) {
  // Remove any duplicate type variables.
  llvm::SmallPtrSet<TypeVariableType *, 4> knownTypeVars;
  typeVars.erase(std::remove_if(typeVars.begin(), typeVars.end(),
                                [&](TypeVariableType *typeVar) {
                                  return !knownTypeVars.insert(typeVar).second;
                                }),
                 typeVars.end());
}
开发者ID:0x73,项目名称:swift,代码行数:10,代码来源:Constraint.cpp

示例12: AnalyzeReturnValues

static void AnalyzeReturnValues(CCState &State,
                                SmallVectorImpl<CCValAssign> &RVLocs,
                                const SmallVectorImpl<ArgT> &Args) {
  AnalyzeRetResult(State, Args);

  // Reverse splitted return values to get the "big endian" format required
  // to agree with the calling convention ABI.
  std::reverse(RVLocs.begin(), RVLocs.end());
}
开发者ID:CSI-LLVM,项目名称:llvm,代码行数:9,代码来源:MSP430ISelLowering.cpp

示例13: insertTargetAndModeArgs

static void insertTargetAndModeArgs(StringRef Target, StringRef Mode,
                                    SmallVectorImpl<const char *> &ArgVector,
                                    std::set<std::string> &SavedStrings) {
  if (!Mode.empty()) {
    // Add the mode flag to the arguments.
    auto it = ArgVector.begin();
    if (it != ArgVector.end())
      ++it;
    ArgVector.insert(it, GetStableCStr(SavedStrings, Mode));
  }

  if (!Target.empty()) {
    auto it = ArgVector.begin();
    if (it != ArgVector.end())
      ++it;
    const char *arr[] = {"-target", GetStableCStr(SavedStrings, Target)};
    ArgVector.insert(it, std::begin(arr), std::end(arr));
  }
}
开发者ID:davidlt,项目名称:root,代码行数:19,代码来源:driver.cpp

示例14:

/// Return true if Reg aliases a register in unsorted Regs SmallVector.
/// This is only valid for physical registers.
static SmallVectorImpl<unsigned>::iterator
findRegAlias(unsigned Reg, SmallVectorImpl<unsigned> &Regs,
             const TargetRegisterInfo *TRI) {
  for (const uint16_t *Alias = TRI->getOverlaps(Reg); *Alias; ++Alias) {
    SmallVectorImpl<unsigned>::iterator I =
      std::find(Regs.begin(), Regs.end(), *Alias);
    if (I != Regs.end())
      return I;
  }
  return Regs.end();
}
开发者ID:romix,项目名称:llvm,代码行数:13,代码来源:RegisterPressure.cpp

示例15: setRegZero

static void setRegZero(SmallVectorImpl<RegisterMaskPair> &RegUnits,
                       unsigned RegUnit) {
  auto I = std::find_if(RegUnits.begin(), RegUnits.end(),
                        [RegUnit](const RegisterMaskPair Other) {
                          return Other.RegUnit == RegUnit;
                        });
  if (I == RegUnits.end()) {
    RegUnits.push_back(RegisterMaskPair(RegUnit, 0));
  } else {
    I->LaneMask = 0;
  }
}
开发者ID:AlexDenisov,项目名称:llvm,代码行数:12,代码来源:RegisterPressure.cpp


注:本文中的SmallVectorImpl::begin方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。