LCOV - code coverage report
Current view: top level - lib/Support - APSInt.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 15 15 100.0 %
Date: 2018-10-20 13:21:21 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     3466355 : APSInt::APSInt(StringRef Str) {
      22             :   assert(!Str.empty() && "Invalid string length");
      23             : 
      24             :   // (Over-)estimate the required number of bits.
      25     3466355 :   unsigned NumBits = ((Str.size() * 64) / 19) + 2;
      26     3466355 :   APInt Tmp(NumBits, Str, /*Radix=*/10);
      27     6932710 :   if (Str[0] == '-') {
      28       73356 :     unsigned MinBits = Tmp.getMinSignedBits();
      29       73356 :     if (MinBits > 0 && MinBits < NumBits)
      30      146712 :       Tmp = Tmp.trunc(MinBits);
      31      146712 :     *this = APSInt(Tmp, /*IsUnsigned=*/false);
      32             :     return;
      33             :   }
      34             :   unsigned ActiveBits = Tmp.getActiveBits();
      35     3392999 :   if (ActiveBits > 0 && ActiveBits < NumBits)
      36     6166660 :     Tmp = Tmp.trunc(ActiveBits);
      37     6785998 :   *this = APSInt(Tmp, /*IsUnsigned=*/true);
      38             : }
      39             : 
      40    26514211 : void APSInt::Profile(FoldingSetNodeID& ID) const {
      41    30907054 :   ID.AddInteger((unsigned) (IsUnsigned ? 1 : 0));
      42    26514211 :   APInt::Profile(ID);
      43    26514211 : }

Generated by: LCOV version 1.13