LCOV - code coverage report
Current view: top level - lib/Support - APSInt.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 17 17 100.0 %
Date: 2017-09-14 15:23:50 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- llvm/ADT/APSInt.cpp - Arbitrary Precision Signed Int ---*- C++ -*--===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : //
      10             : // This file implements the APSInt class, which is a simple class that
      11             : // represents an arbitrary sized integer that knows its signedness.
      12             : //
      13             : //===----------------------------------------------------------------------===//
      14             : 
      15             : #include "llvm/ADT/APSInt.h"
      16             : #include "llvm/ADT/FoldingSet.h"
      17             : #include "llvm/ADT/StringRef.h"
      18             : 
      19             : using namespace llvm;
      20             : 
      21     4786488 : APSInt::APSInt(StringRef Str) {
      22             :   assert(!Str.empty() && "Invalid string length");
      23             : 
      24             :   // (Over-)estimate the required number of bits.
      25     2393244 :   unsigned NumBits = ((Str.size() * 64) / 19) + 2;
      26     4748395 :   APInt Tmp(NumBits, Str, /*Radix=*/10);
      27     4786488 :   if (Str[0] == '-') {
      28       38093 :     unsigned MinBits = Tmp.getMinSignedBits();
      29       38093 :     if (MinBits > 0 && MinBits < NumBits)
      30      114279 :       Tmp = Tmp.trunc(MinBits);
      31      152372 :     *this = APSInt(Tmp, /*IsUnsigned=*/false);
      32       38093 :     return;
      33             :   }
      34     2355151 :   unsigned ActiveBits = Tmp.getActiveBits();
      35     2355151 :   if (ActiveBits > 0 && ActiveBits < NumBits)
      36     6348237 :     Tmp = Tmp.trunc(ActiveBits);
      37     9420604 :   *this = APSInt(Tmp, /*IsUnsigned=*/true);
      38             : }
      39             : 
      40     2529063 : void APSInt::Profile(FoldingSetNodeID& ID) const {
      41     2529063 :   ID.AddInteger((unsigned) (IsUnsigned ? 1 : 0));
      42     2529063 :   APInt::Profile(ID);
      43     2529063 : }

Generated by: LCOV version 1.13