author | Stefan Teleman <stefan.teleman@oracle.com> |
Thu, 28 Jul 2016 16:25:34 -0700 | |
changeset 6512 | 92717ce71105 |
permissions | -rw-r--r-- |
6512
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1 |
# 22902339 memory corruption caused by undefined behavior in LLVM IR Module |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
2 |
# 24314687 static initialization of optimization passes doesn't work as |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
3 |
# intended |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
4 |
# 3.9.X for upstream. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
5 |
--- include/llvm/IR/BasicBlock.h 2015-11-10 18:26:42.000000000 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
6 |
+++ include/llvm/IR/BasicBlock.h 2016-05-28 16:37:28.925076023 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
7 |
@@ -78,10 +78,11 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
8 |
LLVMContext &getContext() const; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
9 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
10 |
/// Instruction iterators... |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
11 |
- typedef InstListType::iterator iterator; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
12 |
- typedef InstListType::const_iterator const_iterator; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
13 |
- typedef InstListType::reverse_iterator reverse_iterator; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
14 |
- typedef InstListType::const_reverse_iterator const_reverse_iterator; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
15 |
+ typedef SymbolTableList<Instruction>::iterator iterator; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
16 |
+ typedef SymbolTableList<Instruction>::const_iterator const_iterator; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
17 |
+ typedef SymbolTableList<Instruction>::reverse_iterator reverse_iterator; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
18 |
+ typedef SymbolTableList<Instruction>::const_reverse_iterator |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
19 |
+ const_reverse_iterator; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
20 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
21 |
/// \brief Creates a new BasicBlock. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
22 |
/// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
23 |
@@ -148,8 +149,8 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
24 |
/// suitable for inserting a non-PHI instruction. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
25 |
/// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
26 |
/// In particular, it skips all PHIs and LandingPad instructions. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
27 |
- iterator getFirstInsertionPt(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
28 |
- const_iterator getFirstInsertionPt() const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
29 |
+ BasicBlock::iterator getFirstInsertionPt(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
30 |
+ BasicBlock::const_iterator getFirstInsertionPt() const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
31 |
return const_cast<BasicBlock*>(this)->getFirstInsertionPt(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
32 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
33 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
34 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
35 |
--- include/llvm/IR/Value.h 2016-02-04 08:59:45.000000000 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
36 |
+++ include/llvm/IR/Value.h 2016-05-29 12:21:18.779271419 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
37 |
@@ -74,6 +74,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
38 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
39 |
const unsigned char SubclassID; // Subclass identifier (for isa/dyn_cast) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
40 |
unsigned char HasValueHandle : 1; // Has a ValueHandle pointing to this? |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
41 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
42 |
protected: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
43 |
/// \brief Hold subclass data that can be dropped. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
44 |
/// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
45 |
@@ -113,17 +114,25 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
46 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
47 |
private: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
48 |
template <typename UseT> // UseT == 'Use' or 'const Use' |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
49 |
- class use_iterator_impl |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
50 |
- : public std::iterator<std::forward_iterator_tag, UseT *> { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
51 |
+ class use_iterator_impl : |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
52 |
+ public std::iterator<std::forward_iterator_tag, UseT *> { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
53 |
UseT *U; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
54 |
- explicit use_iterator_impl(UseT *u) : U(u) {} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
55 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
56 |
+ explicit use_iterator_impl(UseT *u) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
57 |
+ : std::iterator<std::forward_iterator_tag, UseT *>(), U(u) { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
58 |
friend class Value; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
59 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
60 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
61 |
- use_iterator_impl() : U() {} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
62 |
+ use_iterator_impl() |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
63 |
+ : std::iterator<std::forward_iterator_tag, UseT *>(), U(nullptr) { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
64 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
65 |
- bool operator==(const use_iterator_impl &x) const { return U == x.U; } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
66 |
- bool operator!=(const use_iterator_impl &x) const { return !operator==(x); } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
67 |
+ bool operator==(const use_iterator_impl &x) const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
68 |
+ return U == x.U; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
69 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
70 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
71 |
+ bool operator!=(const use_iterator_impl &x) const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
72 |
+ return !operator==(x); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
73 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
74 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
75 |
use_iterator_impl &operator++() { // Preincrement |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
76 |
assert(U && "Cannot increment end iterator!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
77 |
@@ -150,18 +159,28 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
78 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
79 |
template <typename UserTy> // UserTy == 'User' or 'const User' |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
80 |
class user_iterator_impl |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
81 |
- : public std::iterator<std::forward_iterator_tag, UserTy *> { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
82 |
+ : public std::iterator<std::forward_iterator_tag, UserTy *> { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
83 |
+ private: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
84 |
use_iterator_impl<Use> UI; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
85 |
- explicit user_iterator_impl(Use *U) : UI(U) {} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
86 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
87 |
+ explicit user_iterator_impl(Use *U) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
88 |
+ : std::iterator<std::forward_iterator_tag, UserTy *>(), UI(U) { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
89 |
friend class Value; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
90 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
91 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
92 |
- user_iterator_impl() {} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
93 |
+ user_iterator_impl() |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
94 |
+ : std::iterator<std::forward_iterator_tag, UserTy *>(), UI() { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
95 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
96 |
- bool operator==(const user_iterator_impl &x) const { return UI == x.UI; } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
97 |
- bool operator!=(const user_iterator_impl &x) const { return !operator==(x); } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
98 |
+ bool operator==(const user_iterator_impl &x) const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
99 |
+ return UI == x.UI; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
100 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
101 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
102 |
- /// \brief Returns true if this iterator is equal to user_end() on the value. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
103 |
+ bool operator!=(const user_iterator_impl &x) const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
104 |
+ return !operator==(x); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
105 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
106 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
107 |
+ /// \brief Returns true if this iterator is equal to user_end() |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
108 |
+ /// on the value. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
109 |
bool atEnd() const { return *this == user_iterator_impl(); } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
110 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
111 |
user_iterator_impl &operator++() { // Preincrement |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
112 |
@@ -193,6 +212,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
113 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
114 |
protected: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
115 |
Value(Type *Ty, unsigned scid); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
116 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
117 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
118 |
virtual ~Value(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
119 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
120 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
121 |
--- lib/IR/User.cpp 2015-09-23 18:00:49.000000000 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
122 |
+++ lib/IR/User.cpp 2016-05-29 12:13:16.188732011 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
123 |
@@ -12,6 +12,8 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
124 |
#include "llvm/IR/GlobalValue.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
125 |
#include "llvm/IR/Operator.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
126 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
127 |
+#include <cstdlib> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
128 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
129 |
namespace llvm { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
130 |
class BasicBlock; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
131 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
132 |
@@ -42,33 +44,53 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
133 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
134 |
void User::allocHungoffUses(unsigned N, bool IsPhi) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
135 |
assert(HasHungOffUses && "alloc must have hung off uses"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
136 |
- |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
137 |
- static_assert(AlignOf<Use>::Alignment >= AlignOf<Use::UserRef>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
138 |
- "Alignment is insufficient for 'hung-off-uses' pieces"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
139 |
+ static_assert(AlignOf<Use>::Alignment >= |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
140 |
+ AlignOf<Use::UserRef>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
141 |
+ "Insufficient alignment for 'hung-off-uses' pieces"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
142 |
static_assert(AlignOf<Use::UserRef>::Alignment >= |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
143 |
- AlignOf<BasicBlock *>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
144 |
- "Alignment is insufficient for 'hung-off-uses' pieces"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
145 |
+ AlignOf<BasicBlock*>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
146 |
+ "Insufficient alignment for 'hung-off-uses' pieces"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
147 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
148 |
// Allocate the array of Uses, followed by a pointer (with bottom bit set) to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
149 |
// the User. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
150 |
size_t size = N * sizeof(Use) + sizeof(Use::UserRef); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
151 |
if (IsPhi) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
152 |
size += N * sizeof(BasicBlock *); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
153 |
- Use *Begin = static_cast<Use*>(::operator new(size)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
154 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
155 |
+ size_t Alignment = |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
156 |
+ std::max<size_t>(AlignOf<Use>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
157 |
+ std::max<size_t>(AlignOf<BasicBlock*>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
158 |
+ AlignOf<Use::UserRef>::Alignment)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
159 |
+ size = llvm::RoundUpToAlignment(size, Alignment); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
160 |
+ void *Mem; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
161 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
162 |
+ if (posix_memalign(&Mem, Alignment, size) != 0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
163 |
+ llvm::errs() << __PRETTY_FUNCTION__ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
164 |
+ << ": posix_memalign(3c) failed!\n"; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
165 |
+ abort(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
166 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
167 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
168 |
+ (void) std::memset(Mem, 0, size); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
169 |
+ Use *Begin = reinterpret_cast<Use*>(Mem); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
170 |
Use *End = Begin + N; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
171 |
(void) new(End) Use::UserRef(const_cast<User*>(this), 1); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
172 |
setOperandList(Use::initTags(Begin, End)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
173 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
174 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
175 |
void User::growHungoffUses(unsigned NewNumUses, bool IsPhi) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
176 |
- assert(HasHungOffUses && "realloc must have hung off uses"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
177 |
- |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
178 |
+ assert(HasHungOffUses && "alloc must have hung off uses"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
179 |
unsigned OldNumUses = getNumOperands(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
180 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
181 |
// We don't support shrinking the number of uses. We wouldn't have enough |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
182 |
// space to copy the old uses in to the new space. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
183 |
assert(NewNumUses > OldNumUses && "realloc must grow num uses"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
184 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
185 |
+ if (OldNumUses >= NewNumUses) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
186 |
+ llvm::errs() << __PRETTY_FUNCTION__ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
187 |
+ << ": reallocation must grow new uses!\n"; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
188 |
+ abort(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
189 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
190 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
191 |
Use *OldOps = getOperandList(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
192 |
allocHungoffUses(NewNumUses, IsPhi); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
193 |
Use *NewOps = getOperandList(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
194 |
@@ -101,7 +123,6 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
195 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
196 |
MutableArrayRef<uint8_t> User::getDescriptor() { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
197 |
assert(HasDescriptor && "Don't call otherwise!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
198 |
- assert(!HasHungOffUses && "Invariant!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
199 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
200 |
auto *DI = reinterpret_cast<DescriptorInfo *>(getIntrusiveOperands()) - 1; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
201 |
assert(DI->SizeInBytes != 0 && "Should not have had a descriptor otherwise!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
202 |
@@ -114,20 +135,31 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
203 |
// User operator new Implementations |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
204 |
//===----------------------------------------------------------------------===// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
205 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
206 |
-void *User::allocateFixedOperandUser(size_t Size, unsigned Us, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
207 |
- unsigned DescBytes) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
208 |
+void* LLVM_ATTRIBUTE_NOINLINE |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
209 |
+User::allocateFixedOperandUser(size_t Size, unsigned Us, unsigned DescBytes) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
210 |
assert(Us < (1u << NumUserOperandsBits) && "Too many operands"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
211 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
212 |
static_assert(sizeof(DescriptorInfo) % sizeof(void *) == 0, "Required below"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
213 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
214 |
unsigned DescBytesToAllocate = |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
215 |
- DescBytes == 0 ? 0 : (DescBytes + sizeof(DescriptorInfo)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
216 |
+ DescBytes == 0 ? 0 : (DescBytes + sizeof(DescriptorInfo)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
217 |
+ DescBytesToAllocate = llvm::RoundUpToAlignment(DescBytesToAllocate, 8U); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
218 |
assert(DescBytesToAllocate % sizeof(void *) == 0 && |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
219 |
"We need this to satisfy alignment constraints for Uses"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
220 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
221 |
- uint8_t *Storage = static_cast<uint8_t *>( |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
222 |
- ::operator new(Size + sizeof(Use) * Us + DescBytesToAllocate)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
223 |
- Use *Start = reinterpret_cast<Use *>(Storage + DescBytesToAllocate); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
224 |
+ unsigned AllocSize = Size + sizeof(Use) * Us + DescBytesToAllocate; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
225 |
+ AllocSize = std::max<unsigned>(AllocSize, alignof(void*)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
226 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
227 |
+ uint8_t *Storage; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
228 |
+ if (posix_memalign(reinterpret_cast<void**>(&Storage), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
229 |
+ llvm::AlignOf<uint64_t>::Alignment, AllocSize) != 0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
230 |
+ llvm::errs() << __PRETTY_FUNCTION__ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
231 |
+ << ": posix_memalign(3c) failed!\n"; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
232 |
+ abort(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
233 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
234 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
235 |
+ Use *Start = reinterpret_cast<Use*>(reinterpret_cast<void*>( |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
236 |
+ reinterpret_cast<uint8_t*>(Storage) + DescBytesToAllocate)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
237 |
Use *End = Start + Us; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
238 |
User *Obj = reinterpret_cast<User*>(End); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
239 |
Obj->NumUserOperands = Us; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
240 |
@@ -153,7 +185,16 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
241 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
242 |
void *User::operator new(size_t Size) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
243 |
// Allocate space for a single Use* |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
244 |
- void *Storage = ::operator new(Size + sizeof(Use *)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
245 |
+ void *Storage; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
246 |
+ unsigned AllocSize = Size + sizeof(Use*); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
247 |
+ AllocSize = std::max<unsigned>(AllocSize, sizeof(void*)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
248 |
+ if (posix_memalign(&Storage, llvm::AlignOf<uint64_t>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
249 |
+ AllocSize) != 0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
250 |
+ llvm::errs() << __PRETTY_FUNCTION__ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
251 |
+ << ": posix_memalign(3c) failed!\n"; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
252 |
+ abort(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
253 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
254 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
255 |
Use **HungOffOperandList = static_cast<Use **>(Storage); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
256 |
User *Obj = reinterpret_cast<User *>(HungOffOperandList + 1); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
257 |
Obj->NumUserOperands = 0; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
258 |
@@ -170,7 +211,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
259 |
void User::operator delete(void *Usr) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
260 |
// Hung off uses use a single Use* before the User, while other subclasses |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
261 |
// use a Use[] allocated prior to the user. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
262 |
- User *Obj = static_cast<User *>(Usr); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
263 |
+ User *Obj = reinterpret_cast<User *>(Usr); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
264 |
if (Obj->HasHungOffUses) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
265 |
assert(!Obj->HasDescriptor && "not supported!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
266 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
267 |
@@ -178,19 +219,19 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
268 |
// drop the hung off uses. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
269 |
Use::zap(*HungOffOperandList, *HungOffOperandList + Obj->NumUserOperands, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
270 |
/* Delete */ true); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
271 |
- ::operator delete(HungOffOperandList); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
272 |
+ std::free(reinterpret_cast<void*>(HungOffOperandList)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
273 |
} else if (Obj->HasDescriptor) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
274 |
Use *UseBegin = static_cast<Use *>(Usr) - Obj->NumUserOperands; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
275 |
Use::zap(UseBegin, UseBegin + Obj->NumUserOperands, /* Delete */ false); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
276 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
277 |
auto *DI = reinterpret_cast<DescriptorInfo *>(UseBegin) - 1; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
278 |
- uint8_t *Storage = reinterpret_cast<uint8_t *>(DI) - DI->SizeInBytes; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
279 |
- ::operator delete(Storage); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
280 |
+ uint64_t *Storage = reinterpret_cast<uint64_t *>(DI) - DI->SizeInBytes; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
281 |
+ std::free(reinterpret_cast<void*>(Storage)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
282 |
} else { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
283 |
- Use *Storage = static_cast<Use *>(Usr) - Obj->NumUserOperands; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
284 |
+ Use *Storage = reinterpret_cast<Use *>(Usr) - Obj->NumUserOperands; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
285 |
Use::zap(Storage, Storage + Obj->NumUserOperands, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
286 |
/* Delete */ false); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
287 |
- ::operator delete(Storage); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
288 |
+ std::free(reinterpret_cast<void*>(Storage)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
289 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
290 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
291 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
292 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
293 |
--- include/llvm/IR/User.h 2015-12-18 23:52:49.000000000 -0900 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
294 |
+++ include/llvm/IR/User.h 2016-07-06 18:49:29.963198410 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
295 |
@@ -40,7 +40,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
296 |
friend struct HungoffOperandTraits; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
297 |
virtual void anchor(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
298 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
299 |
- LLVM_ATTRIBUTE_ALWAYS_INLINE inline static void * |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
300 |
+ static void* LLVM_ATTRIBUTE_NOINLINE |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
301 |
allocateFixedOperandUser(size_t, unsigned, unsigned); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
302 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
303 |
protected: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
304 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
305 |
--- include/llvm/IR/Attributes.h 2015-12-22 18:57:37.000000000 -0500 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
306 |
+++ include/llvm/IR/Attributes.h 2016-05-08 23:19:20.515430339 -0400 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
307 |
@@ -399,20 +399,25 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
308 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
309 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
310 |
AttrBuilder() |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
311 |
- : Attrs(0), Alignment(0), StackAlignment(0), DerefBytes(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
312 |
- DerefOrNullBytes(0) {} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
313 |
+ : Attrs(0), TargetDepAttrs(), Alignment(0), StackAlignment(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
314 |
+ DerefBytes(0), DerefOrNullBytes(0) { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
315 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
316 |
explicit AttrBuilder(uint64_t Val) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
317 |
- : Attrs(0), Alignment(0), StackAlignment(0), DerefBytes(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
318 |
- DerefOrNullBytes(0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
319 |
+ : Attrs(0), TargetDepAttrs(), Alignment(0), StackAlignment(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
320 |
+ DerefBytes(0), DerefOrNullBytes(0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
321 |
addRawValue(Val); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
322 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
323 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
324 |
AttrBuilder(const Attribute &A) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
325 |
- : Attrs(0), Alignment(0), StackAlignment(0), DerefBytes(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
326 |
- DerefOrNullBytes(0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
327 |
+ : Attrs(0), TargetDepAttrs(), Alignment(0), StackAlignment(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
328 |
+ DerefBytes(0), DerefOrNullBytes(0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
329 |
addAttribute(A); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
330 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
331 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
332 |
AttrBuilder(AttributeSet AS, unsigned Idx); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
333 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
334 |
+ ~AttrBuilder() { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
335 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
336 |
void clear(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
337 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
338 |
/// \brief Add an attribute to the builder. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
339 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
340 |
--- include/llvm/IR/IRBuilder.h 2016-02-18 16:08:56.000000000 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
341 |
+++ include/llvm/IR/IRBuilder.h 2016-05-09 19:14:26.534949228 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
342 |
@@ -64,13 +64,15 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
343 |
ArrayRef<OperandBundleDef> DefaultOperandBundles; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
344 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
345 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
346 |
- IRBuilderBase(LLVMContext &context, MDNode *FPMathTag = nullptr, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
347 |
+ IRBuilderBase(LLVMContext &Ctx, MDNode *FPMathTag = nullptr, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
348 |
ArrayRef<OperandBundleDef> OpBundles = None) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
349 |
- : Context(context), DefaultFPMathTag(FPMathTag), FMF(), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
350 |
- DefaultOperandBundles(OpBundles) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
351 |
- ClearInsertionPoint(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
352 |
+ : CurDbgLocation(), BB(nullptr), InsertPt(), Context(Ctx), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
353 |
+ DefaultFPMathTag(FPMathTag), FMF(), DefaultOperandBundles(OpBundles) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
354 |
+ InsertPt.reset(nullptr); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
355 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
356 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
357 |
+ virtual ~IRBuilderBase() { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
358 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
359 |
//===--------------------------------------------------------------------===// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
360 |
// Builder configuration methods |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
361 |
//===--------------------------------------------------------------------===// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
362 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
363 |
--- lib/IR/IRBuilder.cpp 2015-11-18 21:56:52.000000000 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
364 |
+++ lib/IR/IRBuilder.cpp 2016-05-13 17:40:40.999056490 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
365 |
@@ -18,8 +18,15 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
366 |
#include "llvm/IR/Intrinsics.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
367 |
#include "llvm/IR/LLVMContext.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
368 |
#include "llvm/IR/Statepoint.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
369 |
+#include "llvm/LinkAllIR.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
370 |
using namespace llvm; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
371 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
372 |
+namespace llvm { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
373 |
+ /// See the file ${top_srcdir}/include/llvm/LinkAllIR.h for the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
374 |
+ /// explanation for this hack. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
375 |
+ ForceVMCoreLinking *ForceVMCoreLinking::FVMCL = new ForceVMCoreLinking(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
376 |
+} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
377 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
378 |
/// CreateGlobalString - Make a new global variable with an initializer that |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
379 |
/// has array of i8 type filled in with the nul terminated string value |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
380 |
/// specified. If Name is specified, it is the name of the global variable |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
381 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
382 |
--- lib/IR/Verifier.cpp 2016-01-12 18:31:14.000000000 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
383 |
+++ lib/IR/Verifier.cpp 2016-05-14 07:42:08.348333940 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
384 |
@@ -578,8 +578,12 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
385 |
void Verifier::visitAliaseeSubExpr(SmallPtrSetImpl<const GlobalAlias*> &Visited, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
386 |
const GlobalAlias &GA, const Constant &C) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
387 |
if (const auto *GV = dyn_cast<GlobalValue>(&C)) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
388 |
+#if 0 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
389 |
+ // Check the DeclarationForLinker() for all the extern symbol references. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
390 |
+ // This should not happen here in any scenario. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
391 |
Assert(!GV->isDeclarationForLinker(), "Alias must point to a definition", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
392 |
&GA); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
393 |
+#endif |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
394 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
395 |
if (const auto *GA2 = dyn_cast<GlobalAlias>(GV)) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
396 |
Assert(Visited.insert(GA2).second, "Aliases cannot form a cycle", &GA); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
397 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
398 |
--- include/llvm/IR/Metadata.h 2016-01-11 13:37:41.000000000 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
399 |
+++ include/llvm/IR/Metadata.h 2016-05-10 07:11:35.580234020 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
400 |
@@ -25,6 +25,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
401 |
#include "llvm/IR/LLVMContext.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
402 |
#include "llvm/IR/Value.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
403 |
#include "llvm/Support/ErrorHandling.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
404 |
+#include "llvm/Support/raw_ostream.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
405 |
#include <type_traits> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
406 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
407 |
namespace llvm { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
408 |
@@ -42,6 +43,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
409 |
/// This is a root class for typeless data in the IR. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
410 |
class Metadata { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
411 |
friend class ReplaceableMetadataImpl; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
412 |
+ friend class MDNode; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
413 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
414 |
/// \brief RTTI. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
415 |
const unsigned char SubclassID; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
416 |
@@ -51,7 +53,8 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
417 |
enum StorageType { Uniqued, Distinct, Temporary }; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
418 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
419 |
/// \brief Storage flag for non-uniqued, otherwise unowned, metadata. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
420 |
- unsigned Storage : 2; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
421 |
+ unsigned Storage; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
422 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
423 |
// TODO: expose remaining bits to subclasses. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
424 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
425 |
unsigned short SubclassData16; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
426 |
@@ -91,8 +94,9 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
427 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
428 |
protected: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
429 |
Metadata(unsigned ID, StorageType Storage) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
430 |
- : SubclassID(ID), Storage(Storage), SubclassData16(0), SubclassData32(0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
431 |
- } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
432 |
+ : SubclassID(ID), Storage(Storage), SubclassData16(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
433 |
+ SubclassData32(0) { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
434 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
435 |
~Metadata() = default; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
436 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
437 |
/// \brief Default handling of a changed operand, which asserts. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
438 |
@@ -283,13 +287,15 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
439 |
LLVMContext &Context; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
440 |
uint64_t NextIndex; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
441 |
SmallDenseMap<void *, std::pair<OwnerTy, uint64_t>, 4> UseMap; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
442 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
443 |
/// Flag that can be set to false if this metadata should not be |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
444 |
/// RAUW'ed, e.g. if it is used as the key of a map. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
445 |
bool CanReplace; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
446 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
447 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
448 |
- ReplaceableMetadataImpl(LLVMContext &Context) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
449 |
- : Context(Context), NextIndex(0), CanReplace(true) {} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
450 |
+ ReplaceableMetadataImpl(LLVMContext &Ctx) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
451 |
+ : Context(Ctx), NextIndex(0), UseMap(), CanReplace(true) { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
452 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
453 |
~ReplaceableMetadataImpl() { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
454 |
assert(UseMap.empty() && "Cannot destroy in-use replaceable metadata"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
455 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
456 |
@@ -327,7 +333,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
457 |
/// Because of full uniquing support, each value is only wrapped by a single \a |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
458 |
/// ValueAsMetadata object, so the lookup maps are far more efficient than |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
459 |
/// those using ValueHandleBase. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
460 |
-class ValueAsMetadata : public Metadata, ReplaceableMetadataImpl { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
461 |
+class ValueAsMetadata : public Metadata, public ReplaceableMetadataImpl { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
462 |
friend class ReplaceableMetadataImpl; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
463 |
friend class LLVMContextImpl; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
464 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
465 |
@@ -343,6 +349,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
466 |
: Metadata(ID, Uniqued), ReplaceableMetadataImpl(V->getContext()), V(V) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
467 |
assert(V && "Expected valid value"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
468 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
469 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
470 |
~ValueAsMetadata() = default; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
471 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
472 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
473 |
@@ -396,6 +403,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
474 |
static ConstantAsMetadata *get(Constant *C) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
475 |
return ValueAsMetadata::getConstant(C); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
476 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
477 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
478 |
static ConstantAsMetadata *getIfExists(Constant *C) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
479 |
return ValueAsMetadata::getConstantIfExists(C); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
480 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
481 |
@@ -421,6 +429,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
482 |
static LocalAsMetadata *get(Value *Local) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
483 |
return ValueAsMetadata::getLocal(Local); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
484 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
485 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
486 |
static LocalAsMetadata *getIfExists(Value *Local) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
487 |
return ValueAsMetadata::getLocalIfExists(Local); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
488 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
489 |
@@ -748,6 +757,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
490 |
: Ptr(ReplaceableUses.release()) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
491 |
assert(getReplaceableUses() && "Expected non-null replaceable uses"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
492 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
493 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
494 |
~ContextAndReplaceableUses() { delete getReplaceableUses(); } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
495 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
496 |
operator LLVMContext &() { return getContext(); } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
497 |
@@ -756,11 +766,13 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
498 |
bool hasReplaceableUses() const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
499 |
return Ptr.is<ReplaceableMetadataImpl *>(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
500 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
501 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
502 |
LLVMContext &getContext() const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
503 |
if (hasReplaceableUses()) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
504 |
return getReplaceableUses()->getContext(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
505 |
return *Ptr.get<LLVMContext *>(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
506 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
507 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
508 |
ReplaceableMetadataImpl *getReplaceableUses() const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
509 |
if (hasReplaceableUses()) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
510 |
return Ptr.get<ReplaceableMetadataImpl *>(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
511 |
@@ -820,10 +832,11 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
512 |
class MDNode : public Metadata { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
513 |
friend class ReplaceableMetadataImpl; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
514 |
friend class LLVMContextImpl; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
515 |
+ friend class MDNodeFwdDecl; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
516 |
+ friend class MDTuple; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
517 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
518 |
MDNode(const MDNode &) = delete; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
519 |
void operator=(const MDNode &) = delete; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
520 |
- void *operator new(size_t) = delete; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
521 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
522 |
unsigned NumOperands; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
523 |
unsigned NumUnresolved; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
524 |
@@ -831,17 +844,21 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
525 |
protected: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
526 |
ContextAndReplaceableUses Context; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
527 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
528 |
- void *operator new(size_t Size, unsigned NumOps); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
529 |
- void operator delete(void *Mem); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
530 |
+ static void *operator new(size_t Size, unsigned NumOps) throw(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
531 |
+ static void operator delete(void *Mem) throw(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
532 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
533 |
/// \brief Required by std, but never called. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
534 |
- void operator delete(void *, unsigned) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
535 |
- llvm_unreachable("Constructor throws?"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
536 |
+ static void operator delete(void *, unsigned) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
537 |
+ llvm::errs() << __PRETTY_FUNCTION__ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
538 |
+ << ": This should never be called!\n"; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
539 |
+ abort(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
540 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
541 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
542 |
/// \brief Required by std, but never called. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
543 |
- void operator delete(void *, unsigned, bool) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
544 |
- llvm_unreachable("Constructor throws?"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
545 |
+ static void operator delete(void *, unsigned, bool) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
546 |
+ llvm::errs() << __PRETTY_FUNCTION__ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
547 |
+ << ": This should never be called!\n"; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
548 |
+ abort(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
549 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
550 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
551 |
MDNode(LLVMContext &Context, unsigned ID, StorageType Storage, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
552 |
@@ -1082,6 +1099,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
553 |
: MDNode(C, MDTupleKind, Storage, Vals) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
554 |
setHash(Hash); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
555 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
556 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
557 |
~MDTuple() { dropAllReferences(); } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
558 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
559 |
void setHash(unsigned Hash) { SubclassData32 = Hash; } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
560 |
@@ -1096,12 +1114,16 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
561 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
562 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
563 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
564 |
+ void *operator new(size_t Size, unsigned NumOps) throw(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
565 |
+ void operator delete(void *Mem) throw(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
566 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
567 |
/// \brief Get the hash, if any. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
568 |
unsigned getHash() const { return SubclassData32; } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
569 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
570 |
static MDTuple *get(LLVMContext &Context, ArrayRef<Metadata *> MDs) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
571 |
return getImpl(Context, MDs, Uniqued); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
572 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
573 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
574 |
static MDTuple *getIfExists(LLVMContext &Context, ArrayRef<Metadata *> MDs) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
575 |
return getImpl(Context, MDs, Uniqued, /* ShouldCreate */ false); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
576 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
577 |
@@ -1154,18 +1176,20 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
578 |
/// An iterator that transforms an \a MDNode::iterator into an iterator over a |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
579 |
/// particular Metadata subclass. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
580 |
template <class T> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
581 |
-class TypedMDOperandIterator |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
582 |
- : std::iterator<std::input_iterator_tag, T *, std::ptrdiff_t, void, T *> { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
583 |
+class TypedMDOperandIterator : public std::iterator<std::input_iterator_tag, T *, std::ptrdiff_t, void, T *> { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
584 |
+private: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
585 |
MDNode::op_iterator I = nullptr; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
586 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
587 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
588 |
TypedMDOperandIterator() = default; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
589 |
explicit TypedMDOperandIterator(MDNode::op_iterator I) : I(I) {} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
590 |
T *operator*() const { return cast_or_null<T>(*I); } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
591 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
592 |
TypedMDOperandIterator &operator++() { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
593 |
++I; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
594 |
return *this; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
595 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
596 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
597 |
TypedMDOperandIterator operator++(int) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
598 |
TypedMDOperandIterator Temp(*this); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
599 |
++I; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
600 |
@@ -1180,6 +1204,7 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
601 |
/// This is a wrapper for \a MDTuple that makes it act like an array holding a |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
602 |
/// particular type of metadata. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
603 |
template <class T> class MDTupleTypedArrayWrapper { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
604 |
+private: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
605 |
const MDTuple *N = nullptr; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
606 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
607 |
public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
608 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
609 |
--- include/llvm/LinkAllIR.h 2014-01-13 01:26:24.000000000 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
610 |
+++ include/llvm/LinkAllIR.h 2016-07-06 07:55:18.900250515 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
611 |
@@ -32,22 +32,49 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
612 |
#include "llvm/Support/Program.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
613 |
#include "llvm/Support/Signals.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
614 |
#include "llvm/Support/TimeValue.h" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
615 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
616 |
#include <cstdlib> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
617 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
618 |
-namespace { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
619 |
- struct ForceVMCoreLinking { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
620 |
+namespace llvm { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
621 |
+ class ForceVMCoreLinking { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
622 |
+ private: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
623 |
ForceVMCoreLinking() { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
624 |
// We must reference VMCore in such a way that compilers will not |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
625 |
// delete it all as dead code, even with whole program optimization, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
626 |
// yet is effectively a NO-OP. As the compiler isn't smart enough |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
627 |
// to know that getenv() never returns -1, this will do the job. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
628 |
+ // Except for the fact that your theory doesn't work. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
629 |
if (std::getenv("bar") != (char*) -1) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
630 |
return; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
631 |
- (void)new llvm::Module("", llvm::getGlobalContext()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
632 |
- (void)new llvm::UnreachableInst(llvm::getGlobalContext()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
633 |
- (void) llvm::createVerifierPass(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
634 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
635 |
+ // Hi, GCC. Please don't throw this function away. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
636 |
+ asm(""); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
637 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
638 |
+ llvm::Module *M = new llvm::Module("", llvm::getGlobalContext()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
639 |
+ (void) M; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
640 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
641 |
+ llvm::Instruction *I = |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
642 |
+ new llvm::UnreachableInst(llvm::getGlobalContext()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
643 |
+ (void) I; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
644 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
645 |
+ FunctionPass *FP = llvm::createVerifierPass(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
646 |
+ (void) FP; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
647 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
648 |
- } ForceVMCoreLinking; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
649 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
650 |
+ public: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
651 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
652 |
+ static ForceVMCoreLinking *Initialize(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
653 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
654 |
+ ~ForceVMCoreLinking() { } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
655 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
656 |
+ private: |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
657 |
+ /// Initialization of this is done in lib/IR/IRBuilder.cpp |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
658 |
+ /// because of initialization ordering problems with global |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
659 |
+ /// static variables. The design of this static initialization |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
660 |
+ /// dependency chain is completely broken. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
661 |
+ static ForceVMCoreLinking *FVMCL; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
662 |
+ }; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
663 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
664 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
665 |
#endif |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
666 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
667 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
668 |
--- lib/IR/AttributeImpl.h 2015-08-06 02:49:17.000000000 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
669 |
+++ lib/IR/AttributeImpl.h 2016-05-09 16:14:24.849498745 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
670 |
@@ -186,6 +186,11 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
671 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
672 |
}; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
673 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
674 |
+static_assert(AlignOf<AttributeSetNode>::Alignment >= |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
675 |
+ AlignOf<Attribute>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
676 |
+ "Insufficient alignment for objects appended to " |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
677 |
+ "AttributeSetNode"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
678 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
679 |
typedef std::pair<unsigned, AttributeSetNode *> IndexAttrPair; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
680 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
681 |
//===----------------------------------------------------------------------===// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
682 |
@@ -279,6 +284,11 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
683 |
void dump() const; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
684 |
}; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
685 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
686 |
+static_assert(AlignOf<AttributeSetImpl>::Alignment >= |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
687 |
+ AlignOf<IndexAttrPair>::Alignment, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
688 |
+ "Insufficient alignment for objects appended to " |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
689 |
+ "AttributeSetImpl"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
690 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
691 |
} // end llvm namespace |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
692 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
693 |
#endif |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
694 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
695 |
--- lib/IR/Attributes.cpp 2016-01-03 14:43:40.000000000 -0500 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
696 |
+++ lib/IR/Attributes.cpp 2016-05-08 23:19:20.532430753 -0400 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
697 |
@@ -1133,8 +1133,8 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
698 |
//===----------------------------------------------------------------------===// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
699 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
700 |
AttrBuilder::AttrBuilder(AttributeSet AS, unsigned Index) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
701 |
- : Attrs(0), Alignment(0), StackAlignment(0), DerefBytes(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
702 |
- DerefOrNullBytes(0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
703 |
+ : Attrs(0), TargetDepAttrs(), Alignment(0), StackAlignment(0), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
704 |
+ DerefBytes(0), DerefOrNullBytes(0) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
705 |
AttributeSetImpl *pImpl = AS.pImpl; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
706 |
if (!pImpl) return; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
707 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
708 |
@@ -1185,7 +1185,9 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
709 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
710 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
711 |
AttrBuilder &AttrBuilder::addAttribute(StringRef A, StringRef V) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
712 |
- TargetDepAttrs[A] = V; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
713 |
+ std::string AS = A.str(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
714 |
+ std::string VS = V.str(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
715 |
+ TargetDepAttrs[AS] = VS; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
716 |
return *this; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
717 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
718 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
719 |
@@ -1229,9 +1231,11 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
720 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
721 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
722 |
AttrBuilder &AttrBuilder::removeAttribute(StringRef A) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
723 |
- std::map<std::string, std::string>::iterator I = TargetDepAttrs.find(A); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
724 |
+ std::string AS = A.str(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
725 |
+ std::map<std::string, std::string>::iterator I = TargetDepAttrs.find(AS); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
726 |
if (I != TargetDepAttrs.end()) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
727 |
TargetDepAttrs.erase(I); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
728 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
729 |
return *this; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
730 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
731 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
732 |
@@ -1241,6 +1245,12 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
733 |
assert(isPowerOf2_32(Align) && "Alignment must be a power of two."); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
734 |
assert(Align <= 0x40000000 && "Alignment too large."); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
735 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
736 |
+ if (!isPowerOf2_32(Align)) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
737 |
+ llvm::errs() << __PRETTY_FUNCTION__ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
738 |
+ << ": Alignment must be a power of two!\n"; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
739 |
+ abort(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
740 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
741 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
742 |
Attrs[Attribute::Alignment] = true; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
743 |
Alignment = Align; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
744 |
return *this; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
745 |
@@ -1333,7 +1343,8 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
746 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
747 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
748 |
bool AttrBuilder::contains(StringRef A) const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
749 |
- return TargetDepAttrs.find(A) != TargetDepAttrs.end(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
750 |
+ std::string AS = A.str(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
751 |
+ return TargetDepAttrs.find(AS) != TargetDepAttrs.end(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
752 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
753 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
754 |
bool AttrBuilder::hasAttributes() const { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
755 |
@@ -1357,7 +1368,8 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
756 |
return true; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
757 |
} else { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
758 |
assert(Attr.isStringAttribute() && "Invalid attribute kind!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
759 |
- return TargetDepAttrs.find(Attr.getKindAsString())!=TargetDepAttrs.end(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
760 |
+ std::string AS = Attr.getKindAsString().str(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
761 |
+ return TargetDepAttrs.find(AS) != TargetDepAttrs.end(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
762 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
763 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
764 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
765 |
### |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
766 |
--- lib/IR/LegacyPassManager.cpp 2016-01-06 17:55:03.000000000 -0500 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
767 |
+++ lib/IR/LegacyPassManager.cpp 2016-05-08 23:19:20.532430753 -0400 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
768 |
@@ -59,28 +59,27 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
769 |
clEnumVal(Details , "print pass details when it is executed"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
770 |
clEnumValEnd)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
771 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
772 |
-namespace { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
773 |
-typedef llvm::cl::list<const llvm::PassInfo *, bool, PassNameParser> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
774 |
-PassOptionList; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
775 |
-} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
776 |
- |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
777 |
// Print IR out before/after specified passes. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
778 |
-static PassOptionList |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
779 |
-PrintBefore("print-before", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
780 |
- llvm::cl::desc("Print IR before specified passes"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
781 |
- cl::Hidden); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
782 |
- |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
783 |
-static PassOptionList |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
784 |
-PrintAfter("print-after", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
785 |
- llvm::cl::desc("Print IR after specified passes"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
786 |
- cl::Hidden); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
787 |
+static llvm::cl::list<const llvm::PassInfo *, bool, PassNameParser> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
788 |
+PrintBefore(cl::Prefix, "print-before", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
789 |
+ cl::desc("Print IR before specified passes"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
790 |
+ cl::value_desc("Print IR before specified passes"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
791 |
+ cl::Hidden, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
792 |
+ cl::ZeroOrMore); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
793 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
794 |
+static llvm::cl::list<const llvm::PassInfo *, bool, PassNameParser> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
795 |
+PrintAfter(cl::Prefix, "print-after", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
796 |
+ cl::desc("Print IR after specified passes"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
797 |
+ cl::value_desc("Print IR after specified passes"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
798 |
+ cl::Hidden, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
799 |
+ cl::ZeroOrMore); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
800 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
801 |
static cl::opt<bool> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
802 |
-PrintBeforeAll("print-before-all", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
803 |
+PrintBeforeAll(cl::NormalFormatting, "print-before-all", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
804 |
llvm::cl::desc("Print IR before each pass"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
805 |
cl::init(false)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
806 |
static cl::opt<bool> |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
807 |
-PrintAfterAll("print-after-all", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
808 |
+PrintAfterAll(cl::NormalFormatting, "print-after-all", |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
809 |
llvm::cl::desc("Print IR after each pass"), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
810 |
cl::init(false)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
811 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
812 |
@@ -94,8 +93,10 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
813 |
/// This is a helper to determine whether to print IR before or |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
814 |
/// after a pass. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
815 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
816 |
-static bool ShouldPrintBeforeOrAfterPass(const PassInfo *PI, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
817 |
- PassOptionList &PassesToPrint) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
818 |
+static bool |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
819 |
+ShouldPrintBeforeOrAfterPass(const PassInfo *PI, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
820 |
+ llvm::cl::list<const llvm::PassInfo *, bool, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
821 |
+ PassNameParser> &PassesToPrint) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
822 |
for (auto *PassInf : PassesToPrint) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
823 |
if (PassInf) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
824 |
if (PassInf->getPassArgument() == PI->getPassArgument()) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
825 |
###. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
826 |
--- lib/IR/Metadata.cpp 2016-01-11 13:37:41.000000000 -0800 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
827 |
+++ lib/IR/Metadata.cpp 2016-05-09 19:35:11.382012208 -0700 |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
828 |
@@ -429,33 +429,75 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
829 |
"Alignment is insufficient after objects prepended to " #CLASS); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
830 |
#include "llvm/IR/Metadata.def" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
831 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
832 |
-void *MDNode::operator new(size_t Size, unsigned NumOps) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
833 |
+void *MDNode::operator new(size_t Size, unsigned NumOps) throw() { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
834 |
+ assert((Size >= sizeof(MDNode)) && "Insufficient size to operator new!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
835 |
+ // MDNode wants to construct its ancillary MDOperands ** BEFORE ** |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
836 |
+ // itself. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
837 |
size_t OpSize = NumOps * sizeof(MDOperand); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
838 |
// uint64_t is the most aligned type we need support (ensured by static_assert |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
839 |
// above) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
840 |
OpSize = RoundUpToAlignment(OpSize, llvm::alignOf<uint64_t>()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
841 |
- void *Ptr = reinterpret_cast<char *>(::operator new(OpSize + Size)) + OpSize; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
842 |
- MDOperand *O = static_cast<MDOperand *>(Ptr); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
843 |
- for (MDOperand *E = O - NumOps; O != E; --O) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
844 |
- (void)new (O - 1) MDOperand; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
845 |
- return Ptr; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
846 |
+ std::size_t RSize = Size + OpSize + sizeof(Metadata) + sizeof(uintptr_t); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
847 |
+ RSize = RoundUpToAlignment(RSize, llvm::alignOf<uint64_t>()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
848 |
+ std::size_t Alignment = llvm::alignOf<uint64_t>(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
849 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
850 |
+ void *P; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
851 |
+#if defined(_MSC_VER) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
852 |
+ P = _aligned_malloc(RSize, Alignment); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
853 |
+ assert(P && "_aligned_malloc failed!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
854 |
+ if (!P) return 0; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
855 |
+#else |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
856 |
+ int R = posix_memalign(&P, Alignment, RSize); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
857 |
+ assert((R == 0) && "posix_memalign failed!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
858 |
+ if (R != 0) return 0; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
859 |
+#endif |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
860 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
861 |
+ (void) std::memset(P, 0, RSize); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
862 |
+ unsigned char *UC = static_cast<unsigned char*>(P); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
863 |
+ MDNode *MN = reinterpret_cast<MDNode*>((UC + RSize) - Size); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
864 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
865 |
+ MDOperand *O = reinterpret_cast<MDOperand*>(MN); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
866 |
+ MDOperand *MO; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
867 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
868 |
+ for (MDOperand *E = O - NumOps; O != E; --O) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
869 |
+ MO = new (O - 1) MDOperand(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
870 |
+ assert(MO && "MDOperand placement new failed!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
871 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
872 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
873 |
+ // We store the address of the aligned allocated buffer |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
874 |
+ // in the last extra element of the buffer. This address |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
875 |
+ // will be used by the corresponding operator delete to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
876 |
+ // free the correct address. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
877 |
+ uintptr_t *U = reinterpret_cast<uintptr_t*>(O - 1); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
878 |
+ *U = reinterpret_cast<uintptr_t>(P); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
879 |
+ return MN; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
880 |
+} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
881 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
882 |
+void MDNode::operator delete(void *Mem) throw() { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
883 |
+ MDNode *MN = reinterpret_cast<MDNode *>(Mem); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
884 |
+ Metadata *MTD = static_cast<Metadata*>(MN); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
885 |
+ std::size_t OSize = MN->NumOperands * sizeof(MDOperand); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
886 |
+ OSize = RoundUpToAlignment(OSize, llvm::alignOf<uint64_t>()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
887 |
+ MDOperand *O = static_cast<MDOperand *>(Mem); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
888 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
889 |
+ for (MDOperand *E = O - MN->NumOperands; O != E; --O) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
890 |
+ MDOperand *MO = (O - 1); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
891 |
+ MO->~MDOperand(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
892 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
893 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
894 |
-void MDNode::operator delete(void *Mem) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
895 |
- MDNode *N = static_cast<MDNode *>(Mem); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
896 |
- size_t OpSize = N->NumOperands * sizeof(MDOperand); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
897 |
- OpSize = RoundUpToAlignment(OpSize, llvm::alignOf<uint64_t>()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
898 |
+ MTD->~Metadata(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
899 |
+ MN->~MDNode(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
900 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
901 |
- MDOperand *O = static_cast<MDOperand *>(Mem); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
902 |
- for (MDOperand *E = O - N->NumOperands; O != E; --O) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
903 |
- (O - 1)->~MDOperand(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
904 |
- ::operator delete(reinterpret_cast<char *>(Mem) - OpSize); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
905 |
+ // This is the address of the allocated buffer in the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
906 |
+ // extra buffer space allocated by operator new. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
907 |
+ uintptr_t *U = reinterpret_cast<uintptr_t*>(O - 1); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
908 |
+ std::free(reinterpret_cast<void*>(*U)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
909 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
910 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
911 |
-MDNode::MDNode(LLVMContext &Context, unsigned ID, StorageType Storage, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
912 |
+MDNode::MDNode(LLVMContext &Ctx, unsigned ID, StorageType Storage, |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
913 |
ArrayRef<Metadata *> Ops1, ArrayRef<Metadata *> Ops2) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
914 |
: Metadata(ID, Storage), NumOperands(Ops1.size() + Ops2.size()), |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
915 |
- NumUnresolved(0), Context(Context) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
916 |
+ NumUnresolved(0U), Context(Ctx) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
917 |
unsigned Op = 0; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
918 |
for (Metadata *MD : Ops1) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
919 |
setOperand(Op++, MD); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
920 |
@@ -692,6 +734,9 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
921 |
llvm_unreachable("Invalid subclass of MDNode"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
922 |
#define HANDLE_MDNODE_LEAF(CLASS) \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
923 |
case CLASS##Kind: \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
924 |
+ static_assert(llvm::AlignOf<uint64_t>::Alignment >= \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
925 |
+ llvm::AlignOf<CLASS>::Alignment, \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
926 |
+ "Insufficient alignment for objects prepended to " #CLASS); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
927 |
delete cast<CLASS>(this); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
928 |
break; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
929 |
#include "llvm/IR/Metadata.def" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
930 |
@@ -729,6 +774,9 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
931 |
#define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
932 |
case CLASS##Kind: { \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
933 |
CLASS *SubclassThis = cast<CLASS>(this); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
934 |
+ static_assert(llvm::AlignOf<uint64_t>::Alignment >= \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
935 |
+ llvm::AlignOf<CLASS>::Alignment, \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
936 |
+ "Insufficient alignment for objects prepended to " #CLASS); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
937 |
std::integral_constant<bool, HasCachedHash<CLASS>::value> \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
938 |
ShouldRecalculateHash; \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
939 |
dispatchRecalculateHash(SubclassThis, ShouldRecalculateHash); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
940 |
@@ -744,6 +792,9 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
941 |
llvm_unreachable("Invalid or non-uniquable subclass of MDNode"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
942 |
#define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
943 |
case CLASS##Kind: \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
944 |
+ static_assert(llvm::AlignOf<uint64_t>::Alignment >= \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
945 |
+ llvm::AlignOf<CLASS>::Alignment, \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
946 |
+ "Insufficient alignment for objects prepended to " #CLASS); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
947 |
getContext().pImpl->CLASS##s.erase(cast<CLASS>(this)); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
948 |
break; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
949 |
#include "llvm/IR/Metadata.def" |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
950 |
@@ -784,6 +835,9 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
951 |
llvm_unreachable("Invalid subclass of MDNode"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
952 |
#define HANDLE_MDNODE_LEAF(CLASS) \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
953 |
case CLASS##Kind: { \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
954 |
+ static_assert(llvm::AlignOf<uint64_t>::Alignment >= \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
955 |
+ llvm::AlignOf<CLASS>::Alignment, \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
956 |
+ "Insufficient alignment for objects prepended to " #CLASS); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
957 |
std::integral_constant<bool, HasCachedHash<CLASS>::value> ShouldResetHash; \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
958 |
dispatchResetHash(cast<CLASS>(this), ShouldResetHash); \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
959 |
break; \ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
960 |
@@ -1007,6 +1061,88 @@ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
961 |
} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
962 |
|
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
963 |
//===----------------------------------------------------------------------===// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
964 |
+// MDTupel implementation. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
965 |
+// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
966 |
+void *MDTuple::operator new(size_t Size, unsigned NumOps) throw() { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
967 |
+ assert((Size >= sizeof(MDTuple)) && "Insufficient size to operator new!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
968 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
969 |
+ std::size_t OSize = NumOps * sizeof(MDOperand); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
970 |
+ OSize = RoundUpToAlignment(OSize, llvm::alignOf<uint64_t>()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
971 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
972 |
+ // Allocate extra space for an uintptr_t at the beginning of the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
973 |
+ // buffer. This uintptr_t is where we will store the address of |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
974 |
+ // the memory-aligned storage buffer. It will be plasced immediately |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
975 |
+ // after the last MDOperand. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
976 |
+ // This address will be computed by the matching operator delete. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
977 |
+ // The total amount of space allocated must include the Size |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
978 |
+ // parameter passed in. This parameter value is not necessarily |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
979 |
+ // equal to sizeof(MDTuple), it can be greater. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
980 |
+ std::size_t RSize = Size + OSize + sizeof(MDTuple) + sizeof(uintptr_t); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
981 |
+ RSize = RoundUpToAlignment(RSize, llvm::alignOf<uint64_t>()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
982 |
+ std::size_t Alignment = llvm::alignOf<uint64_t>(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
983 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
984 |
+ void *P; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
985 |
+#if defined(_MSC_VER) |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
986 |
+ P = _aligned_malloc(RSize, Alignment); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
987 |
+ assert(P && "_aligned_malloc failed!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
988 |
+ if (!P) return 0; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
989 |
+#else |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
990 |
+ int R = posix_memalign(&P, Alignment, RSize); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
991 |
+ assert((R == 0) && "posix_memalign failed!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
992 |
+ if (R != 0) return 0; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
993 |
+#endif |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
994 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
995 |
+ (void) std::memset(P, 0, RSize); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
996 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
997 |
+ // Set a valid pointer to the address which will be returned |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
998 |
+ // by this operator. This will be a pointer to a MDTuple. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
999 |
+ unsigned char *UC = static_cast<unsigned char*>(P); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1000 |
+ MDTuple *MDT = reinterpret_cast<MDTuple*>((UC + RSize) - Size); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1001 |
+ MDNode *MN = static_cast<MDNode*>(MDT); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1002 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1003 |
+ MDOperand *O = reinterpret_cast<MDOperand*>(MN); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1004 |
+ MDOperand *MO; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1005 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1006 |
+ for (MDOperand *E = O - NumOps; O != E; --O) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1007 |
+ MO = new (O - 1) MDOperand(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1008 |
+ assert(MO && "MDOperand placement new failed!"); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1009 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1010 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1011 |
+ // We store the address of the aligned allocated buffer |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1012 |
+ // in the last extra element of the buffer. This address |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1013 |
+ // will be used by the corresponding operator delete to |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1014 |
+ // free the correct address. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1015 |
+ uintptr_t *U = reinterpret_cast<uintptr_t*>(O - 1); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1016 |
+ *U = reinterpret_cast<uintptr_t>(P); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1017 |
+ return MDT; |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1018 |
+} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1019 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1020 |
+void MDTuple::operator delete(void *Mem) throw() { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1021 |
+ MDTuple *MDT = reinterpret_cast<MDTuple*>(Mem); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1022 |
+ // UniquableMDNode *UMN = static_cast<UniquableMDNode*>(MDT); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1023 |
+ MDNode *MN = static_cast<MDNode*>(MDT); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1024 |
+ unsigned NumOperands = MN->getNumOperands(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1025 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1026 |
+ std::size_t OSize = NumOperands * sizeof(MDOperand); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1027 |
+ OSize = RoundUpToAlignment(OSize, llvm::alignOf<uint64_t>()); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1028 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1029 |
+ MDOperand *O = |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1030 |
+ reinterpret_cast<MDOperand*>(reinterpret_cast<void*>(MN)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1031 |
+ for (MDOperand *E = O - NumOperands; O != E; --O) { |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1032 |
+ MDOperand *MO = (O - 1); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1033 |
+ MO->~MDOperand(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1034 |
+ } |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1035 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1036 |
+ // This is teh address of the allocated buffer in the |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1037 |
+ // extra space allocated by operator new in RSize. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1038 |
+ uintptr_t *U = reinterpret_cast<uintptr_t*>(O - 1); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1039 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1040 |
+ // UMN->~UniquableMDNode(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1041 |
+ MDT->~MDTuple(); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1042 |
+ std::free(reinterpret_cast<void*>(*U)); |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1043 |
+} |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1044 |
+ |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1045 |
+//===----------------------------------------------------------------------===// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1046 |
// NamedMDNode implementation. |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1047 |
// |
92717ce71105
24326140 upgrade LLVM to 3.8.1
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1048 |