Coverage Report

Created: 2017-10-03 07:32

/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/lib/Target/NVPTX/NVPTXMCExpr.cpp
Line
Count
Source (jump to first uncovered line)
1
//===-- NVPTXMCExpr.cpp - NVPTX specific MC expression classes ------------===//
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
#include "NVPTXMCExpr.h"
11
#include "llvm/ADT/StringExtras.h"
12
#include "llvm/MC/MCAssembler.h"
13
#include "llvm/MC/MCContext.h"
14
using namespace llvm;
15
16
#define DEBUG_TYPE "nvptx-mcexpr"
17
18
const NVPTXFloatMCExpr *
19
97
NVPTXFloatMCExpr::create(VariantKind Kind, const APFloat &Flt, MCContext &Ctx) {
20
97
  return new (Ctx) NVPTXFloatMCExpr(Kind, Flt);
21
97
}
22
23
92
void NVPTXFloatMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
24
92
  bool Ignored;
25
92
  unsigned NumHex;
26
92
  APFloat APF = getAPFloat();
27
92
28
92
  switch (Kind) {
29
0
  
default: 0
llvm_unreachable0
("Invalid kind!");
30
6
  case VK_NVPTX_HALF_PREC_FLOAT:
31
6
    // ptxas does not have a way to specify half-precision floats.
32
6
    // Instead we have to print and load fp16 constants as .b16
33
6
    OS << "0x";
34
6
    NumHex = 4;
35
6
    APF.convert(APFloat::IEEEhalf(), APFloat::rmNearestTiesToEven, &Ignored);
36
6
    break;
37
70
  case VK_NVPTX_SINGLE_PREC_FLOAT:
38
70
    OS << "0f";
39
70
    NumHex = 8;
40
70
    APF.convert(APFloat::IEEEsingle(), APFloat::rmNearestTiesToEven, &Ignored);
41
70
    break;
42
16
  case VK_NVPTX_DOUBLE_PREC_FLOAT:
43
16
    OS << "0d";
44
16
    NumHex = 16;
45
16
    APF.convert(APFloat::IEEEdouble(), APFloat::rmNearestTiesToEven, &Ignored);
46
16
    break;
47
92
  }
48
92
49
92
  APInt API = APF.bitcastToAPInt();
50
92
  std::string HexStr(utohexstr(API.getZExtValue()));
51
92
  if (HexStr.length() < NumHex)
52
26
    OS << std::string(NumHex - HexStr.length(), '0');
53
92
  OS << utohexstr(API.getZExtValue());
54
92
}
55
56
const NVPTXGenericMCSymbolRefExpr*
57
NVPTXGenericMCSymbolRefExpr::create(const MCSymbolRefExpr *SymExpr,
58
1
                                    MCContext &Ctx) {
59
1
  return new (Ctx) NVPTXGenericMCSymbolRefExpr(SymExpr);
60
1
}
61
62
void NVPTXGenericMCSymbolRefExpr::printImpl(raw_ostream &OS,
63
1
                                            const MCAsmInfo *MAI) const {
64
1
  OS << "generic(";
65
1
  SymExpr->print(OS, MAI);
66
1
  OS << ")";
67
1
}