~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to lib/Object/RecordStreamer.cpp

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===-- RecordStreamer.cpp - Record asm definde and used symbols ----------===//
 
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 "RecordStreamer.h"
 
11
#include "llvm/MC/MCSymbol.h"
 
12
using namespace llvm;
 
13
 
 
14
void RecordStreamer::markDefined(const MCSymbol &Symbol) {
 
15
  State &S = Symbols[Symbol.getName()];
 
16
  switch (S) {
 
17
  case DefinedGlobal:
 
18
  case Global:
 
19
    S = DefinedGlobal;
 
20
    break;
 
21
  case NeverSeen:
 
22
  case Defined:
 
23
  case Used:
 
24
    S = Defined;
 
25
    break;
 
26
  }
 
27
}
 
28
 
 
29
void RecordStreamer::markGlobal(const MCSymbol &Symbol) {
 
30
  State &S = Symbols[Symbol.getName()];
 
31
  switch (S) {
 
32
  case DefinedGlobal:
 
33
  case Defined:
 
34
    S = DefinedGlobal;
 
35
    break;
 
36
 
 
37
  case NeverSeen:
 
38
  case Global:
 
39
  case Used:
 
40
    S = Global;
 
41
    break;
 
42
  }
 
43
}
 
44
 
 
45
void RecordStreamer::markUsed(const MCSymbol &Symbol) {
 
46
  State &S = Symbols[Symbol.getName()];
 
47
  switch (S) {
 
48
  case DefinedGlobal:
 
49
  case Defined:
 
50
  case Global:
 
51
    break;
 
52
 
 
53
  case NeverSeen:
 
54
  case Used:
 
55
    S = Used;
 
56
    break;
 
57
  }
 
58
}
 
59
 
 
60
void RecordStreamer::visitUsedSymbol(const MCSymbol &Sym) { markUsed(Sym); }
 
61
 
 
62
RecordStreamer::const_iterator RecordStreamer::begin() {
 
63
  return Symbols.begin();
 
64
}
 
65
 
 
66
RecordStreamer::const_iterator RecordStreamer::end() { return Symbols.end(); }
 
67
 
 
68
RecordStreamer::RecordStreamer(MCContext &Context) : MCStreamer(Context) {}
 
69
 
 
70
void RecordStreamer::EmitInstruction(const MCInst &Inst,
 
71
                                     const MCSubtargetInfo &STI) {
 
72
  MCStreamer::EmitInstruction(Inst, STI);
 
73
}
 
74
 
 
75
void RecordStreamer::EmitLabel(MCSymbol *Symbol) {
 
76
  MCStreamer::EmitLabel(Symbol);
 
77
  markDefined(*Symbol);
 
78
}
 
79
 
 
80
void RecordStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
 
81
  markDefined(*Symbol);
 
82
  MCStreamer::EmitAssignment(Symbol, Value);
 
83
}
 
84
 
 
85
bool RecordStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
 
86
                                         MCSymbolAttr Attribute) {
 
87
  if (Attribute == MCSA_Global)
 
88
    markGlobal(*Symbol);
 
89
  return true;
 
90
}
 
91
 
 
92
void RecordStreamer::EmitZerofill(MCSection *Section, MCSymbol *Symbol,
 
93
                                  uint64_t Size, unsigned ByteAlignment) {
 
94
  markDefined(*Symbol);
 
95
}
 
96
 
 
97
void RecordStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
 
98
                                      unsigned ByteAlignment) {
 
99
  markDefined(*Symbol);
 
100
}