~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to lib/Target/SystemZ/SystemZConstantPoolValue.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
//===-- SystemZConstantPoolValue.cpp - SystemZ constant-pool value --------===//
 
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 "SystemZConstantPoolValue.h"
 
11
#include "llvm/ADT/FoldingSet.h"
 
12
#include "llvm/IR/DerivedTypes.h"
 
13
#include "llvm/IR/GlobalValue.h"
 
14
#include "llvm/Support/raw_ostream.h"
 
15
 
 
16
using namespace llvm;
 
17
 
 
18
SystemZConstantPoolValue::
 
19
SystemZConstantPoolValue(const GlobalValue *gv,
 
20
                         SystemZCP::SystemZCPModifier modifier)
 
21
  : MachineConstantPoolValue(gv->getType()), GV(gv), Modifier(modifier) {}
 
22
 
 
23
SystemZConstantPoolValue *
 
24
SystemZConstantPoolValue::Create(const GlobalValue *GV,
 
25
                                 SystemZCP::SystemZCPModifier Modifier) {
 
26
  return new SystemZConstantPoolValue(GV, Modifier);
 
27
}
 
28
 
 
29
unsigned SystemZConstantPoolValue::getRelocationInfo() const {
 
30
  switch (Modifier) {
 
31
  case SystemZCP::TLSGD:
 
32
  case SystemZCP::TLSLDM:
 
33
  case SystemZCP::DTPOFF:
 
34
    // May require a dynamic relocation.
 
35
    return 2;
 
36
  case SystemZCP::NTPOFF:
 
37
    // May require a relocation, but the relocations are always resolved
 
38
    // by the static linker.
 
39
    return 1;
 
40
  }
 
41
  llvm_unreachable("Unknown modifier");
 
42
}
 
43
 
 
44
int SystemZConstantPoolValue::
 
45
getExistingMachineCPValue(MachineConstantPool *CP, unsigned Alignment) {
 
46
  unsigned AlignMask = Alignment - 1;
 
47
  const std::vector<MachineConstantPoolEntry> &Constants = CP->getConstants();
 
48
  for (unsigned I = 0, E = Constants.size(); I != E; ++I) {
 
49
    if (Constants[I].isMachineConstantPoolEntry() &&
 
50
        (Constants[I].getAlignment() & AlignMask) == 0) {
 
51
      auto *ZCPV =
 
52
        static_cast<SystemZConstantPoolValue *>(Constants[I].Val.MachineCPVal);
 
53
      if (ZCPV->GV == GV && ZCPV->Modifier == Modifier)
 
54
        return I;
 
55
    }
 
56
  }
 
57
  return -1;
 
58
}
 
59
 
 
60
void SystemZConstantPoolValue::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
 
61
  ID.AddPointer(GV);
 
62
  ID.AddInteger(Modifier);
 
63
}
 
64
 
 
65
void SystemZConstantPoolValue::print(raw_ostream &O) const {
 
66
  O << GV << "@" << int(Modifier);
 
67
}