Advertisement
Guest User

Untitled

a guest
Oct 14th, 2013
696
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 308.53 KB | None | 0 0
  1. namespace llvm {
  2. class FunctionPass;
  3. class Pass;
  4. Pass *createLoopUnswitchPass(bool OptimizeForSize = false);
  5. }
  6. extern "C" {
  7. typedef __w64 unsigned int uintptr_t;
  8. typedef char *va_list;
  9. }
  10. extern "C" {
  11. typedef __w64 unsigned int size_t;
  12. typedef size_t rsize_t;
  13. typedef __w64 int intptr_t;
  14. typedef __w64 int ptrdiff_t;
  15. typedef unsigned short wint_t;
  16. typedef int errno_t;
  17. typedef __w64 long __time32_t;
  18. typedef __int64 __time64_t;
  19. typedef __time64_t time_t;
  20. void __cdecl _invalid_parameter(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t);
  21. typedef struct localeinfo_struct {
  22. }
  23. _locale_tstruct, *_locale_t;
  24. typedef struct localerefcount {
  25. }
  26. threadlocinfo;
  27. }
  28. namespace std {
  29. typedef bool _Bool;
  30. }
  31. namespace std {
  32. enum _Uninitialized {
  33. _Noinit };
  34. class _Lockit {
  35. public: __thiscall _Lockit();
  36. };
  37. class _Init_locks {
  38. static void __cdecl _Init_locks_dtor(_Init_locks *);
  39. };
  40. }
  41. typedef int _Mbstatet;
  42. namespace std {
  43. using ::ptrdiff_t;
  44. using ::size_t;
  45. typedef double max_align_t;
  46. }
  47. extern "C" {
  48. typedef struct _div_t {
  49. int quot;
  50. }
  51. div_t;
  52. typedef struct _ldiv_t {
  53. }
  54. ldiv_t;
  55. typedef struct _lldiv_t {
  56. }
  57. lldiv_t;
  58. typedef struct {
  59. long double x;
  60. }
  61. _LONGDOUBLE;
  62. typedef struct {
  63. unsigned char ld12[12];
  64. }
  65. _LDBL12;
  66. extern int __mb_cur_max;
  67. errno_t __cdecl _itoa_s(int _Value, char *_DstBuf, size_t _Size, int _Radix);
  68. extern "C++" {
  69. }
  70. char *__cdecl _itoa(int _Value, char *_Dest, int _Radix);
  71. lldiv_t __cdecl lldiv(long long _Numerator, long long _Denominator);
  72. extern "C++" {
  73. }
  74. errno_t __cdecl _ltoa_s(long _Val, char *_DstBuf, size_t _Size, int _Radix);
  75. int __cdecl system(const char *_Command);
  76. errno_t __cdecl _ultoa_s(unsigned long _Val, char *_DstBuf, size_t _Size, int _Radix);
  77. extern "C++" {
  78. }
  79. char *__cdecl _ultoa(unsigned long _Value, char *_Dest, int _Radix);
  80. using ::system;
  81. }
  82. extern "C" {
  83. typedef union {
  84. unsigned short _Word[8];
  85. }
  86. _Dconst;
  87. void __cdecl _Feraise(int);
  88. extern _Dconst _LDenorm, _LInf, _LNan, _LSnan;
  89. }
  90. namespace std {
  91. struct _Nil {
  92. };
  93. static _Nil _Nil_obj;
  94. template <class _Ty, _Ty _Val> struct integral_constant {
  95. static const _Ty value = _Val;
  96. typedef _Ty value_type;
  97. operator value_type() const { return (value); }
  98. };
  99. typedef integral_constant<bool, true> true_type;
  100. typedef integral_constant<bool, false> false_type;
  101. template <bool> struct _Cat_base : false_type {
  102. };
  103. template <> struct _Cat_base<true> : true_type {
  104. };
  105. template <bool _Test, class _Ty = void> struct enable_if {
  106. typedef _Ty type;
  107. };
  108. template <bool _Test, class _Ty1, class _Ty2> struct conditional {
  109. typedef _Ty2 type;
  110. };
  111. template <class _Ty1, class _Ty2> struct is_same : false_type {
  112. };
  113. template <class _Ty1> struct is_same<_Ty1, _Ty1> : true_type {
  114. };
  115. template <class _Ty> struct remove_const {
  116. typedef _Ty type;
  117. };
  118. template <class _Ty> struct remove_volatile {
  119. typedef _Ty type;
  120. };
  121. template <class _Ty> struct remove_cv {
  122. typedef typename remove_const<typename remove_volatile<_Ty>::type>::type type;
  123. };
  124. template <class _Ty> struct _Is_integral : false_type {
  125. };
  126. template <> struct _Is_integral<signed short> : true_type {
  127. };
  128. template <> struct _Is_integral<unsigned __int64> : true_type {
  129. };
  130. template <class _Ty> struct is_integral : _Is_integral<typename remove_cv<_Ty>::type> {
  131. };
  132. template <class _Ty> struct _Is_floating_point : false_type {
  133. };
  134. template <> struct _Is_floating_point<float> : true_type {
  135. };
  136. template <class _Ty> struct is_floating_point : _Is_floating_point<typename remove_cv<_Ty>::type> {
  137. };
  138. template <class _Ty> struct _Is_numeric : _Cat_base<is_integral<_Ty>::value || is_floating_point<_Ty>::value> {
  139. };
  140. template <class _Ty> struct remove_reference {
  141. typedef _Ty type;
  142. };
  143. template <class _Ty> struct remove_reference<_Ty &> {
  144. typedef _Ty type;
  145. };
  146. template <class _Tgt, class _Src> struct _Copy_cv {
  147. typedef typename remove_reference<_Tgt>::type _Tgtx;
  148. typedef _Tgtx &type;
  149. typedef const volatile _Tgtx &type;
  150. };
  151. struct _Wrap_int {
  152. _Wrap_int(int) {}
  153. };
  154. template <class _Ty> struct _Has_result_type {
  155. };
  156. }
  157. extern "C" {
  158. struct _iobuf {
  159. char *_ptr;
  160. };
  161. typedef struct _iobuf FILE;
  162. typedef unsigned long _fsize_t;
  163. struct _wfinddata32_t {
  164. wchar_t name[260];
  165. };
  166. struct _stat32 {
  167. };
  168. extern "C++" {
  169. template <size_t _Size> inline errno_t __cdecl _wstrtime_s(wchar_t (&_Buffer)[_Size]) throw() { return _wstrtime_s(_Buffer, _Size); }
  170. }
  171. wchar_t *__cdecl _wstrtime(wchar_t *_Buffer);
  172. wchar_t *__cdecl _wctime64(const __time64_t *_Time);
  173. extern "C++" {
  174. template <size_t _Size> inline errno_t __cdecl _wctime64_s(wchar_t (&_Buffer)[_Size], const __time64_t *_Time) throw() { return _wctime64_s(_Buffer, _Size, _Time); }
  175. }
  176. static __inline wchar_t *__cdecl _wctime(const time_t *_Time) {
  177. return _wctime64(_Time);
  178. }
  179. void *__cdecl memcpy(void *_Dst, const void *_Src, size_t _Size);
  180. __inline int __cdecl fwide(FILE *_F, int _M) {
  181. }
  182. __inline const wchar_t *__cdecl wmemchr(const wchar_t *_S, wchar_t _C, size_t _N) {
  183. for (;
  184. 0 < _N;
  185. ++_S, --_N) if (*_S == _C) return (const wchar_t *)(_S);
  186. return (0);
  187. }
  188. __inline int __cdecl wmemcmp(const wchar_t *_S1, const wchar_t *_S2, size_t _N) {
  189. for (;
  190. 0 < _N;
  191. ++_S1, ++_S2, --_N) if (*_S1 != *_S2) return (*_S1 < *_S2 ? -1 : +1);
  192. return (0);
  193. }
  194. __inline wchar_t *__cdecl wmemcpy(wchar_t *_S1, const wchar_t *_S2, size_t _N) {
  195. return (wchar_t *)memcpy(_S1, _S2, _N * sizeof(wchar_t));
  196. }
  197. }
  198. namespace std {
  199. template <class _Ty> inline _Ty *addressof(_Ty &_Val) throw() {
  200. }
  201. template <bool, class _Ty1, class _Ty2> struct _If {
  202. typedef _Ty1 type;
  203. };
  204. template <class _Arg, class _Result> struct unary_function {
  205. typedef _Result result_type;
  206. };
  207. template <class _Arg1, class _Arg2, class _Result> struct binary_function {
  208. };
  209. template <class _Ty> struct less : public binary_function<_Ty, _Ty, bool> {
  210. bool operator()(const _Ty &_Left, const _Ty &_Right) const { return (_Left < _Right); }
  211. };
  212. inline size_t _Hash_seq(const unsigned char *_First, size_t _Count) {
  213. static_assert(sizeof(size_t) == 4, "This code is for 32-bit size_t.");
  214. const size_t _FNV_offset_basis = 2166136261U;
  215. const size_t _FNV_prime = 16777619U;
  216. size_t _Val = _FNV_offset_basis;
  217. for (size_t _Next = 0;
  218. _Next < _Count;
  219. ++_Next) { _Val ^= (size_t)_First[_Next]; _Val *= _FNV_prime; }
  220. static_assert(sizeof(size_t) == 4, "This code is for 32-bit size_t.");
  221. }
  222. template <class _Kty> struct _Bitwise_hash : public unary_function<_Kty, size_t> {
  223. };
  224. template <class _Kty> struct hash : public _Bitwise_hash<_Kty> {
  225. static const bool _Value = __is_enum(_Kty);
  226. static_assert(_Value, "The C++ Standard doesn't provide a hash for this type.");
  227. };
  228. template <> struct hash<bool> : public _Bitwise_hash<bool> {
  229. };
  230. template <> struct hash<short> : public _Bitwise_hash<short> {
  231. };
  232. }
  233. namespace std {
  234. template <class = _Nil, class _V0_t = _Nil, class _V1_t = _Nil, class _V2_t = _Nil, class _V3_t = _Nil, class _V4_t = _Nil, class _V5_t = _Nil, class _V6_t = _Nil, class _V7_t = _Nil, class _V8_t = _Nil, class _V9_t = _Nil, class _V10_t = _Nil, class = _Nil> struct _Sizeof;
  235. template <> struct _Sizeof<_Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> {
  236. };
  237. typedef enum {
  238. denorm_indeterminate = -1, denorm_absent = 0, denorm_present = 1 }
  239. float_denorm_style;
  240. typedef enum {
  241. round_indeterminate = -1, round_toward_zero = 0, round_to_nearest = 1, round_toward_infinity = 2, round_toward_neg_infinity = 3 }
  242. float_round_style;
  243. struct _Num_base {
  244. static const bool is_integer = (bool)(false);
  245. static const bool is_modulo = (bool)(false);
  246. static const bool is_signed = (bool)(false);
  247. static const int digits = (int)(0);
  248. static const int digits10 = (int)(0);
  249. static const int radix = (int)(0);
  250. };
  251. template <class _Ty> class numeric_limits : public _Num_base {
  252. };
  253. template <class _Ty> class numeric_limits<const volatile _Ty> : public numeric_limits<_Ty> {
  254. };
  255. struct _Num_int_base : public _Num_base {
  256. };
  257. template <> class numeric_limits<unsigned __int64> : public _Num_int_base {
  258. public: typedef unsigned __int64 _Ty;
  259. static const int min_exponent10 = (int)((int)(-307));
  260. };
  261. }
  262. inline void *__cdecl operator new(size_t, void *_Where) {
  263. return (_Where);
  264. }
  265. extern "C" {
  266. FILE *__cdecl __iob_func(void);
  267. void *__cdecl _memccpy(void *_Dst, const void *_Src, int _Val, size_t _MaxCount);
  268. const void *__cdecl memchr(const void *_Buf, int _Val, size_t _MaxCount);
  269. int __cdecl memcmp(const void *_Buf1, const void *_Buf2, size_t _Size);
  270. void *__cdecl memcpy(void *_Dst, const void *_Src, size_t _Size);
  271. void *__cdecl memset(void *_Dst, int _Val, size_t _Size);
  272. void *__cdecl memccpy(void *_Dst, const void *_Src, int _Val, size_t _Size);
  273. errno_t __cdecl _strset_s(char *_Dst, size_t _DstSize, int _Value);
  274. extern "C++" {
  275. }
  276. int __cdecl strcmp(const char *_Str1, const char *_Str2);
  277. size_t __cdecl strlen(const char *_Str);
  278. void *__cdecl memmove(void *_Dst, const void *_Src, size_t _Size);
  279. char *__cdecl _strdup(const char *_Src);
  280. errno_t __cdecl _strnset_s(char *_Str, size_t _SizeInBytes, int _Val, size_t _MaxCount);
  281. extern "C++" {
  282. template <size_t _Size> inline errno_t __cdecl _strnset_s(char (&_Dest)[_Size], int _Val, size_t _Count) throw() { return _strnset_s(_Dest, _Size, _Val, _Count); }
  283. }
  284. size_t __cdecl strxfrm(char *_Dst, const char *_Src, size_t _MaxCount);
  285. size_t __cdecl _strxfrm_l(char *_Dst, const char *_Src, size_t _MaxCount, _locale_t _Locale);
  286. extern "C++" {
  287. }
  288. using ::strxfrm;
  289. }
  290. namespace std {
  291. template <class _Statetype> class fpos {
  292. typedef fpos<_Statetype> _Myt;
  293. };
  294. typedef fpos<_Mbstatet> streampos;
  295. template <class _Elem, class _Int_type> struct _Char_traits {
  296. typedef _Elem char_type;
  297. };
  298. template <class _Elem> struct char_traits : public _Char_traits<_Elem, long> {
  299. };
  300. template <> struct char_traits<wchar_t> {
  301. };
  302. template <> struct char_traits<char> {
  303. typedef char _Elem;
  304. static size_t __cdecl length(const _Elem *_First) { return (*_First == 0 ? 0 : ::strlen(_First)); }
  305. static _Elem *__cdecl copy(_Elem *_First1, const _Elem *_First2, size_t _Count) { return (_Count == 0 ? _First1 : (_Elem *)::memcpy(_First1, _First2, _Count)); }
  306. static const _Elem *__cdecl find(const _Elem *_First, size_t _Count, const _Elem &_Ch) { return (_Count == 0 ? (const _Elem *)0 : (const _Elem *)::memchr(_First, _Ch, _Count)); }
  307. static _Elem *__cdecl move(_Elem *_First1, const _Elem *_First2, size_t _Count) { return (_Count == 0 ? _First1 : (_Elem *)::memmove(_First1, _First2, _Count)); }
  308. static void __cdecl assign(_Elem &_Left, const _Elem &_Right) throw() { _Left = _Right; }
  309. static bool __cdecl eq(const _Elem &_Left, const _Elem &_Right) throw() { return (_Left == _Right); }
  310. };
  311. template <class _Ty> struct _Ptr_traits {
  312. static const bool _Is_volatile = false;
  313. };
  314. template <class _Ty> struct _Ptr_traits<const _Ty *> {
  315. };
  316. template <class _Ty> struct _Ptr_traits<const volatile _Ty *> {
  317. static const bool _Is_const = true;
  318. };
  319. template <class _Ty> struct _Is_funptr : false_type {
  320. };
  321. template <class _Ty> struct _Is_memfunptr : false_type {
  322. };
  323. template <class _Ret> struct _Is_funptr<_Ret (*)()> : true_type {
  324. };
  325. template <class _Ret, class _Arg0, class _V0_t, class _V1_t, class _V2_t, class _V3_t, class _V4_t, class _V5_t, class _V6_t, class _V7_t, class _V8_t, class _V9_t> struct _Is_memfunptr<_Ret (_Arg0::*)(_V0_t, _V1_t, _V2_t, _V3_t, _V4_t, _V5_t, _V6_t, _V7_t, _V8_t, _V9_t...) volatile> : true_type {
  326. };
  327. template <class _Ty> struct add_const {
  328. typedef const _Ty type;
  329. };
  330. template <class _Ty> struct add_volatile {
  331. typedef volatile _Ty type;
  332. typedef typename add_const<typename add_volatile<_Ty>::type>::type type;
  333. };
  334. template <class _Ty> struct add_reference {
  335. typedef typename remove_reference<_Ty>::type &type;
  336. };
  337. template <class _Ty> struct add_lvalue_reference {
  338. typedef typename add_reference<_Ty>::type type;
  339. };
  340. template <class _Ty> struct add_rvalue_reference {
  341. typedef typename remove_reference<_Ty>::type &&type;
  342. };
  343. template <class _Ty> struct add_rvalue_reference<_Ty &> {
  344. typedef _Ty &type;
  345. };
  346. template <class _Ty> typename add_rvalue_reference<_Ty>::type declval(int = 0) throw();
  347. template <class _Ty> struct remove_extent {
  348. typedef _Ty type;
  349. };
  350. template <class _Ty> struct remove_all_extents {
  351. typedef _Ty type;
  352. };
  353. template <class _Ty> struct _Is_void : false_type {
  354. };
  355. template <class _Ty> struct is_void : _Is_void<typename remove_cv<_Ty>::type> {
  356. };
  357. template <class _Ty> struct is_array : false_type {
  358. };
  359. template <class _Ty> struct is_array<_Ty[]> : true_type {
  360. };
  361. template <class _Ty> struct is_lvalue_reference : false_type {
  362. };
  363. template <class _Ty> struct is_rvalue_reference : false_type {
  364. };
  365. template <class _Ty> struct is_reference : _Cat_base<is_lvalue_reference<_Ty>::value || is_rvalue_reference<_Ty>::value> {
  366. };
  367. template <class _Ty> struct _Is_member_object_pointer : false_type {
  368. };
  369. template <class _Ty> struct is_member_object_pointer : _Is_member_object_pointer<typename remove_cv<_Ty>::type> {
  370. };
  371. template <class _Ty> struct is_member_function_pointer : _Cat_base<_Is_memfunptr<typename remove_cv<_Ty>::type>::value> {
  372. };
  373. template <class _Ty> struct _Is_pointer : false_type {
  374. };
  375. template <class _Ty> struct _Is_pointer<_Ty *> : _Cat_base< !is_member_object_pointer<_Ty *>::value && !is_member_function_pointer<_Ty *>::value> {
  376. };
  377. template <class _Ty> struct is_pointer : _Is_pointer<typename remove_cv<_Ty>::type> {
  378. };
  379. template <class _Ty> struct is_class : _Cat_base<__is_class(_Ty)> {
  380. };
  381. template <class _Ty> struct is_function : _Cat_base<_Is_funptr<typename remove_cv<_Ty>::type *>::value> {
  382. };
  383. template <class _Ty> struct is_function<_Ty &&> : false_type {
  384. };
  385. template <class _Ty> struct is_arithmetic : _Cat_base<is_integral<_Ty>::value || is_floating_point<_Ty>::value> {
  386. };
  387. template <class _Ty> struct is_object : _Cat_base<!is_function<_Ty>::value && !is_reference<_Ty>::value && !is_void<_Ty>::value> {
  388. };
  389. template <class _From, class _To> struct is_convertible : _Cat_base<is_void<_From>::value &&is_void<_To>::value || __is_convertible_to(_From, _To)> {
  390. };
  391. template <class _Ty> struct is_enum : _Cat_base<__is_enum(_Ty)> {
  392. };
  393. template <class _Ty> struct is_member_pointer : _Cat_base<is_member_object_pointer<_Ty>::value || is_member_function_pointer<_Ty>::value> {
  394. };
  395. template <class _Ty> struct is_scalar : _Cat_base<is_arithmetic<_Ty>::value || is_enum<_Ty>::value || is_pointer<_Ty>::value || is_member_pointer<_Ty>::value> {
  396. };
  397. template <class _Ty> struct is_const : _Cat_base<_Ptr_traits<_Ty *>::_Is_const && !is_function<_Ty>::value> {
  398. };
  399. template <class _Ty, unsigned int _Nx> struct is_const<_Ty[_Nx]> : false_type {
  400. };
  401. template <class _Ty> struct is_volatile : _Cat_base<_Ptr_traits<_Ty *>::_Is_volatile && !is_function<_Ty>::value> {
  402. };
  403. template <class _Ty> struct is_volatile<_Ty &> : false_type {
  404. };
  405. template <class _Ty> struct _Is_pod : _Cat_base<is_void<_Ty>::value || is_scalar<_Ty>::value || __has_trivial_constructor(_Ty) && __is_pod(_Ty)> {
  406. };
  407. template <class _Ty> struct is_pod : _Is_pod<typename remove_all_extents<_Ty>::type> {
  408. };
  409. template <class _Ty> struct is_empty : _Cat_base<__is_empty(_Ty)> {
  410. };
  411. template <class _Ty> struct is_trivial : _Cat_base<__is_trivial(_Ty)> {
  412. };
  413. template <class, class _V0_t = _Nil, class _V1_t = _Nil, class _V2_t = _Nil, class _V3_t = _Nil, class _V4_t = _Nil, class _V5_t = _Nil, class _V6_t = _Nil, class _V7_t = _Nil, class _V8_t = _Nil, class _V9_t = _Nil, class _V10_t = _Nil, class = _Nil> struct is_constructible;
  414. template <bool, class, class _V0_t = _Nil, class _V1_t = _Nil, class _V2_t = _Nil, class _V3_t = _Nil, class _V4_t = _Nil, class _V5_t = _Nil, class _V6_t = _Nil, class _V7_t = _Nil, class _V8_t = _Nil, class _V9_t = _Nil, class _V10_t = _Nil, class = _Nil> struct _Is_constructible;
  415. template <class _Ty, class _V0_t, class _V1_t, class _V2_t, class _V3_t, class _V4_t> struct is_constructible< _Ty, _V0_t, _V1_t, _V2_t, _V3_t, _V4_t, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> : _If<is_void<_Ty>::value, true_type, typename _Is_constructible< is_object<_Ty>::value &&(!is_scalar<_Ty>::value || _Sizeof<int, _V0_t, _V1_t, _V2_t, _V3_t, _V4_t>::value <= 2), typename remove_all_extents<_Ty>::type, _V0_t, _V1_t, _V2_t, _V3_t, _V4_t>::type>::type {
  416. };
  417. template <class _Ty> struct is_default_constructible : is_constructible<_Ty>::type {
  418. };
  419. template <class _Ty> struct has_default_constructor : is_default_constructible<_Ty>::type {
  420. };
  421. template <bool, class _To, class _From> struct _Is_assignable : false_type {
  422. };
  423. template <class _To, class _From> struct is_assignable : _If< is_void<_To>::value &&is_void<_From>::value || is_scalar<_To>::value &&is_scalar<_From>::value, true_type, typename _Is_assignable< is_object<typename remove_reference<_To>::type>::value && !is_array<typename remove_reference<_To>::type>::value && is_object<typename remove_reference<_From>::type>::value && !is_array<typename remove_reference<_From>::type>::value, _To, _From>::type>::type {
  424. };
  425. template <class _Ty> struct is_copy_assignable : is_assignable< typename add_lvalue_reference<typename remove_volatile<_Ty>::type>::type, typename add_lvalue_reference<typename add_const< typename remove_volatile<_Ty>::type>::type>::type>::type {
  426. };
  427. template <class _Ty> struct is_move_assignable : is_assignable< typename add_lvalue_reference<typename remove_volatile<_Ty>::type>::type, typename remove_volatile<_Ty>::type>::type {
  428. };
  429. template <class _Ty> struct has_move_assign : is_move_assignable<_Ty>::type {
  430. };
  431. template <class, class = _Nil, class _V0_t = _Nil, class _V1_t = _Nil, class _V2_t = _Nil, class _V3_t = _Nil, class _V4_t = _Nil, class _V5_t = _Nil, class _V6_t = _Nil, class _V7_t = _Nil, class _V8_t = _Nil, class _V9_t = _Nil, class _V10_t = _Nil, class = _Nil> struct is_trivially_constructible;
  432. template <class _Ty, class _Xarg0> struct is_trivially_constructible<_Ty, _Xarg0, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> : is_constructible<_Ty, _Xarg0> {
  433. };
  434. template <class _Ty> struct is_trivially_default_constructible : is_trivially_constructible<_Ty>::type {
  435. };
  436. template <class, class = _Nil, class _V0_t = _Nil, class _V1_t = _Nil, class _V2_t = _Nil, class _V3_t = _Nil, class _V4_t = _Nil, class _V5_t = _Nil, class _V6_t = _Nil, class _V7_t = _Nil, class _V8_t = _Nil, class _V9_t = _Nil, class _V10_t = _Nil, class = _Nil> struct is_nothrow_constructible;
  437. template <class _Ty, class _Xarg0> struct is_nothrow_constructible<_Ty, _Xarg0, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> : is_constructible<_Ty, _Xarg0> {
  438. };
  439. template <class _Ty, class _Xarg0, class _V0_t, class _V1_t> struct is_nothrow_constructible< _Ty, _Xarg0, _V0_t, _V1_t, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> : is_constructible<_Ty, _Xarg0, _V0_t, _V1_t> {
  440. };
  441. template <class _Ty> struct has_nothrow_copy : _Cat_base<is_pod<typename remove_reference<_Ty>::type>::value || __has_nothrow_copy(typename remove_reference<_Ty>::type)> {
  442. };
  443. template <class _Ty> struct _Has_signed_vals : _Cat_base < (typename remove_cv<_Ty>::type)(-1)<(typename remove_cv<_Ty>::type)(0)> {
  444. };
  445. template <class _Ty> struct is_signed : _Cat_base<is_floating_point<_Ty>::value || is_integral<_Ty>::value &&_Has_signed_vals<typename _If< is_integral<_Ty>::value, _Ty, int>::type>::value> {
  446. };
  447. template <class _Ty> struct _Change_sign {
  448. static_assert( ((is_integral<_Ty>::value || is_enum<_Ty>::value) && !is_same<_Ty, bool>::value), "make_signed<T>/make_unsigned<T> require that T shall be a (possibly " "cv-qualified) integral type or enumeration but not a bool type.");
  449. typedef typename _If < is_same<_Ty, signed char>::value || is_same<_Ty, unsigned char>::value, signed char, typename _If < is_same<_Ty, short>::value || is_same<_Ty, unsigned short>::value, short, typename _If < is_same<_Ty, int>::value || is_same<_Ty, unsigned int>::value, int, typename _If < is_same<_Ty, long>::value || is_same<_Ty, unsigned long>::value, long, typename _If < is_same<_Ty, long long>::value || is_same<_Ty, unsigned long long>::value, long long, typename _If< sizeof(_Ty) == sizeof(signed char), signed char, typename _If< sizeof(_Ty) == sizeof(short), short, typename _If<sizeof(_Ty) == sizeof(int), int, typename _If<sizeof(_Ty) == sizeof(long), long, long long>::type>::type>::type>::type > ::type > ::type > ::type > ::type > ::type _Signed;
  450. typedef typename _If< is_same<_Signed, signed char>::value, unsigned char, typename _If< is_same<_Signed, short>::value, unsigned short, typename _If< is_same<_Signed, int>::value, unsigned int, typename _If<is_same<_Signed, long>::value, unsigned long, unsigned long long>::type>::type>::type>::type _Unsigned;
  451. };
  452. template <class _Ty> struct _Change_sign<const _Ty> {
  453. };
  454. template <class _Ty> struct make_unsigned {
  455. };
  456. template <class _Ty> struct _Get_align {
  457. };
  458. template <class _Ty> struct alignment_of : integral_constant<size_t, (sizeof(_Get_align<_Ty>) - 2 * sizeof(_Ty))> {
  459. };
  460. template <class _Ty, size_t _Len> union _Align_type {
  461. };
  462. template <size_t _Len, size_t _Align, class _Ty, bool _Ok> struct _Aligned;
  463. template <size_t _Len, size_t _Align, class _Ty> struct _Aligned<_Len, _Align, _Ty, true> {
  464. typedef _Align_type<_Ty, _Len> type;
  465. };
  466. template <size_t _Len, size_t _Align = alignment_of<max_align_t>::value> struct aligned_storage {
  467. typedef typename _Aligned< _Len, _Align, char, _Align <= (sizeof(_Get_align<char>) - 2 * sizeof(char))>::type type;
  468. };
  469. template <size_t _Len, class = _Nil, class _V0_t = _Nil, class _V1_t = _Nil, class _V2_t = _Nil, class _V3_t = _Nil, class _V4_t = _Nil, class _V5_t = _Nil, class _V6_t = _Nil, class _V7_t = _Nil, class _V8_t = _Nil, class _V9_t = _Nil, class _V10_t = _Nil, class = _Nil> struct aligned_union;
  470. template <size_t _Len> struct aligned_union<_Len, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> {
  471. };
  472. template <size_t _Len, class _Xty0> struct aligned_union<_Len, _Xty0, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> {
  473. typedef union { typename aligned_storage< _Len, (sizeof(_Get_align<_Xty0>) - 2 * sizeof(_Xty0))>::type _Obj1; typename aligned_union<_Len>::type _Obj2; }
  474. type;
  475. };
  476. template <size_t _Len, class _Xty0, class _V0_t> struct aligned_union<_Len, _Xty0, _V0_t, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> {
  477. };
  478. template <class _Ty, unsigned int _Nx> struct _Extent : integral_constant<size_t, 0> {
  479. };
  480. template <class _Ty, unsigned int _Ix> struct _Extent<_Ty[_Ix], 0> : integral_constant<size_t, _Ix> {
  481. };
  482. template <class _Ty> struct decay {
  483. };
  484. namespace tr1 {
  485. using ::std::add_const;
  486. using ::std::true_type;
  487. }
  488. template <bool, class _Ty0, class _Ty1> struct _Common_type {
  489. typedef void type;
  490. };
  491. template <class, class = _Nil, class _V0_t = _Nil, class _V1_t = _Nil, class _V2_t = _Nil, class _V3_t = _Nil, class _V4_t = _Nil, class _V5_t = _Nil, class _V6_t = _Nil, class _V7_t = _Nil, class _V8_t = _Nil, class _V9_t = _Nil, class _V10_t = _Nil, class = _Nil> struct common_type;
  492. template <class _Xty0> struct common_type<_Xty0, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil, _Nil> {
  493. typedef _Xty0 type;
  494. };
  495. template <class _Xty0, class _Xty1, class _V0_t, class _V1_t, class _V2_t, class _V3_t, class _V4_t, class _V5_t, class _V6_t, class _V7_t, class _V8_t, class _V9_t> struct common_type<_Xty0, _Xty1, _V0_t, _V1_t, _V2_t, _V3_t, _V4_t, _V5_t, _V6_t, _V7_t, _V8_t, _V9_t, _Nil> {
  496. typedef typename _Common_type< _Is_numeric<_Xty0>::value &&_Is_numeric<_Xty1>::value, _Xty0, _Xty1>::type _Xty01;
  497. };
  498. template <class _Ty> class reference_wrapper;
  499. template <class _Ty> struct _Unrefwrap_helper {
  500. typedef _Ty type;
  501. };
  502. template <class _Ty> struct _Unrefwrap {
  503. };
  504. template <class _Ty> inline _Ty &&forward(typename remove_reference<_Ty>::type &_Arg) {
  505. }
  506. template <class _Ty> inline typename remove_reference<_Ty>::type &&move(_Ty &&_Arg) throw() {
  507. }
  508. }
  509. namespace std {
  510. template <class _Ty> inline void swap(_Ty &, _Ty &);
  511. template <class _FwdIt1, class _FwdIt2> inline void iter_swap(_FwdIt1 _Left, _FwdIt2 _Right) {
  512. _Right = _Move(_Tmp);
  513. }
  514. template <class = _Nil, class _V0_t = _Nil, class _V1_t = _Nil, class _V2_t = _Nil, class _V3_t = _Nil, class _V4_t = _Nil, class _V5_t = _Nil, class _V6_t = _Nil, class _V7_t = _Nil, class _V8_t = _Nil, class _V9_t = _Nil, class _V10_t = _Nil, class = _Nil> class tuple;
  515. template <class _Ty1, class _Ty2> struct pair {
  516. _Ty1 first;
  517. _Ty2 second;
  518. };
  519. template <class _Ty1, class _Ty2> inline void swap(pair<_Ty1, _Ty2> &_Left, pair<_Ty1, _Ty2> &_Right) {
  520. _Left.swap(_Right);
  521. }
  522. template <class _Ty1, class _Ty2> inline pair<typename _Unrefwrap<_Ty1>::type, typename _Unrefwrap<_Ty2>::type> make_pair(_Ty1 &&_Val1, _Ty2 &&_Val2) {
  523. typedef pair<typename _Unrefwrap<_Ty1>::type, typename _Unrefwrap<_Ty2>::type> _Mypair;
  524. }
  525. struct _Container_base0 {
  526. void _Orphan_all() {}
  527. void _Swap_all(_Container_base0 &) {}
  528. };
  529. struct _Iterator_base0 {
  530. void _Adopt(const void *) {}
  531. };
  532. struct _Container_base12;
  533. struct _Iterator_base12;
  534. struct _Container_proxy {
  535. _Container_proxy() : _Mycont(0), _Myfirstiter(0) {}
  536. const _Container_base12 *_Mycont;
  537. _Iterator_base12 *_Myfirstiter;
  538. };
  539. struct _Container_base12 {
  540. _Container_proxy *_Myproxy;
  541. };
  542. struct _Iterator_base12 {
  543. };
  544. typedef _Container_base0 _Container_base;
  545. typedef _Iterator_base0 _Iterator_base;
  546. template <class _Ty> struct _Get_unchecked_type {
  547. };
  548. template <class _Ty> struct _Is_checked_helper {
  549. template <class _Uty> static auto _Fn( int, typename remove_reference<typename _Uty::_Unchecked_type>::type * = 0, typename remove_reference<typename _Uty::_Unchecked_type>::type * = 0, typename remove_reference<typename _Uty::_Unchecked_type>::type * = 0) -> true_type;
  550. typedef decltype(_Fn<_Ty>(0)) type;
  551. };
  552. template <class _Iter> inline _Iter _Unchecked(_Iter _Src) {
  553. return (_Src);
  554. }
  555. template <class _Iter, class _UIter> inline _Iter &_Rechecked(_Iter &_Dest, _UIter _Src) {
  556. }
  557. struct input_iterator_tag {
  558. };
  559. struct output_iterator_tag {
  560. };
  561. struct forward_iterator_tag : public input_iterator_tag, output_iterator_tag {
  562. };
  563. struct bidirectional_iterator_tag : public forward_iterator_tag {
  564. };
  565. struct random_access_iterator_tag : public bidirectional_iterator_tag {
  566. };
  567. struct _Nonscalar_ptr_iterator_tag {
  568. };
  569. struct _Scalar_ptr_iterator_tag {
  570. };
  571. template <class _Category, class _Ty, class _Diff = ptrdiff_t, class _Pointer = _Ty *, class _Reference = _Ty &> struct iterator {
  572. typedef _Diff difference_type;
  573. typedef _Diff distance_type;
  574. typedef _Pointer pointer;
  575. typedef _Reference reference;
  576. };
  577. template <class _Category, class _Ty, class _Diff, class _Pointer, class _Reference, class _Base> struct _Iterator012 : public _Base {
  578. typedef _Reference reference;
  579. };
  580. struct _Outit : public iterator<output_iterator_tag, void, void, void, void> {
  581. };
  582. template <class _Iter> struct iterator_traits {
  583. };
  584. template <class _Ty> struct iterator_traits<_Ty *> {
  585. typedef random_access_iterator_tag iterator_category;
  586. };
  587. template <class _Iter> inline typename iterator_traits<_Iter>::iterator_category _Iter_cat( const _Iter &) {
  588. typename iterator_traits<_Iter>::iterator_category _Cat;
  589. return (_Cat);
  590. }
  591. template <class _Elem1, class _Elem2> struct _Ptr_cat_helper {
  592. typedef _Nonscalar_ptr_iterator_tag type;
  593. };
  594. template <class _Elem> struct _Ptr_cat_helper<_Elem, _Elem> {
  595. typedef typename _If<is_scalar<_Elem>::value, _Scalar_ptr_iterator_tag, _Nonscalar_ptr_iterator_tag>::type type;
  596. };
  597. template <class _Elem1, class _Elem2> inline typename _Ptr_cat_helper<_Elem1, _Elem2>::type _Ptr_cat(_Elem1 *, _Elem2 *) {
  598. typename _Ptr_cat_helper<_Elem1, _Elem2>::type _Cat;
  599. return (_Cat);
  600. }
  601. template <class _Elem1, class _Elem2> inline typename _Ptr_cat_helper<_Elem1, _Elem2>::type _Ptr_cat(const _Elem1 *, _Elem2 *) {
  602. }
  603. template <class _Iter> inline typename iterator_traits<_Iter>::value_type *_Val_type(_Iter) {
  604. return (0);
  605. --_Off) ++_Where;
  606. }
  607. template <class _FwdIt, class _Diff> inline void _Advance(_FwdIt &_Where, _Diff _Off, forward_iterator_tag) {
  608. ++_First) ++_Off;
  609. }
  610. template <class _InIt> inline typename iterator_traits<_InIt>::difference_type distance(_InIt _First, _InIt _Last) {
  611. }
  612. template <class _Ty> struct pointer_traits;
  613. template <class _RanIt, class _Base> class _Revranit : public _Base {
  614. };
  615. template <class _RanIt, class _Base, class _Diff> inline _Revranit<_RanIt, _Base> operator+( _Diff _Off, const _Revranit<_RanIt, _Base> &_Right) {
  616. return (_Right + _Off);
  617. }
  618. template <class _RanIt1, class _Base1, class _RanIt2, class _Base2> inline bool operator==(const _Revranit<_RanIt1, _Base1> &_Left, const _Revranit<_RanIt2, _Base2> &_Right) {
  619. return (_Left._Equal(_Right));
  620. }
  621. template <class _RanIt> class reverse_iterator : public _Revranit< _RanIt, iterator<typename iterator_traits<_RanIt>::iterator_category, typename iterator_traits<_RanIt>::value_type, typename iterator_traits<_RanIt>::difference_type, typename iterator_traits<_RanIt>::pointer, typename iterator_traits<_RanIt>::reference> > {
  622. typedef reverse_iterator<_RanIt> _Myt;
  623. };
  624. template <class _RanIt1, class _RanIt2> inline bool operator!=(const reverse_iterator<_RanIt1> &_Left, const reverse_iterator<_RanIt2> &_Right) {
  625. return (!(_Left == _Right));
  626. }
  627. template <class _RanIt1, class _RanIt2> inline bool operator<(const reverse_iterator<_RanIt1> &_Left, const reverse_iterator<_RanIt2> &_Right) {
  628. return (_Left._Less(_Right));
  629. }
  630. template <class _Ty, size_t _Size> class _Array_const_iterator : public _Iterator012<random_access_iterator_tag, _Ty, ptrdiff_t, const _Ty *, const _Ty &, _Iterator_base> {
  631. };
  632. template <class _Ty, size_t _Size> inline typename _Array_const_iterator<_Ty, _Size>::_Unchecked_type _Unchecked( _Array_const_iterator<_Ty, _Size> _Iter) {
  633. return (_Iter._Unchecked());
  634. reference operator[](difference_type _Off) const { return (*(*this + _Off)); }
  635. };
  636. template <class _RanIt> class move_iterator {
  637. };
  638. template <class _RanIt, class _Diff> inline move_iterator<_RanIt> operator+(_Diff _Off, const move_iterator<_RanIt> &_Right) {
  639. return (_Right + _Off);
  640. return (!(_Left == _Right));
  641. }
  642. template <class _Ty> inline const _Ty &(min)(const _Ty &_Left, const _Ty &_Right) {
  643. return (((_Right) < (_Left)) ? _Right : _Left);
  644. }
  645. template <class _InIt, class _OutIt> inline _OutIt _Move(_InIt _First, _InIt _Last, _OutIt _Dest, _Scalar_ptr_iterator_tag) {
  646. ptrdiff_t _Count = _Last - _First;
  647. return (_Dest + _Count);
  648. }
  649. template <class _InIt, class _OutIt> inline _OutIt _Move(_InIt _First, _InIt _Last, _OutIt _Dest) {
  650. return (_Move(_First, _Last, _Dest, _Ptr_cat(_First, _Dest)));
  651. }
  652. template <class _BidIt1, class _BidIt2> inline _BidIt2 _Move_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest, _Nonscalar_ptr_iterator_tag) {
  653. }
  654. template <class _InIt, class _Ty> inline _InIt _Find(_InIt _First, _InIt _Last, const _Ty &_Val) {
  655. for (;
  656. return (_First == 0 ? _Last : _First);
  657. }
  658. inline const unsigned char *_Find(const unsigned char *_First, const unsigned char *_Last, int _Val) {
  659. }
  660. template <class _InIt, class _Ty> inline _InIt find(_InIt _First, _InIt _Last, const _Ty &_Val) {
  661. ;
  662. ::std::reverse(_First, _Last);
  663. }
  664. template <class _RanIt, class _Diff, class _Ty> inline void _Rotate(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Diff *, _Ty *) {
  665. }
  666. template <class _FwdIt> inline _FwdIt rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last) {
  667. ;
  668. return (_First);
  669. }
  670. template <class _Diff, class _Urng> class _Rng_from_urng {
  671. public: typedef typename make_unsigned<_Diff>::type _Ty0;
  672. _Rng_from_urng &operator=(const _Rng_from_urng &);
  673. };
  674. template <class _Elem> class _Yarn {
  675. };
  676. template <class _Ty, class _Alloc> struct _Has_allocator_type {
  677. template <class _Uty> static auto _Fn(int) -> is_convertible<_Alloc, typename _Uty::allocator_type>;
  678. typedef decltype(_Fn<_Ty>(0)) type;
  679. };
  680. __declspec(noreturn) void __cdecl _Xinvalid_argument(const char *);
  681. __declspec(noreturn) void __cdecl _Xlength_error(const char *);
  682. __declspec(noreturn) void __cdecl _Xout_of_range(const char *);
  683. }
  684. namespace std {
  685. template <class _Ty, class _Alloc> struct uses_allocator : _Has_allocator_type<_Ty, _Alloc>::type {
  686. };
  687. }
  688. namespace std {
  689. template <class _Ty> inline _Ty *_Allocate(size_t _Count, _Ty *) {
  690. }
  691. template <class _Ty> inline void _Destroy(_Ty *_Ptr) {
  692. _Ptr->~_Ty();
  693. }
  694. template <> inline void _Destroy(wchar_t *) {
  695. }
  696. template <class _Alloc> inline void _Destroy_range(typename _Alloc::pointer _First, typename _Alloc::pointer _Last, _Alloc &_Al) {
  697. _Destroy_range(_First, _Last, _Al, _Ptr_cat(_First, _Last));
  698. }
  699. template <class _Alloc> inline void _Destroy_range(typename _Alloc::pointer _First, typename _Alloc::pointer _Last, _Alloc &_Al, _Nonscalar_ptr_iterator_tag) {
  700. }
  701. template <class _Alloc> inline void _Destroy_range(typename _Alloc::pointer _First, typename _Alloc::pointer _Last, _Alloc &_Al, _Scalar_ptr_iterator_tag) {
  702. }
  703. template <class _Alty> struct _Is_simple_alloc : _Cat_base< is_same<typename _Alty::size_type, size_t>::value && is_same<typename _Alty::difference_type, ptrdiff_t>::value &&is_same< typename _Alty::pointer, typename _Alty::value_type *>::value && is_same<typename _Alty::const_pointer, const typename _Alty::value_type *>::value && is_same<typename _Alty::reference, typename _Alty::value_type &>::value && is_same<typename _Alty::const_reference, const typename _Alty::value_type &>::value> {
  704. };
  705. template <class _Value_type> struct _Simple_types {
  706. typedef _Value_type value_type;
  707. typedef size_t size_type;
  708. typedef ptrdiff_t difference_type;
  709. typedef value_type *pointer;
  710. typedef const value_type *const_pointer;
  711. typedef value_type &reference;
  712. typedef const value_type &const_reference;
  713. };
  714. template <class _Alty, class _Pointer> struct _Get_voidptr {
  715. typedef void *type;
  716. };
  717. template <class _Iter> struct _Is_iterator : public integral_constant<bool, !is_integral<_Iter>::value> {
  718. };
  719. template <class _Ty> struct pointer_traits;
  720. template <class _Ty> struct _Get_first_parameter {
  721. typedef typename _Ty::element_type type;
  722. };
  723. template <class _Newfirst, class _Ty> struct _Replace_first_parameter {
  724. typedef typename _Ty::template rebind<_Newfirst>::other type;
  725. };
  726. template <class _Ty> struct _Get_element_type {
  727. };
  728. template <class _Ty> struct _Get_ptr_difference_type {
  729. };
  730. template <class _Ty, class _Other> struct _Get_rebind_type {
  731. template <class _Uty> static auto _Fn(int) -> typename _Uty::template rebind<_Other>::other;
  732. typedef decltype(_Fn<_Ty>(0)) type;
  733. };
  734. template <class _Ty> struct pointer_traits {
  735. };
  736. template <class _Ty> struct _Get_pointer_type {
  737. template <class _Uty> static auto _Fn(int) -> typename _Uty::pointer;
  738. typedef decltype(_Fn<_Ty>(0)) type;
  739. };
  740. template <class _Ty> struct _Get_difference_type {
  741. template <class _Uty> static auto _Fn(int) -> typename _Uty::difference_type;
  742. template <class _Uty> static auto _Fn(_Wrap_int) -> typename _Get_ptr_difference_type< typename _Get_pointer_type<_Ty>::type>::type;
  743. typedef decltype(_Fn<_Ty>(0)) type;
  744. };
  745. struct _Alloc_allocate {
  746. template <class _Ty> static auto _Fn(_Wrap_int, const _Ty &_Al) -> _Ty { return (_Al); }
  747. };
  748. template <class _Alloc> struct allocator_traits {
  749. };
  750. template <class _Ty> struct _Allocator_base {
  751. typedef _Ty value_type;
  752. };
  753. template <class _Ty> class allocator : public _Allocator_base<_Ty> {
  754. public: typedef allocator<_Ty> other;
  755. typedef _Allocator_base<_Ty> _Mybase;
  756. typedef typename _Mybase::value_type value_type;
  757. typedef value_type *pointer;
  758. typedef const value_type *const_pointer;
  759. typedef void *void_pointer;
  760. typedef const void *const_void_pointer;
  761. typedef value_type &reference;
  762. typedef const value_type &const_reference;
  763. typedef size_t size_type;
  764. void deallocate(pointer _Ptr, size_type) { ::operator delete(_Ptr); }
  765. pointer allocate(size_type _Count) { return (_Allocate(_Count, (pointer)0)); }
  766. pointer allocate(size_type _Count, const void *) { return (allocate(_Count)); }
  767. template <class _Objty, class _V0_t> void construct(_Objty *_Ptr, _V0_t &&_V0) { ::new ((void *)_Ptr) _Objty(::std::forward<_V0_t>(_V0)); }
  768. template <class _Uty> void destroy(_Uty *_Ptr) { _Ptr->~_Uty(); }
  769. size_t max_size() const { return ((size_t)(-1) / sizeof(_Ty)); }
  770. };
  771. template <> class allocator<void> {
  772. };
  773. template <class _Ty, class _Other> inline bool operator==(const allocator<_Ty> &, const allocator<_Other> &) {
  774. return (true);
  775. return (!(_Left == _Right));
  776. }
  777. template <class _Ty> struct allocator_traits<allocator<_Ty> > {
  778. typedef allocator<_Ty> _Alloc;
  779. typedef allocator_traits<_Alloc> other;
  780. typedef typename _Alloc::value_type value_type;
  781. typedef value_type *pointer;
  782. typedef size_t size_type;
  783. typedef ptrdiff_t difference_type;
  784. typedef false_type propagate_on_container_copy_assignment;
  785. typedef false_type propagate_on_container_swap;
  786. template <class _Other> struct rebind_alloc { typedef allocator<_Other> other; };
  787. static size_type max_size(const _Alloc &_Al) { return (_Al.max_size()); }
  788. static _Alloc select_on_container_copy_construction(const _Alloc &_Al) { return (_Al.select_on_container_copy_construction()); }
  789. };
  790. template <class _Alloc> struct _Wrap_alloc : public _Alloc {
  791. typedef _Wrap_alloc<_Alloc> other;
  792. typedef allocator_traits<_Alloc> _Mytraits;
  793. typedef typename _Mytraits::value_type value_type;
  794. typedef typename _Mytraits::size_type size_type;
  795. typedef typename _Mytraits::difference_type difference_type;
  796. _Wrap_alloc select_on_container_copy_construction() const { return (_Mytraits::select_on_container_copy_construction(*this)); }
  797. template <class _Other> struct rebind { typedef typename _Mytraits::template rebind_alloc<_Other>::other _Other_alloc; typedef _Wrap_alloc<_Other_alloc> other; };
  798. size_type max_size() const { return (_Mytraits::max_size(*this)); }
  799. };
  800. template <class _Mystr> class _String_const_iterator : public _Iterator012< random_access_iterator_tag, typename _Mystr::value_type, typename _Mystr::difference_type, typename _Mystr::const_pointer, typename _Mystr::const_reference, _Iterator_base> {
  801. };
  802. template <class _Mystr> inline typename _String_const_iterator<_Mystr>::_Unchecked_type _Unchecked( _String_const_iterator<_Mystr> _Iter) {
  803. }
  804. template <class _Mystr> class _String_iterator : public _String_const_iterator<_Mystr> {
  805. typedef typename _Mystr::difference_type difference_type;
  806. typedef typename _Mystr::pointer pointer;
  807. typedef typename _Mystr::reference reference;
  808. reference operator[](difference_type _Off) const { return (*(*this + _Off)); }
  809. };
  810. template <class _Mystr> inline typename _String_iterator<_Mystr>::_Unchecked_type _Unchecked( _String_iterator<_Mystr> _Iter) {
  811. return (_Iter._Unchecked());
  812. }
  813. template <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer, class _Reference, class _Const_reference> struct _String_iter_types {
  814. typedef _Value_type value_type;
  815. };
  816. template <class _Ty, class _Alloc0> struct _String_base_types {
  817. typedef _Alloc0 _Alloc;
  818. typedef _Wrap_alloc<_Alloc> _Alty0;
  819. typedef typename _Alty0::template rebind<_Ty>::other _Alty;
  820. typedef typename _If< _Is_simple_alloc<_Alty>::value, _Simple_types<typename _Alty::value_type>, _String_iter_types<typename _Alty::value_type, typename _Alty::size_type, typename _Alty::difference_type, typename _Alty::pointer, typename _Alty::const_pointer, typename _Alty::reference, typename _Alty::const_reference> >::type _Val_types;
  821. };
  822. template <class _Val_types> class _String_val : public _Container_base {
  823. public: typedef _String_val<_Val_types> _Myt;
  824. typedef typename _Val_types::value_type value_type;
  825. typedef typename _Val_types::size_type size_type;
  826. typedef typename _Val_types::difference_type difference_type;
  827. typedef typename _Val_types::pointer pointer;
  828. typedef typename _Val_types::const_pointer const_pointer;
  829. typedef typename _Val_types::reference reference;
  830. typedef typename _Val_types::const_reference const_reference;
  831. typedef _String_iterator<_Myt> iterator;
  832. typedef _String_const_iterator<_Myt> const_iterator;
  833. _String_val() { _Mysize = 0; _Myres = 0; }
  834. enum { _BUF_SIZE = 16 / sizeof(value_type) < 1 ? 1 : 16 / sizeof(value_type) };
  835. enum { _ALLOC_MASK = sizeof(value_type) <= 1 ? 15 : sizeof(value_type) <= 2 ? 7 : sizeof(value_type) <= 4 ? 3 : sizeof(value_type) <= 8 ? 1 : 0 };
  836. value_type *_Myptr() { return (this->_BUF_SIZE <= this->_Myres ? ::std::addressof(*this->_Bx._Ptr) : this->_Bx._Buf); }
  837. const value_type *_Myptr() const { return (this->_BUF_SIZE <= this->_Myres ? ::std::addressof(*this->_Bx._Ptr) : this->_Bx._Buf); }
  838. union _Bxty { value_type _Buf[_BUF_SIZE]; pointer _Ptr; char _Alias[_BUF_SIZE]; }
  839. _Bx;
  840. size_type _Mysize;
  841. size_type _Myres;
  842. };
  843. template <bool _Al_has_storage, class _Alloc_types> class _String_alloc : public _String_val<typename _Alloc_types::_Val_types> {
  844. public: typedef _String_alloc<_Al_has_storage, _Alloc_types> _Myt;
  845. typedef typename _Alloc_types::_Alloc _Alloc;
  846. typedef typename _Alloc_types::_Alty _Alty;
  847. void _Swap_alloc(_Myt &) {}
  848. _Alty _Getal() const { return (_Alty()); }
  849. };
  850. template <class _Elem, class _Traits, class _Alloc> class basic_string : public _String_alloc<!is_empty<_Alloc>::value, _String_base_types<_Elem, _Alloc> > {
  851. public: typedef basic_string<_Elem, _Traits, _Alloc> _Myt;
  852. typedef _String_alloc<!is_empty<_Alloc>::value, _String_base_types<_Elem, _Alloc> > _Mybase;
  853. typedef typename _Mybase::value_type value_type;
  854. typedef typename _Mybase::size_type size_type;
  855. typedef typename _Mybase::pointer pointer;
  856. typedef typename _Mybase::const_pointer const_pointer;
  857. typedef typename _Mybase::const_reference const_reference;
  858. typedef typename _Mybase::iterator iterator;
  859. typedef typename _Mybase::const_iterator const_iterator;
  860. basic_string(const _Myt &_Right, const _Alloc &_Al) : _Mybase(_Al) { _Tidy(); assign(_Right, 0, npos); }
  861. basic_string() : _Mybase() { _Tidy(); }
  862. basic_string(const _Elem *_Ptr, size_type _Count) : _Mybase() { _Tidy(); assign(_Ptr, _Count); }
  863. basic_string(const _Elem *_Ptr, size_type _Count, const _Alloc &_Al) : _Mybase(_Al) { _Tidy(); assign(_Ptr, _Count); }
  864. basic_string(const _Elem *_Ptr) : _Mybase() { _Tidy(); assign(_Ptr); }
  865. ~basic_string() throw() { _Tidy(true); }
  866. static const size_type npos;
  867. _Myt &assign(const _Myt &_Right) { return (assign(_Right, 0, npos)); }
  868. _Myt &assign(const _Myt &_Right, size_type _Roff, size_type _Count) { if (_Right.size() < _Roff) _Xran(); size_type _Num = _Right.size() - _Roff; if (_Count < _Num) _Num = _Count; if (this == &_Right) erase((size_type)(_Roff + _Num)), erase(0, _Roff); else if (_Grow(_Num)) { _Traits::copy(this->_Myptr(), _Right._Myptr() + _Roff, _Num); _Eos(_Num); } return (*this); }
  869. _Myt &assign(const _Elem *_Ptr, size_type _Count) { if (_Inside(_Ptr)) return (assign(*this, _Ptr - this->_Myptr(), _Count)); if (_Grow(_Count)) { _Traits::copy(this->_Myptr(), _Ptr, _Count); _Eos(_Count); } return (*this); }
  870. _Myt &erase(size_type _Off = 0) { if (this->_Mysize < _Off) _Xran(); _Eos(_Off); return (*this); }
  871. _Myt &erase(size_type _Off, size_type _Count) { if (this->_Mysize < _Off) _Xran(); if (this->_Mysize - _Off <= _Count) _Eos(_Off); else if (0 < _Count) { value_type *_Ptr = this->_Myptr() + _Off; size_type _Newsize = this->_Mysize - _Count; _Traits::move(_Ptr, _Ptr + _Count, _Newsize - _Off); _Eos(_Newsize); } return (*this); }
  872. iterator erase(const_iterator _Where) { size_type _Count = _Pdif(_Where, begin()); erase(_Count, 1); return (iterator(this->_Myptr() + _Count, this)); }
  873. const_reference back() const { return (*(end() - 1)); }
  874. const _Elem *c_str() const throw() { return (this->_Myptr()); }
  875. const _Elem *data() const throw() { return (c_str()); }
  876. size_type length() const throw() { return (this->_Mysize); }
  877. size_type size() const throw() { return (this->_Mysize); }
  878. size_type max_size() const throw() { size_type _Num = this->_Getal().max_size(); return (_Num <= 1 ? 1 : _Num - 1); }
  879. void _Copy(size_type _Newsize, size_type _Oldlen) { size_type _Newres = _Newsize | this->_ALLOC_MASK; if (max_size() < _Newres) _Newres = _Newsize; else if (this->_Myres / 2 <= _Newres / 3) ; else if (this->_Myres <= max_size() - this->_Myres / 2) _Newres = this->_Myres + this->_Myres / 2; else _Newres = max_size(); _Elem *_Ptr; { { _Ptr = this->_Getal().allocate(_Newres + 1); } if (0) { _Newres = _Newsize; { { _Ptr = this->_Getal().allocate(_Newres + 1); } if (0) { _Tidy(true); ; } } } } if (0 < _Oldlen) _Traits::copy(_Ptr, this->_Myptr(), _Oldlen); _Tidy(true); this->_Getal().construct(&this->_Bx._Ptr, _Ptr); this->_Myres = _Newres; _Eos(_Oldlen); }
  880. void _Eos(size_type _Newsize) { _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem()); }
  881. bool _Grow(size_type _Newsize, bool _Trim = false) { if (max_size() < _Newsize) _Xlen(); if (this->_Myres < _Newsize) _Copy(_Newsize, this->_Mysize); else if (_Trim && _Newsize < this->_BUF_SIZE) _Tidy(true, _Newsize < this->_Mysize ? _Newsize : this->_Mysize); else if (_Newsize == 0) _Eos(0); return (0 < _Newsize); }
  882. bool _Inside(const _Elem *_Ptr) { if (_Ptr == 0 || _Ptr < this->_Myptr() || this->_Myptr() + this->_Mysize <= _Ptr) return (false); else return (true); }
  883. static size_type _Pdif(const_iterator _P2, const_iterator _P1) { return ((_P2)._Ptr == 0 ? 0 : _P2 - _P1); }
  884. void _Tidy(bool _Built = false, size_type _Newsize = 0) { if (!_Built) ; else if (this->_BUF_SIZE <= this->_Myres) { pointer _Ptr = this->_Bx._Ptr; this->_Getal().destroy(&this->_Bx._Ptr); if (0 < _Newsize) _Traits::copy(this->_Bx._Buf, ::std::addressof(*_Ptr), _Newsize); this->_Getal().deallocate(_Ptr, this->_Myres + 1); } this->_Myres = this->_BUF_SIZE - 1; _Eos(_Newsize); }
  885. __declspec(noreturn) void _Xlen() const { _Xlength_error("string too long"); }
  886. __declspec(noreturn) void _Xran() const { _Xout_of_range("invalid string position"); }
  887. };
  888. template <class _Elem, class _Traits, class _Alloc> const typename basic_string<_Elem, _Traits, _Alloc>::size_type basic_string<_Elem, _Traits, _Alloc>::npos = (typename basic_string<_Elem, _Traits, _Alloc>::size_type)(-1);
  889. template <class _Elem, class _Traits, class _Alloc> inline void swap(basic_string<_Elem, _Traits, _Alloc> &_Left, basic_string<_Elem, _Traits, _Alloc> &_Right) {
  890. }
  891. typedef basic_string<char, char_traits<char>, allocator<char> > string;
  892. template <class _Ty> inline pair<_Ty *, ptrdiff_t> get_temporary_buffer(ptrdiff_t _Count) throw() {
  893. _Ty *_Pbuf;
  894. }
  895. template <class _InIt, class _FwdIt> inline _FwdIt _Uninitialized_copy0(_InIt _First, _InIt _Last, _FwdIt _Dest) {
  896. return (_Uninitialized_copy0(_First, _Last, _Dest, _Ptr_cat(_First, _Dest)));
  897. return (_Rechecked(_Dest, _Uninitialized_copy0(_Unchecked(_First), _Unchecked(_Last), _Unchecked(_Dest))));
  898. }
  899. template <class _InIt, class _FwdIt, class _Alloc> inline _FwdIt _Uninit_copy(_InIt _First, _InIt _Last, _FwdIt _Dest, _Wrap_alloc<_Alloc> &_Al, _Nonscalar_ptr_iterator_tag) {
  900. }
  901. template <class _InIt, class _FwdIt, class _Alloc> inline _FwdIt _Uninit_copy(_InIt _First, _InIt _Last, _FwdIt _Dest, _Wrap_alloc<_Alloc> &_Al, _Scalar_ptr_iterator_tag) {
  902. return ( _Uninit_copy(_First, _Last, _Dest, _Al, _Nonscalar_ptr_iterator_tag()));
  903. }
  904. template <class _InIt, class _FwdIt, class _Alloc> inline _FwdIt _Uninitialized_copy(_InIt _First, _InIt _Last, _FwdIt _Dest, _Alloc &_Al) {
  905. return (_Uninit_copy(_First, _Last, _Dest, _Al, _Ptr_cat(_First, _Dest)));
  906. }
  907. template <class _InIt, class _FwdIt, class _Alloc, class _Valty> inline _FwdIt _Uninit_move(_InIt _First, _InIt _Last, _FwdIt _Dest, _Wrap_alloc<_Alloc> &_Al, _Valty *, _Nonscalar_ptr_iterator_tag) {
  908. ;
  909. }
  910. template <class _InIt, class _FwdIt, class _Alloc> inline _FwdIt _Uninitialized_move(_InIt _First, _InIt _Last, _FwdIt _Dest, _Alloc &_Al) {
  911. }
  912. template <class _Ty, class _Diff, class _Tval, class _Valty> inline void _Uninit_fill_n(_Ty *_First, _Diff _Count, const _Tval *_Pval, _Wrap_alloc<allocator<_Ty> > &, _Valty *, _Scalar_ptr_iterator_tag) {
  913. _Fill_n(_First, _Count, *_Pval);
  914. }
  915. template <class _FwdIt, class _Diff, class _Alloc, class _Valty> inline void _Uninit_def_fill_n(_FwdIt _First, _Diff _Count, _Wrap_alloc<_Alloc> &_Al, _Valty *, _Nonscalar_ptr_iterator_tag) {
  916. };
  917. }
  918. typedef __int64 int64_t;
  919. typedef unsigned __int64 uint64_t;
  920. typedef signed int int32_t;
  921. typedef unsigned int uint32_t;
  922. namespace llvm {
  923. template <typename T> class PointerLikeTypeTraits {
  924. };
  925. template <typename T> class PointerLikeTypeTraits<T *> {
  926. public: static inline void *getAsVoidPointer(T *P) { return P; }
  927. static inline T *getFromVoidPointer(void *P) { return static_cast<T *>(P); }
  928. enum { NumLowBitsAvailable = 2 };
  929. };
  930. template <typename T> class PointerLikeTypeTraits<const T *> {
  931. typedef PointerLikeTypeTraits<T *> NonConst;
  932. public: static inline const void *getAsVoidPointer(const T *P) { return NonConst::getAsVoidPointer(const_cast<T *>(P)); }
  933. static inline const T *getFromVoidPointer(const void *P) { return NonConst::getFromVoidPointer(const_cast<void *>(P)); }
  934. enum { NumLowBitsAvailable = NonConst::NumLowBitsAvailable };
  935. };
  936. void __cdecl _wassert(const wchar_t *_Message, const wchar_t *_File, unsigned _Line);
  937. class SmallPtrSetImpl {
  938. friend class SmallPtrSetIteratorImpl;
  939. protected: const void **SmallArray;
  940. const void **CurArray;
  941. unsigned CurArraySize;
  942. unsigned NumElements;
  943. unsigned NumTombstones;
  944. SmallPtrSetImpl(const void **SmallStorage, const SmallPtrSetImpl &that);
  945. explicit SmallPtrSetImpl(const void **SmallStorage, unsigned SmallSize) : SmallArray(SmallStorage), CurArray(SmallStorage), CurArraySize(SmallSize) { (void)((!!(SmallSize && (SmallSize & (SmallSize - 1)) == 0 && "Initial size must be a power of two!")) || (_wassert(L"SmallSize && (SmallSize & (SmallSize-1)) == 0 && " L"\"Initial size must be a power of two!\"", L"..\\include\\llvm/ADT/SmallPtrSet.h", 68), 0)); clear(); }
  946. void clear() { if (!isSmall() && NumElements * 4 < CurArraySize && CurArraySize > 32) return shrink_and_clear(); memset(CurArray, -1, CurArraySize * sizeof(void *)); NumElements = 0; NumTombstones = 0; }
  947. protected: static void *getTombstoneMarker() { return reinterpret_cast<void *>(-2); }
  948. static void *getEmptyMarker() { return reinterpret_cast<void *>(-1); }
  949. private: bool isSmall() const { return CurArray == SmallArray; }
  950. const void *const *FindBucketFor(const void *Ptr) const;
  951. void shrink_and_clear();
  952. void Grow(unsigned NewSize);
  953. };
  954. class SmallPtrSetIteratorImpl {
  955. protected: const void *const *Bucket;
  956. const void *const *End;
  957. public: explicit SmallPtrSetIteratorImpl(const void *const *BP, const void *const *E) : Bucket(BP), End(E) { AdvanceIfNotValid(); }
  958. bool operator!=(const SmallPtrSetIteratorImpl &RHS) const { return Bucket != RHS.Bucket; }
  959. protected: void AdvanceIfNotValid() { (void)((!!(Bucket <= End)) || (_wassert(L"Bucket <= End", L"..\\include\\llvm/ADT/SmallPtrSet.h", 164), 0)); while (Bucket != End && (*Bucket == SmallPtrSetImpl::getEmptyMarker() || *Bucket == SmallPtrSetImpl::getTombstoneMarker())) ++Bucket; }
  960. };
  961. template <typename PtrTy> class SmallPtrSetIterator : public SmallPtrSetIteratorImpl {
  962. typedef PointerLikeTypeTraits<PtrTy> PtrTraits;
  963. };
  964. template <unsigned N> struct RoundUpToPowerOfTwo;
  965. template <unsigned N, bool isPowerTwo> struct RoundUpToPowerOfTwoH {
  966. enum { Val = N };
  967. };
  968. template <unsigned N> struct RoundUpToPowerOfTwo {
  969. enum { Val = RoundUpToPowerOfTwoH<N, (N &(N - 1)) == 0>::Val };
  970. };
  971. template <class PtrType, unsigned SmallSize> class SmallPtrSet : public SmallPtrSetImpl {
  972. enum { SmallSizePowTwo = RoundUpToPowerOfTwo<SmallSize>::Val };
  973. const void *SmallStorage[SmallSizePowTwo];
  974. typedef PointerLikeTypeTraits<PtrType> PtrTraits;
  975. public: SmallPtrSet() : SmallPtrSetImpl(SmallStorage, SmallSizePowTwo) {}
  976. void swap(SmallPtrSet<PtrType, SmallSize> &RHS) { SmallPtrSetImpl::swap(RHS); }
  977. };
  978. }
  979. namespace llvm {
  980. namespace sys {
  981. void MemoryFence();
  982. typedef long cas_flag;
  983. cas_flag CompareAndSwap(volatile cas_flag *ptr, cas_flag new_value, cas_flag old_value);
  984. cas_flag AtomicIncrement(volatile cas_flag *ptr);
  985. cas_flag AtomicDiv(volatile cas_flag *ptr, cas_flag val);
  986. }
  987. }
  988. extern "C" {
  989. void AnnotateHappensAfter(const char *file, int line, const volatile void *cv);
  990. }
  991. namespace llvm {
  992. class raw_ostream;
  993. class Statistic {
  994. public: const char *Name;
  995. const char *Desc;
  996. volatile llvm::sys::cas_flag Value;
  997. bool Initialized;
  998. llvm::sys::cas_flag getValue() const { return Value; }
  999. const Statistic &operator=(unsigned Val) { Value = Val; return init(); }
  1000. const Statistic &operator++() { sys::AtomicIncrement(&Value); return init(); }
  1001. protected: Statistic &init() { bool tmp = Initialized; sys::MemoryFence(); if (!tmp) RegisterStatistic(); AnnotateHappensAfter("..\\include\\llvm/ADT/Statistic.h", 156, this); return *this; }
  1002. void RegisterStatistic();
  1003. };
  1004. namespace dont_use {
  1005. template <typename T> char is_class_helper(void (T::*)());
  1006. template <typename T> double is_class_helper(...);
  1007. }
  1008. template <typename T> struct is_class {
  1009. public: static const bool value = sizeof(char) == sizeof(dont_use::is_class_helper<T>(0));
  1010. };
  1011. template <typename T> struct isPodLike {
  1012. static const bool value = __is_trivially_copyable(T);
  1013. };
  1014. template <class T, T v> struct integral_constant {
  1015. typedef T value_type;
  1016. static const value_type value = v;
  1017. operator value_type() { return value; }
  1018. };
  1019. typedef integral_constant<bool, true> true_type;
  1020. typedef integral_constant<bool, false> false_type;
  1021. template <typename T, typename U> struct is_same : public false_type {
  1022. };
  1023. template <typename T> struct remove_const {
  1024. typedef T type;
  1025. };
  1026. template <typename T> struct is_integral_impl : false_type {
  1027. };
  1028. template <> struct is_integral_impl<unsigned long long> : true_type {
  1029. };
  1030. template <typename T> class is_integral_or_enum {
  1031. };
  1032. template <bool Cond, typename T = void> struct enable_if_c {
  1033. typedef T type;
  1034. };
  1035. namespace dont_use {
  1036. template <typename Base> char base_of_helper(const volatile Base *);
  1037. };
  1038. template <typename T> struct remove_pointer {
  1039. typedef T type;
  1040. };
  1041. template <typename T, typename Enable = void> struct add_lvalue_reference_if_not_pointer {
  1042. typedef T &type;
  1043. };
  1044. template <typename T, typename Enable = void> struct add_const_past_pointer {
  1045. typedef const T type;
  1046. };
  1047. template <bool, typename T, typename F> struct conditional {
  1048. typedef T type;
  1049. };
  1050. template <typename T, typename F> struct conditional<false, T, F> {
  1051. typedef F type;
  1052. };
  1053. template <typename T> struct DenseMapInfo {
  1054. };
  1055. template <typename T> struct DenseMapInfo<T *> {
  1056. static inline T *getEmptyKey() { uintptr_t Val = static_cast<uintptr_t>(-1); Val <<= PointerLikeTypeTraits<T *>::NumLowBitsAvailable; return reinterpret_cast<T *>(Val); }
  1057. static inline T *getTombstoneKey() { uintptr_t Val = static_cast<uintptr_t>(-2); Val <<= PointerLikeTypeTraits<T *>::NumLowBitsAvailable; return reinterpret_cast<T *>(Val); }
  1058. static unsigned getHashValue(const T *PtrVal) { return (unsigned((uintptr_t)PtrVal) >> 4) ^ (unsigned((uintptr_t)PtrVal) >> 9); }
  1059. static bool isEqual(const T *LHS, const T *RHS) { return LHS == RHS; }
  1060. };
  1061. template <> struct DenseMapInfo<unsigned> {
  1062. static inline unsigned getEmptyKey() { return ~0U; }
  1063. };
  1064. template <typename T> struct AlignmentCalcImpl {
  1065. char x;
  1066. T t;
  1067. };
  1068. template <typename T> struct AlignOf {
  1069. enum { Alignment = static_cast<unsigned int>(sizeof(AlignmentCalcImpl<T>) - sizeof(T)) };
  1070. enum { Alignment_LessEqual_16Bytes = Alignment <= 16 ? 1 : 0 };
  1071. };
  1072. template <std::size_t Alignment, std::size_t Size> struct AlignedCharArray;
  1073. template <std::size_t Size> struct AlignedCharArray<1, Size> {
  1074. union { char aligned; char buffer[Size]; };
  1075. };
  1076. template <std::size_t Size> struct AlignedCharArray<4, Size> {
  1077. union { int aligned; char buffer[Size]; };
  1078. };
  1079. template <std::size_t Size> struct AlignedCharArray<32, Size> {
  1080. __declspec(align(32)) char buffer[Size];
  1081. };
  1082. namespace detail {
  1083. template <typename T1, typename T2 = char, typename T3 = char, typename T4 = char, typename T5 = char, typename T6 = char, typename T7 = char> class AlignerImpl { T1 t1; T2 t2; T3 t3; T4 t4; T5 t5; T6 t6; T7 t7; AlignerImpl(); };
  1084. template <typename T1, typename T2 = char, typename T3 = char, typename T4 = char, typename T5 = char, typename T6 = char, typename T7 = char> union SizerImpl { char arr1[sizeof(T1)], arr2[sizeof(T2)], arr3[sizeof(T3)], arr4[sizeof(T4)], arr5[sizeof(T5)], arr6[sizeof(T6)], arr7[sizeof(T7)]; };
  1085. }
  1086. template <typename T1, typename T2 = char, typename T3 = char, typename T4 = char, typename T5 = char, typename T6 = char, typename T7 = char> struct AlignedCharArrayUnion : llvm::AlignedCharArray< AlignOf<detail::AlignerImpl<T1, T2, T3, T4, T5, T6, T7> >::Alignment, sizeof(detail::SizerImpl<T1, T2, T3, T4, T5, T6, T7>)> {
  1087. };
  1088. enum ZeroBehavior {
  1089. ZB_Undefined, ZB_Max, ZB_Width };
  1090. template <typename T> typename enable_if_c< std::numeric_limits<T>::is_integer && !std::numeric_limits<T>::is_signed, std::size_t>::type countTrailingZeros(T Val, ZeroBehavior ZB = ZB_Width) {
  1091. return ZeroBits;
  1092. }
  1093. template <> inline std::size_t countTrailingZeros<uint32_t>(uint32_t Val, ZeroBehavior ZB) {
  1094. if (ZB != ZB_Undefined && Val == 0) return 32;
  1095. }
  1096. template <typename T> typename enable_if_c< std::numeric_limits<T>::is_integer && !std::numeric_limits<T>::is_signed, std::size_t>::type countLeadingZeros(T Val, ZeroBehavior ZB = ZB_Width) {
  1097. if (!Val) return std::numeric_limits<T>::digits;
  1098. }
  1099. template <unsigned N> inline bool isUInt(uint64_t x) {
  1100. return N >= 64 || x < ((1ULL) << (N));
  1101. }
  1102. template <> inline bool isUInt<32>(uint64_t x) {
  1103. return static_cast<uint32_t>(x) == x;
  1104. }
  1105. template <unsigned N, unsigned S> inline bool isShiftedUInt(uint64_t x) {
  1106. return Value && !(Value & (Value - 1));
  1107. }
  1108. inline bool isPowerOf2_64(uint64_t Value) {
  1109. return Value && !(Value & (Value - int64_t(1L)));
  1110. }
  1111. inline int32_t SignExtend32(uint32_t X, unsigned B) {
  1112. return int32_t(X << (32 - B)) >> (32 - B);
  1113. }
  1114. }
  1115. namespace llvm {
  1116. template <typename KeyT, typename ValueT, typename KeyInfoT = DenseMapInfo<KeyT>, bool IsConst = false> class DenseMapIterator;
  1117. template <typename DerivedT, typename KeyT, typename ValueT, typename KeyInfoT> class DenseMapBase {
  1118. protected: typedef std::pair<KeyT, ValueT> BucketT;
  1119. public: typedef KeyT key_type;
  1120. typedef BucketT value_type;
  1121. typedef DenseMapIterator<KeyT, ValueT, KeyInfoT> iterator;
  1122. void clear() { if (getNumEntries() == 0 && getNumTombstones() == 0) return; if (getNumEntries() * 4 < getNumBuckets() && getNumBuckets() > 64) { shrink_and_clear(); return; } const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey(); for (BucketT *P = getBuckets(), *E = getBucketsEnd(); P != E; ++P) { if (!KeyInfoT::isEqual(P->first, EmptyKey)) { if (!KeyInfoT::isEqual(P->first, TombstoneKey)) { P->second.~ValueT(); decrementNumEntries(); } P->first = EmptyKey; } } (void)((!!(getNumEntries() == 0 && "Node count imbalance!")) || (_wassert(L"getNumEntries() == 0 && \"Node count imbalance!\"", L"..\\include\\llvm/ADT/DenseMap.h", 98), 0)); setNumTombstones(0); }
  1123. bool count(const KeyT &Val) const { const BucketT *TheBucket; return LookupBucketFor(Val, TheBucket); }
  1124. ValueT lookup(const KeyT &Val) const { const BucketT *TheBucket; if (LookupBucketFor(Val, TheBucket)) return TheBucket->second; return ValueT(); }
  1125. std::pair<iterator, bool> insert(const std::pair<KeyT, ValueT> &KV) { BucketT *TheBucket; if (LookupBucketFor(KV.first, TheBucket)) return std::make_pair(iterator(TheBucket, getBucketsEnd(), true), false); TheBucket = InsertIntoBucket(KV.first, KV.second, TheBucket); return std::make_pair(iterator(TheBucket, getBucketsEnd(), true), true); }
  1126. value_type &FindAndConstruct(const KeyT &Key) { BucketT *TheBucket; if (LookupBucketFor(Key, TheBucket)) return *TheBucket; return *InsertIntoBucket(Key, ValueT(), TheBucket); }
  1127. ValueT &operator[](const KeyT &Key) { return FindAndConstruct(Key).second; }
  1128. protected: DenseMapBase() {}
  1129. void destroyAll() { if (getNumBuckets() == 0) return; const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey(); for (BucketT *P = getBuckets(), *E = getBucketsEnd(); P != E; ++P) { if (!KeyInfoT::isEqual(P->first, EmptyKey) && !KeyInfoT::isEqual(P->first, TombstoneKey)) P->second.~ValueT(); P->first.~KeyT(); } memset((void *)getBuckets(), 0x5a, sizeof(BucketT) * getNumBuckets()); }
  1130. void initEmpty() { setNumEntries(0); setNumTombstones(0); (void)((!!((getNumBuckets() & (getNumBuckets() - 1)) == 0 && "# initial buckets must be a power of two!")) || (_wassert(L"(getNumBuckets() & (getNumBuckets()-1)) == 0 && \"# " L"initial buckets must be a power of two!\"", L"..\\include\\llvm/ADT/DenseMap.h", 272), 0)); const KeyT EmptyKey = getEmptyKey(); for (BucketT *B = getBuckets(), *E = getBucketsEnd(); B != E; ++B) new (&B->first) KeyT(EmptyKey); }
  1131. template <typename LookupKeyT> static unsigned getHashValue(const LookupKeyT &Val) { return KeyInfoT::getHashValue(Val); }
  1132. static const KeyT getEmptyKey() { return KeyInfoT::getEmptyKey(); }
  1133. static const KeyT getTombstoneKey() { return KeyInfoT::getTombstoneKey(); }
  1134. private: unsigned getNumEntries() const { return static_cast<const DerivedT *>(this)->getNumEntries(); }
  1135. void setNumEntries(unsigned Num) { static_cast<DerivedT *>(this)->setNumEntries(Num); }
  1136. void incrementNumEntries() { setNumEntries(getNumEntries() + 1); }
  1137. void decrementNumEntries() { setNumEntries(getNumEntries() - 1); }
  1138. unsigned getNumTombstones() const { return static_cast<const DerivedT *>(this)->getNumTombstones(); }
  1139. void setNumTombstones(unsigned Num) { static_cast<DerivedT *>(this)->setNumTombstones(Num); }
  1140. void incrementNumTombstones() { setNumTombstones(getNumTombstones() + 1); }
  1141. void decrementNumTombstones() { setNumTombstones(getNumTombstones() - 1); }
  1142. const BucketT *getBuckets() const { return static_cast<const DerivedT *>(this)->getBuckets(); }
  1143. BucketT *getBuckets() { return static_cast<DerivedT *>(this)->getBuckets(); }
  1144. unsigned getNumBuckets() const { return static_cast<const DerivedT *>(this)->getNumBuckets(); }
  1145. BucketT *getBucketsEnd() { return getBuckets() + getNumBuckets(); }
  1146. const BucketT *getBucketsEnd() const { return getBuckets() + getNumBuckets(); }
  1147. void grow(unsigned AtLeast) { static_cast<DerivedT *>(this)->grow(AtLeast); }
  1148. void shrink_and_clear() { static_cast<DerivedT *>(this)->shrink_and_clear(); }
  1149. BucketT *InsertIntoBucket(const KeyT &Key, const ValueT &Value, BucketT *TheBucket) { TheBucket = InsertIntoBucketImpl(Key, TheBucket); TheBucket->first = Key; new (&TheBucket->second) ValueT(Value); return TheBucket; }
  1150. BucketT *InsertIntoBucket(const KeyT &Key, ValueT &&Value, BucketT *TheBucket) { TheBucket = InsertIntoBucketImpl(Key, TheBucket); TheBucket->first = Key; new (&TheBucket->second) ValueT(std::move(Value)); return TheBucket; }
  1151. BucketT *InsertIntoBucketImpl(const KeyT &Key, BucketT *TheBucket) { unsigned NewNumEntries = getNumEntries() + 1; unsigned NumBuckets = getNumBuckets(); if (NewNumEntries * 4 >= NumBuckets * 3) { this->grow(NumBuckets * 2); LookupBucketFor(Key, TheBucket); NumBuckets = getNumBuckets(); } if (NumBuckets - (NewNumEntries + getNumTombstones()) <= NumBuckets / 8) { this->grow(NumBuckets * 2); LookupBucketFor(Key, TheBucket); } (void)((!!(TheBucket)) || (_wassert(L"TheBucket", L"..\\include\\llvm/ADT/DenseMap.h", 446), 0)); incrementNumEntries(); const KeyT EmptyKey = getEmptyKey(); if (!KeyInfoT::isEqual(TheBucket->first, EmptyKey)) decrementNumTombstones(); return TheBucket; }
  1152. template <typename LookupKeyT> bool LookupBucketFor(const LookupKeyT &Val, const BucketT *&FoundBucket) const { const BucketT *BucketsPtr = getBuckets(); const unsigned NumBuckets = getNumBuckets(); if (NumBuckets == 0) { FoundBucket = 0; return false; } const BucketT *FoundTombstone = 0; const KeyT EmptyKey = getEmptyKey(); const KeyT TombstoneKey = getTombstoneKey(); (void)((!!(!KeyInfoT::isEqual(Val, EmptyKey) && !KeyInfoT::isEqual(Val, TombstoneKey) && "Empty/Tombstone value shouldn't be inserted into map!")) || (_wassert(L"!KeyInfoT::isEqual(Val, EmptyKey) && " L"!KeyInfoT::isEqual(Val, TombstoneKey) && " L"\"Empty/Tombstone value shouldn't be inserted into " L"map!\"", L"..\\include\\llvm/ADT/DenseMap.h", 481), 0)); unsigned BucketNo = getHashValue(Val) & (NumBuckets - 1); unsigned ProbeAmt = 1; while (1) { const BucketT *ThisBucket = BucketsPtr + BucketNo; if (KeyInfoT::isEqual(Val, ThisBucket->first)) { FoundBucket = ThisBucket; return true; } if (KeyInfoT::isEqual(ThisBucket->first, EmptyKey)) { FoundBucket = FoundTombstone ? FoundTombstone : ThisBucket; return false; } if (KeyInfoT::isEqual(ThisBucket->first, TombstoneKey) && !FoundTombstone) FoundTombstone = ThisBucket; BucketNo += ProbeAmt++; BucketNo &= (NumBuckets - 1); } }
  1153. template <typename LookupKeyT> bool LookupBucketFor(const LookupKeyT &Val, BucketT *&FoundBucket) { const BucketT *ConstFoundBucket; bool Result = const_cast<const DenseMapBase *>(this) ->LookupBucketFor(Val, ConstFoundBucket); FoundBucket = const_cast<BucketT *>(ConstFoundBucket); return Result; }
  1154. public: size_t getMemorySize() const { return getNumBuckets() * sizeof(BucketT); }
  1155. };
  1156. template <typename KeyT, typename ValueT, typename KeyInfoT = DenseMapInfo<KeyT> > class DenseMap : public DenseMapBase<DenseMap<KeyT, ValueT, KeyInfoT>, KeyT, ValueT, KeyInfoT> {
  1157. typedef DenseMapBase<DenseMap, KeyT, ValueT, KeyInfoT> BaseT;
  1158. typedef typename BaseT::BucketT BucketT;
  1159. BucketT *Buckets;
  1160. unsigned NumEntries;
  1161. unsigned NumTombstones;
  1162. unsigned NumBuckets;
  1163. public: explicit DenseMap(unsigned NumInitBuckets = 0) { init(NumInitBuckets); }
  1164. ~DenseMap() { this->destroyAll(); operator delete(Buckets); }
  1165. void copyFrom(const DenseMap &other) { this->destroyAll(); operator delete(Buckets); if (allocateBuckets(other.NumBuckets)) { this->BaseT::copyFrom(other); } else { NumEntries = 0; NumTombstones = 0; } }
  1166. void init(unsigned InitBuckets) { if (allocateBuckets(InitBuckets)) { this->BaseT::initEmpty(); } else { NumEntries = 0; NumTombstones = 0; } }
  1167. bool allocateBuckets(unsigned Num) { NumBuckets = Num; if (NumBuckets == 0) { Buckets = 0; return false; } Buckets = static_cast<BucketT *>(operator new(sizeof(BucketT) * NumBuckets)); return true; }
  1168. };
  1169. template <typename KeyT, typename ValueT, unsigned InlineBuckets = 4, typename KeyInfoT = DenseMapInfo<KeyT> > class SmallDenseMap : public DenseMapBase<SmallDenseMap<KeyT, ValueT, InlineBuckets, KeyInfoT>, KeyT, ValueT, KeyInfoT> {
  1170. };
  1171. template <typename KeyT, typename ValueT, typename KeyInfoT> static inline size_t capacity_in_bytes( const DenseMap<KeyT, ValueT, KeyInfoT> &X) {
  1172. return X.getMemorySize();
  1173. }
  1174. template <typename PointerTy, unsigned IntBits, typename IntType = unsigned, typename PtrTraits = PointerLikeTypeTraits<PointerTy> > class PointerIntPair {
  1175. intptr_t Value;
  1176. enum : uintptr_t { PointerBitMask = ~(uintptr_t)(((intptr_t)1 << PtrTraits::NumLowBitsAvailable) - 1), IntShift = (uintptr_t)PtrTraits::NumLowBitsAvailable - IntBits, IntMask = (uintptr_t)(((intptr_t)1 << IntBits) - 1), ShiftedIntMask = (uintptr_t)(IntMask << IntShift) };
  1177. public: PointerIntPair() : Value(0) {}
  1178. PointerIntPair(PointerTy PtrVal, IntType IntVal) { (void)((!!(IntBits <= PtrTraits::NumLowBitsAvailable && "PointerIntPair formed with integer size too large for " "pointer")) || (_wassert(L"IntBits <= PtrTraits::NumLowBitsAvailable && " L"\"PointerIntPair formed with integer size too large for " L"pointer\"", L"..\\include\\llvm/ADT/PointerIntPair.h", 63), 0)); setPointerAndInt(PtrVal, IntVal); }
  1179. PointerTy getPointer() const { return PtrTraits::getFromVoidPointer( reinterpret_cast<void *>(Value & PointerBitMask)); }
  1180. IntType getInt() const { return (IntType)((Value >> IntShift) & IntMask); }
  1181. void setPointer(PointerTy PtrVal) { intptr_t PtrWord = reinterpret_cast<intptr_t>(PtrTraits::getAsVoidPointer(PtrVal)); (void)((!!((PtrWord & ((1 << PtrTraits::NumLowBitsAvailable) - 1)) == 0 && "Pointer is not sufficiently aligned")) || (_wassert(L"(PtrWord & ((1 << PtrTraits::NumLowBitsAvailable)-1)) " L"== 0 && \"Pointer is not sufficiently aligned\"", L"..\\include\\llvm/ADT/PointerIntPair.h", 83), 0)); Value = PtrWord | (Value & ~PointerBitMask); }
  1182. void setInt(IntType IntVal) { intptr_t IntWord = static_cast<intptr_t>(IntVal); (void)((!!(IntWord < (1 << IntBits) && "Integer too large for field")) || (_wassert( L"IntWord < (1 << IntBits) && \"Integer too large for field\"", L"..\\include\\llvm/ADT/PointerIntPair.h", 90), 0)); Value &= ~ShiftedIntMask; Value |= IntWord << IntShift; }
  1183. void initWithPointer(PointerTy PtrVal) { intptr_t PtrWord = reinterpret_cast<intptr_t>(PtrTraits::getAsVoidPointer(PtrVal)); (void)((!!((PtrWord & ((1 << PtrTraits::NumLowBitsAvailable) - 1)) == 0 && "Pointer is not sufficiently aligned")) || (_wassert(L"(PtrWord & ((1 << PtrTraits::NumLowBitsAvailable)-1)) " L"== 0 && \"Pointer is not sufficiently aligned\"", L"..\\include\\llvm/ADT/PointerIntPair.h", 101), 0)); Value = PtrWord; }
  1184. void setPointerAndInt(PointerTy PtrVal, IntType IntVal) { intptr_t PtrWord = reinterpret_cast<intptr_t>(PtrTraits::getAsVoidPointer(PtrVal)); (void)((!!((PtrWord & ((1 << PtrTraits::NumLowBitsAvailable) - 1)) == 0 && "Pointer is not sufficiently aligned")) || (_wassert(L"(PtrWord & ((1 << PtrTraits::NumLowBitsAvailable)-1)) " L"== 0 && \"Pointer is not sufficiently aligned\"", L"..\\include\\llvm/ADT/PointerIntPair.h", 109), 0)); intptr_t IntWord = static_cast<intptr_t>(IntVal); (void)((!!(IntWord < (1 << IntBits) && "Integer too large for field")) || (_wassert( L"IntWord < (1 << IntBits) && \"Integer too large for field\"", L"..\\include\\llvm/ADT/PointerIntPair.h", 111), 0)); Value = PtrWord | (IntWord << IntShift); }
  1185. };
  1186. template <typename T> struct isPodLike;
  1187. }
  1188. namespace llvm {
  1189. enum NoneType {
  1190. None };
  1191. class SmallVectorBase {
  1192. protected: void *BeginX, *EndX, *CapacityX;
  1193. protected: SmallVectorBase(void *FirstEl, size_t Size) : BeginX(FirstEl), EndX(FirstEl), CapacityX((char *)FirstEl + Size) {}
  1194. void grow_pod(void *FirstEl, size_t MinSizeInBytes, size_t TSize);
  1195. };
  1196. template <typename T, unsigned N> struct SmallVectorStorage;
  1197. template <typename T, typename = void> class SmallVectorTemplateCommon : public SmallVectorBase {
  1198. private: template <typename, unsigned> friend struct SmallVectorStorage;
  1199. typedef llvm::AlignedCharArrayUnion<T> U;
  1200. U FirstEl;
  1201. protected: SmallVectorTemplateCommon(size_t Size) : SmallVectorBase(&FirstEl, Size) {}
  1202. void grow_pod(size_t MinSizeInBytes, size_t TSize) { SmallVectorBase::grow_pod(&FirstEl, MinSizeInBytes, TSize); }
  1203. void setEnd(T *P) { this->EndX = P; }
  1204. public: typedef size_t size_type;
  1205. typedef T value_type;
  1206. typedef T *iterator;
  1207. typedef const T *const_iterator;
  1208. typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
  1209. typedef std::reverse_iterator<iterator> reverse_iterator;
  1210. typedef T &reference;
  1211. typedef const T &const_reference;
  1212. typedef T *pointer;
  1213. iterator begin() { return (iterator) this->BeginX; }
  1214. const_iterator begin() const { return (const_iterator) this->BeginX; }
  1215. iterator end() { return (iterator) this->EndX; }
  1216. const_iterator end() const { return (const_iterator) this->EndX; }
  1217. protected: iterator capacity_ptr() { return (iterator) this->CapacityX; }
  1218. public: reverse_iterator rbegin() { return reverse_iterator(end()); }
  1219. const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
  1220. const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
  1221. size_type size() const { return end() - begin(); }
  1222. const_reference operator[](unsigned idx) const { (void)((!!(begin() + idx < end())) || (_wassert(L"begin() + idx < end()", L"..\\include\\llvm/ADT/SmallVector.h", 144), 0)); return begin()[idx]; }
  1223. reference front() { (void)((!!(!empty())) || (_wassert(L"!empty()", L"..\\include\\llvm/ADT/SmallVector.h", 149), 0)); return begin()[0]; }
  1224. };
  1225. template <typename T, bool isPodLike> class SmallVectorTemplateBase : public SmallVectorTemplateCommon<T> {
  1226. protected: SmallVectorTemplateBase(size_t Size) : SmallVectorTemplateCommon<T>(Size) {}
  1227. template <typename It1, typename It2> static void uninitialized_copy(It1 I, It1 E, It2 Dest) { std::uninitialized_copy(I, E, Dest); }
  1228. void grow(size_t MinSize = 0);
  1229. };
  1230. template <typename T, bool isPodLike> void SmallVectorTemplateBase<T, isPodLike>::grow(size_t MinSize) {
  1231. size_t CurCapacity = this->capacity();
  1232. }
  1233. template <typename T> class SmallVectorTemplateBase<T, true> : public SmallVectorTemplateCommon<T> {
  1234. protected: SmallVectorTemplateBase(size_t Size) : SmallVectorTemplateCommon<T>(Size) {}
  1235. void grow(size_t MinSize = 0) { this->grow_pod(MinSize * sizeof(T), sizeof(T)); }
  1236. public: void push_back(const T &Elt) { if (this->EndX < this->CapacityX) { Retry: memcpy(this->end(), &Elt, sizeof(T)); this->setEnd(this->end() + 1); return; } this->grow(); goto Retry; }
  1237. };
  1238. template <typename T> class SmallVectorImpl : public SmallVectorTemplateBase<T, isPodLike<T>::value> {
  1239. protected: explicit SmallVectorImpl(unsigned N) : SmallVectorTemplateBase<T, isPodLike<T>::value>(N * sizeof(T)) {}
  1240. void swap(SmallVectorImpl &RHS);
  1241. template <typename in_iter> void append(in_iter in_start, in_iter in_end) { size_type NumInputs = std::distance(in_start, in_end); if (NumInputs > size_type(this->capacity_ptr() - this->end())) this->grow(this->size() + NumInputs); std::uninitialized_copy(in_start, in_end, this->end()); this->setEnd(this->end() + NumInputs); }
  1242. void set_size(unsigned N) { (void)((!!(N <= this->capacity())) || (_wassert(L"N <= this->capacity()", L"..\\include\\llvm/ADT/SmallVector.h", 703), 0)); this->setEnd(this->begin() + N); }
  1243. };
  1244. template <typename T> void SmallVectorImpl<T>::swap(SmallVectorImpl<T> &RHS) {
  1245. if (this == &RHS) return;
  1246. }
  1247. template <typename T, unsigned N> struct SmallVectorStorage {
  1248. typename SmallVectorTemplateCommon<T>::U InlineElts[N - 1];
  1249. };
  1250. template <typename T> struct SmallVectorStorage<T, 0> {
  1251. };
  1252. template <typename T, unsigned N> class SmallVector : public SmallVectorImpl<T> {
  1253. SmallVectorStorage<T, N> Storage;
  1254. public: SmallVector() : SmallVectorImpl<T>(N) {}
  1255. };
  1256. template <typename T, unsigned N> static inline size_t capacity_in_bytes(const SmallVector<T, N> &X) {
  1257. }
  1258. }
  1259. namespace std {
  1260. template <class _Myvec> class _Vector_const_iterator : public _Iterator012< random_access_iterator_tag, typename _Myvec::value_type, typename _Myvec::difference_type, typename _Myvec::const_pointer, typename _Myvec::const_reference, _Iterator_base> {
  1261. public: typedef _Vector_const_iterator<_Myvec> _Myiter;
  1262. typedef typename _Myvec::value_type value_type;
  1263. typedef typename _Myvec::difference_type difference_type;
  1264. typedef typename _Myvec::const_pointer pointer;
  1265. typedef typename _Myvec::const_reference reference;
  1266. typedef typename _Myvec::pointer _Tptr;
  1267. _Vector_const_iterator(_Tptr _Parg, const _Container_base *_Pvector) : _Ptr(_Parg) { this->_Adopt(_Pvector); }
  1268. typedef pointer _Unchecked_type;
  1269. _Unchecked_type _Unchecked() const { return (_Unchecked_type(this->_Ptr)); }
  1270. reference operator*() const { ; return (*this->_Ptr); }
  1271. _Myiter &operator++() { ++this->_Ptr; return (*this); }
  1272. _Myiter operator++(int) { _Myiter _Tmp = *this; ++*this; return (_Tmp); }
  1273. reference operator[](difference_type _Off) const { return (*(*this + _Off)); }
  1274. bool operator==(const _Myiter &_Right) const { _Compat(_Right); return (this->_Ptr == _Right._Ptr); }
  1275. bool operator!=(const _Myiter &_Right) const { return (!(*this == _Right)); }
  1276. bool operator>=(const _Myiter &_Right) const { return (!(*this < _Right)); }
  1277. void _Compat(const _Myiter &) const {}
  1278. _Tptr _Ptr;
  1279. };
  1280. template <class _Myvec> inline typename _Vector_const_iterator<_Myvec>::_Unchecked_type _Unchecked( _Vector_const_iterator<_Myvec> _Iter) {
  1281. }
  1282. template <class _Myvec> class _Vector_iterator : public _Vector_const_iterator<_Myvec> {
  1283. public: typedef _Vector_iterator<_Myvec> _Myiter;
  1284. typedef _Vector_const_iterator<_Myvec> _Mybase;
  1285. typedef typename _Myvec::pointer pointer;
  1286. typedef typename _Myvec::reference reference;
  1287. _Vector_iterator(pointer _Parg, const _Container_base *_Pvector) : _Mybase(_Parg, _Pvector) {}
  1288. typedef pointer _Unchecked_type;
  1289. };
  1290. template <class _Myvec> inline typename _Vector_iterator<_Myvec>::_Unchecked_type _Unchecked( _Vector_iterator<_Myvec> _Iter) {
  1291. }
  1292. template <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer, class _Reference, class _Const_reference> struct _Vec_iter_types {
  1293. typedef _Const_reference const_reference;
  1294. };
  1295. template <class _Ty, class _Alloc0> struct _Vec_base_types {
  1296. typedef _Alloc0 _Alloc;
  1297. typedef _Wrap_alloc<_Alloc> _Alty0;
  1298. typedef typename _Alty0::template rebind<_Ty>::other _Alty;
  1299. typedef typename _Alty::pointer _Tptr;
  1300. typedef typename _Alty::template rebind<_Tptr>::other _Alpty;
  1301. typedef typename _If< _Is_simple_alloc<_Alty>::value, _Simple_types<typename _Alty::value_type>, _Vec_iter_types<typename _Alty::value_type, typename _Alty::size_type, typename _Alty::difference_type, typename _Alty::pointer, typename _Alty::const_pointer, typename _Alty::reference, typename _Alty::const_reference> >::type _Val_types;
  1302. };
  1303. template <class _Val_types> class _Vector_val : public _Container_base {
  1304. public: typedef _Vector_val<_Val_types> _Myt;
  1305. typedef typename _Val_types::value_type value_type;
  1306. typedef typename _Val_types::size_type size_type;
  1307. typedef typename _Val_types::difference_type difference_type;
  1308. typedef typename _Val_types::pointer pointer;
  1309. typedef typename _Val_types::const_pointer const_pointer;
  1310. typedef typename _Val_types::reference reference;
  1311. typedef typename _Val_types::const_reference const_reference;
  1312. typedef _Vector_iterator<_Myt> iterator;
  1313. typedef _Vector_const_iterator<_Myt> const_iterator;
  1314. pointer _Myfirst;
  1315. pointer _Mylast;
  1316. pointer _Myend;
  1317. };
  1318. template <bool _Al_has_storage, class _Alloc_types> class _Vector_alloc : public _Vector_val<typename _Alloc_types::_Val_types> {
  1319. };
  1320. template <class _Alloc_types> class _Vector_alloc<false, _Alloc_types> : public _Vector_val< typename _Alloc_types::_Val_types> {
  1321. public: typedef _Vector_alloc<false, _Alloc_types> _Myt;
  1322. typedef typename _Alloc_types::_Alloc _Alloc;
  1323. typedef typename _Alloc_types::_Alty _Alty;
  1324. _Vector_alloc(const _Alloc & = _Alloc()) {}
  1325. void _Swap_alloc(_Myt &) {}
  1326. _Alty _Getal() const { return (_Alty()); }
  1327. };
  1328. template <class _Ty, class _Alloc = allocator<_Ty> > class vector : public _Vector_alloc<!is_empty<_Alloc>::value, _Vec_base_types<_Ty, _Alloc> > {
  1329. public: typedef vector<_Ty, _Alloc> _Myt;
  1330. typedef _Vector_alloc<!is_empty<_Alloc>::value, _Vec_base_types<_Ty, _Alloc> > _Mybase;
  1331. typedef _Alloc allocator_type;
  1332. typedef typename _Mybase::_Alty _Alty;
  1333. typedef typename _Mybase::value_type value_type;
  1334. typedef typename _Mybase::size_type size_type;
  1335. typedef typename _Mybase::difference_type difference_type;
  1336. typedef typename _Mybase::pointer pointer;
  1337. typedef typename _Mybase::reference reference;
  1338. typedef typename _Mybase::const_reference const_reference;
  1339. typedef typename _Mybase::iterator iterator;
  1340. typedef typename _Mybase::const_iterator const_iterator;
  1341. typedef ::std::reverse_iterator<iterator> reverse_iterator;
  1342. _Myt &operator=(const _Myt &_Right) { if (this != &_Right) { if (this->_Getal() != _Right._Getal() && _Alty::propagate_on_container_copy_assignment::value) { _Tidy(); this->_Change_alloc(_Right._Getal()); } this->_Orphan_all(); if (_Right.empty()) clear(); else if (_Right.size() <= size()) { pointer _Ptr = _Copy_impl(_Right._Myfirst, _Right._Mylast, this->_Myfirst); _Destroy(_Ptr, this->_Mylast); this->_Mylast = this->_Myfirst + _Right.size(); } else if (_Right.size() <= capacity()) { pointer _Ptr = _Right._Myfirst + size(); _Copy_impl(_Right._Myfirst, _Ptr, this->_Myfirst); this->_Mylast = _Ucopy(_Ptr, _Right._Mylast, this->_Mylast); } else { if (this->_Myfirst != pointer()) { _Destroy(this->_Myfirst, this->_Mylast); this->_Getal().deallocate(this->_Myfirst, this->_Myend - this->_Myfirst); } if (_Buy(_Right.size())) { { this->_Mylast = _Ucopy(_Right._Myfirst, _Right._Mylast, this->_Myfirst); } if (0) { _Tidy(); ; } } } } return (*this); }
  1343. void reserve(size_type _Count) { if (capacity() < _Count) { if (max_size() < _Count) _Xlen(); _Reallocate(_Count); } }
  1344. size_type capacity() const throw() { return (this->_Myend - this->_Myfirst); }
  1345. const_iterator begin() const throw() { return (const_iterator(this->_Myfirst, this)); }
  1346. iterator end() throw() { return (iterator(this->_Mylast, this)); }
  1347. const_iterator end() const throw() { return (const_iterator(this->_Mylast, this)); }
  1348. size_type size() const throw() { return (this->_Mylast - this->_Myfirst); }
  1349. size_type max_size() const throw() { return (this->_Getal().max_size()); }
  1350. bool empty() const throw() { return (this->_Myfirst == this->_Mylast); }
  1351. _Alloc get_allocator() const throw() { return (this->_Getal()); }
  1352. const_reference operator[](size_type _Pos) const { return (*(this->_Myfirst + _Pos)); }
  1353. reference front() { return (*begin()); }
  1354. const_reference front() const { return (*begin()); }
  1355. void clear() throw() { this->_Orphan_all(); _Destroy(this->_Myfirst, this->_Mylast); this->_Mylast = this->_Myfirst; }
  1356. void swap(_Myt &_Right) { if (this == &_Right) ; else if (this->_Getal() == _Right._Getal()) { this->_Swap_all(_Right); _Swap_adl(this->_Myfirst, _Right._Myfirst); _Swap_adl(this->_Mylast, _Right._Mylast); _Swap_adl(this->_Myend, _Right._Myend); } else if (_Alty::propagate_on_container_swap::value) { this->_Swap_alloc(_Right); _Swap_adl(this->_Myfirst, _Right._Myfirst); _Swap_adl(this->_Mylast, _Right._Mylast); _Swap_adl(this->_Myend, _Right._Myend); } else { _Myt _Ts = _Move(*this); *this = _Move(_Right); _Right = _Move(_Ts); } }
  1357. bool _Buy(size_type _Capacity) { this->_Myfirst = pointer(); this->_Mylast = pointer(); this->_Myend = pointer(); if (_Capacity == 0) return (false); else if (max_size() < _Capacity) _Xlen(); else { this->_Myfirst = this->_Getal().allocate(_Capacity); this->_Mylast = this->_Myfirst; this->_Myend = this->_Myfirst + _Capacity; } return (true); }
  1358. void _Destroy(pointer _First, pointer _Last) { _Alty _Alval(this->_Getal()); _Destroy_range(_First, _Last, _Alval); }
  1359. bool _Inside(const value_type *_Ptr) const { return (_Ptr < this->_Mylast && this->_Myfirst <= _Ptr); }
  1360. void _Reallocate(size_type _Count) { pointer _Ptr = this->_Getal().allocate(_Count); { { _Umove(this->_Myfirst, this->_Mylast, _Ptr); } if (0) { this->_Getal().deallocate(_Ptr, _Count); ; } } size_type _Size = size(); if (this->_Myfirst != pointer()) { _Destroy(this->_Myfirst, this->_Mylast); this->_Getal().deallocate(this->_Myfirst, this->_Myend - this->_Myfirst); } this->_Orphan_all(); this->_Myend = _Ptr + _Count; this->_Mylast = _Ptr + _Size; this->_Myfirst = _Ptr; }
  1361. template <class _Iter> pointer _Umove(_Iter _First, _Iter _Last, pointer _Ptr) { _Alty _Alval(this->_Getal()); return (_Uninitialized_move(_First, _Last, _Ptr, _Alval)); }
  1362. __declspec(noreturn) void _Xlen() const { _Xlength_error("vector<T> too long"); }
  1363. };
  1364. template <class _Ty, class _Alloc> inline void swap(vector<_Ty, _Alloc> &_Left, vector<_Ty, _Alloc> &_Right) {
  1365. _Left.swap(_Right);
  1366. return (lexicographical_compare(_Left.begin(), _Left.end(), _Right.begin(), _Right.end()));
  1367. }
  1368. typedef unsigned int _Vbase;
  1369. const int _VBITS = 8 * sizeof(_Vbase);
  1370. template <class _Alloc> class _Vb_iter_base : public _Iterator012<random_access_iterator_tag, _Bool, typename _Alloc::difference_type, bool *, bool, _Iterator_base> {
  1371. };
  1372. template <class _Alloc> class _Vb_reference : public _Vb_iter_base<_Alloc> {
  1373. };
  1374. template <class _Alloc> inline void swap(_Vb_reference<_Alloc> _Left, _Vb_reference<_Alloc> _Right) {
  1375. bool _Val = _Left;
  1376. _Right = _Val;
  1377. }
  1378. template <class _Alloc> class _Vb_const_iterator : public _Vb_iter_base<_Alloc> {
  1379. };
  1380. template <class _Alloc> inline _Vb_const_iterator<_Alloc> operator+( typename _Alloc::difference_type _Off, _Vb_const_iterator<_Alloc> _Right) {
  1381. return (_Right += _Off);
  1382. }
  1383. template <class _Alloc> class _Vb_iterator : public _Vb_const_iterator<_Alloc> {
  1384. };
  1385. template <class _Alloc> inline bool operator==(const vector<bool, _Alloc> &_Left, const vector<bool, _Alloc> &_Right) {
  1386. return ( _Left.size() == _Right.size() && equal(_Left._Myvec.begin(), _Left._Myvec.end(), _Right._Myvec.begin()));
  1387. };
  1388. }
  1389. namespace llvm {
  1390. template <typename T> class ArrayRef {
  1391. public: typedef const T *iterator;
  1392. typedef size_t size_type;
  1393. typedef std::reverse_iterator<iterator> reverse_iterator;
  1394. size_type Length;
  1395. public: ArrayRef() : Data(0), Length(0) {}
  1396. size_t size() const { return Length; }
  1397. };
  1398. }
  1399. namespace std {
  1400. template <class _Elem, class _Traits, class _Alloc> inline basic_string<_Elem, _Traits, _Alloc> operator+( const basic_string<_Elem, _Traits, _Alloc> &_Left, const basic_string<_Elem, _Traits, _Alloc> &_Right) {
  1401. size_t operator()(const _Kty &_Keyval) const { return (_Hash_seq((const unsigned char *)_Keyval.c_str(), _Keyval.size() * sizeof(_Elem))); }
  1402. };
  1403. }
  1404. namespace llvm {
  1405. template <typename T> class SmallVectorImpl;
  1406. class APInt;
  1407. class hash_code;
  1408. class StringRef {
  1409. public: typedef const char *iterator;
  1410. private: const char *Data;
  1411. size_t Length;
  1412. static size_t min(size_t a, size_t b) { return a < b ? a : b; }
  1413. static int compareMemory(const char *Lhs, const char *Rhs, size_t Length) { if (Length == 0) { return 0; } return ::memcmp(Lhs, Rhs, Length); }
  1414. public: StringRef() : Data(0), Length(0) {}
  1415. StringRef(const char *Str) : Data(Str) { (void)((!!(Str && "StringRef cannot be built from a NULL argument")) || (_wassert( L"Str && \"StringRef cannot be built from a NULL argument\"", L"..\\include\\llvm/ADT/StringRef.h", 78), 0)); Length = ::strlen(Str); }
  1416. bool empty() const { return Length == 0; }
  1417. char back() const { (void)((!!(!empty())) || (_wassert(L"!empty()", L"..\\include\\llvm/ADT/StringRef.h", 123), 0)); return Data[Length - 1]; }
  1418. bool equals(StringRef RHS) const { return (Length == RHS.Length && compareMemory(Data, RHS.Data, RHS.Length) == 0); }
  1419. bool equals_lower(StringRef RHS) const { return Length == RHS.Length && compare_lower(RHS) == 0; }
  1420. int compare(StringRef RHS) const { if (int Res = compareMemory(Data, RHS.Data, min(Length, RHS.Length))) return Res < 0 ? -1 : 1; if (Length == RHS.Length) return 0; return Length < RHS.Length ? -1 : 1; }
  1421. int compare_lower(StringRef RHS) const;
  1422. std::string str() const { if (Data == 0) return std::string(); return std::string(Data, Length); }
  1423. char operator[](size_t Index) const { (void)((!!(Index < Length && "Invalid index!")) || (_wassert(L"Index < Length && \"Invalid index!\"", L"..\\include\\llvm/ADT/StringRef.h", 191), 0)); return Data[Index]; }
  1424. operator std::string() const { return str(); }
  1425. };
  1426. inline bool operator==(StringRef LHS, StringRef RHS) {
  1427. return LHS.equals(RHS);
  1428. return LHS.compare(RHS) == 1;
  1429. }
  1430. template <typename T> struct isPodLike;
  1431. template <> struct isPodLike<StringRef> {
  1432. };
  1433. inline StringRef toStringRef(bool B) {
  1434. }
  1435. }
  1436. namespace llvm {
  1437. class FoldingSetNodeID;
  1438. class FoldingSetImpl {
  1439. unsigned NumNodes;
  1440. public: explicit FoldingSetImpl(unsigned Log2InitSize = 6);
  1441. class Node { private: void *NextInFoldingSetBucket; public: Node() : NextInFoldingSetBucket(0) {} void *getNextInBucket() const { return NextInFoldingSetBucket; } void SetNextInBucket(void *N) { NextInFoldingSetBucket = N; } };
  1442. void clear();
  1443. virtual unsigned ComputeNodeHash(Node *N, FoldingSetNodeID &TempID) const = 0;
  1444. };
  1445. template <typename T> struct FoldingSetTrait;
  1446. template <typename T> struct DefaultFoldingSetTrait {
  1447. static void Profile(const T &X, FoldingSetNodeID &ID) { X.Profile(ID); }
  1448. static inline bool Equals(T &X, const FoldingSetNodeID &ID, unsigned IDHash, FoldingSetNodeID &TempID);
  1449. static inline unsigned ComputeHash(T &X, FoldingSetNodeID &TempID);
  1450. };
  1451. template <typename T, typename Ctx> struct ContextualFoldingSetTrait;
  1452. template <typename T, typename Ctx> struct DefaultContextualFoldingSetTrait {
  1453. };
  1454. class FoldingSetNodeIDRef {
  1455. const unsigned *Data;
  1456. size_t Size;
  1457. size_t getSize() const { return Size; }
  1458. };
  1459. class FoldingSetNodeID {
  1460. SmallVector<unsigned, 32> Bits;
  1461. public: FoldingSetNodeID() {}
  1462. void AddPointer(const void *Ptr);
  1463. void AddInteger(signed I);
  1464. };
  1465. typedef FoldingSetImpl::Node FoldingSetNode;
  1466. template <class T> class FoldingSetBucketIterator;
  1467. template <typename T> inline bool DefaultFoldingSetTrait<T>::Equals(T &X, const FoldingSetNodeID &ID, unsigned, FoldingSetNodeID &TempID) {
  1468. public: void Profile(FoldingSetNodeID &ID) const { ID.AddNodeID(FastID); }
  1469. };
  1470. }
  1471. namespace std {
  1472. template <size_t _Bits> class bitset {
  1473. public: enum : size_t { _EEN_BITS = _Bits };
  1474. };
  1475. template <size_t _Bits> inline bitset<_Bits> operator&(const bitset<_Bits> &_Left, const bitset<_Bits> &_Right) throw() {
  1476. return (_Ans &= _Right);
  1477. }
  1478. template <size_t _Bits> inline bitset<_Bits> operator|(const bitset<_Bits> &_Left, const bitset<_Bits> &_Right) throw() {
  1479. };
  1480. template <class _Mytree, class _Base = _Iterator_base0> class _Tree_unchecked_const_iterator : public _Iterator012< bidirectional_iterator_tag, typename _Mytree::value_type, typename _Mytree::difference_type, typename _Mytree::const_pointer, typename _Mytree::const_reference, _Base> {
  1481. };
  1482. template <class _Mytree> class _Tree_const_iterator : public _Tree_unchecked_const_iterator<_Mytree, _Iterator_base> {
  1483. public: typedef _Tree_const_iterator<_Mytree> _Myiter;
  1484. bool operator!=(const _Myiter &_Right) const { return (!(*this == _Right)); }
  1485. };
  1486. template <class _Mytree> class _Tree_iterator : public _Tree_const_iterator<_Mytree> {
  1487. public: typedef _Tree_iterator<_Mytree> _Myiter;
  1488. typedef _Tree_const_iterator<_Mytree> _Mybase;
  1489. _Myiter operator--(int) { _Myiter _Tmp = *this; --*this; return (_Tmp); }
  1490. };
  1491. template <class _Mytree> inline _Tree_iterator<_Mytree> &_Rechecked( _Tree_iterator<_Mytree> &_Iter, typename _Tree_iterator<_Mytree>::_Unchecked_type _Right) {
  1492. return (_Iter._Rechecked(_Right));
  1493. typedef _Nodeptr_type _Nodeptr;
  1494. };
  1495. template <class _Value_type, class _Voidptr> struct _Tree_node {
  1496. private: _Tree_node &operator=(const _Tree_node &);
  1497. };
  1498. template <class _Value_type> struct _Tree_node<_Value_type, void *> {
  1499. private: _Tree_node &operator=(const _Tree_node &);
  1500. };
  1501. template <class _Ty> struct _Tree_simple_types : public _Simple_types<_Ty> {
  1502. };
  1503. template <class _Ty, class _Alloc0> struct _Tree_base_types {
  1504. typedef _Alloc0 _Alloc;
  1505. };
  1506. template <class _Val_types> class _Tree_val : public _Container_base {
  1507. public: typedef _Tree_val<_Val_types> _Myt;
  1508. };
  1509. template <bool _Al_has_storage, class _Alloc_types> class _Tree_alloc : public _Tree_val<typename _Alloc_types::_Val_types> {
  1510. };
  1511. template <class _Ty, class _Alloc> class _Tree_buy : public _Tree_alloc<!is_empty<_Alloc>::value, _Tree_base_types<_Ty, _Alloc> > {
  1512. public: typedef _Tree_alloc<!is_empty<_Alloc>::value, _Tree_base_types<_Ty, _Alloc> > _Mybase;
  1513. typedef typename _Mybase::_Alty _Alty;
  1514. typedef typename _Mybase::_Nodeptr _Nodeptr;
  1515. template <class _V0_t, class _V1_t, class _V2_t, class _V3_t, class _V4_t, class _V5_t, class _V6_t, class _V7_t, class _V8_t, class _V9_t> _Nodeptr _Buynode(_V0_t &&_V0, _V1_t &&_V1, _V2_t &&_V2, _V3_t &&_V3, _V4_t &&_V4, _V5_t &&_V5, _V6_t &&_V6, _V7_t &&_V7, _V8_t &&_V8, _V9_t &&_V9) { _Nodeptr _Pnode = _Buynode0(); this->_Color(_Pnode) = this->_Red; this->_Isnil(_Pnode) = false; { { this->_Getal().construct( ::std::addressof(this->_Myval(_Pnode)), ::std::forward<_V0_t>(_V0), ::std::forward<_V1_t>(_V1), ::std::forward<_V2_t>(_V2), ::std::forward<_V3_t>(_V3), ::std::forward<_V4_t>(_V4), ::std::forward<_V5_t>(_V5), ::std::forward<_V6_t>(_V6), ::std::forward<_V7_t>(_V7), ::std::forward<_V8_t>(_V8), ::std::forward<_V9_t>(_V9)); } if (0) { _Freenode0(_Pnode); ; } } return (_Pnode); }
  1516. };
  1517. template <bool _Pr_has_storage, class _Traits> class _Tree_comp : public _Tree_buy<typename _Traits::value_type, typename _Traits::allocator_type> {
  1518. typedef typename _Traits::key_compare key_compare;
  1519. void _Swapcomp(const key_compare &) {}
  1520. };
  1521. template <class _Traits> class _Tree : public _Tree_comp<!is_empty<typename _Traits::key_compare>::value, _Traits> {
  1522. };
  1523. template <class _Traits> inline bool operator==(const _Tree<_Traits> &_Left, const _Tree<_Traits> &_Right) {
  1524. return (!(_Left < _Right));
  1525. }
  1526. template <class _Kty, class _Ty, class _Pr, class _Alloc, bool _Mfl> class _Tmap_traits {
  1527. template <class _Ty1, class _Ty2> static const _Kty &_Kfn(const pair<_Ty1, _Ty2> &_Val) { return (_Val.first); }
  1528. };
  1529. template <class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty> > > class map : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> > {
  1530. };
  1531. template <class _Kty, class _Ty, class _Pr, class _Alloc> inline void swap(map<_Kty, _Ty, _Pr, _Alloc> &_Left, map<_Kty, _Ty, _Pr, _Alloc> &_Right) {
  1532. }
  1533. template <class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty> > > class multimap : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, true> > {
  1534. };
  1535. template <class _Kty, class _Ty, class _Pr, class _Alloc> inline void swap(multimap<_Kty, _Ty, _Pr, _Alloc> &_Left, multimap<_Kty, _Ty, _Pr, _Alloc> &_Right) {
  1536. _Left.swap(_Right);
  1537. }
  1538. }
  1539. namespace llvm {
  1540. class AttributeImpl;
  1541. class AttributeSetImpl;
  1542. template <typename T> struct DenseMapInfo;
  1543. class LLVMContext;
  1544. class Attribute {
  1545. public: enum AttrKind { None, Alignment, AlwaysInline, Builtin, ByVal, Cold, InlineHint, InReg, MinSize, Naked, Nest, NoAlias, NoBuiltin, NoCapture, NoDuplicate, NoImplicitFloat, NoInline, NonLazyBind, NoRedZone, NoReturn, NoUnwind, OptimizeForSize, OptimizeNone, ReadNone, ReadOnly, Returned, ReturnsTwice, SExt, StackAlignment, StackProtect, StackProtectReq, StackProtectStrong, StructRet, SanitizeAddress, SanitizeThread, SanitizeMemory, UWTable, ZExt, EndAttrKinds };
  1546. private: AttributeImpl *pImpl;
  1547. void Profile(FoldingSetNodeID &ID) const { ID.AddPointer(pImpl); }
  1548. };
  1549. class AttributeSet {
  1550. public: enum AttrIndex : unsigned { ReturnIndex = 0U, FunctionIndex = ~0U };
  1551. private: friend class AttrBuilder;
  1552. template <typename Ty> friend struct DenseMapInfo;
  1553. AttributeSetImpl *pImpl;
  1554. explicit AttributeSet(AttributeSetImpl *LI) : pImpl(LI) {}
  1555. public: AttributeSet() : pImpl(0) {}
  1556. bool hasAttribute(unsigned Index, Attribute::AttrKind Kind) const;
  1557. void dump() const;
  1558. };
  1559. class AttrBuilder {
  1560. AttrBuilder &addRawValue(uint64_t Val);
  1561. };
  1562. }
  1563. namespace llvm {
  1564. namespace CallingConv {
  1565. }
  1566. }
  1567. namespace llvm {
  1568. template <typename T> class SmallVectorImpl;
  1569. typedef uint64_t integerPart;
  1570. const unsigned int host_char_bit = 8;
  1571. const unsigned int integerPartWidth = host_char_bit * static_cast<unsigned int>(sizeof(integerPart));
  1572. class APInt {
  1573. unsigned BitWidth;
  1574. union { uint64_t VAL; uint64_t *pVal; };
  1575. enum { APINT_BITS_PER_WORD = static_cast<unsigned int>(sizeof(uint64_t)) * 8, APINT_WORD_SIZE = static_cast<unsigned int>(sizeof(uint64_t)) };
  1576. APInt(uint64_t *val, unsigned bits) : BitWidth(bits), pVal(val) {}
  1577. bool isSingleWord() const { return BitWidth <= APINT_BITS_PER_WORD; }
  1578. static unsigned whichWord(unsigned bitPosition) { return bitPosition / APINT_BITS_PER_WORD; }
  1579. static unsigned whichBit(unsigned bitPosition) { return bitPosition % APINT_BITS_PER_WORD; }
  1580. static uint64_t maskBit(unsigned bitPosition) { return 1ULL << whichBit(bitPosition); }
  1581. APInt &clearUnusedBits() { unsigned wordBits = BitWidth % APINT_BITS_PER_WORD; if (wordBits == 0) return *this; uint64_t mask = ~uint64_t(0ULL) >> (APINT_BITS_PER_WORD - wordBits); if (isSingleWord()) VAL &= mask; else pVal[getNumWords() - 1] &= mask; return *this; }
  1582. uint64_t getWord(unsigned bitPosition) const { return isSingleWord() ? VAL : pVal[whichWord(bitPosition)]; }
  1583. static void divide(const APInt LHS, unsigned lhsWords, const APInt &RHS, unsigned rhsWords, APInt *Quotient, APInt *Remainder);
  1584. void initSlowCase(unsigned numBits, uint64_t val, bool isSigned);
  1585. bool EqualSlowCase(const APInt &RHS) const;
  1586. bool EqualSlowCase(uint64_t Val) const;
  1587. unsigned countLeadingZerosSlowCase() const;
  1588. unsigned countTrailingOnesSlowCase() const;
  1589. unsigned countPopulationSlowCase() const;
  1590. public: APInt(unsigned numBits, uint64_t val, bool isSigned = false) : BitWidth(numBits), VAL(0) { (void)((!!(BitWidth && "bitwidth too small")) || (_wassert(L"BitWidth && \"bitwidth too small\"", L"..\\include\\llvm/ADT/APInt.h", 238), 0)); if (isSingleWord()) VAL = val; else initSlowCase(numBits, val, isSigned); clearUnusedBits(); }
  1591. bool isNegative() const { return (*this)[BitWidth - 1]; }
  1592. bool isMinSignedValue() const { return BitWidth == 1 ? VAL == 1 : isNegative() && isPowerOf2(); }
  1593. bool isIntN(unsigned N) const { (void)((!!(N && "N == 0 ???")) || (_wassert(L"N && \"N == 0 ???\"", L"..\\include\\llvm/ADT/APInt.h", 377), 0)); return getActiveBits() <= N; }
  1594. bool isPowerOf2() const { if (isSingleWord()) return isPowerOf2_64(VAL); return countPopulationSlowCase() == 1; }
  1595. bool isSignBit() const { return isMinSignedValue(); }
  1596. APInt operator~() const { APInt Result(*this); Result.flipAllBits(); return Result; }
  1597. APInt sshl_ov(unsigned Amt, bool &Overflow) const;
  1598. bool operator[](unsigned bitPosition) const { (void)((!!(bitPosition < getBitWidth() && "Bit position out of bounds!")) || (_wassert(L"bitPosition < getBitWidth() && \"Bit position out of " L"bounds!\"", L"..\\include\\llvm/ADT/APInt.h", 943), 0)); return (maskBit(bitPosition) & (isSingleWord() ? VAL : pVal[whichWord(bitPosition)])) != 0; }
  1599. bool operator==(const APInt &RHS) const { (void)((!!(BitWidth == RHS.BitWidth && "Comparison requires equal bit widths")) || (_wassert(L"BitWidth == RHS.BitWidth && \"Comparison requires equal " L"bit widths\"", L"..\\include\\llvm/ADT/APInt.h", 958), 0)); if (isSingleWord()) return VAL == RHS.VAL; return EqualSlowCase(RHS); }
  1600. bool operator==(uint64_t Val) const { if (isSingleWord()) return VAL == Val; return EqualSlowCase(Val); }
  1601. bool eq(const APInt &RHS) const { return (*this) == RHS; }
  1602. bool ult(const APInt &RHS) const;
  1603. bool ult(uint64_t RHS) const { return ult(APInt(getBitWidth(), RHS)); }
  1604. bool slt(const APInt &RHS) const;
  1605. void flipAllBits() { if (isSingleWord()) VAL ^= 0xffffffffffffffffui64; else { for (unsigned i = 0; i < getNumWords(); ++i) pVal[i] ^= 0xffffffffffffffffui64; } clearUnusedBits(); }
  1606. void flipBit(unsigned bitPosition);
  1607. unsigned getBitWidth() const { return BitWidth; }
  1608. unsigned getNumWords() const { return getNumWords(BitWidth); }
  1609. static unsigned getNumWords(unsigned BitWidth) { return (BitWidth + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD; }
  1610. unsigned getActiveBits() const { return BitWidth - countLeadingZeros(); }
  1611. unsigned getActiveWords() const { unsigned numActiveBits = getActiveBits(); return numActiveBits ? whichWord(numActiveBits - 1) + 1 : 1; }
  1612. unsigned countLeadingZeros() const { if (isSingleWord()) { unsigned unusedBits = APINT_BITS_PER_WORD - BitWidth; return llvm::countLeadingZeros(VAL) - unusedBits; } return countLeadingZerosSlowCase(); }
  1613. unsigned countLeadingOnes() const;
  1614. };
  1615. inline bool operator==(uint64_t V1, const APInt &V2) {
  1616. return V2 == V1;
  1617. }
  1618. inline raw_ostream &operator<<(raw_ostream &OS, const APInt &I) {
  1619. }
  1620. namespace APIntOps {
  1621. inline APInt smin(const APInt &A, const APInt &B) { return A.slt(B) ? A : B; }
  1622. inline APInt Not(const APInt &APIVal) { return ~APIVal; }
  1623. }
  1624. class StringRef;
  1625. enum lostFraction {
  1626. lfExactlyZero, lfLessThanHalf, lfExactlyHalf, lfMoreThanHalf };
  1627. class APFloat {
  1628. public: typedef signed short ExponentType;
  1629. enum opStatus { opOK = 0x00, opInvalidOp = 0x01, opDivByZero = 0x02, opOverflow = 0x04, opUnderflow = 0x08, opInexact = 0x10 };
  1630. enum fltCategory { fcInfinity, fcNaN, fcNormal, fcZero };
  1631. bool isNegative() const { return sign; }
  1632. bool isNormal() const { return !isDenormal() && isFiniteNonZero(); }
  1633. bool isFinite() const { return !isNaN() && !isInfinity(); }
  1634. bool isZero() const { return category == fcZero; }
  1635. bool isDenormal() const;
  1636. bool isInfinity() const { return category == fcInfinity; }
  1637. bool isNaN() const { return category == fcNaN; }
  1638. bool isSignaling() const;
  1639. bool isFiniteNonZero() const { return isFinite() && !isZero(); }
  1640. bool isPosZero() const { return isZero() && !isNegative(); }
  1641. fltCategory category : 3;
  1642. unsigned int sign : 1;
  1643. };
  1644. hash_code hash_value(const APFloat &Arg);
  1645. }
  1646. namespace llvm {
  1647. template <typename From> struct simplify_type {
  1648. typedef From SimpleType;
  1649. static SimpleType &getSimplifiedValue(From &Val) { return Val; }
  1650. };
  1651. template <typename From> struct simplify_type<const From> {
  1652. typedef typename simplify_type<From>::SimpleType NonConstSimpleType;
  1653. typedef typename add_const_past_pointer<NonConstSimpleType>::type SimpleType;
  1654. typedef typename add_lvalue_reference_if_not_pointer<SimpleType>::type RetType;
  1655. static RetType getSimplifiedValue(const From &Val) { return simplify_type<From>::getSimplifiedValue(const_cast<From &>(Val)); }
  1656. };
  1657. template <typename To, typename From, typename Enabler = void> struct isa_impl {
  1658. };
  1659. template <typename To, typename From, typename SimpleFrom> struct isa_impl_wrap {
  1660. static bool doit(const From &Val) { return isa_impl_wrap<To, SimpleFrom, typename simplify_type<SimpleFrom>::SimpleType>:: doit(simplify_type<const From>::getSimplifiedValue(Val)); }
  1661. };
  1662. template <class X, class Y> inline bool isa(const Y &Val) {
  1663. return isa_impl_wrap<X, const Y, typename simplify_type<const Y>::SimpleType>::doit(Val);
  1664. }
  1665. template <class To, class From> struct cast_retty;
  1666. template <class To, class From> struct cast_retty_impl {
  1667. typedef To *ret_type;
  1668. };
  1669. template <class To, class From> struct cast_retty_impl<To, const From *> {
  1670. typedef const To *ret_type;
  1671. };
  1672. template <class To, class From, class SimpleFrom> struct cast_retty_wrap {
  1673. typedef typename cast_retty<To, SimpleFrom>::ret_type ret_type;
  1674. };
  1675. template <class To, class FromTy> struct cast_retty_wrap<To, FromTy, FromTy> {
  1676. typedef typename cast_retty_impl<To, FromTy>::ret_type ret_type;
  1677. };
  1678. template <class To, class From> struct cast_retty {
  1679. typedef typename cast_retty_wrap< To, From, typename simplify_type<From>::SimpleType>::ret_type ret_type;
  1680. };
  1681. template <class To, class From, class SimpleFrom> struct cast_convert_val {
  1682. static typename cast_retty<To, From>::ret_type doit(From &Val) { return cast_convert_val<To, SimpleFrom, typename simplify_type<SimpleFrom>::SimpleType>:: doit(simplify_type<From>::getSimplifiedValue(Val)); }
  1683. };
  1684. template <class To, class FromTy> struct cast_convert_val<To, FromTy, FromTy> {
  1685. static typename cast_retty<To, FromTy>::ret_type doit(const FromTy &Val) { typename cast_retty<To, FromTy>::ret_type Res2 = (typename cast_retty<To, FromTy>::ret_type) const_cast<FromTy &>(Val); return Res2; }
  1686. };
  1687. template <class X> struct is_simple_type {
  1688. static const bool value = is_same<X, typename simplify_type<X>::SimpleType>::value;
  1689. };
  1690. template <class X, class Y> inline typename enable_if_c<!is_simple_type<Y>::value, typename cast_retty<X, const Y>::ret_type>::type cast(const Y &Val) {
  1691. (void)((!!(isa<X>(Val) && "cast<Ty>() argument of incompatible type!")) || (_wassert( L"isa<X>(Val) && \"cast<Ty>() argument of incompatible type!\"", L"..\\include\\llvm/Support/Casting.h", 225), 0));
  1692. }
  1693. template <class X, class Y> inline typename cast_retty<X, Y>::ret_type cast(Y &Val) {
  1694. return cast_convert_val<X, Y, typename simplify_type<Y>::SimpleType>::doit( Val);
  1695. }
  1696. template <class X, class Y> inline typename cast_retty<X, Y *>::ret_type cast(Y *Val) {
  1697. }
  1698. template <class X, class Y> inline typename cast_retty<X, Y *>::ret_type cast_or_null(Y *Val) {
  1699. if (Val == 0) return 0;
  1700. return cast<X>(Val);
  1701. }
  1702. template <class X, class Y> inline typename cast_retty<X, Y>::ret_type dyn_cast(Y &Val) {
  1703. return isa<X>(Val) ? cast<X>(Val) : 0;
  1704. }
  1705. }
  1706. namespace llvm {
  1707. class Twine;
  1708. struct ScopedFatalErrorHandler {
  1709. };
  1710. __declspec(noreturn) void llvm_unreachable_internal(const char *msg = 0, const char *file = 0, unsigned line = 0);
  1711. }
  1712. extern "C" {
  1713. typedef struct LLVMOpaqueType *LLVMTypeRef;
  1714. typedef struct LLVMOpaqueValue *LLVMValueRef;
  1715. typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
  1716. typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
  1717. typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
  1718. typedef struct LLVMOpaqueUse *LLVMUseRef;
  1719. typedef enum {
  1720. LLVMZExtAttribute = 1 << 0, LLVMSExtAttribute = 1 << 1, LLVMNoReturnAttribute = 1 << 2, LLVMInRegAttribute = 1 << 3, LLVMStructRetAttribute = 1 << 4, LLVMNoUnwindAttribute = 1 << 5, LLVMNoAliasAttribute = 1 << 6, LLVMByValAttribute = 1 << 7, LLVMNestAttribute = 1 << 8, LLVMReadNoneAttribute = 1 << 9, LLVMReadOnlyAttribute = 1 << 10, LLVMNoInlineAttribute = 1 << 11, LLVMAlwaysInlineAttribute = 1 << 12, LLVMOptimizeForSizeAttribute = 1 << 13, LLVMStackProtectAttribute = 1 << 14, LLVMStackProtectReqAttribute = 1 << 15, LLVMAlignment = 31 << 16, LLVMNoCaptureAttribute = 1 << 21, LLVMNoRedZoneAttribute = 1 << 22, LLVMNoImplicitFloatAttribute = 1 << 23, LLVMNakedAttribute = 1 << 24, LLVMInlineHintAttribute = 1 << 25, LLVMStackAlignment = 7 << 26, LLVMReturnsTwice = 1 << 29, LLVMUWTable = 1 << 30, LLVMNonLazyBind = 1 << 31 }
  1721. LLVMTypeKind;
  1722. typedef enum {
  1723. LLVMExternalLinkage, LLVMAvailableExternallyLinkage, LLVMLinkOnceAnyLinkage, LLVMLinkOnceODRLinkage, LLVMLinkOnceODRAutoHideLinkage, LLVMWeakAnyLinkage, LLVMWeakODRLinkage, LLVMAppendingLinkage, LLVMInternalLinkage, LLVMPrivateLinkage, LLVMDLLImportLinkage, LLVMDLLExportLinkage, LLVMExternalWeakLinkage, LLVMGhostLinkage, LLVMCommonLinkage, LLVMLinkerPrivateLinkage, LLVMLinkerPrivateWeakLinkage }
  1724. LLVMLinkage;
  1725. }
  1726. namespace llvm {
  1727. class PointerType;
  1728. template <class GraphType> struct GraphTraits;
  1729. class Type {
  1730. public: enum TypeID { VoidTyID = 0, HalfTyID, FloatTyID, DoubleTyID, X86_FP80TyID, FP128TyID, PPC_FP128TyID, LabelTyID, MetadataTyID, X86_MMXTyID, IntegerTyID, FunctionTyID, StructTyID, ArrayTyID, PointerTyID, VectorTyID, NumTypeIDs, LastPrimitiveTyID = X86_MMXTyID, FirstDerivedTyID = IntegerTyID };
  1731. private: LLVMContext &Context;
  1732. uint32_t IDAndSubclassData;
  1733. protected: friend class LLVMContextImpl;
  1734. explicit Type(LLVMContext &C, TypeID tid) : Context(C), IDAndSubclassData(0), NumContainedTys(0), ContainedTys(0) { setTypeID(tid); }
  1735. void setTypeID(TypeID ID) { IDAndSubclassData = (ID & 0xFF) | (IDAndSubclassData & 0xFFFFFF00); (void)((!!(getTypeID() == ID && "TypeID data too large for field")) || (_wassert( L"getTypeID() == ID && \"TypeID data too large for field\"", L"..\\include\\llvm/IR/Type.h", 101), 0)); }
  1736. unsigned getSubclassData() const { return IDAndSubclassData >> 8; }
  1737. unsigned NumContainedTys;
  1738. Type *const *ContainedTys;
  1739. public: void print(raw_ostream &O) const;
  1740. TypeID getTypeID() const { return (TypeID)(IDAndSubclassData & 0xFF); }
  1741. Type *getScalarType();
  1742. typedef Type *const *subtype_iterator;
  1743. subtype_iterator subtype_end() const { return &ContainedTys[NumContainedTys]; }
  1744. Type *getContainedType(unsigned i) const { (void)((!!(i < NumContainedTys && "Index out of range!")) || (_wassert(L"i < NumContainedTys && \"Index out of range!\"", L"..\\include\\llvm/IR/Type.h", 332), 0)); return ContainedTys[i]; }
  1745. typedef Type NodeType;
  1746. typedef Type::subtype_iterator ChildIteratorType;
  1747. static inline NodeType *getEntryNode(Type *T) { return T; }
  1748. static inline ChildIteratorType child_end(NodeType *N) { return N->subtype_end(); }
  1749. };
  1750. template <> struct GraphTraits<const Type *> {
  1751. };
  1752. inline Type *unwrap(LLVMTypeRef P) {
  1753. return reinterpret_cast<Type *>(P);
  1754. }
  1755. class Value;
  1756. class StringRef;
  1757. class IntegerType : public Type {
  1758. };
  1759. class FunctionType : public Type {
  1760. FunctionType(const FunctionType &) = delete;
  1761. FunctionType(Type *Result, ArrayRef<Type *> Params, bool IsVarArgs);
  1762. public: static FunctionType *get(Type *Result, ArrayRef<Type *> Params, bool isVarArg);
  1763. Type *getReturnType() const { return ContainedTys[0]; }
  1764. typedef Type::subtype_iterator param_iterator;
  1765. };
  1766. class CompositeType : public Type {
  1767. };
  1768. class SequentialType : public CompositeType {
  1769. public: Type *getElementType() const { return ContainedTys[0]; }
  1770. static inline bool classof(const Type *T) { return T->getTypeID() == ArrayTyID || T->getTypeID() == PointerTyID || T->getTypeID() == VectorTyID; }
  1771. };
  1772. class ArrayType : public SequentialType {
  1773. uint64_t NumElements;
  1774. };
  1775. class VectorType : public SequentialType {
  1776. static inline bool classof(const Type *T) { return T->getTypeID() == VectorTyID; }
  1777. };
  1778. class PointerType : public SequentialType {
  1779. };
  1780. class Twine {
  1781. enum NodeKind { NullKind, EmptyKind, TwineKind, CStringKind, StdStringKind, StringRefKind, CharKind, DecUIKind, DecIKind, DecULKind, DecLKind, DecULLKind, DecLLKind, UHexKind };
  1782. union Child { const Twine *twine; const char *cString; const std::string *stdString; const StringRef *stringRef; char character; unsigned int decUI; int decI; const unsigned long *decUL; const long *decL; const unsigned long long *decULL; const long long *decLL; const uint64_t *uHex; };
  1783. private: Child LHS;
  1784. Child RHS;
  1785. unsigned char LHSKind;
  1786. unsigned char RHSKind;
  1787. private: explicit Twine(NodeKind Kind) : LHSKind(Kind), RHSKind(EmptyKind) { (void)((!!(isNullary() && "Invalid kind!")) || (_wassert(L"isNullary() && \"Invalid kind!\"", L"..\\include\\llvm/ADT/Twine.h", 167), 0)); }
  1788. explicit Twine(const Twine &_LHS, const Twine &_RHS) : LHSKind(TwineKind), RHSKind(TwineKind) { LHS.twine = &_LHS; RHS.twine = &_RHS; (void)((!!(isValid() && "Invalid twine!")) || (_wassert(L"isValid() && \"Invalid twine!\"", L"..\\include\\llvm/ADT/Twine.h", 175), 0)); }
  1789. explicit Twine(Child _LHS, NodeKind _LHSKind, Child _RHS, NodeKind _RHSKind) : LHS(_LHS), RHS(_RHS), LHSKind(_LHSKind), RHSKind(_RHSKind) { (void)((!!(isValid() && "Invalid twine!")) || (_wassert(L"isValid() && \"Invalid twine!\"", L"..\\include\\llvm/ADT/Twine.h", 182), 0)); }
  1790. bool isNull() const { return getLHSKind() == NullKind; }
  1791. bool isEmpty() const { return getLHSKind() == EmptyKind; }
  1792. bool isNullary() const { return isNull() || isEmpty(); }
  1793. bool isUnary() const { return getRHSKind() == EmptyKind && !isNullary(); }
  1794. bool isBinary() const { return getLHSKind() != NullKind && getRHSKind() != EmptyKind; }
  1795. bool isValid() const { if (isNullary() && getRHSKind() != EmptyKind) return false; if (getRHSKind() == NullKind) return false; if (getRHSKind() != EmptyKind && getLHSKind() == EmptyKind) return false; if (getLHSKind() == TwineKind && !LHS.twine->isBinary()) return false; if (getRHSKind() == TwineKind && !RHS.twine->isBinary()) return false; return true; }
  1796. NodeKind getLHSKind() const { return (NodeKind)LHSKind; }
  1797. NodeKind getRHSKind() const { return (NodeKind)RHSKind; }
  1798. void printOneChild(raw_ostream &OS, Child Ptr, NodeKind Kind) const;
  1799. public: Twine() : LHSKind(EmptyKind), RHSKind(EmptyKind) { (void)((!!(isValid() && "Invalid twine!")) || (_wassert(L"isValid() && \"Invalid twine!\"", L"..\\include\\llvm/ADT/Twine.h", 255), 0)); }
  1800. Twine(const char *Str) : RHSKind(EmptyKind) { if (Str[0] != '\0') { LHS.cString = Str; LHSKind = CStringKind; } else LHSKind = EmptyKind; (void)((!!(isValid() && "Invalid twine!")) || (_wassert(L"isValid() && \"Invalid twine!\"", L"..\\include\\llvm/ADT/Twine.h", 271), 0)); }
  1801. Twine(const StringRef &Str) : LHSKind(StringRefKind), RHSKind(EmptyKind) { LHS.stringRef = &Str; (void)((!!(isValid() && "Invalid twine!")) || (_wassert(L"isValid() && \"Invalid twine!\"", L"..\\include\\llvm/ADT/Twine.h", 285), 0)); }
  1802. explicit Twine(char Val) : LHSKind(CharKind), RHSKind(EmptyKind) { LHS.character = Val; }
  1803. Twine concat(const Twine &Suffix) const;
  1804. std::string str() const;
  1805. void dumpRepr() const;
  1806. };
  1807. inline Twine Twine::concat(const Twine &Suffix) const {
  1808. Child NewLHS, NewRHS;
  1809. NewLHS.twine = this;
  1810. NodeKind NewLHSKind = TwineKind, NewRHSKind = TwineKind;
  1811. if (isUnary()) { NewLHS = LHS; NewLHSKind = getLHSKind(); }
  1812. return Twine(NewLHS, NewLHSKind, NewRHS, NewRHSKind);
  1813. }
  1814. inline Twine operator+(const Twine &LHS, const Twine &RHS) {
  1815. return LHS.concat(RHS);
  1816. }
  1817. template <typename NodeTy> struct ilist_traits;
  1818. template <typename NodeTy> class ilist_half_node {
  1819. friend struct ilist_traits<NodeTy>;
  1820. NodeTy *Prev;
  1821. protected: NodeTy *getPrev() { return Prev; }
  1822. const NodeTy *getPrev() const { return Prev; }
  1823. void setPrev(NodeTy *P) { Prev = P; }
  1824. };
  1825. template <typename NodeTy> struct ilist_nextprev_traits;
  1826. template <typename NodeTy> class ilist_node : private ilist_half_node<NodeTy> {
  1827. friend struct ilist_nextprev_traits<NodeTy>;
  1828. friend struct ilist_traits<NodeTy>;
  1829. NodeTy *Next;
  1830. NodeTy *getNext() { return Next; }
  1831. const NodeTy *getNext() const { return Next; }
  1832. void setNext(NodeTy *N) { Next = N; }
  1833. };
  1834. class User;
  1835. class Use;
  1836. template <typename> struct simplify_type;
  1837. template <> class PointerLikeTypeTraits<Use **> {
  1838. public: static inline void *getAsVoidPointer(Use **P) { return P; }
  1839. static inline Use **getFromVoidPointer(void *P) { return static_cast<Use **>(P); }
  1840. enum { NumLowBitsAvailable = 2 };
  1841. };
  1842. class Use {
  1843. enum PrevPtrTag { zeroDigitTag, oneDigitTag, stopTag, fullStopTag };
  1844. Use(PrevPtrTag tag) : Val(0) { Prev.setInt(tag); }
  1845. public: operator Value *() const { return Val; }
  1846. Value *get() const { return Val; }
  1847. User *getUser() const;
  1848. inline void set(Value *Val);
  1849. Value *operator=(Value *RHS) { set(RHS); return RHS; }
  1850. const Use &operator=(const Use &RHS) { set(RHS.Val); return *this; }
  1851. const Value *operator->() const { return Val; }
  1852. Use *getNext() const { return Next; }
  1853. Value *Val;
  1854. Use *Next;
  1855. PointerIntPair<Use **, 2, PrevPtrTag> Prev;
  1856. void setPrev(Use **NewPrev) { Prev.setPointer(NewPrev); }
  1857. typedef Value *SimpleType;
  1858. static SimpleType getSimplifiedValue(const Use &Val) { return Val.get(); }
  1859. };
  1860. template <typename UserTy> class value_use_iterator : public std::iterator<std::forward_iterator_tag, UserTy *, ptrdiff_t> {
  1861. typedef std::iterator<std::forward_iterator_tag, UserTy *, ptrdiff_t> super;
  1862. typedef value_use_iterator<UserTy> _Self;
  1863. Use *U;
  1864. explicit value_use_iterator(Use *u) : U(u) {}
  1865. friend class Value;
  1866. public: typedef typename super::reference reference;
  1867. bool operator!=(const _Self &x) const { return !operator==(x); }
  1868. bool atEnd() const { return U == 0; }
  1869. _Self &operator++() { (void)((!!(U && "Cannot increment end iterator!")) || (_wassert(L"U && \"Cannot increment end iterator!\"", L"..\\include\\llvm/IR/Use.h", 194), 0)); U = U->getNext(); return *this; }
  1870. _Self operator++(int) { _Self tmp = *this; ++*this; return tmp; }
  1871. UserTy *operator*() const { (void)((!!(U && "Cannot dereference end iterator!")) || (_wassert(L"U && \"Cannot dereference end iterator!\"", L"..\\include\\llvm/IR/Use.h", 204), 0)); return U->getUser(); }
  1872. Use &getUse() const { return *U; }
  1873. unsigned getOperandNo() const;
  1874. };
  1875. inline Use *unwrap(LLVMUseRef P) {
  1876. return reinterpret_cast<Use *>(P);
  1877. }
  1878. class Argument;
  1879. class AssemblyAnnotationWriter;
  1880. class BasicBlock;
  1881. class Function;
  1882. class GlobalAlias;
  1883. class Instruction;
  1884. class LLVMContext;
  1885. class Value {
  1886. const unsigned char SubclassID;
  1887. unsigned char HasValueHandle : 1;
  1888. protected: unsigned char SubclassOptionalData : 7;
  1889. private: unsigned short SubclassData;
  1890. Type *VTy;
  1891. Use *UseList;
  1892. friend class ValueSymbolTable;
  1893. friend class ValueHandleBase;
  1894. public: virtual ~Value();
  1895. void dump() const;
  1896. void print(raw_ostream &O, AssemblyAnnotationWriter *AAW = 0) const;
  1897. Type *getType() const { return VTy; }
  1898. LLVMContext &getContext() const;
  1899. StringRef getName() const;
  1900. typedef value_use_iterator<User> use_iterator;
  1901. typedef value_use_iterator<const User> const_use_iterator;
  1902. use_iterator use_begin() { return use_iterator(UseList); }
  1903. const_use_iterator use_begin() const { return const_use_iterator(UseList); }
  1904. use_iterator use_end() { return use_iterator(0); }
  1905. enum ValueTy { ArgumentVal, BasicBlockVal, FunctionVal, GlobalAliasVal, GlobalVariableVal, UndefValueVal, BlockAddressVal, ConstantExprVal, ConstantAggregateZeroVal, ConstantDataArrayVal, ConstantDataVectorVal, ConstantIntVal, ConstantFPVal, ConstantArrayVal, ConstantStructVal, ConstantVectorVal, ConstantPointerNullVal, MDNodeVal, MDStringVal, InlineAsmVal, PseudoSourceValueVal, FixedStackPseudoSourceValueVal, InstructionVal, ConstantFirstVal = FunctionVal, ConstantLastVal = ConstantPointerNullVal };
  1906. unsigned getValueID() const { return SubclassID; }
  1907. unsigned getRawSubclassOptionalData() const { return SubclassOptionalData; }
  1908. protected: unsigned short getSubclassDataFromValue() const { return SubclassData; }
  1909. void setValueSubclassData(unsigned short D) { SubclassData = D; }
  1910. };
  1911. inline raw_ostream &operator<<(raw_ostream &OS, const Value &V) {
  1912. V.print(OS);
  1913. };
  1914. template <> struct isa_impl<Instruction, Value> {
  1915. static inline bool doit(const Value &Val) { return Val.getValueID() >= Value::InstructionVal; }
  1916. };
  1917. template <> class PointerLikeTypeTraits<Value *> {
  1918. typedef Value *PT;
  1919. public: static inline void *getAsVoidPointer(PT P) { return P; }
  1920. static inline PT getFromVoidPointer(void *P) { return static_cast<PT>(P); }
  1921. enum { NumLowBitsAvailable = 2 };
  1922. };
  1923. inline Value *unwrap(LLVMValueRef P) {
  1924. }
  1925. template <typename T> inline T *unwrap(LLVMValueRef P) {
  1926. return reinterpret_cast<T **>(Vals);
  1927. }
  1928. }
  1929. namespace llvm {
  1930. template <class> struct OperandTraits;
  1931. class User : public Value {
  1932. User(const User &) = delete;
  1933. void *operator new(size_t) = delete;
  1934. template <unsigned> friend struct HungoffOperandTraits;
  1935. protected: Use *OperandList;
  1936. unsigned NumOperands;
  1937. void *operator new(size_t s, unsigned Us);
  1938. template <int Idx> const Use &Op() const { return OpFrom<Idx>(this); }
  1939. public: Value *getOperand(unsigned i) const { (void)((!!(i < NumOperands && "getOperand() out of range!")) || (_wassert(L"i < NumOperands && \"getOperand() out of range!\"", L"..\\include\\llvm/IR/User.h", 89), 0)); return OperandList[i]; }
  1940. unsigned getNumOperands() const { return NumOperands; }
  1941. typedef Use *op_iterator;
  1942. typedef const Use *const_op_iterator;
  1943. inline const_op_iterator op_begin() const { return OperandList; }
  1944. inline op_iterator op_end() { return OperandList + NumOperands; }
  1945. typedef Value *SimpleType;
  1946. static SimpleType getSimplifiedValue(User::op_iterator &Val) { return Val->get(); }
  1947. };
  1948. template <> struct simplify_type<User::const_op_iterator> {
  1949. };
  1950. template <typename UserTy> unsigned value_use_iterator<UserTy>::getOperandNo() const {
  1951. return U - U->getUser()->op_begin();
  1952. }
  1953. template <typename T> struct DenseMapInfo;
  1954. class MDNode;
  1955. class LLVMContext;
  1956. class DebugLoc {
  1957. };
  1958. class Instruction : public User, public ilist_node<Instruction> {
  1959. void operator=(const Instruction &) = delete;
  1960. BasicBlock *Parent;
  1961. DebugLoc DbgLoc;
  1962. enum { HasMetadataBit = 1 << 15 };
  1963. public: ~Instruction();
  1964. Instruction *use_back() { return cast<Instruction>(*use_begin()); }
  1965. inline const BasicBlock *getParent() const { return Parent; }
  1966. inline BasicBlock *getParent() { return Parent; }
  1967. unsigned getOpcode() const { return getValueID() - InstructionVal; }
  1968. const char *getOpcodeName() const { return getOpcodeName(getOpcode()); }
  1969. static const char *getOpcodeName(unsigned OpCode);
  1970. static inline bool isTerminator(unsigned OpCode) { return OpCode >= TermOpsBegin && OpCode < TermOpsEnd; }
  1971. enum TermOps { TermOpsBegin = 1, Ret = 1, Br = 2, Switch = 3, IndirectBr = 4, Invoke = 5, Resume = 6, Unreachable = 7, TermOpsEnd = 7 + 1 };
  1972. enum BinaryOps { BinaryOpsBegin = 8, Add = 8, FAdd = 9, Sub = 10, FSub = 11, Mul = 12, FMul = 13, UDiv = 14, SDiv = 15, FDiv = 16, URem = 17, SRem = 18, FRem = 19, Shl = 20, LShr = 21, AShr = 22, And = 23, Or = 24, Xor = 25, BinaryOpsEnd = 25 + 1 };
  1973. enum MemoryOps { MemoryOpsBegin = 26, Alloca = 26, Load = 27, Store = 28, GetElementPtr = 29, Fence = 30, AtomicCmpXchg = 31, AtomicRMW = 32, MemoryOpsEnd = 32 + 1 };
  1974. enum OtherOps { OtherOpsBegin = 45, ICmp = 45, FCmp = 46, PHI = 47, Call = 48, Select = 49, UserOp1 = 50, UserOp2 = 51, VAArg = 52, ExtractElement = 53, InsertElement = 54, ShuffleVector = 55, ExtractValue = 56, InsertValue = 57, LandingPad = 58, OtherOpsEnd = 58 + 1 };
  1975. private: void setValueSubclassData(unsigned short D) { Value::setValueSubclassData(D); }
  1976. void setParent(BasicBlock *P);
  1977. protected: void setInstructionSubclassData(unsigned short D) { (void)((!!((D & HasMetadataBit) == 0 && "Out of range value put into field")) || (_wassert(L"(D & HasMetadataBit) == 0 && \"Out of range value put " L"into field\"", L"..\\include\\llvm/IR/Instruction.h", 437), 0)); setValueSubclassData((getSubclassDataFromValue() & HasMetadataBit) | D); }
  1978. unsigned getSubclassDataFromInstruction() const { return getSubclassDataFromValue() & ~HasMetadataBit; }
  1979. Instruction(Type *Ty, unsigned iType, Use *Ops, unsigned NumOps, Instruction *InsertBefore = 0);
  1980. Instruction(Type *Ty, unsigned iType, Use *Ops, unsigned NumOps, BasicBlock *InsertAtEnd);
  1981. virtual Instruction *clone_impl() const = 0;
  1982. };
  1983. template <> class PointerLikeTypeTraits<Instruction *> {
  1984. enum { NumLowBitsAvailable = 2 };
  1985. };
  1986. }
  1987. namespace llvm {
  1988. template <typename SubClass, unsigned ARITY> struct FixedNumOperandTraits {
  1989. static Use *op_begin(SubClass *U) { return reinterpret_cast<Use *>(U) - ARITY; }
  1990. static Use *op_end(SubClass *U) { return reinterpret_cast<Use *>(U); }
  1991. static unsigned operands(const User *) { return ARITY; }
  1992. };
  1993. template <typename SubClass, unsigned MINARITY = 0> struct VariadicOperandTraits {
  1994. static Use *op_begin(SubClass *U) { return reinterpret_cast<Use *>(U) - static_cast<User *>(U)->getNumOperands(); }
  1995. static Use *op_end(SubClass *U) { return reinterpret_cast<Use *>(U); }
  1996. static unsigned operands(const User *U) { return U->getNumOperands(); }
  1997. };
  1998. template <unsigned MINARITY = 1> struct HungoffOperandTraits {
  1999. static Use *op_begin(User *U) { return U->OperandList; }
  2000. static Use *op_end(User *U) { return U->OperandList + U->getNumOperands(); }
  2001. static unsigned operands(const User *U) { return U->getNumOperands(); }
  2002. };
  2003. class TerminatorInst : public Instruction {
  2004. protected: TerminatorInst(Type *Ty, Instruction::TermOps iType, Use *Ops, unsigned NumOps, Instruction *InsertBefore = 0) : Instruction(Ty, iType, Ops, NumOps, InsertBefore) {}
  2005. ~TerminatorInst();
  2006. virtual BasicBlock *getSuccessorV(unsigned idx) const = 0;
  2007. virtual unsigned getNumSuccessorsV() const = 0;
  2008. virtual void setSuccessorV(unsigned idx, BasicBlock *B) = 0;
  2009. virtual TerminatorInst *clone_impl() const = 0;
  2010. public: unsigned getNumSuccessors() const { return getNumSuccessorsV(); }
  2011. BasicBlock *getSuccessor(unsigned idx) const { return getSuccessorV(idx); }
  2012. void setSuccessor(unsigned idx, BasicBlock *B) { setSuccessorV(idx, B); }
  2013. static inline bool classof(const Value *V) { return isa<Instruction>(V) && classof(cast<Instruction>(V)); }
  2014. };
  2015. class UnaryInstruction : public Instruction {
  2016. void *operator new(size_t, unsigned) = delete;
  2017. protected: UnaryInstruction(Type *Ty, unsigned iType, Value *V, Instruction *IB = 0) : Instruction(Ty, iType, &Op<0>(), 1, IB) { Op<0>() = V; }
  2018. public: inline Value *getOperand(unsigned) const;
  2019. inline void setOperand(unsigned, Value *);
  2020. inline op_iterator op_begin();
  2021. protected: template <int> inline Use &Op();
  2022. static inline bool classof(const Value *V) { return isa<Instruction>(V) && classof(cast<Instruction>(V)); }
  2023. };
  2024. template <> struct OperandTraits<UnaryInstruction> : public FixedNumOperandTraits< UnaryInstruction, 1> {
  2025. };
  2026. UnaryInstruction::op_iterator UnaryInstruction::op_begin() {
  2027. }
  2028. Value *UnaryInstruction::getOperand(unsigned i_nocapture) const {
  2029. (void)((!!(i_nocapture < OperandTraits<UnaryInstruction>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < " L"OperandTraits<UnaryInstruction>::operands(this) && " L"\"getOperand() out of range!\"", L"..\\include\\llvm/IR/InstrTypes.h", 132), 0));
  2030. }
  2031. void UnaryInstruction::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2032. OperandTraits<UnaryInstruction>::op_begin(this)[i_nocapture] = Val_nocapture;
  2033. }
  2034. class BinaryOperator : public Instruction {
  2035. void *operator new(size_t, unsigned) = delete;
  2036. inline op_iterator op_end();
  2037. inline const_op_iterator op_end() const;
  2038. };
  2039. BinaryOperator::op_iterator BinaryOperator::op_end() {
  2040. }
  2041. class CastInst : public UnaryInstruction {
  2042. static inline bool classof(const Value *V) { return isa<Instruction>(V) && classof(cast<Instruction>(V)); }
  2043. };
  2044. class CmpInst : public Instruction {
  2045. public: enum Predicate { FCMP_FALSE = 0, FCMP_OEQ = 1, FCMP_OGT = 2, FCMP_OGE = 3, FCMP_OLT = 4, FCMP_OLE = 5, FCMP_ONE = 6, FCMP_ORD = 7, FCMP_UNO = 8, FCMP_UEQ = 9, FCMP_UGT = 10, FCMP_UGE = 11, FCMP_ULT = 12, FCMP_ULE = 13, FCMP_UNE = 14, FCMP_TRUE = 15, FIRST_FCMP_PREDICATE = FCMP_FALSE, LAST_FCMP_PREDICATE = FCMP_TRUE, BAD_FCMP_PREDICATE = FCMP_TRUE + 1, ICMP_EQ = 32, ICMP_NE = 33, ICMP_UGT = 34, ICMP_UGE = 35, ICMP_ULT = 36, ICMP_ULE = 37, ICMP_SGT = 38, ICMP_SGE = 39, ICMP_SLT = 40, ICMP_SLE = 41, FIRST_ICMP_PREDICATE = ICMP_EQ, LAST_ICMP_PREDICATE = ICMP_SLE, BAD_ICMP_PREDICATE = ICMP_SLE + 1 };
  2046. static Predicate getSwappedPredicate(Predicate pred);
  2047. public: inline Value *getOperand(unsigned) const;
  2048. inline op_iterator op_begin();
  2049. inline const_op_iterator op_begin() const;
  2050. };
  2051. template <> struct OperandTraits<CmpInst> : public FixedNumOperandTraits<CmpInst, 2> {
  2052. };
  2053. CmpInst::op_iterator CmpInst::op_begin() {
  2054. return OperandTraits<CmpInst>::op_begin(this);
  2055. }
  2056. Value *CmpInst::getOperand(unsigned i_nocapture) const {
  2057. (void)((!!(i_nocapture < OperandTraits<CmpInst>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<CmpInst>::operands(this) && " L"\"getOperand() out of range!\"", L"..\\include\\llvm/IR/InstrTypes.h", 853), 0));
  2058. }
  2059. }
  2060. namespace llvm {
  2061. class APInt;
  2062. class ConstantInt;
  2063. enum AtomicOrdering {
  2064. };
  2065. class AtomicCmpXchgInst : public Instruction {
  2066. void *operator new(size_t, unsigned) = delete;
  2067. public: inline Value *getOperand(unsigned) const;
  2068. inline void setOperand(unsigned, Value *);
  2069. inline op_iterator op_begin();
  2070. protected: template <int> inline Use &Op();
  2071. template <int> inline const Use &Op() const;
  2072. };
  2073. template <> struct OperandTraits<AtomicCmpXchgInst> : public FixedNumOperandTraits< AtomicCmpXchgInst, 3> {
  2074. };
  2075. AtomicCmpXchgInst::op_iterator AtomicCmpXchgInst::op_begin() {
  2076. return OperandTraits<AtomicCmpXchgInst>::op_begin(this);
  2077. return OperandTraits<AtomicCmpXchgInst>::op_begin( const_cast<AtomicCmpXchgInst *>(this));
  2078. }
  2079. Value *AtomicCmpXchgInst::getOperand(unsigned i_nocapture) const {
  2080. }
  2081. void AtomicCmpXchgInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2082. (void)((!!(i_nocapture < OperandTraits<AtomicCmpXchgInst>::operands(this) && "setOperand() out of range!")) || (_wassert(L"i_nocapture < " L"OperandTraits<AtomicCmpXchgInst>::operands(this) && " L"\"setOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 546), 0));
  2083. }
  2084. template <int Idx_nocapture> Use &AtomicCmpXchgInst::Op() {
  2085. return this->OpFrom<Idx_nocapture>(this);
  2086. }
  2087. class AtomicRMWInst : public Instruction {
  2088. void *operator new(size_t, unsigned) = delete;
  2089. public: inline Value *getOperand(unsigned) const;
  2090. inline void setOperand(unsigned, Value *);
  2091. inline op_iterator op_begin();
  2092. };
  2093. template <> struct OperandTraits<AtomicRMWInst> : public FixedNumOperandTraits< AtomicRMWInst, 2> {
  2094. };
  2095. AtomicRMWInst::op_iterator AtomicRMWInst::op_begin() {
  2096. return OperandTraits<AtomicRMWInst>::op_begin(this);
  2097. }
  2098. Value *AtomicRMWInst::getOperand(unsigned i_nocapture) const {
  2099. (void)((!!(i_nocapture < OperandTraits<AtomicRMWInst>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < " L"OperandTraits<AtomicRMWInst>::operands(this) && " L"\"getOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 692), 0));
  2100. }
  2101. void AtomicRMWInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2102. OperandTraits<AtomicRMWInst>::op_begin(this)[i_nocapture] = Val_nocapture;
  2103. }
  2104. inline Type *checkGEPType(Type *Ty) {
  2105. }
  2106. class GetElementPtrInst : public Instruction {
  2107. GetElementPtrInst(const GetElementPtrInst &GEPI);
  2108. inline op_iterator op_begin();
  2109. };
  2110. template <> struct OperandTraits<GetElementPtrInst> : public VariadicOperandTraits< GetElementPtrInst, 1> {
  2111. };
  2112. GetElementPtrInst::op_iterator GetElementPtrInst::op_begin() {
  2113. return OperandTraits<GetElementPtrInst>::op_begin(this);
  2114. };
  2115. class CallInst : public Instruction {
  2116. AttributeSet AttributeList;
  2117. inline CallInst(Value *Func, ArrayRef<Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd);
  2118. CallInst(Value *F, Value *Actual, const Twine &NameStr, Instruction *InsertBefore);
  2119. inline const_op_iterator op_end() const;
  2120. protected: template <int> inline Use &Op();
  2121. void setInstructionSubclassData(unsigned short D) { Instruction::setInstructionSubclassData(D); }
  2122. };
  2123. template <> struct OperandTraits<CallInst> : public VariadicOperandTraits<CallInst, 1> {
  2124. };
  2125. CallInst::CallInst(Value *Func, ArrayRef<Value *> Args, const Twine &NameStr, BasicBlock *InsertAtEnd) : Instruction(cast<FunctionType>(cast<PointerType>(Func->getType()) ->getElementType())->getReturnType(), Instruction::Call, OperandTraits<CallInst>::op_end(this) - (Args.size() + 1), unsigned(Args.size() + 1), InsertAtEnd) {
  2126. }
  2127. template <int Idx_nocapture> Use &CallInst::Op() {
  2128. return this->OpFrom<Idx_nocapture>(this);
  2129. }
  2130. class SelectInst : public Instruction {
  2131. static const char *areInvalidOperands(Value *Cond, Value *True, Value *False);
  2132. public: inline Value *getOperand(unsigned) const;
  2133. inline void setOperand(unsigned, Value *);
  2134. inline op_iterator op_begin();
  2135. inline const_op_iterator op_begin() const;
  2136. };
  2137. template <> struct OperandTraits<SelectInst> : public FixedNumOperandTraits<SelectInst, 3> {
  2138. };
  2139. SelectInst::op_iterator SelectInst::op_begin() {
  2140. return OperandTraits<SelectInst>::op_begin(this);
  2141. }
  2142. Value *SelectInst::getOperand(unsigned i_nocapture) const {
  2143. (void)((!!(i_nocapture < OperandTraits<SelectInst>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<SelectInst>::operands(this) " L"&& \"getOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 1503), 0));
  2144. return cast_or_null<Value>(OperandTraits<SelectInst>::op_begin( const_cast<SelectInst *>(this))[i_nocapture].get());
  2145. }
  2146. void SelectInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2147. (void)((!!(i_nocapture < OperandTraits<SelectInst>::operands(this) && "setOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<SelectInst>::operands(this) " L"&& \"setOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 1503), 0));
  2148. }
  2149. class VAArgInst : public UnaryInstruction {
  2150. static inline bool classof(const Value *V) { return isa<Instruction>(V) && classof(cast<Instruction>(V)); }
  2151. };
  2152. class ExtractElementInst : public Instruction {
  2153. public: inline Value *getOperand(unsigned) const;
  2154. inline void setOperand(unsigned, Value *);
  2155. inline op_iterator op_begin();
  2156. protected: template <int> inline Use &Op();
  2157. static inline bool classof(const Value *V) { return isa<Instruction>(V) && classof(cast<Instruction>(V)); }
  2158. };
  2159. template <> struct OperandTraits<ExtractElementInst> : public FixedNumOperandTraits< ExtractElementInst, 2> {
  2160. };
  2161. ExtractElementInst::op_iterator ExtractElementInst::op_begin() {
  2162. return OperandTraits<ExtractElementInst>::op_begin(this);
  2163. }
  2164. Value *ExtractElementInst::getOperand(unsigned i_nocapture) const {
  2165. (void)((!!(i_nocapture < OperandTraits<ExtractElementInst>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < " L"OperandTraits<ExtractElementInst>::operands(this) && " L"\"getOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 1599), 0));
  2166. }
  2167. void ExtractElementInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2168. OperandTraits<ExtractElementInst>::op_begin(this)[i_nocapture] = Val_nocapture;
  2169. }
  2170. template <int Idx_nocapture> Use &ExtractElementInst::Op() {
  2171. return this->OpFrom<Idx_nocapture>(this);
  2172. }
  2173. class InsertElementInst : public Instruction {
  2174. inline op_iterator op_begin();
  2175. };
  2176. InsertElementInst::op_iterator InsertElementInst::op_begin() {
  2177. }
  2178. class ShuffleVectorInst : public Instruction {
  2179. protected: virtual ShuffleVectorInst *clone_impl() const;
  2180. VectorType *getType() const { return cast<VectorType>(Instruction::getType()); }
  2181. public: inline Value *getOperand(unsigned) const;
  2182. };
  2183. Value *ShuffleVectorInst::getOperand(unsigned i_nocapture) const {
  2184. }
  2185. class ExtractValueInst : public UnaryInstruction {
  2186. SmallVector<unsigned, 4> Indices;
  2187. void init(ArrayRef<unsigned> Idxs, const Twine &NameStr);
  2188. inline ExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs, const Twine &NameStr, Instruction *InsertBefore);
  2189. inline ExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs, const Twine &NameStr, BasicBlock *InsertAtEnd);
  2190. void *operator new(size_t s) { return User::operator new(s, 1); }
  2191. protected: virtual ExtractValueInst *clone_impl() const;
  2192. static ExtractValueInst *Create(Value *Agg, ArrayRef<unsigned> Idxs, const Twine &NameStr, BasicBlock *InsertAtEnd) { return new ExtractValueInst(Agg, Idxs, NameStr, InsertAtEnd); }
  2193. static Type *getIndexedType(Type *Agg, ArrayRef<unsigned> Idxs);
  2194. };
  2195. ExtractValueInst::ExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs, const Twine &NameStr, Instruction *InsertBefore) : UnaryInstruction(checkGEPType(getIndexedType(Agg->getType(), Idxs)), ExtractValue, Agg, InsertBefore) {
  2196. }
  2197. class InsertValueInst : public Instruction {
  2198. void init(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs, const Twine &NameStr);
  2199. inline InsertValueInst(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs, const Twine &NameStr, Instruction *InsertBefore);
  2200. inline InsertValueInst(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs, const Twine &NameStr, BasicBlock *InsertAtEnd);
  2201. };
  2202. template <> struct OperandTraits<InsertValueInst> : public FixedNumOperandTraits< InsertValueInst, 2> {
  2203. };
  2204. InsertValueInst::InsertValueInst(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs, const Twine &NameStr, Instruction *InsertBefore) : Instruction(Agg->getType(), InsertValue, OperandTraits<InsertValueInst>::op_begin(this), 2, InsertBefore) {
  2205. init(Agg, Val, Idxs, NameStr);
  2206. }
  2207. class PHINode : public Instruction {
  2208. ~PHINode();
  2209. public: inline Value *getOperand(unsigned) const;
  2210. inline void setOperand(unsigned, Value *);
  2211. inline op_iterator op_begin();
  2212. inline const_op_iterator op_begin() const;
  2213. };
  2214. template <> struct OperandTraits<PHINode> : public HungoffOperandTraits<2> {
  2215. };
  2216. PHINode::op_iterator PHINode::op_begin() {
  2217. return OperandTraits<PHINode>::op_begin(this);
  2218. }
  2219. Value *PHINode::getOperand(unsigned i_nocapture) const {
  2220. (void)((!!(i_nocapture < OperandTraits<PHINode>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<PHINode>::operands(this) && " L"\"getOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 2170), 0));
  2221. }
  2222. void PHINode::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2223. OperandTraits<PHINode>::op_begin(this)[i_nocapture] = Val_nocapture;
  2224. }
  2225. class LandingPadInst : public Instruction {
  2226. unsigned ReservedSpace;
  2227. public: inline Value *getOperand(unsigned) const;
  2228. inline void setOperand(unsigned, Value *);
  2229. inline op_iterator op_begin();
  2230. static inline bool classof(const Value *V) { return isa<Instruction>(V) && classof(cast<Instruction>(V)); }
  2231. };
  2232. template <> struct OperandTraits<LandingPadInst> : public HungoffOperandTraits<2> {
  2233. };
  2234. LandingPadInst::op_iterator LandingPadInst::op_begin() {
  2235. }
  2236. void LandingPadInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2237. OperandTraits<LandingPadInst>::op_begin(this)[i_nocapture] = Val_nocapture;
  2238. }
  2239. class ReturnInst : public TerminatorInst {
  2240. public: inline Value *getOperand(unsigned) const;
  2241. inline void setOperand(unsigned, Value *);
  2242. inline op_iterator op_begin();
  2243. virtual void setSuccessorV(unsigned idx, BasicBlock *B);
  2244. };
  2245. template <> struct OperandTraits<ReturnInst> : public VariadicOperandTraits<ReturnInst> {
  2246. };
  2247. ReturnInst::op_iterator ReturnInst::op_begin() {
  2248. }
  2249. Value *ReturnInst::getOperand(unsigned i_nocapture) const {
  2250. (void)((!!(i_nocapture < OperandTraits<ReturnInst>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<ReturnInst>::operands(this) " L"&& \"getOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 2347), 0));
  2251. }
  2252. void ReturnInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2253. OperandTraits<ReturnInst>::op_begin(this)[i_nocapture] = Val_nocapture;
  2254. }
  2255. class BranchInst : public TerminatorInst {
  2256. BranchInst(const BranchInst &BI);
  2257. inline op_iterator op_begin();
  2258. inline const_op_iterator op_begin() const;
  2259. inline const_op_iterator op_end() const;
  2260. protected: template <int> inline Use &Op();
  2261. template <int> inline const Use &Op() const;
  2262. public: inline unsigned getNumOperands() const;
  2263. bool isUnconditional() const { return getNumOperands() == 1; }
  2264. bool isConditional() const { return getNumOperands() == 3; }
  2265. Value *getCondition() const { (void)((!!(isConditional() && "Cannot get condition of an uncond branch!")) || (_wassert(L"isConditional() && \"Cannot get condition of an uncond " L"branch!\"", L"..\\include\\llvm/IR/Instructions.h", 2401), 0)); return Op<-3>(); }
  2266. void setCondition(Value *V) { (void)((!!(isConditional() && "Cannot set condition of unconditional branch!")) || (_wassert(L"isConditional() && \"Cannot set condition of " L"unconditional branch!\"", L"..\\include\\llvm/IR/Instructions.h", 2406), 0)); Op<-3>() = V; }
  2267. virtual void setSuccessorV(unsigned idx, BasicBlock *B);
  2268. };
  2269. template <> struct OperandTraits<BranchInst> : public VariadicOperandTraits<BranchInst, 1> {
  2270. };
  2271. BranchInst::op_iterator BranchInst::op_begin() {
  2272. }
  2273. class SwitchInst : public TerminatorInst {
  2274. void *operator new(size_t, unsigned) = delete;
  2275. protected: virtual SwitchInst *clone_impl() const;
  2276. public: static const unsigned DefaultPseudoIndex = static_cast<unsigned>(~0L - 1);
  2277. template <class SwitchInstTy, class ConstantIntTy, class BasicBlockTy> class CaseIteratorT { protected: SwitchInstTy *SI; unsigned Index; public: typedef CaseIteratorT<SwitchInstTy, ConstantIntTy, BasicBlockTy> Self; CaseIteratorT(SwitchInstTy *SI, unsigned CaseNum) { this->SI = SI; Index = CaseNum; } static Self fromSuccessorIndex(SwitchInstTy *SI, unsigned SuccessorIndex) { (void)((!!(SuccessorIndex < SI->getNumSuccessors() && "Successor index # out of range!")) || (_wassert(L"SuccessorIndex < SI->getNumSuccessors() && " L"\"Successor index # out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 2511), 0)); return SuccessorIndex != 0 ? Self(SI, SuccessorIndex - 1) : Self(SI, DefaultPseudoIndex); } ConstantIntTy *getCaseValue() { (void)((!!(Index < SI->getNumCases() && "Index out the number of cases.")) || (_wassert(L"Index < SI->getNumCases() && \"Index out the number " L"of cases.\"", L"..\\include\\llvm/IR/Instructions.h", 2519), 0)); return reinterpret_cast<ConstantIntTy *>(SI->getOperand(2 + Index * 2)); } BasicBlockTy *getCaseSuccessor() { (void)((!!((Index < SI->getNumCases() || Index == DefaultPseudoIndex) && "Index out the number of cases.")) || (_wassert(L"(Index < SI->getNumCases() || Index == " L"DefaultPseudoIndex) && \"Index out the number of " L"cases.\"", L"..\\include\\llvm/IR/Instructions.h", 2527), 0)); return SI->getSuccessor(getSuccessorIndex()); } unsigned getCaseIndex() const { return Index; } unsigned getSuccessorIndex() const { (void)((!!((Index == DefaultPseudoIndex || Index < SI->getNumCases()) && "Index out the number of cases.")) || (_wassert(L"(Index == DefaultPseudoIndex || Index < " L"SI->getNumCases()) && \"Index out the number of " L"cases.\"", L"..\\include\\llvm/IR/Instructions.h", 2537), 0)); return Index != DefaultPseudoIndex ? Index + 1 : 0; } Self operator++() { (void)((!!(Index + 1 <= SI->getNumCases() && "Index out the number of cases.")) || (_wassert(L"Index+1 <= SI->getNumCases() && \"Index out the " L"number of cases.\"", L"..\\include\\llvm/IR/Instructions.h", 2544), 0)); ++Index; return *this; } Self operator++(int) { Self tmp = *this; ++(*this); return tmp; } Self operator--() { (void)((!!((Index == 0 || Index - 1 <= SI->getNumCases()) && "Index out the number of cases.")) || (_wassert(L"(Index == 0 || Index-1 <= SI->getNumCases()) && " L"\"Index out the number of cases.\"", L"..\\include\\llvm/IR/Instructions.h", 2558), 0)); --Index; return *this; } Self operator--(int) { Self tmp = *this; --(*this); return tmp; } bool operator==(const Self &RHS) const { (void)((!!(RHS.SI == SI && "Incompatible operators.")) || (_wassert(L"RHS.SI == SI && \"Incompatible operators.\"", L"..\\include\\llvm/IR/Instructions.h", 2568), 0)); return RHS.Index == Index; } bool operator!=(const Self &RHS) const { (void)((!!(RHS.SI == SI && "Incompatible operators.")) || (_wassert(L"RHS.SI == SI && \"Incompatible operators.\"", L"..\\include\\llvm/IR/Instructions.h", 2572), 0)); return RHS.Index != Index; } };
  2278. typedef CaseIteratorT<const SwitchInst, const ConstantInt, const BasicBlock> ConstCaseIt;
  2279. class CaseIt : public CaseIteratorT<SwitchInst, ConstantInt, BasicBlock> { typedef CaseIteratorT<SwitchInst, ConstantInt, BasicBlock> ParentTy; public: CaseIt(const ParentTy &Src) : ParentTy(Src) {} CaseIt(SwitchInst *SI, unsigned CaseNum) : ParentTy(SI, CaseNum) {} void setValue(ConstantInt *V) { (void)((!!(Index < SI->getNumCases() && "Index out the number of cases.")) || (_wassert(L"Index < SI->getNumCases() && \"Index out the number " L"of cases.\"", L"..\\include\\llvm/IR/Instructions.h", 2591), 0)); SI->setOperand(2 + Index * 2, reinterpret_cast<Value *>(V)); } void setSuccessor(BasicBlock *S) { SI->setSuccessor(getSuccessorIndex(), S); } };
  2280. public: inline Value *getOperand(unsigned) const;
  2281. inline void setOperand(unsigned, Value *);
  2282. inline op_iterator op_begin();
  2283. template <int> inline const Use &Op() const;
  2284. public: inline unsigned getNumOperands() const;
  2285. Value *getCondition() const { return getOperand(0); }
  2286. void setDefaultDest(BasicBlock *DefaultCase) { setOperand(1, reinterpret_cast<Value *>(DefaultCase)); }
  2287. unsigned getNumCases() const { return getNumOperands() / 2 - 1; }
  2288. CaseIt case_begin() { return CaseIt(this, 0); }
  2289. ConstCaseIt case_begin() const { return ConstCaseIt(this, 0); }
  2290. CaseIt case_end() { return CaseIt(this, getNumCases()); }
  2291. virtual void setSuccessorV(unsigned idx, BasicBlock *B);
  2292. };
  2293. template <> struct OperandTraits<SwitchInst> : public HungoffOperandTraits<2> {
  2294. };
  2295. SwitchInst::op_iterator SwitchInst::op_begin() {
  2296. }
  2297. Value *SwitchInst::getOperand(unsigned i_nocapture) const {
  2298. (void)((!!(i_nocapture < OperandTraits<SwitchInst>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<SwitchInst>::operands(this) " L"&& \"getOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 2739), 0));
  2299. }
  2300. void SwitchInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2301. OperandTraits<SwitchInst>::op_begin(this)[i_nocapture] = Val_nocapture;
  2302. }
  2303. template <int Idx_nocapture> const Use &SwitchInst::Op() const {
  2304. return this->OpFrom<Idx_nocapture>(this);
  2305. }
  2306. class IndirectBrInst : public TerminatorInst {
  2307. public: inline Value *getOperand(unsigned) const;
  2308. inline void setOperand(unsigned, Value *);
  2309. inline op_iterator op_begin();
  2310. };
  2311. template <> struct OperandTraits<IndirectBrInst> : public HungoffOperandTraits<1> {
  2312. };
  2313. IndirectBrInst::op_iterator IndirectBrInst::op_begin() {
  2314. return OperandTraits<IndirectBrInst>::op_begin(this);
  2315. return OperandTraits<IndirectBrInst>::op_end(this);
  2316. }
  2317. Value *IndirectBrInst::getOperand(unsigned i_nocapture) const {
  2318. }
  2319. void IndirectBrInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2320. (void)((!!(i_nocapture < OperandTraits<IndirectBrInst>::operands(this) && "setOperand() out of range!")) || (_wassert(L"i_nocapture < " L"OperandTraits<IndirectBrInst>::operands(this) && " L"\"setOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 2837), 0));
  2321. }
  2322. class InvokeInst : public TerminatorInst {
  2323. void init(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef<Value *> Args, const Twine &NameStr);
  2324. inline InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef<Value *> Args, unsigned Values, const Twine &NameStr, Instruction *InsertBefore);
  2325. public: inline Value *getOperand(unsigned) const;
  2326. inline void setOperand(unsigned, Value *);
  2327. void setInstructionSubclassData(unsigned short D) { Instruction::setInstructionSubclassData(D); }
  2328. };
  2329. template <> struct OperandTraits<InvokeInst> : public VariadicOperandTraits<InvokeInst, 3> {
  2330. };
  2331. InvokeInst::InvokeInst(Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef<Value *> Args, unsigned Values, const Twine &NameStr, Instruction *InsertBefore) : TerminatorInst(cast<FunctionType>(cast<PointerType>(Func->getType()) ->getElementType()) ->getReturnType(), Instruction::Invoke, OperandTraits<InvokeInst>::op_end(this) - Values, Values, InsertBefore) {
  2332. }
  2333. Value *InvokeInst::getOperand(unsigned i_nocapture) const {
  2334. return cast_or_null<Value>(OperandTraits<InvokeInst>::op_begin( const_cast<InvokeInst *>(this))[i_nocapture].get());
  2335. }
  2336. class ResumeInst : public TerminatorInst {
  2337. public: inline Value *getOperand(unsigned) const;
  2338. inline void setOperand(unsigned, Value *);
  2339. inline op_iterator op_begin();
  2340. protected: template <int> inline Use &Op();
  2341. template <int> inline const Use &Op() const;
  2342. };
  2343. template <> struct OperandTraits<ResumeInst> : public FixedNumOperandTraits<ResumeInst, 1> {
  2344. };
  2345. ResumeInst::op_iterator ResumeInst::op_begin() {
  2346. return OperandTraits<ResumeInst>::op_begin(this);
  2347. }
  2348. Value *ResumeInst::getOperand(unsigned i_nocapture) const {
  2349. (void)((!!(i_nocapture < OperandTraits<ResumeInst>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<ResumeInst>::operands(this) " L"&& \"getOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 3137), 0));
  2350. return cast_or_null<Value>(OperandTraits<ResumeInst>::op_begin( const_cast<ResumeInst *>(this))[i_nocapture].get());
  2351. }
  2352. void ResumeInst::setOperand(unsigned i_nocapture, Value *Val_nocapture) {
  2353. (void)((!!(i_nocapture < OperandTraits<ResumeInst>::operands(this) && "setOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<ResumeInst>::operands(this) " L"&& \"setOperand() out of range!\"", L"..\\include\\llvm/IR/Instructions.h", 3137), 0));
  2354. }
  2355. template <int Idx_nocapture> Use &ResumeInst::Op() {
  2356. virtual void setSuccessorV(unsigned idx, BasicBlock *B);
  2357. };
  2358. class TruncInst : public CastInst {
  2359. };
  2360. template <class GraphType> struct Inverse {
  2361. const GraphType &Graph;
  2362. };
  2363. template <class T> struct GraphTraits<Inverse<Inverse<T> > > {
  2364. typedef typename GraphTraits<T>::NodeType NodeType;
  2365. typedef typename GraphTraits<T>::ChildIteratorType ChildIteratorType;
  2366. static NodeType *getEntryNode(Inverse<Inverse<T> > *G) { return GraphTraits<T>::getEntryNode(G->Graph.Graph); }
  2367. static ChildIteratorType child_end(NodeType *N) { return GraphTraits<T>::child_end(N); }
  2368. };
  2369. }
  2370. namespace std {
  2371. template <class _Kty, class _Pr, class _Alloc, bool _Mfl> class _Tset_traits {
  2372. };
  2373. template <class _Kty, class _Pr = less<_Kty>, class _Alloc = allocator<_Kty> > class set : public _Tree<_Tset_traits<_Kty, _Pr, _Alloc, false> > {
  2374. };
  2375. template <class _Kty, class _Pr, class _Alloc> inline void swap(set<_Kty, _Pr, _Alloc> &_Left, set<_Kty, _Pr, _Alloc> &_Right) {
  2376. }
  2377. template <class _Kty, class _Pr = less<_Kty>, class _Alloc = allocator<_Kty> > class multiset : public _Tree<_Tset_traits<_Kty, _Pr, _Alloc, true> > {
  2378. };
  2379. template <class _Kty, class _Pr, class _Alloc> inline void swap(multiset<_Kty, _Pr, _Alloc> &_Left, multiset<_Kty, _Pr, _Alloc> &_Right) {
  2380. }
  2381. }
  2382. namespace llvm {
  2383. template <class SetType, bool External> class df_iterator_storage {
  2384. public: SetType Visited;
  2385. };
  2386. template <class SetType> class df_iterator_storage<SetType, true> {
  2387. public: df_iterator_storage(SetType &VSet) : Visited(VSet) {}
  2388. SetType &Visited;
  2389. };
  2390. template <class GraphT, class SetType = llvm::SmallPtrSet< typename GraphTraits<GraphT>::NodeType *, 8>, bool ExtStorage = false, class GT = GraphTraits<GraphT> > class df_iterator : public std::iterator<std::forward_iterator_tag, typename GT::NodeType, ptrdiff_t>, public df_iterator_storage<SetType, ExtStorage> {
  2391. typedef std::iterator<std::forward_iterator_tag, typename GT::NodeType, ptrdiff_t> super;
  2392. typedef typename GT::NodeType NodeType;
  2393. inline void toNext() { do { std::pair<PointerIntTy, ChildItTy> &Top = VisitStack.back(); NodeType *Node = Top.first.getPointer(); ChildItTy &It = Top.second; if (!Top.first.getInt()) { It = GT::child_begin(Node); Top.first.setInt(1); } while (It != GT::child_end(Node)) { NodeType *Next = *It++; if (Next && !this->Visited.count(Next)) { this->Visited.insert(Next); VisitStack.push_back( std::make_pair(PointerIntTy(Next, 0), GT::child_begin(Next))); return; } } VisitStack.pop_back(); } while (!VisitStack.empty()); }
  2394. public: typedef typename super::pointer pointer;
  2395. typedef df_iterator<GraphT, SetType, ExtStorage, GT> _Self;
  2396. static inline _Self begin(const GraphT &G) { return _Self(GT::getEntryNode(G)); }
  2397. static inline _Self end(const GraphT &G) { return _Self(); }
  2398. NodeType *getPath(unsigned n) const { return VisitStack[n].first.getPointer(); }
  2399. };
  2400. template <class T> df_iterator<T> df_begin(const T &G) {
  2401. return df_iterator<T>::begin(G);
  2402. }
  2403. template <class T> df_iterator<T> df_end(const T &G) {
  2404. return df_iterator<T>::end(G);
  2405. }
  2406. template <class T, class SetTy = std::set<typename GraphTraits<T>::NodeType *> > struct df_ext_iterator : public df_iterator<T, SetTy, true> {
  2407. df_ext_iterator(const df_iterator<T, SetTy, true> &V) : df_iterator<T, SetTy, true>(V) {}
  2408. };
  2409. template <class T, class SetTy> df_ext_iterator<T, SetTy> df_ext_begin(const T &G, SetTy &S) {
  2410. return df_ext_iterator<T, SetTy>::begin(G, S);
  2411. }
  2412. template <class T, class SetTy = llvm::SmallPtrSet< typename GraphTraits<T>::NodeType *, 8>, bool External = false> struct idf_iterator : public df_iterator<Inverse<T>, SetTy, External> {
  2413. idf_iterator(const df_iterator<Inverse<T>, SetTy, External> &V) : df_iterator<Inverse<T>, SetTy, External>(V) {}
  2414. };
  2415. template <class T> idf_iterator<T> idf_begin(const T &G) {
  2416. return idf_iterator<T>::begin(Inverse<T>(G));
  2417. }
  2418. template <class T, class SetTy = std::set<typename GraphTraits<T>::NodeType *> > struct idf_ext_iterator : public idf_iterator<T, SetTy, true> {
  2419. };
  2420. template <class T, class SetTy> idf_ext_iterator<T, SetTy> idf_ext_begin(const T &G, SetTy &S) {
  2421. return idf_ext_iterator<T, SetTy>::begin(Inverse<T>(G), S);
  2422. }
  2423. class Argument : public Value, public ilist_node<Argument> {
  2424. virtual void anchor();
  2425. static inline bool classof(const Value *V) { return V->getValueID() == ArgumentVal; }
  2426. };
  2427. template <typename NodeTy> class ilist_iterator;
  2428. template <typename NodeTy> struct ilist_nextprev_traits {
  2429. static NodeTy *getPrev(NodeTy *N) { return N->getPrev(); }
  2430. static NodeTy *getNext(NodeTy *N) { return N->getNext(); }
  2431. static void setPrev(NodeTy *N, NodeTy *Prev) { N->setPrev(Prev); }
  2432. static void setNext(NodeTy *N, NodeTy *Next) { N->setNext(Next); }
  2433. };
  2434. template <typename NodeTy> struct ilist_sentinel_traits {
  2435. static NodeTy *createSentinel() { return new NodeTy(); }
  2436. };
  2437. template <typename NodeTy> struct ilist_node_traits {
  2438. void transferNodesFromList(ilist_node_traits &, ilist_iterator<NodeTy>, ilist_iterator<NodeTy>) {}
  2439. };
  2440. template <typename NodeTy> struct ilist_default_traits : public ilist_nextprev_traits<NodeTy>, public ilist_sentinel_traits<NodeTy>, public ilist_node_traits<NodeTy> {
  2441. };
  2442. template <typename NodeTy> class ilist_iterator : public std::iterator<std::bidirectional_iterator_tag, NodeTy, ptrdiff_t> {
  2443. public: typedef ilist_traits<NodeTy> Traits;
  2444. typedef std::iterator<std::bidirectional_iterator_tag, NodeTy, ptrdiff_t> super;
  2445. typedef typename super::difference_type difference_type;
  2446. typedef typename super::pointer pointer;
  2447. typedef typename super::reference reference;
  2448. private: pointer NodePtr;
  2449. template <class T> void operator-(T) const;
  2450. public: ilist_iterator(pointer NP) : NodePtr(NP) {}
  2451. operator pointer() const { return NodePtr; }
  2452. reference operator*() const { return *NodePtr; }
  2453. ilist_iterator &operator++() { NodePtr = Traits::getNext(NodePtr); return *this; }
  2454. ilist_iterator operator--(int) { ilist_iterator tmp = *this; --*this; return tmp; }
  2455. ilist_iterator operator++(int) { ilist_iterator tmp = *this; ++*this; return tmp; }
  2456. pointer getNodePtrUnchecked() const { return NodePtr; }
  2457. };
  2458. template <typename T> void operator-(int, ilist_iterator<T>) = delete;
  2459. template <typename NodeTy> struct simplify_type<ilist_iterator<NodeTy> > {
  2460. typedef NodeTy *SimpleType;
  2461. };
  2462. template <typename NodeTy, typename Traits = ilist_traits<NodeTy> > class iplist : public Traits {
  2463. mutable NodeTy *Head;
  2464. NodeTy *getTail() { return this->ensureHead(Head); }
  2465. const NodeTy *getTail() const { return this->ensureHead(Head); }
  2466. void setTail(NodeTy *N) const { this->noteHead(Head, N); }
  2467. void CreateLazySentinel() const { this->ensureHead(Head); }
  2468. static bool op_less(NodeTy &L, NodeTy &R) { return L < R; }
  2469. public: typedef NodeTy *pointer;
  2470. typedef NodeTy value_type;
  2471. typedef ilist_iterator<NodeTy> iterator;
  2472. typedef ilist_iterator<const NodeTy> const_iterator;
  2473. typedef size_t size_type;
  2474. typedef ptrdiff_t difference_type;
  2475. typedef std::reverse_iterator<iterator> reverse_iterator;
  2476. iplist() : Head(this->provideInitialHead()) {}
  2477. iterator begin() { CreateLazySentinel(); return iterator(Head); }
  2478. const_iterator begin() const { CreateLazySentinel(); return const_iterator(Head); }
  2479. iterator end() { CreateLazySentinel(); return iterator(getTail()); }
  2480. const_iterator end() const { CreateLazySentinel(); return const_iterator(getTail()); }
  2481. reverse_iterator rbegin() { return reverse_iterator(end()); }
  2482. private: void transfer(iterator position, iplist &L2, iterator first, iterator last) { (void)((!!(first != last && "Should be checked by callers")) || (_wassert(L"first != last && \"Should be checked by callers\"", L"..\\include\\llvm/ADT/ilist.h", 487), 0)); (void)((!!(position != first && "Insertion point can't be one of the transferred nodes")) || (_wassert(L"position != first && \"Insertion point can't be one of " L"the transferred nodes\"", L"..\\include\\llvm/ADT/ilist.h", 491), 0)); if (position != last) { NodeTy *ThisSentinel = getTail(); setTail(0); NodeTy *L2Sentinel = L2.getTail(); L2.setTail(0); NodeTy *First = &*first, *Prev = this->getPrev(First); NodeTy *Next = last.getNodePtrUnchecked(), *Last = this->getPrev(Next); if (Prev) this->setNext(Prev, Next); else L2.Head = Next; this->setPrev(Next, Prev); NodeTy *PosNext = position.getNodePtrUnchecked(); NodeTy *PosPrev = this->getPrev(PosNext); if (PosPrev) this->setNext(PosPrev, First); else Head = First; this->setPrev(First, PosPrev); this->setNext(Last, PosNext); this->setPrev(PosNext, Last); this->transferNodesFromList(L2, First, PosNext); L2.setTail(L2Sentinel); setTail(ThisSentinel); } }
  2483. public: size_type __attribute__((__warn_unused_result__)) size() const { if (Head == 0) return 0; return std::distance(begin(), end()); }
  2484. void splice(iterator where, iplist &L2, iterator first) { iterator last = first; ++last; if (where == first || where == last) return; transfer(where, L2, first, last); }
  2485. void splice(iterator where, iplist &L2, iterator first, iterator last) { if (first != last) transfer(where, L2, first, last); }
  2486. };
  2487. }
  2488. namespace llvm {
  2489. template <typename Ty> struct ilist_traits;
  2490. template <typename ValueSubClass, typename ItemParentClass> class SymbolTableListTraits : public ilist_default_traits<ValueSubClass> {
  2491. };
  2492. }
  2493. namespace llvm {
  2494. class BlockAddress;
  2495. template <> struct ilist_traits<Instruction> : public SymbolTableListTraits<Instruction, BasicBlock> {
  2496. Instruction *createSentinel() const { return static_cast<Instruction *>(&Sentinel); }
  2497. Instruction *ensureHead(Instruction *) const { return createSentinel(); }
  2498. static void noteHead(Instruction *, Instruction *) {}
  2499. private: mutable ilist_half_node<Instruction> Sentinel;
  2500. };
  2501. class BasicBlock : public Value, public ilist_node<BasicBlock> {
  2502. friend class BlockAddress;
  2503. public: typedef iplist<Instruction> InstListType;
  2504. private: InstListType InstList;
  2505. Function *Parent;
  2506. public: LLVMContext &getContext() const;
  2507. typedef InstListType::iterator iterator;
  2508. typedef InstListType::const_iterator const_iterator;
  2509. Function *getParent() { return Parent; }
  2510. TerminatorInst *getTerminator();
  2511. const TerminatorInst *getTerminator() const;
  2512. inline iterator begin() { return InstList.begin(); }
  2513. inline const_iterator begin() const { return InstList.begin(); }
  2514. inline iterator end() { return InstList.end(); }
  2515. };
  2516. inline BasicBlock *unwrap(LLVMBasicBlockRef P) {
  2517. }
  2518. }
  2519. namespace llvm {
  2520. class Constant : public User {
  2521. void removeDeadConstantUsers() const;
  2522. };
  2523. class Module;
  2524. class GlobalValue : public Constant {
  2525. public: enum LinkageTypes { ExternalLinkage = 0, AvailableExternallyLinkage, LinkOnceAnyLinkage, LinkOnceODRLinkage, LinkOnceODRAutoHideLinkage, WeakAnyLinkage, WeakODRLinkage, AppendingLinkage, InternalLinkage, PrivateLinkage, LinkerPrivateLinkage, LinkerPrivateWeakLinkage, DLLImportLinkage, DLLExportLinkage, ExternalWeakLinkage, CommonLinkage };
  2526. enum VisibilityTypes { DefaultVisibility = 0, HiddenVisibility, ProtectedVisibility };
  2527. };
  2528. class LLVMContext;
  2529. template <> struct ilist_traits<BasicBlock> : public SymbolTableListTraits<BasicBlock, Function> {
  2530. BasicBlock *createSentinel() const { return static_cast<BasicBlock *>(&Sentinel); }
  2531. BasicBlock *ensureHead(BasicBlock *) const { return createSentinel(); }
  2532. static void noteHead(BasicBlock *, BasicBlock *) {}
  2533. static ValueSymbolTable *getSymTab(Function *ItemParent);
  2534. private: mutable ilist_half_node<BasicBlock> Sentinel;
  2535. };
  2536. template <> struct ilist_traits<Argument> : public SymbolTableListTraits<Argument, Function> {
  2537. Argument *createSentinel() const { return static_cast<Argument *>(&Sentinel); }
  2538. static ValueSymbolTable *getSymTab(Function *ItemParent);
  2539. private: mutable ilist_half_node<Argument> Sentinel;
  2540. };
  2541. class Function : public GlobalValue, public ilist_node<Function> {
  2542. public: typedef iplist<Argument> ArgumentListType;
  2543. typedef iplist<BasicBlock> BasicBlockListType;
  2544. typedef BasicBlockListType::iterator iterator;
  2545. typedef BasicBlockListType::const_iterator const_iterator;
  2546. typedef ArgumentListType::const_iterator const_arg_iterator;
  2547. private: BasicBlockListType BasicBlocks;
  2548. ValueSymbolTable *SymTab;
  2549. AttributeSet AttributeSets;
  2550. Function(FunctionType *Ty, LinkageTypes Linkage, const Twine &N = "", Module *M = 0);
  2551. public: static Function *Create(FunctionType *Ty, LinkageTypes Linkage, const Twine &N = "", Module *M = 0) { return new (0) Function(Ty, Linkage, N, M); }
  2552. AttributeSet getAttributes() const { return AttributeSets; }
  2553. const BasicBlockListType &getBasicBlockList() const { return BasicBlocks; }
  2554. BasicBlockListType &getBasicBlockList() { return BasicBlocks; }
  2555. iterator end() { return BasicBlocks.end(); }
  2556. const_iterator end() const { return BasicBlocks.end(); }
  2557. };
  2558. inline ValueSymbolTable *ilist_traits<BasicBlock>::getSymTab(Function *F) {
  2559. }
  2560. }
  2561. namespace llvm {
  2562. class PMStack;
  2563. class AnalysisResolver;
  2564. class PMDataManager;
  2565. typedef const void *AnalysisID;
  2566. enum PassManagerType {
  2567. PMT_Unknown = 0, PMT_ModulePassManager = 1, PMT_CallGraphPassManager, PMT_FunctionPassManager, PMT_LoopPassManager, PMT_RegionPassManager, PMT_BasicBlockPassManager, PMT_Last };
  2568. enum PassKind {
  2569. PT_BasicBlock, PT_Region, PT_Loop, PT_Function, PT_CallGraphSCC, PT_Module, PT_PassManager };
  2570. class Pass {
  2571. AnalysisResolver *Resolver;
  2572. const void *PassID;
  2573. PassKind Kind;
  2574. void operator=(const Pass &) = delete;
  2575. public: explicit Pass(PassKind K, char &pid) : Resolver(0), PassID(&pid), Kind(K) {}
  2576. virtual ~Pass();
  2577. virtual bool doInitialization(Module &) { return false; }
  2578. template <typename AnalysisType> AnalysisType *getAnalysisIfAvailable() const;
  2579. bool mustPreserveAnalysisID(char &AID) const;
  2580. template <typename AnalysisType> AnalysisType &getAnalysis() const;
  2581. template <typename AnalysisType> AnalysisType &getAnalysis(Function &F);
  2582. template <typename AnalysisType> AnalysisType &getAnalysisID(AnalysisID PI) const;
  2583. };
  2584. class ModulePass : public Pass {
  2585. };
  2586. class ImmutablePass : public ModulePass {
  2587. public: virtual void initializePass();
  2588. };
  2589. class FunctionPass : public Pass {
  2590. };
  2591. extern bool TimePassesIsEnabled;
  2592. class PassRegistry;
  2593. void initializeCore(PassRegistry &);
  2594. void initializeLoopUnswitchPass(PassRegistry &);
  2595. void initializeLoopIdiomRecognizePass(PassRegistry &);
  2596. class PassRegistry {
  2597. mutable void *pImpl;
  2598. public: PassRegistry() : pImpl(0) {}
  2599. ~PassRegistry();
  2600. static PassRegistry *getPassRegistry();
  2601. };
  2602. inline PassRegistry *unwrap(LLVMPassRegistryRef P) {
  2603. return reinterpret_cast<PassRegistry *>(P);
  2604. }
  2605. template <typename T> inline T *unwrap(LLVMPassRegistryRef P) {
  2606. }
  2607. }
  2608. namespace llvm {
  2609. class AnalysisUsage {
  2610. public: typedef SmallVector<AnalysisID, 32> VectorType;
  2611. private: VectorType Required, RequiredTransitive, Preserved;
  2612. const VectorType &getPreservedSet() const { return Preserved; }
  2613. };
  2614. class AnalysisResolver {
  2615. private: AnalysisResolver() = delete;
  2616. };
  2617. template <typename AnalysisType> AnalysisType *Pass::getAnalysisIfAvailable() const {
  2618. (void)((!!(Resolver && "Pass not resident in a PassManager object!")) || (_wassert( L"Resolver && \"Pass not resident in a PassManager object!\"", L"..\\include\\llvm/PassAnalysisSupport.h", 180), 0));
  2619. }
  2620. template <typename AnalysisType> AnalysisType &Pass::getAnalysis() const {
  2621. (void)((!!(Resolver && "Pass has not been inserted into a PassManager object!")) || (_wassert(L"Resolver && \"Pass has not been inserted into a " L"PassManager object!\"", L"..\\include\\llvm/PassAnalysisSupport.h", 200), 0));
  2622. }
  2623. template <typename AnalysisType> AnalysisType &Pass::getAnalysisID(AnalysisID PI) const {
  2624. return *(AnalysisType *)ResultPass->getAdjustedAnalysisPointer(PI);
  2625. }
  2626. template <typename AnalysisType> AnalysisType &Pass::getAnalysis(Function &F) {
  2627. }
  2628. }
  2629. namespace llvm {
  2630. template <class Ptr, class USE_iterator> class PredIterator : public std::iterator<std::forward_iterator_tag, Ptr, ptrdiff_t, Ptr *, Ptr *> {
  2631. typedef std::iterator<std::forward_iterator_tag, Ptr, ptrdiff_t, Ptr *, Ptr *> super;
  2632. typedef PredIterator<Ptr, USE_iterator> Self;
  2633. USE_iterator It;
  2634. inline void advancePastNonTerminators() { while (!It.atEnd() && !isa<TerminatorInst>(*It)) ++It; }
  2635. public: typedef typename super::pointer pointer;
  2636. typedef typename super::reference reference;
  2637. PredIterator() {}
  2638. explicit inline PredIterator(Ptr *bb) : It(bb->use_begin()) { advancePastNonTerminators(); }
  2639. inline PredIterator(Ptr *bb, bool) : It(bb->use_end()) {}
  2640. inline bool operator==(const Self &x) const { return It == x.It; }
  2641. inline reference operator*() const { (void)((!!(!It.atEnd() && "pred_iterator out of range!")) || (_wassert(L"!It.atEnd() && \"pred_iterator out of range!\"", L"..\\include\\llvm/Support/CFG.h", 56), 0)); return cast<TerminatorInst>(*It)->getParent(); }
  2642. inline pointer *operator->() const { return &operator*(); }
  2643. };
  2644. typedef PredIterator<BasicBlock, Value::use_iterator> pred_iterator;
  2645. typedef PredIterator<const BasicBlock, Value::const_use_iterator> const_pred_iterator;
  2646. inline pred_iterator pred_begin(BasicBlock *BB) {
  2647. return pred_iterator(BB);
  2648. }
  2649. inline pred_iterator pred_end(BasicBlock *BB) {
  2650. return pred_iterator(BB, true);
  2651. }
  2652. template <class Term_, class BB_> class SuccIterator : public std::iterator<std::bidirectional_iterator_tag, BB_, ptrdiff_t, BB_ *, BB_ *> {
  2653. const Term_ Term;
  2654. unsigned idx;
  2655. typedef std::iterator<std::bidirectional_iterator_tag, BB_, ptrdiff_t, BB_ *, BB_ *> super;
  2656. typedef SuccIterator<Term_, BB_> Self;
  2657. inline bool index_is_valid(int idx) { return idx >= 0 && (unsigned)idx < Term->getNumSuccessors(); }
  2658. public: typedef typename super::pointer pointer;
  2659. inline const Self &operator=(const Self &I) { (void)((!!(Term == I.Term && "Cannot assign iterators to two different blocks!")) || (_wassert(L"Term == I.Term &&\"Cannot assign iterators to two " L"different blocks!\"", L"..\\include\\llvm/Support/CFG.h", 137), 0)); idx = I.idx; return *this; }
  2660. unsigned getSuccessorIndex() const { return idx; }
  2661. inline BB_ *getSource() { (void)((!!(Term && "Source not available, if basic block was malformed")) || (_wassert(L"Term && \"Source not available, if basic block was " L"malformed\"", L"..\\include\\llvm/Support/CFG.h", 221), 0)); return Term->getParent(); }
  2662. };
  2663. typedef SuccIterator<TerminatorInst *, BasicBlock> succ_iterator;
  2664. typedef SuccIterator<const TerminatorInst *, const BasicBlock> succ_const_iterator;
  2665. inline succ_iterator succ_begin(BasicBlock *BB) {
  2666. }
  2667. inline succ_const_iterator succ_end(const BasicBlock *BB) {
  2668. }
  2669. template <typename T, typename U> struct isPodLike<SuccIterator<T, U> > {
  2670. static const bool value = isPodLike<T>::value;
  2671. };
  2672. template <> struct GraphTraits<BasicBlock *> {
  2673. typedef BasicBlock NodeType;
  2674. };
  2675. template <> struct GraphTraits<const BasicBlock *> {
  2676. typedef const BasicBlock NodeType;
  2677. typedef succ_const_iterator ChildIteratorType;
  2678. static NodeType *getEntryNode(const BasicBlock *BB) { return BB; }
  2679. static inline ChildIteratorType child_end(NodeType *N) { return succ_end(N); }
  2680. };
  2681. template <> struct GraphTraits<Inverse<BasicBlock *> > {
  2682. };
  2683. }
  2684. namespace llvm {
  2685. template <class T> class IntrusiveRefCntPtr;
  2686. template <class Derived> class RefCountedBase {
  2687. };
  2688. template <unsigned InternalLen> class SmallString : public SmallVector<char, InternalLen> {
  2689. };
  2690. }
  2691. namespace llvm {
  2692. namespace sys {
  2693. class TimeValue { public: static const TimeValue MinTime; static const TimeValue MaxTime; static const TimeValue ZeroTime; static const TimeValue PosixZeroTime; static const TimeValue Win32ZeroTime; public: typedef int64_t SecondsType; typedef int32_t NanoSecondsType; enum TimeConversions { NANOSECONDS_PER_SECOND = 1000000000, MICROSECONDS_PER_SECOND = 1000000, MILLISECONDS_PER_SECOND = 1000, NANOSECONDS_PER_MICROSECOND = 1000, NANOSECONDS_PER_MILLISECOND = 1000000, NANOSECONDS_PER_POSIX_TICK = 100, NANOSECONDS_PER_WIN32_TICK = 100 }; public: TimeValue() : seconds_(0), nanos_(0) {} explicit TimeValue(SecondsType seconds, NanoSecondsType nanos = 0) : seconds_(seconds), nanos_(nanos) { this->normalize(); } explicit TimeValue(double new_time) : seconds_(0), nanos_(0) { SecondsType integer_part = static_cast<SecondsType>(new_time); seconds_ = integer_part; nanos_ = static_cast<NanoSecondsType>( (new_time - static_cast<double>(integer_part)) * NANOSECONDS_PER_SECOND); this->normalize(); } static TimeValue now(); public: TimeValue &operator+=(const TimeValue &that) { this->seconds_ += that.seconds_; this->nanos_ += that.nanos_; this->normalize(); return *this; } TimeValue &operator-=(const TimeValue &that) { this->seconds_ -= that.seconds_; this->nanos_ -= that.nanos_; this->normalize(); return *this; } int operator<(const TimeValue &that) const { return that > *this; } int operator>(const TimeValue &that) const { if (this->seconds_ > that.seconds_) { return 1; } else if (this->seconds_ == that.seconds_) { if (this->nanos_ > that.nanos_) return 1; } return 0; } int operator<=(const TimeValue &that) const { return that >= *this; } int operator>=(const TimeValue &that) const { if (this->seconds_ > that.seconds_) { return 1; } else if (this->seconds_ == that.seconds_) { if (this->nanos_ >= that.nanos_) return 1; } return 0; } int operator==(const TimeValue &that) const { return (this->seconds_ == that.seconds_) && (this->nanos_ == that.nanos_); } int operator!=(const TimeValue &that) const { return !(*this == that); } friend TimeValue operator+(const TimeValue &tv1, const TimeValue &tv2); friend TimeValue operator-(const TimeValue &tv1, const TimeValue &tv2); public: SecondsType seconds() const { return seconds_; } NanoSecondsType nanoseconds() const { return nanos_; } uint32_t microseconds() const { return nanos_ / NANOSECONDS_PER_MICROSECOND; } uint32_t milliseconds() const { return nanos_ / NANOSECONDS_PER_MILLISECOND; } uint64_t usec() const { return seconds_ * MICROSECONDS_PER_SECOND + (nanos_ / NANOSECONDS_PER_MICROSECOND); } uint64_t msec() const { return seconds_ * MILLISECONDS_PER_SECOND + (nanos_ / NANOSECONDS_PER_MILLISECOND); } uint64_t toPosixTime() const { uint64_t result = seconds_ - PosixZeroTimeSeconds; result += nanos_ / NANOSECONDS_PER_POSIX_TICK; return result; } uint64_t toEpochTime() const { return seconds_ - PosixZeroTimeSeconds; } uint64_t toWin32Time() const { uint64_t result = (uint64_t)10000000 * (seconds_ - Win32ZeroTimeSeconds); result += nanos_ / NANOSECONDS_PER_WIN32_TICK; return result; } void getTimespecTime(uint64_t &seconds, uint32_t &nanos) const { seconds = seconds_ - PosixZeroTimeSeconds; nanos = nanos_; } std::string str() const; public: void seconds(SecondsType sec) { this->seconds_ = sec; this->normalize(); } void nanoseconds(NanoSecondsType nanos) { this->nanos_ = nanos; this->normalize(); } void microseconds(int32_t micros) { this->nanos_ = micros * NANOSECONDS_PER_MICROSECOND; this->normalize(); } void milliseconds(int32_t millis) { this->nanos_ = millis * NANOSECONDS_PER_MILLISECOND; this->normalize(); } void usec(int64_t microseconds) { this->seconds_ = microseconds / MICROSECONDS_PER_SECOND; this->nanos_ = NanoSecondsType(microseconds % MICROSECONDS_PER_SECOND) * NANOSECONDS_PER_MICROSECOND; this->normalize(); } void msec(int64_t milliseconds) { this->seconds_ = milliseconds / MILLISECONDS_PER_SECOND; this->nanos_ = NanoSecondsType(milliseconds % MILLISECONDS_PER_SECOND) * NANOSECONDS_PER_MILLISECOND; this->normalize(); } void fromEpochTime(SecondsType seconds) { seconds_ = seconds + PosixZeroTimeSeconds; nanos_ = 0; this->normalize(); } void fromWin32Time(uint64_t win32Time) { this->seconds_ = win32Time / 10000000 + Win32ZeroTimeSeconds; this->nanos_ = NanoSecondsType(win32Time % 10000000) * 100; } private: void normalize(); private: SecondsType seconds_; NanoSecondsType nanos_; static const SecondsType PosixZeroTimeSeconds; static const SecondsType Win32ZeroTimeSeconds; };
  2694. inline TimeValue operator-(const TimeValue &tv1, const TimeValue &tv2) { TimeValue difference(tv1.seconds_ - tv2.seconds_, tv1.nanos_ - tv2.nanos_); difference.normalize(); return difference; }
  2695. }
  2696. }
  2697. namespace llvm {
  2698. template <class Tp> struct is_error_code_enum : public false_type {
  2699. };
  2700. template <class Tp> struct is_error_condition_enum : public false_type {
  2701. };
  2702. struct errc {
  2703. enum _ { success = 0, address_family_not_supported = 102, address_in_use = 100, address_not_available = 101, already_connected = 113, argument_list_too_long = 7, argument_out_of_domain = 33, bad_address = 14, bad_file_descriptor = 9, bad_message = 104, broken_pipe = 32, connection_aborted = 106, connection_already_in_progress = 103, connection_refused = 107, connection_reset = 108, cross_device_link = 18, destination_address_required = 109, device_or_resource_busy = 16, directory_not_empty = 41, executable_format_error = 8, file_exists = 17, file_too_large = 27, filename_too_long = 38, function_not_supported = 40, host_unreachable = 110, identifier_removed = 111, illegal_byte_sequence = 42, inappropriate_io_control_operation = 25, interrupted = 4, invalid_argument = 22, invalid_seek = 29, io_error = 5, is_a_directory = 21, message_size = 115, network_down = 116, network_reset = 117, network_unreachable = 118, no_buffer_space = 119, no_child_process = 10, no_link = 121, no_lock_available = 39, no_message_available = 120, no_message = 122, no_protocol_option = 123, no_space_on_device = 28, no_stream_resources = 124, no_such_device_or_address = 6, no_such_device = 19, no_such_file_or_directory = 2, no_such_process = 3, not_a_directory = 20, not_a_socket = 128, not_a_stream = 125, not_connected = 126, not_enough_memory = 12, not_supported = 129, operation_canceled = 105, operation_in_progress = 112, operation_not_permitted = 1, operation_not_supported = 130, operation_would_block = 140, owner_dead = 133, permission_denied = 13, protocol_error = 134, protocol_not_supported = 135, read_only_file_system = 30, resource_deadlock_would_occur = 36, resource_unavailable_try_again = 11, result_out_of_range = 34, state_not_recoverable = 127, stream_timeout = 137, text_file_busy = 139, timed_out = 138, too_many_files_open_in_system = 23, too_many_files_open = 24, too_many_links = 31, too_many_symbolic_link_levels = 114, value_too_large = 132, wrong_protocol_type = 136 };
  2704. _ v_;
  2705. operator int() const { return v_; }
  2706. };
  2707. template <> struct is_error_condition_enum<errc> : true_type {
  2708. };
  2709. class error_category {
  2710. public: virtual ~error_category();
  2711. friend class _do_message;
  2712. };
  2713. class error_condition {
  2714. int _val_;
  2715. const error_category *_cat_;
  2716. std::string message() const;
  2717. typedef void (*unspecified_bool_type)();
  2718. static void unspecified_bool_true() {}
  2719. operator unspecified_bool_type() const { return _val_ == 0 ? 0 : unspecified_bool_true; }
  2720. };
  2721. class error_code {
  2722. };
  2723. double __cdecl _difftime64(__time64_t _Time1, __time64_t _Time2);
  2724. __declspec(deprecated( "This function or variable has been superceded by newer library or " "operating system functionality. Consider using " "SetLocalTime" " instead. See online help for details.")) unsigned __cdecl _setsystime(struct tm *_Tm, unsigned _MilliSec);
  2725. static __inline double __cdecl difftime(time_t _Time1, time_t _Time2) {
  2726. }
  2727. void __cdecl tzset(void);
  2728. }
  2729. namespace std {
  2730. template <class _Mydeque> class _Deque_unchecked_const_iterator {
  2731. public: typedef _Deque_unchecked_const_iterator<_Mydeque> _Myiter;
  2732. };
  2733. template <class _Mydeque> inline _Deque_unchecked_const_iterator<_Mydeque> operator+( typename _Deque_unchecked_const_iterator<_Mydeque>::difference_type _Off, _Deque_unchecked_const_iterator<_Mydeque> _Next) {
  2734. reference operator[](difference_type _Off) const { return (*(*this + _Off)); }
  2735. };
  2736. template <class _Mydeque> class _Deque_const_iterator : public _Iterator_base12 {
  2737. public: typedef _Deque_const_iterator<_Mydeque> _Myiter;
  2738. };
  2739. template <class _Mydeque> inline typename _Deque_const_iterator<_Mydeque>::_Unchecked_type _Unchecked( _Deque_const_iterator<_Mydeque> _Iter) {
  2740. return (_Iter._Unchecked());
  2741. }
  2742. template <class _Mydeque> class _Deque_iterator : public _Deque_const_iterator<_Mydeque> {
  2743. public: typedef _Deque_iterator<_Mydeque> _Myiter;
  2744. };
  2745. template <class _Mydeque> inline typename _Deque_iterator<_Mydeque>::_Unchecked_type _Unchecked( _Deque_iterator<_Mydeque> _Iter) {
  2746. }
  2747. template <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer, class _Reference, class _Const_reference, class _Mapptr_type> struct _Deque_iter_types {
  2748. };
  2749. template <class _Ty> struct _Deque_simple_types : public _Simple_types<_Ty> {
  2750. };
  2751. template <class _Ty, class _Alloc0> struct _Deque_base_types {
  2752. typedef _Alloc0 _Alloc;
  2753. typedef _Deque_base_types<_Ty, _Alloc> _Myt;
  2754. typedef _Wrap_alloc<_Alloc> _Alty0;
  2755. typedef typename _Alty0::template rebind<_Ty>::other _Alty;
  2756. typedef typename _Alty::pointer _Tptr;
  2757. typedef typename _Alty::template rebind<_Tptr>::other _Alpty;
  2758. typedef typename _Alpty::pointer _Mapptr;
  2759. typedef typename _If< _Is_simple_alloc<_Alty>::value, _Deque_simple_types<typename _Alty::value_type>, _Deque_iter_types< typename _Alty::value_type, typename _Alty::size_type, typename _Alty::difference_type, typename _Alty::pointer, typename _Alty::const_pointer, typename _Alty::reference, typename _Alty::const_reference, _Mapptr> >::type _Val_types;
  2760. };
  2761. template <class _Val_types> class _Deque_val : public _Container_base12 {
  2762. typedef typename _Val_types::size_type size_type;
  2763. typedef typename _Val_types::difference_type difference_type;
  2764. size_type _Mysize;
  2765. };
  2766. template <bool _Al_has_storage, class _Alloc_types> class _Deque_alloc : public _Deque_val<typename _Alloc_types::_Val_types> {
  2767. };
  2768. template <class _Ty, class _Alloc = allocator<_Ty> > class deque : public _Deque_alloc<!is_empty<_Alloc>::value, _Deque_base_types<_Ty, _Alloc> > {
  2769. };
  2770. template <class _Ty, class _Alloc> inline void swap(deque<_Ty, _Alloc> &_Left, deque<_Ty, _Alloc> &_Right) {
  2771. }
  2772. template <class _Ty, class _Container = deque<_Ty> > class stack {
  2773. };
  2774. template <class _Ty, class _Container> inline void swap(stack<_Ty, _Container> &_Left, stack<_Ty, _Container> &_Right) {
  2775. }
  2776. }
  2777. namespace llvm {
  2778. class format_object_base;
  2779. template <typename T> class SmallVectorImpl;
  2780. class raw_ostream {
  2781. enum BufferKind { Unbuffered = 0, InternalBuffer, ExternalBuffer }
  2782. BufferMode;
  2783. public: enum Colors { BLACK = 0, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, SAVEDCOLOR };
  2784. raw_ostream &operator<<(const std::string &Str) { return write(Str.data(), Str.length()); }
  2785. raw_ostream &operator<<(unsigned long N);
  2786. raw_ostream &operator<<(long N);
  2787. raw_ostream &operator<<(unsigned int N) { return this->operator<<(static_cast<unsigned long>(N)); }
  2788. raw_ostream &operator<<(int N) { return this->operator<<(static_cast<long>(N)); }
  2789. raw_ostream &write(const char *Ptr, size_t Size);
  2790. raw_ostream &operator<<(const format_object_base &Fmt);
  2791. void copy_to_buffer(const char *Ptr, size_t Size);
  2792. };
  2793. class raw_fd_ostream : public raw_ostream {
  2794. };
  2795. template <class NodeT> class DominatorBase {
  2796. };
  2797. template <class NodeT> class DominatorTreeBase;
  2798. struct PostDominatorTree;
  2799. template <class NodeT> class DomTreeNodeBase {
  2800. NodeT *TheBB;
  2801. DomTreeNodeBase<NodeT> *IDom;
  2802. std::vector<DomTreeNodeBase<NodeT> *> Children;
  2803. public: typedef typename std::vector<DomTreeNodeBase<NodeT> *>::iterator iterator;
  2804. typedef typename std::vector<DomTreeNodeBase<NodeT> *>::const_iterator const_iterator;
  2805. iterator end() { return Children.end(); }
  2806. const_iterator begin() const { return Children.begin(); }
  2807. };
  2808. ;
  2809. ;
  2810. template <class NodeT> inline raw_ostream &operator<<(raw_ostream &o, const DomTreeNodeBase<NodeT> *Node) {
  2811. ++I) PrintDomTree<NodeT>(*I, o, Lev + 1);
  2812. }
  2813. typedef DomTreeNodeBase<BasicBlock> DomTreeNode;
  2814. template <class FuncT, class N> void Calculate(DominatorTreeBase<typename GraphTraits<N>::NodeType> &DT, FuncT &F);
  2815. template <class NodeT> class DominatorTreeBase : public DominatorBase<NodeT> {
  2816. bool dominates(const NodeT *A, const NodeT *B);
  2817. };
  2818. template <class NodeT> bool DominatorTreeBase<NodeT>::dominates(const NodeT *A, const NodeT *B) {
  2819. if (A == B) return true;
  2820. return dominates(getNode(const_cast<NodeT *>(A)), getNode(const_cast<NodeT *>(B)));
  2821. }
  2822. class BasicBlockEdge {
  2823. const BasicBlock *Start;
  2824. bool isSingleEdge() const;
  2825. };
  2826. class DominatorTree : public FunctionPass {
  2827. public: static char ID;
  2828. };
  2829. template <> struct GraphTraits<DomTreeNode *> {
  2830. typedef DomTreeNode NodeType;
  2831. typedef NodeType::iterator ChildIteratorType;
  2832. static NodeType *getEntryNode(NodeType *N) { return N; }
  2833. static inline ChildIteratorType child_end(NodeType *N) { return N->end(); }
  2834. typedef df_iterator<DomTreeNode *> nodes_iterator;
  2835. static nodes_iterator nodes_end(DomTreeNode *N) { return df_end(getEntryNode(N)); }
  2836. };
  2837. template <typename ValueT, typename ValueInfoT = DenseMapInfo<ValueT> > class DenseSet {
  2838. template <typename InputIt> void insert(InputIt I, InputIt E) { for (; I != E; ++I) insert(*I); }
  2839. };
  2840. }
  2841. namespace llvm {
  2842. template <typename T> inline void RemoveFromVector(std::vector<T *> &V, T *N) {
  2843. }
  2844. template <class BlockT, class LoopT> class LoopBase {
  2845. LoopT *ParentLoop;
  2846. std::vector<LoopT *> SubLoops;
  2847. std::vector<BlockT *> Blocks;
  2848. const LoopBase<BlockT, LoopT> &operator=(const LoopBase<BlockT, LoopT> &) = delete;
  2849. public: LoopBase() : ParentLoop(0) {}
  2850. unsigned getLoopDepth() const { unsigned D = 1; for (const LoopT *CurLoop = ParentLoop; CurLoop; CurLoop = CurLoop->ParentLoop) ++D; return D; }
  2851. BlockT *getHeader() const { return Blocks.front(); }
  2852. LoopT *getParentLoop() const { return ParentLoop; }
  2853. void setParentLoop(LoopT *L) { ParentLoop = L; }
  2854. bool contains(const LoopT *L) const { if (L == this) return true; if (L == 0) return false; return contains(L->getParentLoop()); }
  2855. bool empty() const { return SubLoops.empty(); }
  2856. const std::vector<BlockT *> &getBlocks() const { return Blocks; }
  2857. std::vector<BlockT *> &getBlocksVector() { return Blocks; }
  2858. typedef typename std::vector<BlockT *>::const_iterator block_iterator;
  2859. block_iterator block_begin() const { return Blocks.begin(); }
  2860. block_iterator block_end() const { return Blocks.end(); }
  2861. };
  2862. template <class BlockT, class LoopT> raw_ostream &operator<<(raw_ostream &OS, const LoopBase<BlockT, LoopT> &Loop) {
  2863. Loop.print(OS);
  2864. }
  2865. class Loop : public LoopBase<BasicBlock, Loop> {
  2866. public: Loop() {}
  2867. void getUniqueExitBlocks(SmallVectorImpl<BasicBlock *> &ExitBlocks) const;
  2868. BasicBlock *getUniqueExitBlock() const;
  2869. };
  2870. template <class BlockT, class LoopT> class LoopInfoBase {
  2871. DenseMap<BlockT *, LoopT *> BBMap;
  2872. std::vector<LoopT *> TopLevelLoops;
  2873. friend class LoopInfo;
  2874. void operator=(const LoopInfoBase &) = delete;
  2875. bool empty() const { return TopLevelLoops.empty(); }
  2876. LoopT *getLoopFor(const BlockT *BB) const { return BBMap.lookup(const_cast<BlockT *>(BB)); }
  2877. };
  2878. class LoopInfo : public FunctionPass {
  2879. LoopInfoBase<BasicBlock, Loop> LI;
  2880. bool empty() const { return LI.empty(); }
  2881. inline Loop *getLoopFor(const BasicBlock *BB) const { return LI.getLoopFor(BB); }
  2882. bool replacementPreservesLCSSAForm(Instruction *From, Value *To) { Instruction *I = dyn_cast<Instruction>(To); if (!I) return true; if (I->getParent() == From->getParent()) return true; Loop *ToLoop = getLoopFor(I->getParent()); if (!ToLoop) return true; return ToLoop->contains(getLoopFor(From->getParent())); }
  2883. };
  2884. template <> struct GraphTraits<const Loop *> {
  2885. };
  2886. }
  2887. namespace llvm {
  2888. class PrettyStackTraceEntry {
  2889. const PrettyStackTraceEntry *NextEntry;
  2890. PrettyStackTraceEntry(const PrettyStackTraceEntry &) = delete;
  2891. const PrettyStackTraceEntry *getNextEntry() const { return NextEntry; }
  2892. };
  2893. enum PassDebuggingString {
  2894. };
  2895. class PMStack {
  2896. private: std::vector<PMDataManager *> S;
  2897. };
  2898. class PMTopLevelManager {
  2899. };
  2900. class PMDataManager {
  2901. public: explicit PMDataManager() : TPM(0), Depth(0) { initializeAnalysisInfo(); }
  2902. void initializeAnalysisInfo() { AvailableAnalysis.clear(); for (unsigned i = 0; i < PMT_Last; ++i) InheritedAnalysis[i] = 0; }
  2903. bool preserveHigherLevelAnalysis(Pass *P);
  2904. protected: PMTopLevelManager *TPM;
  2905. SmallVector<Pass *, 16> PassVector;
  2906. DenseMap<AnalysisID, Pass *> *InheritedAnalysis[PMT_Last];
  2907. DenseMap<AnalysisID, Pass *> AvailableAnalysis;
  2908. SmallVector<Pass *, 8> HigherLevelAnalysis;
  2909. unsigned Depth;
  2910. };
  2911. class FPPassManager : public ModulePass, public PMDataManager {
  2912. public: static char ID;
  2913. virtual PassManagerType getPassManagerType() const { return PMT_FunctionPassManager; }
  2914. };
  2915. class LPPassManager;
  2916. class LoopPass : public Pass {
  2917. public: explicit LoopPass(char &pid) : Pass(PT_Loop, pid) {}
  2918. Pass *createPrinterPass(raw_ostream &O, const std::string &Banner) const;
  2919. virtual bool runOnLoop(Loop *L, LPPassManager &LPM) = 0;
  2920. using llvm::Pass::doInitialization;
  2921. };
  2922. class LPPassManager : public FunctionPass, public PMDataManager {
  2923. public: static char ID;
  2924. Loop *CurrentLoop;
  2925. };
  2926. class ConstantInt : public Constant {
  2927. virtual void anchor();
  2928. protected: void *operator new(size_t s) { return User::operator new(s, 0); }
  2929. public: static ConstantInt *getTrue(LLVMContext &Context);
  2930. };
  2931. class ConstantArray : public Constant {
  2932. public: inline Constant *getOperand(unsigned) const;
  2933. inline void setOperand(unsigned, Constant *);
  2934. inline op_iterator op_begin();
  2935. };
  2936. template <> struct OperandTraits<ConstantArray> : public VariadicOperandTraits< ConstantArray> {
  2937. };
  2938. ConstantArray::op_iterator ConstantArray::op_begin() {
  2939. return OperandTraits<ConstantArray>::op_begin(this);
  2940. }
  2941. Constant *ConstantArray::getOperand(unsigned i_nocapture) const {
  2942. (void)((!!(i_nocapture < OperandTraits<ConstantArray>::operands(this) && "getOperand() out of range!")) || (_wassert(L"i_nocapture < " L"OperandTraits<ConstantArray>::operands(this) && " L"\"getOperand() out of range!\"", L"..\\include\\llvm/IR/Constants.h", 373), 0));
  2943. }
  2944. class ConstantExpr : public Constant {
  2945. static Constant *getBinOpAbsorber(unsigned Opcode, Type *Ty);
  2946. public: inline Constant *getOperand(unsigned) const;
  2947. inline void setOperand(unsigned, Constant *);
  2948. };
  2949. template <> struct OperandTraits<ConstantExpr> : public VariadicOperandTraits<ConstantExpr, 1> {
  2950. };
  2951. Constant *ConstantExpr::getOperand(unsigned i_nocapture) const {
  2952. }
  2953. void ConstantExpr::setOperand(unsigned i_nocapture, Constant *Val_nocapture) {
  2954. (void)((!!(i_nocapture < OperandTraits<ConstantExpr>::operands(this) && "setOperand() out of range!")) || (_wassert(L"i_nocapture < OperandTraits<ConstantExpr>::operands(this) " L"&& \"setOperand() out of range!\"", L"..\\include\\llvm/IR/Constants.h", 1108), 0));
  2955. };
  2956. }
  2957. namespace llvm {
  2958. class StructType;
  2959. class StructLayout;
  2960. enum AlignTypeEnum {
  2961. };
  2962. class DataLayout : public ImmutablePass {
  2963. uint64_t getTypeSizeInBits(Type *Ty) const;
  2964. uint64_t getTypeStoreSize(Type *Ty) const { return (getTypeSizeInBits(Ty) + 7) / 8; }
  2965. };
  2966. class StructLayout {
  2967. StructLayout(StructType *ST, const DataLayout &DL);
  2968. };
  2969. inline uint64_t DataLayout::getTypeSizeInBits(Type *Ty) const {
  2970. }
  2971. template <typename ItTy = User::const_op_iterator> class generic_gep_type_iterator : public std::iterator<std::forward_iterator_tag, Type *, ptrdiff_t> {
  2972. typedef std::iterator<std::forward_iterator_tag, Type *, ptrdiff_t> super;
  2973. ItTy OpIt;
  2974. Type *CurTy;
  2975. generic_gep_type_iterator() {}
  2976. public: static generic_gep_type_iterator begin(Type *Ty, ItTy It) { generic_gep_type_iterator I; I.CurTy = Ty; I.OpIt = It; return I; }
  2977. generic_gep_type_iterator operator++(int) { generic_gep_type_iterator tmp = *this; ++*this; return tmp; }
  2978. };
  2979. typedef generic_gep_type_iterator<> gep_type_iterator;
  2980. inline gep_type_iterator gep_type_begin(const User *GEP) {
  2981. return gep_type_iterator::begin( GEP->getOperand(0)->getType()->getScalarType(), GEP->op_begin() + 1);
  2982. };
  2983. class MallocAllocator {
  2984. };
  2985. class MemSlab {
  2986. public: size_t Size;
  2987. };
  2988. class SlabAllocator {
  2989. virtual MemSlab *Allocate(size_t Size) = 0;
  2990. virtual void Deallocate(MemSlab *Slab) = 0;
  2991. };
  2992. class MallocSlabAllocator : public SlabAllocator {
  2993. MallocAllocator Allocator;
  2994. virtual void Deallocate(MemSlab *Slab) override;
  2995. };
  2996. class BumpPtrAllocator {
  2997. BumpPtrAllocator(const BumpPtrAllocator &) = delete;
  2998. };
  2999. template <typename T> class SpecificBumpPtrAllocator {
  3000. BumpPtrAllocator Allocator;
  3001. T *Allocate(size_t num = 1) { return Allocator.Allocate<T>(num); }
  3002. };
  3003. }
  3004. namespace llvm {
  3005. class ConstantRange {
  3006. typedef APInt APIntMoveTy;
  3007. public: explicit ConstantRange(uint32_t BitWidth, bool isFullSet = true);
  3008. void print(raw_ostream &OS) const;
  3009. void dump() const;
  3010. };
  3011. inline raw_ostream &operator<<(raw_ostream &OS, const ConstantRange &CR) {
  3012. CR.print(OS);
  3013. }
  3014. }
  3015. namespace llvm {
  3016. template <> class PointerLikeTypeTraits<ValueHandleBase **> {
  3017. public: static inline void *getAsVoidPointer(ValueHandleBase **P) { return P; }
  3018. static inline ValueHandleBase **getFromVoidPointer(void *P) { return static_cast<ValueHandleBase **>(P); }
  3019. enum { NumLowBitsAvailable = 2 };
  3020. };
  3021. class ValueHandleBase {
  3022. protected: enum HandleBaseKind { Assert, Callback, Tracking, Weak };
  3023. private: PointerIntPair<ValueHandleBase **, 2, HandleBaseKind> PrevPair;
  3024. ValueHandleBase *Next;
  3025. PointerIntPair<Value *, 2> VP;
  3026. ValueHandleBase(const ValueHandleBase &) = delete;
  3027. public: explicit ValueHandleBase(HandleBaseKind Kind) : PrevPair(0, Kind), Next(0), VP(0, 0) {}
  3028. ValueHandleBase(HandleBaseKind Kind, Value *V) : PrevPair(0, Kind), Next(0), VP(V, 0) { if (isValid(VP.getPointer())) AddToUseList(); }
  3029. ValueHandleBase(HandleBaseKind Kind, const ValueHandleBase &RHS) : PrevPair(0, Kind), Next(0), VP(RHS.VP) { if (isValid(VP.getPointer())) AddToExistingUseList(RHS.getPrevPtr()); }
  3030. ~ValueHandleBase() { if (isValid(VP.getPointer())) RemoveFromUseList(); }
  3031. Value *operator=(Value *RHS) { if (VP.getPointer() == RHS) return RHS; if (isValid(VP.getPointer())) RemoveFromUseList(); VP.setPointer(RHS); if (isValid(VP.getPointer())) AddToUseList(); return RHS; }
  3032. protected: Value *getValPtr() const { return VP.getPointer(); }
  3033. void setValPtrInt(unsigned K) { VP.setInt(K); }
  3034. static bool isValid(Value *V) { return V && V != DenseMapInfo<Value *>::getEmptyKey() && V != DenseMapInfo<Value *>::getTombstoneKey(); }
  3035. public: static void ValueIsDeleted(Value *V);
  3036. private: ValueHandleBase **getPrevPtr() const { return PrevPair.getPointer(); }
  3037. HandleBaseKind getKind() const { return PrevPair.getInt(); }
  3038. void AddToExistingUseList(ValueHandleBase **List);
  3039. void AddToExistingUseListAfter(ValueHandleBase *Node);
  3040. void AddToUseList();
  3041. void RemoveFromUseList();
  3042. };
  3043. class WeakVH : public ValueHandleBase {
  3044. public: WeakVH() : ValueHandleBase(Weak) {}
  3045. WeakVH(Value *P) : ValueHandleBase(Weak, P) {}
  3046. WeakVH(const WeakVH &RHS) : ValueHandleBase(Weak, RHS) {}
  3047. operator Value *() const { return getValPtr(); }
  3048. };
  3049. template <> struct simplify_type<WeakVH> {
  3050. typedef Value *SimpleType;
  3051. static SimpleType getSimplifiedValue(WeakVH &WVH) { return WVH; }
  3052. };
  3053. class CallbackVH : public ValueHandleBase {
  3054. protected: CallbackVH(const CallbackVH &RHS) : ValueHandleBase(Callback, RHS) {}
  3055. virtual ~CallbackVH() {}
  3056. void setValPtr(Value *P) { ValueHandleBase::operator=(P); }
  3057. public: CallbackVH() : ValueHandleBase(Callback) {}
  3058. CallbackVH(Value *P) : ValueHandleBase(Callback, P) {}
  3059. operator Value *() const { return getValPtr(); }
  3060. virtual void deleted();
  3061. };
  3062. class LoopInfo;
  3063. class SCEVUnknown;
  3064. class SCEV;
  3065. class SCEV : public FoldingSetNode {
  3066. friend struct FoldingSetTrait<SCEV>;
  3067. void dump() const;
  3068. };
  3069. template <> struct FoldingSetTrait<SCEV> : DefaultFoldingSetTrait<SCEV> {
  3070. };
  3071. class ScalarEvolution : public FunctionPass {
  3072. public: enum LoopDisposition { LoopVariant, LoopInvariant, LoopComputable };
  3073. void forgetLoop(const Loop *L);
  3074. SCEVUnknown *FirstUnknown;
  3075. };
  3076. namespace Intrinsic {
  3077. enum ID { not_intrinsic = 0, aarch64_neon_saddlv, aarch64_neon_smaxv, aarch64_neon_sminv, aarch64_neon_uaddlv, aarch64_neon_umaxv, aarch64_neon_uminv, aarch64_neon_vacgeq, aarch64_neon_vacgtq, aarch64_neon_vaddds, aarch64_neon_vadddu, aarch64_neon_vaddv, aarch64_neon_vmaxnm, aarch64_neon_vmaxnmv, aarch64_neon_vmaxv, aarch64_neon_vminnm, aarch64_neon_vminnmv, aarch64_neon_vminv, aarch64_neon_vmulx, aarch64_neon_vpadd, aarch64_neon_vpfadd, aarch64_neon_vpfaddq, aarch64_neon_vpfmaxnm, aarch64_neon_vpfmaxnmq, aarch64_neon_vpfminnm, aarch64_neon_vpfminnmq, aarch64_neon_vpmax, aarch64_neon_vpmaxnm, aarch64_neon_vpmaxq, aarch64_neon_vpmin, aarch64_neon_vpminnm, aarch64_neon_vpminq, aarch64_neon_vqadds, aarch64_neon_vqaddu, aarch64_neon_vqrshls, aarch64_neon_vqrshlu, aarch64_neon_vqshls, aarch64_neon_vqshlu, aarch64_neon_vqsubs, aarch64_neon_vqsubu, aarch64_neon_vrshlds, aarch64_neon_vrshldu, aarch64_neon_vrshrn, aarch64_neon_vshlds, aarch64_neon_vshldu, aarch64_neon_vsli, aarch64_neon_vsqrshrn, aarch64_neon_vsqrshrun, aarch64_neon_vsqshlu, aarch64_neon_vsqshrn, aarch64_neon_vsqshrun, aarch64_neon_vsri, aarch64_neon_vsrshr, aarch64_neon_vsubds, aarch64_neon_vsubdu, aarch64_neon_vuqrshrn, aarch64_neon_vuqshrn, aarch64_neon_vurshr, adjust_trampoline, annotation, arm_cdp, arm_cdp2, arm_clrex, arm_crc32b, arm_crc32cb, arm_crc32ch, arm_crc32cw, arm_crc32h, arm_crc32w, arm_dmb, arm_dsb, arm_get_fpscr, arm_ldrex, arm_ldrexd, arm_mcr, arm_mcr2, arm_mcrr, arm_mcrr2, arm_mrc, arm_mrc2, arm_neon_aesd, arm_neon_aese, arm_neon_aesimc, arm_neon_aesmc, arm_neon_sha1c, arm_neon_sha1h, arm_neon_sha1m, arm_neon_sha1p, arm_neon_sha1su0, arm_neon_sha1su1, arm_neon_sha256h, arm_neon_sha256h2, arm_neon_sha256su0, arm_neon_sha256su1, arm_neon_vabds, arm_neon_vabdu, arm_neon_vabs, arm_neon_vacged, arm_neon_vacgeq, arm_neon_vacgtd, arm_neon_vacgtq, arm_neon_vbsl, arm_neon_vcls, arm_neon_vclz, arm_neon_vcnt, arm_neon_vcvtas, arm_neon_vcvtau, arm_neon_vcvtfp2fxs, arm_neon_vcvtfp2fxu, arm_neon_vcvtfp2hf, arm_neon_vcvtfxs2fp, arm_neon_vcvtfxu2fp, arm_neon_vcvthf2fp, arm_neon_vcvtms, arm_neon_vcvtmu, arm_neon_vcvtns, arm_neon_vcvtnu, arm_neon_vcvtps, arm_neon_vcvtpu, arm_neon_vhadds, arm_neon_vhaddu, arm_neon_vhsubs, arm_neon_vhsubu, arm_neon_vld1, arm_neon_vld2, arm_neon_vld2lane, arm_neon_vld3, arm_neon_vld3lane, arm_neon_vld4, arm_neon_vld4lane, arm_neon_vmaxnm, arm_neon_vmaxs, arm_neon_vmaxu, arm_neon_vminnm, arm_neon_vmins, arm_neon_vminu, arm_neon_vmullp, arm_neon_vmulls, arm_neon_vmullu, arm_neon_vmulp, arm_neon_vpadals, arm_neon_vpadalu, arm_neon_vpadd, arm_neon_vpaddls, arm_neon_vpaddlu, arm_neon_vpmaxs, arm_neon_vpmaxu, arm_neon_vpmins, arm_neon_vpminu, arm_neon_vqabs, arm_neon_vqadds, arm_neon_vqaddu, arm_neon_vqdmulh, arm_neon_vqdmull, arm_neon_vqmovns, arm_neon_vqmovnsu, arm_neon_vqmovnu, arm_neon_vqneg, arm_neon_vqrdmulh, arm_neon_vqrshiftns, arm_neon_vqrshiftnsu, arm_neon_vqrshiftnu, arm_neon_vqrshifts, arm_neon_vqrshiftu, arm_neon_vqshiftns, arm_neon_vqshiftnsu, arm_neon_vqshiftnu, arm_neon_vqshifts, arm_neon_vqshiftsu, arm_neon_vqshiftu, arm_neon_vqsubs, arm_neon_vqsubu, arm_neon_vraddhn, arm_neon_vrecpe, arm_neon_vrecps, arm_neon_vrhadds, arm_neon_vrhaddu, arm_neon_vrinta, arm_neon_vrintm, arm_neon_vrintn, arm_neon_vrintp, arm_neon_vrintx, arm_neon_vrintz, arm_neon_vrshiftn, arm_neon_vrshifts, arm_neon_vrshiftu, arm_neon_vrsqrte, arm_neon_vrsqrts, arm_neon_vrsubhn, arm_neon_vshiftins, arm_neon_vshiftls, arm_neon_vshiftlu, arm_neon_vshiftn, arm_neon_vshifts, arm_neon_vshiftu, arm_neon_vst1, arm_neon_vst2, arm_neon_vst2lane, arm_neon_vst3, arm_neon_vst3lane, arm_neon_vst4, arm_neon_vst4lane, arm_neon_vtbl1, arm_neon_vtbl2, arm_neon_vtbl3, arm_neon_vtbl4, arm_neon_vtbx1, arm_neon_vtbx2, arm_neon_vtbx3, arm_neon_vtbx4, arm_qadd, arm_qsub, arm_set_fpscr, arm_sevl, arm_ssat, arm_strex, arm_strexd, arm_thread_pointer, arm_usat, arm_vcvtr, arm_vcvtru, bswap, ceil, convert_from_fp16, convert_to_fp16, convertff, convertfsi, convertfui, convertsif, convertss, convertsu, convertuif, convertus, convertuu, copysign, cos, ctlz, ctpop, cttz, cuda_syncthreads, dbg_declare, dbg_value, debugtrap, donothing, eh_dwarf_cfa, eh_return_i32, eh_return_i64, eh_sjlj_callsite, eh_sjlj_functioncontext, eh_sjlj_longjmp, eh_sjlj_lsda, eh_sjlj_setjmp, eh_typeid_for, eh_unwind_init, exp, exp2, expect, fabs, floor, flt_rounds, fma, fmuladd, frameaddress, gcread, gcroot, gcwrite, hexagon_A2_abs, hexagon_A2_absp, hexagon_A2_abssat, hexagon_A2_add, hexagon_A2_addh_h16_hh, hexagon_A2_addh_h16_hl, hexagon_A2_addh_h16_lh, hexagon_A2_addh_h16_ll, hexagon_A2_addh_h16_sat_hh, hexagon_A2_addh_h16_sat_hl, hexagon_A2_addh_h16_sat_lh, hexagon_A2_addh_h16_sat_ll, hexagon_A2_addh_l16_hl, hexagon_A2_addh_l16_ll, hexagon_A2_addh_l16_sat_hl, hexagon_A2_addh_l16_sat_ll, hexagon_A2_addi, hexagon_A2_addp, hexagon_A2_addpsat, hexagon_A2_addsat, hexagon_A2_addsp, hexagon_A2_and, hexagon_A2_andir, hexagon_A2_andp, hexagon_A2_aslh, hexagon_A2_asrh, hexagon_A2_combine_hh, hexagon_A2_combine_hl, hexagon_A2_combine_lh, hexagon_A2_combine_ll, hexagon_A2_combineii, hexagon_A2_combinew, hexagon_A2_max, hexagon_A2_maxp, hexagon_A2_maxu, hexagon_A2_maxup, hexagon_A2_min, hexagon_A2_minp, hexagon_A2_minu, hexagon_A2_minup, hexagon_A2_neg, hexagon_A2_negp, hexagon_A2_negsat, hexagon_A2_not, hexagon_A2_notp, hexagon_A2_or, hexagon_A2_orir, hexagon_A2_orp, hexagon_A2_roundsat, hexagon_A2_sat, hexagon_A2_satb, hexagon_A2_sath, hexagon_A2_satub, hexagon_A2_satuh, hexagon_A2_sub, hexagon_A2_subh_h16_hh, hexagon_A2_subh_h16_hl, hexagon_A2_subh_h16_lh, hexagon_A2_subh_h16_ll, hexagon_A2_subh_h16_sat_hh, hexagon_A2_subh_h16_sat_hl, hexagon_A2_subh_h16_sat_lh, hexagon_A2_subh_h16_sat_ll, hexagon_A2_subh_l16_hl, hexagon_A2_subh_l16_ll, hexagon_A2_subh_l16_sat_hl, hexagon_A2_subh_l16_sat_ll, hexagon_A2_subp, hexagon_A2_subri, hexagon_A2_subsat, hexagon_A2_svaddh, hexagon_A2_svaddhs, hexagon_A2_svadduhs, hexagon_A2_svavgh, hexagon_A2_svavghs, hexagon_A2_svnavgh, hexagon_A2_svsubh, hexagon_A2_svsubhs, hexagon_A2_svsubuhs, hexagon_A2_swiz, hexagon_A2_sxtb, hexagon_A2_sxth, hexagon_A2_sxtw, hexagon_A2_tfr, hexagon_A2_tfrih, hexagon_A2_tfril, hexagon_A2_tfrp, hexagon_A2_tfrpi, hexagon_A2_tfrsi, hexagon_A2_vabsh, hexagon_A2_vabshsat, hexagon_A2_vabsw, hexagon_A2_vabswsat, hexagon_A2_vaddb_map, hexagon_A2_vaddh, hexagon_A2_vaddhs, hexagon_A2_vaddub, hexagon_A2_vaddubs, hexagon_A2_vadduhs, hexagon_A2_vaddw, hexagon_A2_vaddws, hexagon_A2_vavgh, hexagon_A2_vavghcr, hexagon_A2_vavghr, hexagon_A2_vavgub, hexagon_A2_vavgubr, hexagon_A2_vavguh, hexagon_A2_vavguhr, hexagon_A2_vavguw, hexagon_A2_vavguwr, hexagon_A2_vavgw, hexagon_A2_vavgwcr, hexagon_A2_vavgwr, hexagon_A2_vcmpbeq, hexagon_A2_vcmpbgtu, hexagon_A2_vcmpheq, hexagon_A2_vcmphgt, hexagon_A2_vcmphgtu, hexagon_A2_vcmpweq, hexagon_A2_vcmpwgt, hexagon_A2_vcmpwgtu, hexagon_A2_vconj, hexagon_A2_vmaxb, hexagon_A2_vmaxh, hexagon_A2_vmaxub, hexagon_A2_vmaxuh, hexagon_A2_vmaxuw, hexagon_A2_vmaxw, hexagon_A2_vminb, hexagon_A2_vminh, hexagon_A2_vminub, hexagon_A2_vminuh, hexagon_A2_vminuw, hexagon_A2_vminw, hexagon_A2_vnavgh, hexagon_A2_vnavghcr, hexagon_A2_vnavghr, hexagon_A2_vnavgw, hexagon_A2_vnavgwcr, hexagon_A2_vnavgwr, hexagon_A2_vraddub, hexagon_A2_vraddub_acc, hexagon_A2_vrsadub, hexagon_A2_vrsadub_acc, hexagon_A2_vsubb_map, hexagon_A2_vsubh, hexagon_A2_vsubhs, hexagon_A2_vsubub, hexagon_A2_vsububs, hexagon_A2_vsubuhs, hexagon_A2_vsubw, hexagon_A2_vsubws, hexagon_A2_xor, hexagon_A2_xorp, hexagon_A2_zxtb, hexagon_A2_zxth, hexagon_A4_andn, hexagon_A4_andnp, hexagon_A4_bitsplit, hexagon_A4_bitspliti, hexagon_A4_boundscheck, hexagon_A4_cmpbeq, hexagon_A4_cmpbeqi, hexagon_A4_cmpbgt, hexagon_A4_cmpbgti, hexagon_A4_cmpbgtu, hexagon_A4_cmpbgtui, hexagon_A4_cmpheq, hexagon_A4_cmpheqi, hexagon_A4_cmphgt, hexagon_A4_cmphgti, hexagon_A4_cmphgtu, hexagon_A4_cmphgtui, hexagon_A4_combineir, hexagon_A4_combineri, hexagon_A4_cround_ri, hexagon_A4_cround_rr, hexagon_A4_modwrapu, hexagon_A4_orn, hexagon_A4_ornp, hexagon_A4_rcmpeq, hexagon_A4_rcmpeqi, hexagon_A4_rcmpneq, hexagon_A4_rcmpneqi, hexagon_A4_round_ri, hexagon_A4_round_ri_sat, hexagon_A4_round_rr, hexagon_A4_round_rr_sat, hexagon_A4_tlbmatch, hexagon_A4_vcmpbeq_any, hexagon_A4_vcmpbeqi, hexagon_A4_vcmpbgt, hexagon_A4_vcmpbgti, hexagon_A4_vcmpbgtui, hexagon_A4_vcmpheqi, hexagon_A4_vcmphgti, hexagon_A4_vcmphgtui, hexagon_A4_vcmpweqi, hexagon_A4_vcmpwgti, hexagon_A4_vcmpwgtui, hexagon_A4_vrmaxh, hexagon_A4_vrmaxuh, hexagon_A4_vrmaxuw, hexagon_A4_vrmaxw, hexagon_A4_vrminh, hexagon_A4_vrminuh, hexagon_A4_vrminuw, hexagon_A4_vrminw, hexagon_A5_vaddhubs, hexagon_C2_all8, hexagon_C2_and, hexagon_C2_andn, hexagon_C2_any8, hexagon_C2_bitsclr, hexagon_C2_bitsclri, hexagon_C2_bitsset, hexagon_C2_cmpeq, hexagon_C2_cmpeqi, hexagon_C2_cmpeqp, hexagon_C2_cmpgei, hexagon_C2_cmpgeui, hexagon_C2_cmpgt, hexagon_C2_cmpgti, hexagon_C2_cmpgtp, hexagon_C2_cmpgtu, hexagon_C2_cmpgtui, hexagon_C2_cmpgtup, hexagon_C2_cmplt, hexagon_C2_cmpltu, hexagon_C2_mask, hexagon_C2_mux, hexagon_C2_muxii, hexagon_C2_muxir, hexagon_C2_muxri, hexagon_C2_not, hexagon_C2_or, hexagon_C2_orn, hexagon_C2_pxfer_map, hexagon_C2_tfrpr, hexagon_C2_tfrrp, hexagon_C2_vitpack, hexagon_C2_vmux, hexagon_C2_xor, hexagon_C4_and_and, hexagon_C4_and_andn, hexagon_C4_and_or, hexagon_C4_and_orn, hexagon_C4_cmplte, hexagon_C4_cmpltei, hexagon_C4_cmplteu, hexagon_C4_cmplteui, hexagon_C4_cmpneq, hexagon_C4_cmpneqi, hexagon_C4_fastcorner9, hexagon_C4_fastcorner9_not, hexagon_C4_nbitsclr, hexagon_C4_nbitsclri, hexagon_C4_nbitsset, hexagon_C4_or_and, hexagon_C4_or_andn, hexagon_C4_or_or, hexagon_C4_or_orn, hexagon_F2_conv_d2df, hexagon_F2_conv_d2sf, hexagon_F2_conv_df2d, hexagon_F2_conv_df2d_chop, hexagon_F2_conv_df2sf, hexagon_F2_conv_df2ud, hexagon_F2_conv_df2ud_chop, hexagon_F2_conv_df2uw, hexagon_F2_conv_df2uw_chop, hexagon_F2_conv_df2w, hexagon_F2_conv_df2w_chop, hexagon_F2_conv_sf2d, hexagon_F2_conv_sf2d_chop, hexagon_F2_conv_sf2df, hexagon_F2_conv_sf2ud, hexagon_F2_conv_sf2ud_chop, hexagon_F2_conv_sf2uw, hexagon_F2_conv_sf2uw_chop, hexagon_F2_conv_sf2w, hexagon_F2_conv_sf2w_chop, hexagon_F2_conv_ud2df, hexagon_F2_conv_ud2sf, hexagon_F2_conv_uw2df, hexagon_F2_conv_uw2sf, hexagon_F2_conv_w2df, hexagon_F2_conv_w2sf, hexagon_F2_dfadd, hexagon_F2_dfclass, hexagon_F2_dfcmpeq, hexagon_F2_dfcmpge, hexagon_F2_dfcmpgt, hexagon_F2_dfcmpuo, hexagon_F2_dffixupd, hexagon_F2_dffixupn, hexagon_F2_dffixupr, hexagon_F2_dffma, hexagon_F2_dffma_lib, hexagon_F2_dffma_sc, hexagon_F2_dffms, hexagon_F2_dffms_lib, hexagon_F2_dfimm_n, hexagon_F2_dfimm_p, hexagon_F2_dfmax, hexagon_F2_dfmin, hexagon_F2_dfmpy, hexagon_F2_dfsub, hexagon_F2_sfadd, hexagon_F2_sfclass, hexagon_F2_sfcmpeq, hexagon_F2_sfcmpge, hexagon_F2_sfcmpgt, hexagon_F2_sfcmpuo, hexagon_F2_sffixupd, hexagon_F2_sffixupn, hexagon_F2_sffixupr, hexagon_F2_sffma, hexagon_F2_sffma_lib, hexagon_F2_sffma_sc, hexagon_F2_sffms, hexagon_F2_sffms_lib, hexagon_F2_sfimm_n, hexagon_F2_sfimm_p, hexagon_F2_sfmax, hexagon_F2_sfmin, hexagon_F2_sfmpy, hexagon_F2_sfsub, hexagon_M2_acci, hexagon_M2_accii, hexagon_M2_cmaci_s0, hexagon_M2_cmacr_s0, hexagon_M2_cmacs_s0, hexagon_M2_cmacs_s1, hexagon_M2_cmacsc_s0, hexagon_M2_cmacsc_s1, hexagon_M2_cmpyi_s0, hexagon_M2_cmpyr_s0, hexagon_M2_cmpyrs_s0, hexagon_M2_cmpyrs_s1, hexagon_M2_cmpyrsc_s0, hexagon_M2_cmpyrsc_s1, hexagon_M2_cmpys_s0, hexagon_M2_cmpys_s1, hexagon_M2_cmpysc_s0, hexagon_M2_cmpysc_s1, hexagon_M2_cnacs_s0, hexagon_M2_cnacs_s1, hexagon_M2_cnacsc_s0, hexagon_M2_cnacsc_s1, hexagon_M2_dpmpyss_acc_s0, hexagon_M2_dpmpyss_nac_s0, hexagon_M2_dpmpyss_rnd_s0, hexagon_M2_dpmpyss_s0, hexagon_M2_dpmpyuu_acc_s0, hexagon_M2_dpmpyuu_nac_s0, hexagon_M2_dpmpyuu_s0, hexagon_M2_hmmpyh_rs1, hexagon_M2_hmmpyh_s1, hexagon_M2_hmmpyl_rs1, hexagon_M2_hmmpyl_s1, hexagon_M2_maci, hexagon_M2_macsin, hexagon_M2_macsip, hexagon_M2_mmachs_rs0, hexagon_M2_mmachs_rs1, hexagon_M2_mmachs_s0, hexagon_M2_mmachs_s1, hexagon_M2_mmacls_rs0, hexagon_M2_mmacls_rs1, hexagon_M2_mmacls_s0, hexagon_M2_mmacls_s1, hexagon_M2_mmacuhs_rs0, hexagon_M2_mmacuhs_rs1, hexagon_M2_mmacuhs_s0, hexagon_M2_mmacuhs_s1, hexagon_M2_mmaculs_rs0, hexagon_M2_mmaculs_rs1, hexagon_M2_mmaculs_s0, hexagon_M2_mmaculs_s1, hexagon_M2_mmpyh_rs0, hexagon_M2_mmpyh_rs1, hexagon_M2_mmpyh_s0, hexagon_M2_mmpyh_s1, hexagon_M2_mmpyl_rs0, hexagon_M2_mmpyl_rs1, hexagon_M2_mmpyl_s0, hexagon_M2_mmpyl_s1, hexagon_M2_mmpyuh_rs0, hexagon_M2_mmpyuh_rs1, hexagon_M2_mmpyuh_s0, hexagon_M2_mmpyuh_s1, hexagon_M2_mmpyul_rs0, hexagon_M2_mmpyul_rs1, hexagon_M2_mmpyul_s0, hexagon_M2_mmpyul_s1, hexagon_M2_mpy_acc_hh_s0, hexagon_M2_mpy_acc_hh_s1, hexagon_M2_mpy_acc_hl_s0, hexagon_M2_mpy_acc_hl_s1, hexagon_M2_mpy_acc_lh_s0, hexagon_M2_mpy_acc_lh_s1, hexagon_M2_mpy_acc_ll_s0, hexagon_M2_mpy_acc_ll_s1, hexagon_M2_mpy_acc_sat_hh_s0, hexagon_M2_mpy_acc_sat_hh_s1, hexagon_M2_mpy_acc_sat_hl_s0, hexagon_M2_mpy_acc_sat_hl_s1, hexagon_M2_mpy_acc_sat_lh_s0, hexagon_M2_mpy_acc_sat_lh_s1, hexagon_M2_mpy_acc_sat_ll_s0, hexagon_M2_mpy_acc_sat_ll_s1, hexagon_M2_mpy_hh_s0, hexagon_M2_mpy_hh_s1, hexagon_M2_mpy_hl_s0, hexagon_M2_mpy_hl_s1, hexagon_M2_mpy_lh_s0, hexagon_M2_mpy_lh_s1, hexagon_M2_mpy_ll_s0, hexagon_M2_mpy_ll_s1, hexagon_M2_mpy_nac_hh_s0, hexagon_M2_mpy_nac_hh_s1, hexagon_M2_mpy_nac_hl_s0, hexagon_M2_mpy_nac_hl_s1, hexagon_M2_mpy_nac_lh_s0, hexagon_M2_mpy_nac_lh_s1, hexagon_M2_mpy_nac_ll_s0, hexagon_M2_mpy_nac_ll_s1, hexagon_M2_mpy_nac_sat_hh_s0, hexagon_M2_mpy_nac_sat_hh_s1, hexagon_M2_mpy_nac_sat_hl_s0, hexagon_M2_mpy_nac_sat_hl_s1, hexagon_M2_mpy_nac_sat_lh_s0, hexagon_M2_mpy_nac_sat_lh_s1, hexagon_M2_mpy_nac_sat_ll_s0, hexagon_M2_mpy_nac_sat_ll_s1, hexagon_M2_mpy_rnd_hh_s0, hexagon_M2_mpy_rnd_hh_s1, hexagon_M2_mpy_rnd_hl_s0, hexagon_M2_mpy_rnd_hl_s1, hexagon_M2_mpy_rnd_lh_s0, hexagon_M2_mpy_rnd_lh_s1, hexagon_M2_mpy_rnd_ll_s0, hexagon_M2_mpy_rnd_ll_s1, hexagon_M2_mpy_sat_hh_s0, hexagon_M2_mpy_sat_hh_s1, hexagon_M2_mpy_sat_hl_s0, hexagon_M2_mpy_sat_hl_s1, hexagon_M2_mpy_sat_lh_s0, hexagon_M2_mpy_sat_lh_s1, hexagon_M2_mpy_sat_ll_s0, hexagon_M2_mpy_sat_ll_s1, hexagon_M2_mpy_sat_rnd_hh_s0, hexagon_M2_mpy_sat_rnd_hh_s1, hexagon_M2_mpy_sat_rnd_hl_s0, hexagon_M2_mpy_sat_rnd_hl_s1, hexagon_M2_mpy_sat_rnd_lh_s0, hexagon_M2_mpy_sat_rnd_lh_s1, hexagon_M2_mpy_sat_rnd_ll_s0, hexagon_M2_mpy_sat_rnd_ll_s1, hexagon_M2_mpy_up, hexagon_M2_mpy_up_s1, hexagon_M2_mpy_up_s1_sat, hexagon_M2_mpyd_acc_hh_s0, hexagon_M2_mpyd_acc_hh_s1, hexagon_M2_mpyd_acc_hl_s0, hexagon_M2_mpyd_acc_hl_s1, hexagon_M2_mpyd_acc_lh_s0, hexagon_M2_mpyd_acc_lh_s1, hexagon_M2_mpyd_acc_ll_s0, hexagon_M2_mpyd_acc_ll_s1, hexagon_M2_mpyd_hh_s0, hexagon_M2_mpyd_hh_s1, hexagon_M2_mpyd_hl_s0, hexagon_M2_mpyd_hl_s1, hexagon_M2_mpyd_lh_s0, hexagon_M2_mpyd_lh_s1, hexagon_M2_mpyd_ll_s0, hexagon_M2_mpyd_ll_s1, hexagon_M2_mpyd_nac_hh_s0, hexagon_M2_mpyd_nac_hh_s1, hexagon_M2_mpyd_nac_hl_s0, hexagon_M2_mpyd_nac_hl_s1, hexagon_M2_mpyd_nac_lh_s0, hexagon_M2_mpyd_nac_lh_s1, hexagon_M2_mpyd_nac_ll_s0, hexagon_M2_mpyd_nac_ll_s1, hexagon_M2_mpyd_rnd_hh_s0, hexagon_M2_mpyd_rnd_hh_s1, hexagon_M2_mpyd_rnd_hl_s0, hexagon_M2_mpyd_rnd_hl_s1, hexagon_M2_mpyd_rnd_lh_s0, hexagon_M2_mpyd_rnd_lh_s1, hexagon_M2_mpyd_rnd_ll_s0, hexagon_M2_mpyd_rnd_ll_s1, hexagon_M2_mpyi, hexagon_M2_mpysmi, hexagon_M2_mpysu_up, hexagon_M2_mpyu_acc_hh_s0, hexagon_M2_mpyu_acc_hh_s1, hexagon_M2_mpyu_acc_hl_s0, hexagon_M2_mpyu_acc_hl_s1, hexagon_M2_mpyu_acc_lh_s0, hexagon_M2_mpyu_acc_lh_s1, hexagon_M2_mpyu_acc_ll_s0, hexagon_M2_mpyu_acc_ll_s1, hexagon_M2_mpyu_hh_s0, hexagon_M2_mpyu_hh_s1, hexagon_M2_mpyu_hl_s0, hexagon_M2_mpyu_hl_s1, hexagon_M2_mpyu_lh_s0, hexagon_M2_mpyu_lh_s1, hexagon_M2_mpyu_ll_s0, hexagon_M2_mpyu_ll_s1, hexagon_M2_mpyu_nac_hh_s0, hexagon_M2_mpyu_nac_hh_s1, hexagon_M2_mpyu_nac_hl_s0, hexagon_M2_mpyu_nac_hl_s1, hexagon_M2_mpyu_nac_lh_s0, hexagon_M2_mpyu_nac_lh_s1, hexagon_M2_mpyu_nac_ll_s0, hexagon_M2_mpyu_nac_ll_s1, hexagon_M2_mpyu_up, hexagon_M2_mpyud_acc_hh_s0, hexagon_M2_mpyud_acc_hh_s1, hexagon_M2_mpyud_acc_hl_s0, hexagon_M2_mpyud_acc_hl_s1, hexagon_M2_mpyud_acc_lh_s0, hexagon_M2_mpyud_acc_lh_s1, hexagon_M2_mpyud_acc_ll_s0, hexagon_M2_mpyud_acc_ll_s1, hexagon_M2_mpyud_hh_s0, hexagon_M2_mpyud_hh_s1, hexagon_M2_mpyud_hl_s0, hexagon_M2_mpyud_hl_s1, hexagon_M2_mpyud_lh_s0, hexagon_M2_mpyud_lh_s1, hexagon_M2_mpyud_ll_s0, hexagon_M2_mpyud_ll_s1, hexagon_M2_mpyud_nac_hh_s0, hexagon_M2_mpyud_nac_hh_s1, hexagon_M2_mpyud_nac_hl_s0, hexagon_M2_mpyud_nac_hl_s1, hexagon_M2_mpyud_nac_lh_s0, hexagon_M2_mpyud_nac_lh_s1, hexagon_M2_mpyud_nac_ll_s0, hexagon_M2_mpyud_nac_ll_s1, hexagon_M2_mpyui, hexagon_M2_nacci, hexagon_M2_naccii, hexagon_M2_subacc, hexagon_M2_vabsdiffh, hexagon_M2_vabsdiffw, hexagon_M2_vcmac_s0_sat_i, hexagon_M2_vcmac_s0_sat_r, hexagon_M2_vcmpy_s0_sat_i, hexagon_M2_vcmpy_s0_sat_r, hexagon_M2_vcmpy_s1_sat_i, hexagon_M2_vcmpy_s1_sat_r, hexagon_M2_vdmacs_s0, hexagon_M2_vdmacs_s1, hexagon_M2_vdmpyrs_s0, hexagon_M2_vdmpyrs_s1, hexagon_M2_vdmpys_s0, hexagon_M2_vdmpys_s1, hexagon_M2_vmac2, hexagon_M2_vmac2es, hexagon_M2_vmac2es_s0, hexagon_M2_vmac2es_s1, hexagon_M2_vmac2s_s0, hexagon_M2_vmac2s_s1, hexagon_M2_vmac2su_s0, hexagon_M2_vmac2su_s1, hexagon_M2_vmpy2es_s0, hexagon_M2_vmpy2es_s1, hexagon_M2_vmpy2s_s0, hexagon_M2_vmpy2s_s0pack, hexagon_M2_vmpy2s_s1, hexagon_M2_vmpy2s_s1pack, hexagon_M2_vmpy2su_s0, hexagon_M2_vmpy2su_s1, hexagon_M2_vraddh, hexagon_M2_vradduh, hexagon_M2_vrcmaci_s0, hexagon_M2_vrcmaci_s0c, hexagon_M2_vrcmacr_s0, hexagon_M2_vrcmacr_s0c, hexagon_M2_vrcmpyi_s0, hexagon_M2_vrcmpyi_s0c, hexagon_M2_vrcmpyr_s0, hexagon_M2_vrcmpyr_s0c, hexagon_M2_vrcmpys_acc_s1, hexagon_M2_vrcmpys_s1, hexagon_M2_vrcmpys_s1rp, hexagon_M2_vrmac_s0, hexagon_M2_vrmpy_s0, hexagon_M2_xor_xacc, hexagon_M4_and_and, hexagon_M4_and_andn, hexagon_M4_and_or, hexagon_M4_and_xor, hexagon_M4_cmpyi_wh, hexagon_M4_cmpyi_whc, hexagon_M4_cmpyr_wh, hexagon_M4_cmpyr_whc, hexagon_M4_mac_up_s1_sat, hexagon_M4_mpyri_addi, hexagon_M4_mpyri_addr, hexagon_M4_mpyri_addr_u2, hexagon_M4_mpyrr_addi, hexagon_M4_mpyrr_addr, hexagon_M4_nac_up_s1_sat, hexagon_M4_or_and, hexagon_M4_or_andn, hexagon_M4_or_or, hexagon_M4_or_xor, hexagon_M4_pmpyw, hexagon_M4_pmpyw_acc, hexagon_M4_vpmpyh, hexagon_M4_vpmpyh_acc, hexagon_M4_vrmpyeh_acc_s0, hexagon_M4_vrmpyeh_acc_s1, hexagon_M4_vrmpyeh_s0, hexagon_M4_vrmpyeh_s1, hexagon_M4_vrmpyoh_acc_s0, hexagon_M4_vrmpyoh_acc_s1, hexagon_M4_vrmpyoh_s0, hexagon_M4_vrmpyoh_s1, hexagon_M4_xor_and, hexagon_M4_xor_andn, hexagon_M4_xor_or, hexagon_M4_xor_xacc, hexagon_M5_vdmacbsu, hexagon_M5_vdmpybsu, hexagon_M5_vmacbsu, hexagon_M5_vmacbuu, hexagon_M5_vmpybsu, hexagon_M5_vmpybuu, hexagon_M5_vrmacbsu, hexagon_M5_vrmacbuu, hexagon_M5_vrmpybsu, hexagon_M5_vrmpybuu, hexagon_S2_addasl_rrri, hexagon_S2_asl_i_p, hexagon_S2_asl_i_p_acc, hexagon_S2_asl_i_p_and, hexagon_S2_asl_i_p_nac, hexagon_S2_asl_i_p_or, hexagon_S2_asl_i_p_xacc, hexagon_S2_asl_i_r, hexagon_S2_asl_i_r_acc, hexagon_S2_asl_i_r_and, hexagon_S2_asl_i_r_nac, hexagon_S2_asl_i_r_or, hexagon_S2_asl_i_r_sat, hexagon_S2_asl_i_r_xacc, hexagon_S2_asl_i_vh, hexagon_S2_asl_i_vw, hexagon_S2_asl_r_p, hexagon_S2_asl_r_p_acc, hexagon_S2_asl_r_p_and, hexagon_S2_asl_r_p_nac, hexagon_S2_asl_r_p_or, hexagon_S2_asl_r_p_xor, hexagon_S2_asl_r_r, hexagon_S2_asl_r_r_acc, hexagon_S2_asl_r_r_and, hexagon_S2_asl_r_r_nac, hexagon_S2_asl_r_r_or, hexagon_S2_asl_r_r_sat, hexagon_S2_asl_r_vh, hexagon_S2_asl_r_vw, hexagon_S2_asr_i_p, hexagon_S2_asr_i_p_acc, hexagon_S2_asr_i_p_and, hexagon_S2_asr_i_p_nac, hexagon_S2_asr_i_p_or, hexagon_S2_asr_i_p_rnd, hexagon_S2_asr_i_p_rnd_goodsyntax, hexagon_S2_asr_i_r, hexagon_S2_asr_i_r_acc, hexagon_S2_asr_i_r_and, hexagon_S2_asr_i_r_nac, hexagon_S2_asr_i_r_or, hexagon_S2_asr_i_r_rnd, hexagon_S2_asr_i_r_rnd_goodsyntax, hexagon_S2_asr_i_svw_trun, hexagon_S2_asr_i_vh, hexagon_S2_asr_i_vw, hexagon_S2_asr_r_p, hexagon_S2_asr_r_p_acc, hexagon_S2_asr_r_p_and, hexagon_S2_asr_r_p_nac, hexagon_S2_asr_r_p_or, hexagon_S2_asr_r_p_xor, hexagon_S2_asr_r_r, hexagon_S2_asr_r_r_acc, hexagon_S2_asr_r_r_and, hexagon_S2_asr_r_r_nac, hexagon_S2_asr_r_r_or, hexagon_S2_asr_r_r_sat, hexagon_S2_asr_r_svw_trun, hexagon_S2_asr_r_vh, hexagon_S2_asr_r_vw, hexagon_S2_brev, hexagon_S2_brevp, hexagon_S2_cl0, hexagon_S2_cl0p, hexagon_S2_cl1, hexagon_S2_cl1p, hexagon_S2_clb, hexagon_S2_clbnorm, hexagon_S2_clbp, hexagon_S2_clrbit_i, hexagon_S2_clrbit_r, hexagon_S2_ct0, hexagon_S2_ct0p, hexagon_S2_ct1, hexagon_S2_ct1p, hexagon_S2_deinterleave, hexagon_S2_extractu, hexagon_S2_extractu_rp, hexagon_S2_extractup, hexagon_S2_extractup_rp, hexagon_S2_insert, hexagon_S2_insert_rp, hexagon_S2_insertp, hexagon_S2_insertp_rp, hexagon_S2_interleave, hexagon_S2_lfsp, hexagon_S2_lsl_r_p, hexagon_S2_lsl_r_p_acc, hexagon_S2_lsl_r_p_and, hexagon_S2_lsl_r_p_nac, hexagon_S2_lsl_r_p_or, hexagon_S2_lsl_r_p_xor, hexagon_S2_lsl_r_r, hexagon_S2_lsl_r_r_acc, hexagon_S2_lsl_r_r_and, hexagon_S2_lsl_r_r_nac, hexagon_S2_lsl_r_r_or, hexagon_S2_lsl_r_vh, hexagon_S2_lsl_r_vw, hexagon_S2_lsr_i_p, hexagon_S2_lsr_i_p_acc, hexagon_S2_lsr_i_p_and, hexagon_S2_lsr_i_p_nac, hexagon_S2_lsr_i_p_or, hexagon_S2_lsr_i_p_xacc, hexagon_S2_lsr_i_r, hexagon_S2_lsr_i_r_acc, hexagon_S2_lsr_i_r_and, hexagon_S2_lsr_i_r_nac, hexagon_S2_lsr_i_r_or, hexagon_S2_lsr_i_r_xacc, hexagon_S2_lsr_i_vh, hexagon_S2_lsr_i_vw, hexagon_S2_lsr_r_p, hexagon_S2_lsr_r_p_acc, hexagon_S2_lsr_r_p_and, hexagon_S2_lsr_r_p_nac, hexagon_S2_lsr_r_p_or, hexagon_S2_lsr_r_p_xor, hexagon_S2_lsr_r_r, hexagon_S2_lsr_r_r_acc, hexagon_S2_lsr_r_r_and, hexagon_S2_lsr_r_r_nac, hexagon_S2_lsr_r_r_or, hexagon_S2_lsr_r_vh, hexagon_S2_lsr_r_vw, hexagon_S2_packhl, hexagon_S2_parityp, hexagon_S2_setbit_i, hexagon_S2_setbit_r, hexagon_S2_shuffeb, hexagon_S2_shuffeh, hexagon_S2_shuffob, hexagon_S2_shuffoh, hexagon_S2_svsathb, hexagon_S2_svsathub, hexagon_S2_tableidxb_goodsyntax, hexagon_S2_tableidxd_goodsyntax, hexagon_S2_tableidxh_goodsyntax, hexagon_S2_tableidxw_goodsyntax, hexagon_S2_togglebit_i, hexagon_S2_togglebit_r, hexagon_S2_tstbit_i, hexagon_S2_tstbit_r, hexagon_S2_valignib, hexagon_S2_valignrb, hexagon_S2_vcnegh, hexagon_S2_vcrotate, hexagon_S2_vrcnegh, hexagon_S2_vrndpackwh, hexagon_S2_vrndpackwhs, hexagon_S2_vsathb, hexagon_S2_vsathb_nopack, hexagon_S2_vsathub, hexagon_S2_vsathub_nopack, hexagon_S2_vsatwh, hexagon_S2_vsatwh_nopack, hexagon_S2_vsatwuh, hexagon_S2_vsatwuh_nopack, hexagon_S2_vsplatrb, hexagon_S2_vsplatrh, hexagon_S2_vspliceib, hexagon_S2_vsplicerb, hexagon_S2_vsxtbh, hexagon_S2_vsxthw, hexagon_S2_vtrunehb, hexagon_S2_vtrunewh, hexagon_S2_vtrunohb, hexagon_S2_vtrunowh, hexagon_S2_vzxtbh, hexagon_S2_vzxthw, hexagon_S4_addaddi, hexagon_S4_addi_asl_ri, hexagon_S4_addi_lsr_ri, hexagon_S4_andi_asl_ri, hexagon_S4_andi_lsr_ri, hexagon_S4_clbaddi, hexagon_S4_clbpaddi, hexagon_S4_clbpnorm, hexagon_S4_extract, hexagon_S4_extract_rp, hexagon_S4_extractp, hexagon_S4_extractp_rp, hexagon_S4_lsli, hexagon_S4_ntstbit_i, hexagon_S4_ntstbit_r, hexagon_S4_or_andi, hexagon_S4_or_andix, hexagon_S4_or_ori, hexagon_S4_ori_asl_ri, hexagon_S4_ori_lsr_ri, hexagon_S4_parity, hexagon_S4_subaddi, hexagon_S4_subi_asl_ri, hexagon_S4_subi_lsr_ri, hexagon_S4_vrcrotate, hexagon_S4_vrcrotate_acc, hexagon_S4_vxaddsubh, hexagon_S4_vxaddsubhr, hexagon_S4_vxaddsubw, hexagon_S4_vxsubaddh, hexagon_S4_vxsubaddhr, hexagon_S4_vxsubaddw, hexagon_S5_asrhub_rnd_sat_goodsyntax, hexagon_S5_asrhub_sat, hexagon_S5_popcountp, hexagon_S5_vasrhrnd_goodsyntax, hexagon_SI_to_SXTHI_asrh, hexagon_circ_ldd, init_trampoline, invariant_end, invariant_start, lifetime_end, lifetime_start, log, log10, log2, longjmp, memcpy, memmove, memset, mips_absq_s_ph, mips_absq_s_qb, mips_absq_s_w, mips_add_a_b, mips_add_a_d, mips_add_a_h, mips_add_a_w, mips_addq_ph, mips_addq_s_ph, mips_addq_s_w, mips_addqh_ph, mips_addqh_r_ph, mips_addqh_r_w, mips_addqh_w, mips_adds_a_b, mips_adds_a_d, mips_adds_a_h, mips_adds_a_w, mips_adds_s_b, mips_adds_s_d, mips_adds_s_h, mips_adds_s_w, mips_adds_u_b, mips_adds_u_d, mips_adds_u_h, mips_adds_u_w, mips_addsc, mips_addu_ph, mips_addu_qb, mips_addu_s_ph, mips_addu_s_qb, mips_adduh_qb, mips_adduh_r_qb, mips_addv_b, mips_addv_d, mips_addv_h, mips_addv_w, mips_addvi_b, mips_addvi_d, mips_addvi_h, mips_addvi_w, mips_addwc, mips_and_v, mips_andi_b, mips_append, mips_asub_s_b, mips_asub_s_d, mips_asub_s_h, mips_asub_s_w, mips_asub_u_b, mips_asub_u_d, mips_asub_u_h, mips_asub_u_w, mips_ave_s_b, mips_ave_s_d, mips_ave_s_h, mips_ave_s_w, mips_ave_u_b, mips_ave_u_d, mips_ave_u_h, mips_ave_u_w, mips_aver_s_b, mips_aver_s_d, mips_aver_s_h, mips_aver_s_w, mips_aver_u_b, mips_aver_u_d, mips_aver_u_h, mips_aver_u_w, mips_balign, mips_bclr_b, mips_bclr_d, mips_bclr_h, mips_bclr_w, mips_bclri_b, mips_bclri_d, mips_bclri_h, mips_bclri_w, mips_binsl_b, mips_binsl_d, mips_binsl_h, mips_binsl_w, mips_binsli_b, mips_binsli_d, mips_binsli_h, mips_binsli_w, mips_binsr_b, mips_binsr_d, mips_binsr_h, mips_binsr_w, mips_binsri_b, mips_binsri_d, mips_binsri_h, mips_binsri_w, mips_bitrev, mips_bmnz_v, mips_bmnzi_b, mips_bmz_v, mips_bmzi_b, mips_bneg_b, mips_bneg_d, mips_bneg_h, mips_bneg_w, mips_bnegi_b, mips_bnegi_d, mips_bnegi_h, mips_bnegi_w, mips_bnz_b, mips_bnz_d, mips_bnz_h, mips_bnz_v, mips_bnz_w, mips_bposge32, mips_bsel_v, mips_bseli_b, mips_bset_b, mips_bset_d, mips_bset_h, mips_bset_w, mips_bseti_b, mips_bseti_d, mips_bseti_h, mips_bseti_w, mips_bz_b, mips_bz_d, mips_bz_h, mips_bz_v, mips_bz_w, mips_ceq_b, mips_ceq_d, mips_ceq_h, mips_ceq_w, mips_ceqi_b, mips_ceqi_d, mips_ceqi_h, mips_ceqi_w, mips_cfcmsa, mips_cle_s_b, mips_cle_s_d, mips_cle_s_h, mips_cle_s_w, mips_cle_u_b, mips_cle_u_d, mips_cle_u_h, mips_cle_u_w, mips_clei_s_b, mips_clei_s_d, mips_clei_s_h, mips_clei_s_w, mips_clei_u_b, mips_clei_u_d, mips_clei_u_h, mips_clei_u_w, mips_clt_s_b, mips_clt_s_d, mips_clt_s_h, mips_clt_s_w, mips_clt_u_b, mips_clt_u_d, mips_clt_u_h, mips_clt_u_w, mips_clti_s_b, mips_clti_s_d, mips_clti_s_h, mips_clti_s_w, mips_clti_u_b, mips_clti_u_d, mips_clti_u_h, mips_clti_u_w, mips_cmp_eq_ph, mips_cmp_le_ph, mips_cmp_lt_ph, mips_cmpgdu_eq_qb, mips_cmpgdu_le_qb, mips_cmpgdu_lt_qb, mips_cmpgu_eq_qb, mips_cmpgu_le_qb, mips_cmpgu_lt_qb, mips_cmpu_eq_qb, mips_cmpu_le_qb, mips_cmpu_lt_qb, mips_copy_s_b, mips_copy_s_d, mips_copy_s_h, mips_copy_s_w, mips_copy_u_b, mips_copy_u_d, mips_copy_u_h, mips_copy_u_w, mips_ctcmsa, mips_div_s_b, mips_div_s_d, mips_div_s_h, mips_div_s_w, mips_div_u_b, mips_div_u_d, mips_div_u_h, mips_div_u_w, mips_dotp_s_d, mips_dotp_s_h, mips_dotp_s_w, mips_dotp_u_d, mips_dotp_u_h, mips_dotp_u_w, mips_dpa_w_ph, mips_dpadd_s_d, mips_dpadd_s_h, mips_dpadd_s_w, mips_dpadd_u_d, mips_dpadd_u_h, mips_dpadd_u_w, mips_dpaq_s_w_ph, mips_dpaq_sa_l_w, mips_dpaqx_s_w_ph, mips_dpaqx_sa_w_ph, mips_dpau_h_qbl, mips_dpau_h_qbr, mips_dpax_w_ph, mips_dps_w_ph, mips_dpsq_s_w_ph, mips_dpsq_sa_l_w, mips_dpsqx_s_w_ph, mips_dpsqx_sa_w_ph, mips_dpsu_h_qbl, mips_dpsu_h_qbr, mips_dpsub_s_d, mips_dpsub_s_h, mips_dpsub_s_w, mips_dpsub_u_d, mips_dpsub_u_h, mips_dpsub_u_w, mips_dpsx_w_ph, mips_extp, mips_extpdp, mips_extr_r_w, mips_extr_rs_w, mips_extr_s_h, mips_extr_w, mips_fadd_d, mips_fadd_w, mips_fcaf_d, mips_fcaf_w, mips_fceq_d, mips_fceq_w, mips_fclass_d, mips_fclass_w, mips_fcle_d, mips_fcle_w, mips_fclt_d, mips_fclt_w, mips_fcne_d, mips_fcne_w, mips_fcor_d, mips_fcor_w, mips_fcueq_d, mips_fcueq_w, mips_fcule_d, mips_fcule_w, mips_fcult_d, mips_fcult_w, mips_fcun_d, mips_fcun_w, mips_fcune_d, mips_fcune_w, mips_fdiv_d, mips_fdiv_w, mips_fexdo_h, mips_fexdo_w, mips_fexp2_d, mips_fexp2_w, mips_fexupl_d, mips_fexupl_w, mips_fexupr_d, mips_fexupr_w, mips_ffint_s_d, mips_ffint_s_w, mips_ffint_u_d, mips_ffint_u_w, mips_ffql_d, mips_ffql_w, mips_ffqr_d, mips_ffqr_w, mips_fill_b, mips_fill_d, mips_fill_h, mips_fill_w, mips_flog2_d, mips_flog2_w, mips_fmadd_d, mips_fmadd_w, mips_fmax_a_d, mips_fmax_a_w, mips_fmax_d, mips_fmax_w, mips_fmin_a_d, mips_fmin_a_w, mips_fmin_d, mips_fmin_w, mips_fmsub_d, mips_fmsub_w, mips_fmul_d, mips_fmul_w, mips_frcp_d, mips_frcp_w, mips_frint_d, mips_frint_w, mips_frsqrt_d, mips_frsqrt_w, mips_fsaf_d, mips_fsaf_w, mips_fseq_d, mips_fseq_w, mips_fsle_d, mips_fsle_w, mips_fslt_d, mips_fslt_w, mips_fsne_d, mips_fsne_w, mips_fsor_d, mips_fsor_w, mips_fsqrt_d, mips_fsqrt_w, mips_fsub_d, mips_fsub_w, mips_fsueq_d, mips_fsueq_w, mips_fsule_d, mips_fsule_w, mips_fsult_d, mips_fsult_w, mips_fsun_d, mips_fsun_w, mips_fsune_d, mips_fsune_w, mips_ftint_s_d, mips_ftint_s_w, mips_ftint_u_d, mips_ftint_u_w, mips_ftq_h, mips_ftq_w, mips_ftrunc_s_d, mips_ftrunc_s_w, mips_ftrunc_u_d, mips_ftrunc_u_w, mips_hadd_s_d, mips_hadd_s_h, mips_hadd_s_w, mips_hadd_u_d, mips_hadd_u_h, mips_hadd_u_w, mips_hsub_s_d, mips_hsub_s_h, mips_hsub_s_w, mips_hsub_u_d, mips_hsub_u_h, mips_hsub_u_w, mips_ilvev_b, mips_ilvev_d, mips_ilvev_h, mips_ilvev_w, mips_ilvl_b, mips_ilvl_d, mips_ilvl_h, mips_ilvl_w, mips_ilvod_b, mips_ilvod_d, mips_ilvod_h, mips_ilvod_w, mips_ilvr_b, mips_ilvr_d, mips_ilvr_h, mips_ilvr_w, mips_insert_b, mips_insert_d, mips_insert_h, mips_insert_w, mips_insv, mips_insve_b, mips_insve_d, mips_insve_h, mips_insve_w, mips_lbux, mips_ld_b, mips_ld_d, mips_ld_h, mips_ld_w, mips_ldi_b, mips_ldi_d, mips_ldi_h, mips_ldi_w, mips_ldx_b, mips_ldx_d, mips_ldx_h, mips_ldx_w, mips_lhx, mips_lwx, mips_madd, mips_madd_q_h, mips_madd_q_w, mips_maddr_q_h, mips_maddr_q_w, mips_maddu, mips_maddv_b, mips_maddv_d, mips_maddv_h, mips_maddv_w, mips_maq_s_w_phl, mips_maq_s_w_phr, mips_maq_sa_w_phl, mips_maq_sa_w_phr, mips_max_a_b, mips_max_a_d, mips_max_a_h, mips_max_a_w, mips_max_s_b, mips_max_s_d, mips_max_s_h, mips_max_s_w, mips_max_u_b, mips_max_u_d, mips_max_u_h, mips_max_u_w, mips_maxi_s_b, mips_maxi_s_d, mips_maxi_s_h, mips_maxi_s_w, mips_maxi_u_b, mips_maxi_u_d, mips_maxi_u_h, mips_maxi_u_w, mips_min_a_b, mips_min_a_d, mips_min_a_h, mips_min_a_w, mips_min_s_b, mips_min_s_d, mips_min_s_h, mips_min_s_w, mips_min_u_b, mips_min_u_d, mips_min_u_h, mips_min_u_w, mips_mini_s_b, mips_mini_s_d, mips_mini_s_h, mips_mini_s_w, mips_mini_u_b, mips_mini_u_d, mips_mini_u_h, mips_mini_u_w, mips_mod_s_b, mips_mod_s_d, mips_mod_s_h, mips_mod_s_w, mips_mod_u_b, mips_mod_u_d, mips_mod_u_h, mips_mod_u_w, mips_modsub, mips_move_v, mips_msub, mips_msub_q_h, mips_msub_q_w, mips_msubr_q_h, mips_msubr_q_w, mips_msubu, mips_msubv_b, mips_msubv_d, mips_msubv_h, mips_msubv_w, mips_mthlip, mips_mul_ph, mips_mul_q_h, mips_mul_q_w, mips_mul_s_ph, mips_muleq_s_w_phl, mips_muleq_s_w_phr, mips_muleu_s_ph_qbl, mips_muleu_s_ph_qbr, mips_mulq_rs_ph, mips_mulq_rs_w, mips_mulq_s_ph, mips_mulq_s_w, mips_mulr_q_h, mips_mulr_q_w, mips_mulsa_w_ph, mips_mulsaq_s_w_ph, mips_mult, mips_multu, mips_mulv_b, mips_mulv_d, mips_mulv_h, mips_mulv_w, mips_nloc_b, mips_nloc_d, mips_nloc_h, mips_nloc_w, mips_nlzc_b, mips_nlzc_d, mips_nlzc_h, mips_nlzc_w, mips_nor_v, mips_nori_b, mips_or_v, mips_ori_b, mips_packrl_ph, mips_pckev_b, mips_pckev_d, mips_pckev_h, mips_pckev_w, mips_pckod_b, mips_pckod_d, mips_pckod_h, mips_pckod_w, mips_pcnt_b, mips_pcnt_d, mips_pcnt_h, mips_pcnt_w, mips_pick_ph, mips_pick_qb, mips_preceq_w_phl, mips_preceq_w_phr, mips_precequ_ph_qbl, mips_precequ_ph_qbla, mips_precequ_ph_qbr, mips_precequ_ph_qbra, mips_preceu_ph_qbl, mips_preceu_ph_qbla, mips_preceu_ph_qbr, mips_preceu_ph_qbra, mips_precr_qb_ph, mips_precr_sra_ph_w, mips_precr_sra_r_ph_w, mips_precrq_ph_w, mips_precrq_qb_ph, mips_precrq_rs_ph_w, mips_precrqu_s_qb_ph, mips_prepend, mips_raddu_w_qb, mips_rddsp, mips_repl_ph, mips_repl_qb, mips_sat_s_b, mips_sat_s_d, mips_sat_s_h, mips_sat_s_w, mips_sat_u_b, mips_sat_u_d, mips_sat_u_h, mips_sat_u_w, mips_shf_b, mips_shf_h, mips_shf_w, mips_shilo, mips_shll_ph, mips_shll_qb, mips_shll_s_ph, mips_shll_s_w, mips_shra_ph, mips_shra_qb, mips_shra_r_ph, mips_shra_r_qb, mips_shra_r_w, mips_shrl_ph, mips_shrl_qb, mips_sld_b, mips_sld_d, mips_sld_h, mips_sld_w, mips_sldi_b, mips_sldi_d, mips_sldi_h, mips_sldi_w, mips_sll_b, mips_sll_d, mips_sll_h, mips_sll_w, mips_slli_b, mips_slli_d, mips_slli_h, mips_slli_w, mips_splat_b, mips_splat_d, mips_splat_h, mips_splat_w, mips_splati_b, mips_splati_d, mips_splati_h, mips_splati_w, mips_sra_b, mips_sra_d, mips_sra_h, mips_sra_w, mips_srai_b, mips_srai_d, mips_srai_h, mips_srai_w, mips_srar_b, mips_srar_d, mips_srar_h, mips_srar_w, mips_srari_b, mips_srari_d, mips_srari_h, mips_srari_w, mips_srl_b, mips_srl_d, mips_srl_h, mips_srl_w, mips_srli_b, mips_srli_d, mips_srli_h, mips_srli_w, mips_srlr_b, mips_srlr_d, mips_srlr_h, mips_srlr_w, mips_srlri_b, mips_srlri_d, mips_srlri_h, mips_srlri_w, mips_st_b, mips_st_d, mips_st_h, mips_st_w, mips_stx_b, mips_stx_d, mips_stx_h, mips_stx_w, mips_subq_ph, mips_subq_s_ph, mips_subq_s_w, mips_subqh_ph, mips_subqh_r_ph, mips_subqh_r_w, mips_subqh_w, mips_subs_s_b, mips_subs_s_d, mips_subs_s_h, mips_subs_s_w, mips_subs_u_b, mips_subs_u_d, mips_subs_u_h, mips_subs_u_w, mips_subsus_u_b, mips_subsus_u_d, mips_subsus_u_h, mips_subsus_u_w, mips_subsuu_s_b, mips_subsuu_s_d, mips_subsuu_s_h, mips_subsuu_s_w, mips_subu_ph, mips_subu_qb, mips_subu_s_ph, mips_subu_s_qb, mips_subuh_qb, mips_subuh_r_qb, mips_subv_b, mips_subv_d, mips_subv_h, mips_subv_w, mips_subvi_b, mips_subvi_d, mips_subvi_h, mips_subvi_w, mips_vshf_b, mips_vshf_d, mips_vshf_h, mips_vshf_w, mips_wrdsp, mips_xor_v, mips_xori_b, nearbyint, nvvm_abs_i, nvvm_abs_ll, nvvm_add_rm_d, nvvm_add_rm_f, nvvm_add_rm_ftz_f, nvvm_add_rn_d, nvvm_add_rn_f, nvvm_add_rn_ftz_f, nvvm_add_rp_d, nvvm_add_rp_f, nvvm_add_rp_ftz_f, nvvm_add_rz_d, nvvm_add_rz_f, nvvm_add_rz_ftz_f, nvvm_atomic_load_add_f32, nvvm_atomic_load_dec_32, nvvm_atomic_load_inc_32, nvvm_barrier0, nvvm_barrier0_and, nvvm_barrier0_or, nvvm_barrier0_popc, nvvm_bitcast_d2ll, nvvm_bitcast_f2i, nvvm_bitcast_i2f, nvvm_bitcast_ll2d, nvvm_brev32, nvvm_brev64, nvvm_ceil_d, nvvm_ceil_f, nvvm_ceil_ftz_f, nvvm_clz_i, nvvm_clz_ll, nvvm_compiler_error, nvvm_compiler_warn, nvvm_cos_approx_f, nvvm_cos_approx_ftz_f, nvvm_d2f_rm, nvvm_d2f_rm_ftz, nvvm_d2f_rn, nvvm_d2f_rn_ftz, nvvm_d2f_rp, nvvm_d2f_rp_ftz, nvvm_d2f_rz, nvvm_d2f_rz_ftz, nvvm_d2i_hi, nvvm_d2i_lo, nvvm_d2i_rm, nvvm_d2i_rn, nvvm_d2i_rp, nvvm_d2i_rz, nvvm_d2ll_rm, nvvm_d2ll_rn, nvvm_d2ll_rp, nvvm_d2ll_rz, nvvm_d2ui_rm, nvvm_d2ui_rn, nvvm_d2ui_rp, nvvm_d2ui_rz, nvvm_d2ull_rm, nvvm_d2ull_rn, nvvm_d2ull_rp, nvvm_d2ull_rz, nvvm_div_approx_f, nvvm_div_approx_ftz_f, nvvm_div_rm_d, nvvm_div_rm_f, nvvm_div_rm_ftz_f, nvvm_div_rn_d, nvvm_div_rn_f, nvvm_div_rn_ftz_f, nvvm_div_rp_d, nvvm_div_rp_f, nvvm_div_rp_ftz_f, nvvm_div_rz_d, nvvm_div_rz_f, nvvm_div_rz_ftz_f, nvvm_ex2_approx_d, nvvm_ex2_approx_f, nvvm_ex2_approx_ftz_f, nvvm_f2h_rn, nvvm_f2h_rn_ftz, nvvm_f2i_rm, nvvm_f2i_rm_ftz, nvvm_f2i_rn, nvvm_f2i_rn_ftz, nvvm_f2i_rp, nvvm_f2i_rp_ftz, nvvm_f2i_rz, nvvm_f2i_rz_ftz, nvvm_f2ll_rm, nvvm_f2ll_rm_ftz, nvvm_f2ll_rn, nvvm_f2ll_rn_ftz, nvvm_f2ll_rp, nvvm_f2ll_rp_ftz, nvvm_f2ll_rz, nvvm_f2ll_rz_ftz, nvvm_f2ui_rm, nvvm_f2ui_rm_ftz, nvvm_f2ui_rn, nvvm_f2ui_rn_ftz, nvvm_f2ui_rp, nvvm_f2ui_rp_ftz, nvvm_f2ui_rz, nvvm_f2ui_rz_ftz, nvvm_f2ull_rm, nvvm_f2ull_rm_ftz, nvvm_f2ull_rn, nvvm_f2ull_rn_ftz, nvvm_f2ull_rp, nvvm_f2ull_rp_ftz, nvvm_f2ull_rz, nvvm_f2ull_rz_ftz, nvvm_fabs_d, nvvm_fabs_f, nvvm_fabs_ftz_f, nvvm_floor_d, nvvm_floor_f, nvvm_floor_ftz_f, nvvm_fma_rm_d, nvvm_fma_rm_f, nvvm_fma_rm_ftz_f, nvvm_fma_rn_d, nvvm_fma_rn_f, nvvm_fma_rn_ftz_f, nvvm_fma_rp_d, nvvm_fma_rp_f, nvvm_fma_rp_ftz_f, nvvm_fma_rz_d, nvvm_fma_rz_f, nvvm_fma_rz_ftz_f, nvvm_fmax_d, nvvm_fmax_f, nvvm_fmax_ftz_f, nvvm_fmin_d, nvvm_fmin_f, nvvm_fmin_ftz_f, nvvm_h2f, nvvm_i2d_rm, nvvm_i2d_rn, nvvm_i2d_rp, nvvm_i2d_rz, nvvm_i2f_rm, nvvm_i2f_rn, nvvm_i2f_rp, nvvm_i2f_rz, nvvm_ldg_global_f, nvvm_ldg_global_i, nvvm_ldg_global_p, nvvm_ldu_global_f, nvvm_ldu_global_i, nvvm_ldu_global_p, nvvm_lg2_approx_d, nvvm_lg2_approx_f, nvvm_lg2_approx_ftz_f, nvvm_ll2d_rm, nvvm_ll2d_rn, nvvm_ll2d_rp, nvvm_ll2d_rz, nvvm_ll2f_rm, nvvm_ll2f_rn, nvvm_ll2f_rp, nvvm_ll2f_rz, nvvm_lohi_i2d, nvvm_max_i, nvvm_max_ll, nvvm_max_ui, nvvm_max_ull, nvvm_membar_cta, nvvm_membar_gl, nvvm_membar_sys, nvvm_min_i, nvvm_min_ll, nvvm_min_ui, nvvm_min_ull, nvvm_move_double, nvvm_move_float, nvvm_move_i16, nvvm_move_i32, nvvm_move_i64, nvvm_move_ptr, nvvm_mul24_i, nvvm_mul24_ui, nvvm_mul_rm_d, nvvm_mul_rm_f, nvvm_mul_rm_ftz_f, nvvm_mul_rn_d, nvvm_mul_rn_f, nvvm_mul_rn_ftz_f, nvvm_mul_rp_d, nvvm_mul_rp_f, nvvm_mul_rp_ftz_f, nvvm_mul_rz_d, nvvm_mul_rz_f, nvvm_mul_rz_ftz_f, nvvm_mulhi_i, nvvm_mulhi_ll, nvvm_mulhi_ui, nvvm_mulhi_ull, nvvm_popc_i, nvvm_popc_ll, nvvm_prmt, nvvm_ptr_constant_to_gen, nvvm_ptr_gen_to_constant, nvvm_ptr_gen_to_global, nvvm_ptr_gen_to_local, nvvm_ptr_gen_to_param, nvvm_ptr_gen_to_shared, nvvm_ptr_global_to_gen, nvvm_ptr_local_to_gen, nvvm_ptr_shared_to_gen, nvvm_rcp_approx_ftz_d, nvvm_rcp_rm_d, nvvm_rcp_rm_f, nvvm_rcp_rm_ftz_f, nvvm_rcp_rn_d, nvvm_rcp_rn_f, nvvm_rcp_rn_ftz_f, nvvm_rcp_rp_d, nvvm_rcp_rp_f, nvvm_rcp_rp_ftz_f, nvvm_rcp_rz_d, nvvm_rcp_rz_f, nvvm_rcp_rz_ftz_f, nvvm_read_ptx_sreg_ctaid_x, nvvm_read_ptx_sreg_ctaid_y, nvvm_read_ptx_sreg_ctaid_z, nvvm_read_ptx_sreg_nctaid_x, nvvm_read_ptx_sreg_nctaid_y, nvvm_read_ptx_sreg_nctaid_z, nvvm_read_ptx_sreg_ntid_x, nvvm_read_ptx_sreg_ntid_y, nvvm_read_ptx_sreg_ntid_z, nvvm_read_ptx_sreg_tid_x, nvvm_read_ptx_sreg_tid_y, nvvm_read_ptx_sreg_tid_z, nvvm_read_ptx_sreg_warpsize, nvvm_round_d, nvvm_round_f, nvvm_round_ftz_f, nvvm_rsqrt_approx_d, nvvm_rsqrt_approx_f, nvvm_rsqrt_approx_ftz_f, nvvm_sad_i, nvvm_sad_ui, nvvm_saturate_d, nvvm_saturate_f, nvvm_saturate_ftz_f, nvvm_sin_approx_f, nvvm_sin_approx_ftz_f, nvvm_sqrt_approx_f, nvvm_sqrt_approx_ftz_f, nvvm_sqrt_f, nvvm_sqrt_rm_d, nvvm_sqrt_rm_f, nvvm_sqrt_rm_ftz_f, nvvm_sqrt_rn_d, nvvm_sqrt_rn_f, nvvm_sqrt_rn_ftz_f, nvvm_sqrt_rp_d, nvvm_sqrt_rp_f, nvvm_sqrt_rp_ftz_f, nvvm_sqrt_rz_d, nvvm_sqrt_rz_f, nvvm_sqrt_rz_ftz_f, nvvm_trunc_d, nvvm_trunc_f, nvvm_trunc_ftz_f, nvvm_ui2d_rm, nvvm_ui2d_rn, nvvm_ui2d_rp, nvvm_ui2d_rz, nvvm_ui2f_rm, nvvm_ui2f_rn, nvvm_ui2f_rp, nvvm_ui2f_rz, nvvm_ull2d_rm, nvvm_ull2d_rn, nvvm_ull2d_rp, nvvm_ull2d_rz, nvvm_ull2f_rm, nvvm_ull2f_rn, nvvm_ull2f_rp, nvvm_ull2f_rz, objectsize, pcmarker, pow, powi, ppc_altivec_dss, ppc_altivec_dssall, ppc_altivec_dst, ppc_altivec_dstst, ppc_altivec_dststt, ppc_altivec_dstt, ppc_altivec_lvebx, ppc_altivec_lvehx, ppc_altivec_lvewx, ppc_altivec_lvsl, ppc_altivec_lvsr, ppc_altivec_lvx, ppc_altivec_lvxl, ppc_altivec_mfvscr, ppc_altivec_mtvscr, ppc_altivec_stvebx, ppc_altivec_stvehx, ppc_altivec_stvewx, ppc_altivec_stvx, ppc_altivec_stvxl, ppc_altivec_vaddcuw, ppc_altivec_vaddsbs, ppc_altivec_vaddshs, ppc_altivec_vaddsws, ppc_altivec_vaddubs, ppc_altivec_vadduhs, ppc_altivec_vadduws, ppc_altivec_vavgsb, ppc_altivec_vavgsh, ppc_altivec_vavgsw, ppc_altivec_vavgub, ppc_altivec_vavguh, ppc_altivec_vavguw, ppc_altivec_vcfsx, ppc_altivec_vcfux, ppc_altivec_vcmpbfp, ppc_altivec_vcmpbfp_p, ppc_altivec_vcmpeqfp, ppc_altivec_vcmpeqfp_p, ppc_altivec_vcmpequb, ppc_altivec_vcmpequb_p, ppc_altivec_vcmpequh, ppc_altivec_vcmpequh_p, ppc_altivec_vcmpequw, ppc_altivec_vcmpequw_p, ppc_altivec_vcmpgefp, ppc_altivec_vcmpgefp_p, ppc_altivec_vcmpgtfp, ppc_altivec_vcmpgtfp_p, ppc_altivec_vcmpgtsb, ppc_altivec_vcmpgtsb_p, ppc_altivec_vcmpgtsh, ppc_altivec_vcmpgtsh_p, ppc_altivec_vcmpgtsw, ppc_altivec_vcmpgtsw_p, ppc_altivec_vcmpgtub, ppc_altivec_vcmpgtub_p, ppc_altivec_vcmpgtuh, ppc_altivec_vcmpgtuh_p, ppc_altivec_vcmpgtuw, ppc_altivec_vcmpgtuw_p, ppc_altivec_vctsxs, ppc_altivec_vctuxs, ppc_altivec_vexptefp, ppc_altivec_vlogefp, ppc_altivec_vmaddfp, ppc_altivec_vmaxfp, ppc_altivec_vmaxsb, ppc_altivec_vmaxsh, ppc_altivec_vmaxsw, ppc_altivec_vmaxub, ppc_altivec_vmaxuh, ppc_altivec_vmaxuw, ppc_altivec_vmhaddshs, ppc_altivec_vmhraddshs, ppc_altivec_vminfp, ppc_altivec_vminsb, ppc_altivec_vminsh, ppc_altivec_vminsw, ppc_altivec_vminub, ppc_altivec_vminuh, ppc_altivec_vminuw, ppc_altivec_vmladduhm, ppc_altivec_vmsummbm, ppc_altivec_vmsumshm, ppc_altivec_vmsumshs, ppc_altivec_vmsumubm, ppc_altivec_vmsumuhm, ppc_altivec_vmsumuhs, ppc_altivec_vmulesb, ppc_altivec_vmulesh, ppc_altivec_vmuleub, ppc_altivec_vmuleuh, ppc_altivec_vmulosb, ppc_altivec_vmulosh, ppc_altivec_vmuloub, ppc_altivec_vmulouh, ppc_altivec_vnmsubfp, ppc_altivec_vperm, ppc_altivec_vpkpx, ppc_altivec_vpkshss, ppc_altivec_vpkshus, ppc_altivec_vpkswss, ppc_altivec_vpkswus, ppc_altivec_vpkuhus, ppc_altivec_vpkuwus, ppc_altivec_vrefp, ppc_altivec_vrfim, ppc_altivec_vrfin, ppc_altivec_vrfip, ppc_altivec_vrfiz, ppc_altivec_vrlb, ppc_altivec_vrlh, ppc_altivec_vrlw, ppc_altivec_vrsqrtefp, ppc_altivec_vsel, ppc_altivec_vsl, ppc_altivec_vslb, ppc_altivec_vslh, ppc_altivec_vslo, ppc_altivec_vslw, ppc_altivec_vsr, ppc_altivec_vsrab, ppc_altivec_vsrah, ppc_altivec_vsraw, ppc_altivec_vsrb, ppc_altivec_vsrh, ppc_altivec_vsro, ppc_altivec_vsrw, ppc_altivec_vsubcuw, ppc_altivec_vsubsbs, ppc_altivec_vsubshs, ppc_altivec_vsubsws, ppc_altivec_vsububs, ppc_altivec_vsubuhs, ppc_altivec_vsubuws, ppc_altivec_vsum2sws, ppc_altivec_vsum4sbs, ppc_altivec_vsum4shs, ppc_altivec_vsum4ubs, ppc_altivec_vsumsws, ppc_altivec_vupkhpx, ppc_altivec_vupkhsb, ppc_altivec_vupkhsh, ppc_altivec_vupklpx, ppc_altivec_vupklsb, ppc_altivec_vupklsh, ppc_dcba, ppc_dcbf, ppc_dcbi, ppc_dcbst, ppc_dcbt, ppc_dcbtst, ppc_dcbz, ppc_dcbzl, ppc_is_decremented_ctr_nonzero, ppc_mtctr, ppc_sync, prefetch, ptr_annotation, ptx_bar_sync, ptx_read_clock, ptx_read_clock64, ptx_read_ctaid_w, ptx_read_ctaid_x, ptx_read_ctaid_y, ptx_read_ctaid_z, ptx_read_gridid, ptx_read_laneid, ptx_read_lanemask_eq, ptx_read_lanemask_ge, ptx_read_lanemask_gt, ptx_read_lanemask_le, ptx_read_lanemask_lt, ptx_read_nctaid_w, ptx_read_nctaid_x, ptx_read_nctaid_y, ptx_read_nctaid_z, ptx_read_nsmid, ptx_read_ntid_w, ptx_read_ntid_x, ptx_read_ntid_y, ptx_read_ntid_z, ptx_read_nwarpid, ptx_read_pm0, ptx_read_pm1, ptx_read_pm2, ptx_read_pm3, ptx_read_smid, ptx_read_tid_w, ptx_read_tid_x, ptx_read_tid_y, ptx_read_tid_z, ptx_read_warpid, r600_read_global_size_x, r600_read_global_size_y, r600_read_global_size_z, r600_read_local_size_x, r600_read_local_size_y, r600_read_local_size_z, r600_read_ngroups_x, r600_read_ngroups_y, r600_read_ngroups_z, r600_read_tgid_x, r600_read_tgid_y, r600_read_tgid_z, r600_read_tidig_x, r600_read_tidig_y, r600_read_tidig_z, readcyclecounter, returnaddress, rint, round, sadd_with_overflow, setjmp, siglongjmp, sigsetjmp, sin, smul_with_overflow, sqrt, ssub_with_overflow, stackprotector, stackprotectorcheck, stackrestore, stacksave, trap, trunc, uadd_with_overflow, umul_with_overflow, usub_with_overflow, vacopy, vaend, var_annotation, vastart, x86_3dnow_pavgusb, x86_3dnow_pf2id, x86_3dnow_pfacc, x86_3dnow_pfadd, x86_3dnow_pfcmpeq, x86_3dnow_pfcmpge, x86_3dnow_pfcmpgt, x86_3dnow_pfmax, x86_3dnow_pfmin, x86_3dnow_pfmul, x86_3dnow_pfrcp, x86_3dnow_pfrcpit1, x86_3dnow_pfrcpit2, x86_3dnow_pfrsqit1, x86_3dnow_pfrsqrt, x86_3dnow_pfsub, x86_3dnow_pfsubr, x86_3dnow_pi2fd, x86_3dnow_pmulhrw, x86_3dnowa_pf2iw, x86_3dnowa_pfnacc, x86_3dnowa_pfpnacc, x86_3dnowa_pi2fw, x86_3dnowa_pswapd, x86_aesni_aesdec, x86_aesni_aesdeclast, x86_aesni_aesenc, x86_aesni_aesenclast, x86_aesni_aesimc, x86_aesni_aeskeygenassist, x86_avx2_gather_d_d, x86_avx2_gather_d_d_256, x86_avx2_gather_d_pd, x86_avx2_gather_d_pd_256, x86_avx2_gather_d_ps, x86_avx2_gather_d_ps_256, x86_avx2_gather_d_q, x86_avx2_gather_d_q_256, x86_avx2_gather_q_d, x86_avx2_gather_q_d_256, x86_avx2_gather_q_pd, x86_avx2_gather_q_pd_256, x86_avx2_gather_q_ps, x86_avx2_gather_q_ps_256, x86_avx2_gather_q_q, x86_avx2_gather_q_q_256, x86_avx2_maskload_d, x86_avx2_maskload_d_256, x86_avx2_maskload_q, x86_avx2_maskload_q_256, x86_avx2_maskstore_d, x86_avx2_maskstore_d_256, x86_avx2_maskstore_q, x86_avx2_maskstore_q_256, x86_avx2_movntdqa, x86_avx2_mpsadbw, x86_avx2_pabs_b, x86_avx2_pabs_d, x86_avx2_pabs_w, x86_avx2_packssdw, x86_avx2_packsswb, x86_avx2_packusdw, x86_avx2_packuswb, x86_avx2_padds_b, x86_avx2_padds_w, x86_avx2_paddus_b, x86_avx2_paddus_w, x86_avx2_pavg_b, x86_avx2_pavg_w, x86_avx2_pblendd_128, x86_avx2_pblendd_256, x86_avx2_pblendvb, x86_avx2_pblendw, x86_avx2_pbroadcastb_128, x86_avx2_pbroadcastb_256, x86_avx2_pbroadcastd_128, x86_avx2_pbroadcastd_256, x86_avx2_pbroadcastq_128, x86_avx2_pbroadcastq_256, x86_avx2_pbroadcastw_128, x86_avx2_pbroadcastw_256, x86_avx2_permd, x86_avx2_permps, x86_avx2_phadd_d, x86_avx2_phadd_sw, x86_avx2_phadd_w, x86_avx2_phsub_d, x86_avx2_phsub_sw, x86_avx2_phsub_w, x86_avx2_pmadd_ub_sw, x86_avx2_pmadd_wd, x86_avx2_pmaxs_b, x86_avx2_pmaxs_d, x86_avx2_pmaxs_w, x86_avx2_pmaxu_b, x86_avx2_pmaxu_d, x86_avx2_pmaxu_w, x86_avx2_pmins_b, x86_avx2_pmins_d, x86_avx2_pmins_w, x86_avx2_pminu_b, x86_avx2_pminu_d, x86_avx2_pminu_w, x86_avx2_pmovmskb, x86_avx2_pmovsxbd, x86_avx2_pmovsxbq, x86_avx2_pmovsxbw, x86_avx2_pmovsxdq, x86_avx2_pmovsxwd, x86_avx2_pmovsxwq, x86_avx2_pmovzxbd, x86_avx2_pmovzxbq, x86_avx2_pmovzxbw, x86_avx2_pmovzxdq, x86_avx2_pmovzxwd, x86_avx2_pmovzxwq, x86_avx2_pmul_dq, x86_avx2_pmul_hr_sw, x86_avx2_pmulh_w, x86_avx2_pmulhu_w, x86_avx2_pmulu_dq, x86_avx2_psad_bw, x86_avx2_pshuf_b, x86_avx2_psign_b, x86_avx2_psign_d, x86_avx2_psign_w, x86_avx2_psll_d, x86_avx2_psll_dq, x86_avx2_psll_dq_bs, x86_avx2_psll_q, x86_avx2_psll_w, x86_avx2_pslli_d, x86_avx2_pslli_q, x86_avx2_pslli_w, x86_avx2_psllv_d, x86_avx2_psllv_d_256, x86_avx2_psllv_q, x86_avx2_psllv_q_256, x86_avx2_psra_d, x86_avx2_psra_w, x86_avx2_psrai_d, x86_avx2_psrai_w, x86_avx2_psrav_d, x86_avx2_psrav_d_256, x86_avx2_psrl_d, x86_avx2_psrl_dq, x86_avx2_psrl_dq_bs, x86_avx2_psrl_q, x86_avx2_psrl_w, x86_avx2_psrli_d, x86_avx2_psrli_q, x86_avx2_psrli_w, x86_avx2_psrlv_d, x86_avx2_psrlv_d_256, x86_avx2_psrlv_q, x86_avx2_psrlv_q_256, x86_avx2_psubs_b, x86_avx2_psubs_w, x86_avx2_psubus_b, x86_avx2_psubus_w, x86_avx2_vbroadcast_sd_pd_256, x86_avx2_vbroadcast_ss_ps, x86_avx2_vbroadcast_ss_ps_256, x86_avx2_vbroadcasti128, x86_avx2_vextracti128, x86_avx2_vinserti128, x86_avx2_vperm2i128, x86_avx512_and_pi, x86_avx512_cmpeq_pi_512, x86_avx512_cvt_ps2dq_512, x86_avx512_cvtdq2_ps_512, x86_avx512_cvtsd2usi, x86_avx512_cvtsd2usi64, x86_avx512_cvtss2usi, x86_avx512_cvtss2usi64, x86_avx512_cvttsd2usi, x86_avx512_cvttsd2usi64, x86_avx512_cvttss2usi, x86_avx512_cvttss2usi64, x86_avx512_cvtusi2sd, x86_avx512_cvtusi2ss, x86_avx512_cvtusi642sd, x86_avx512_cvtusi642ss, x86_avx512_gather_dpd_512, x86_avx512_gather_dpd_mask_512, x86_avx512_gather_dpi_512, x86_avx512_gather_dpi_mask_512, x86_avx512_gather_dpq_512, x86_avx512_gather_dpq_mask_512, x86_avx512_gather_dps_512, x86_avx512_gather_dps_mask_512, x86_avx512_gather_qpd_512, x86_avx512_gather_qpd_mask_512, x86_avx512_gather_qpi_512, x86_avx512_gather_qpi_mask_512, x86_avx512_gather_qpq_512, x86_avx512_gather_qpq_mask_512, x86_avx512_gather_qps_512, x86_avx512_gather_qps_mask_512, x86_avx512_kortestc, x86_avx512_kortestz, x86_avx512_max_pd_512, x86_avx512_max_ps_512, x86_avx512_min_pd_512, x86_avx512_min_ps_512, x86_avx512_mskblend_ps_512, x86_avx512_pmovzxbd, x86_avx512_pmovzxbq, x86_avx512_pmovzxdq, x86_avx512_pmovzxwd, x86_avx512_pmovzxwq, x86_avx512_psll_dq, x86_avx512_psll_dq_bs, x86_avx512_psrl_dq, x86_avx512_psrl_dq_bs, x86_avx512_rcp14_pd_512, x86_avx512_rcp14_ps_512, x86_avx512_rcp14_sd, x86_avx512_rcp14_ss, x86_avx512_rndscale_pd_512, x86_avx512_rndscale_ps_512, x86_avx512_rndscale_sd, x86_avx512_rndscale_ss, x86_avx512_rsqrt14_pd_512, x86_avx512_rsqrt14_ps_512, x86_avx512_rsqrt14_sd, x86_avx512_rsqrt14_ss, x86_avx512_scatter_dpd_512, x86_avx512_scatter_dpd_mask_512, x86_avx512_scatter_dpi_512, x86_avx512_scatter_dpi_mask_512, x86_avx512_scatter_dpq_512, x86_avx512_scatter_dpq_mask_512, x86_avx512_scatter_dps_512, x86_avx512_scatter_dps_mask_512, x86_avx512_scatter_qpd_512, x86_avx512_scatter_qpd_mask_512, x86_avx512_scatter_qpi_512, x86_avx512_scatter_qpi_mask_512, x86_avx512_scatter_qpq_512, x86_avx512_scatter_qpq_mask_512, x86_avx512_scatter_qps_512, x86_avx512_scatter_qps_mask_512, x86_avx512_sqrt_pd_512, x86_avx512_sqrt_ps_512, x86_avx512_sqrt_sd, x86_avx512_sqrt_ss, x86_avx512_vbroadcast_sd_512, x86_avx512_vbroadcast_sd_pd_512, x86_avx512_vbroadcast_ss_512, x86_avx512_vbroadcast_ss_ps_512, x86_avx_addsub_pd_256, x86_avx_addsub_ps_256, x86_avx_blend_pd_256, x86_avx_blend_ps_256, x86_avx_blendv_pd_256, x86_avx_blendv_ps_256, x86_avx_cmp_pd_256, x86_avx_cmp_ps_256, x86_avx_cvt_pd2_ps_256, x86_avx_cvt_pd2dq_256, x86_avx_cvt_ps2_pd_256, x86_avx_cvt_ps2dq_256, x86_avx_cvtdq2_pd_256, x86_avx_cvtdq2_ps_256, x86_avx_cvtt_pd2dq_256, x86_avx_cvtt_ps2dq_256, x86_avx_dp_ps_256, x86_avx_hadd_pd_256, x86_avx_hadd_ps_256, x86_avx_hsub_pd_256, x86_avx_hsub_ps_256, x86_avx_ldu_dq_256, x86_avx_maskload_pd, x86_avx_maskload_pd_256, x86_avx_maskload_ps, x86_avx_maskload_ps_256, x86_avx_maskstore_pd, x86_avx_maskstore_pd_256, x86_avx_maskstore_ps, x86_avx_maskstore_ps_256, x86_avx_max_pd_256, x86_avx_max_ps_256, x86_avx_min_pd_256, x86_avx_min_ps_256, x86_avx_movmsk_pd_256, x86_avx_movmsk_ps_256, x86_avx_ptestc_256, x86_avx_ptestnzc_256, x86_avx_ptestz_256, x86_avx_rcp_ps_256, x86_avx_round_pd_256, x86_avx_round_ps_256, x86_avx_rsqrt_ps_256, x86_avx_sqrt_pd_256, x86_avx_sqrt_ps_256, x86_avx_storeu_dq_256, x86_avx_storeu_pd_256, x86_avx_storeu_ps_256, x86_avx_vbroadcast_sd_256, x86_avx_vbroadcast_ss, x86_avx_vbroadcast_ss_256, x86_avx_vbroadcastf128_pd_256, x86_avx_vbroadcastf128_ps_256, x86_avx_vextractf128_pd_256, x86_avx_vextractf128_ps_256, x86_avx_vextractf128_si_256, x86_avx_vinsertf128_pd_256, x86_avx_vinsertf128_ps_256, x86_avx_vinsertf128_si_256, x86_avx_vperm2f128_pd_256, x86_avx_vperm2f128_ps_256, x86_avx_vperm2f128_si_256, x86_avx_vpermilvar_pd, x86_avx_vpermilvar_pd_256, x86_avx_vpermilvar_ps, x86_avx_vpermilvar_ps_256, x86_avx_vtestc_pd, x86_avx_vtestc_pd_256, x86_avx_vtestc_ps, x86_avx_vtestc_ps_256, x86_avx_vtestnzc_pd, x86_avx_vtestnzc_pd_256, x86_avx_vtestnzc_ps, x86_avx_vtestnzc_ps_256, x86_avx_vtestz_pd, x86_avx_vtestz_pd_256, x86_avx_vtestz_ps, x86_avx_vtestz_ps_256, x86_avx_vzeroall, x86_avx_vzeroupper, x86_bmi_bextr_32, x86_bmi_bextr_64, x86_bmi_bzhi_32, x86_bmi_bzhi_64, x86_bmi_pdep_32, x86_bmi_pdep_64, x86_bmi_pext_32, x86_bmi_pext_64, x86_fma_vfmadd_pd, x86_fma_vfmadd_pd_256, x86_fma_vfmadd_ps, x86_fma_vfmadd_ps_256, x86_fma_vfmadd_sd, x86_fma_vfmadd_ss, x86_fma_vfmaddsub_pd, x86_fma_vfmaddsub_pd_256, x86_fma_vfmaddsub_ps, x86_fma_vfmaddsub_ps_256, x86_fma_vfmsub_pd, x86_fma_vfmsub_pd_256, x86_fma_vfmsub_ps, x86_fma_vfmsub_ps_256, x86_fma_vfmsub_sd, x86_fma_vfmsub_ss, x86_fma_vfmsubadd_pd, x86_fma_vfmsubadd_pd_256, x86_fma_vfmsubadd_ps, x86_fma_vfmsubadd_ps_256, x86_fma_vfnmadd_pd, x86_fma_vfnmadd_pd_256, x86_fma_vfnmadd_ps, x86_fma_vfnmadd_ps_256, x86_fma_vfnmadd_sd, x86_fma_vfnmadd_ss, x86_fma_vfnmsub_pd, x86_fma_vfnmsub_pd_256, x86_fma_vfnmsub_ps, x86_fma_vfnmsub_ps_256, x86_fma_vfnmsub_sd, x86_fma_vfnmsub_ss, x86_int, x86_int2mask_v16i1, x86_kadd_v16i1, x86_kand_v16i1, x86_kandn_v16i1, x86_knot_v16i1, x86_kor_v16i1, x86_kunpck_v16i1, x86_kxnor_v16i1, x86_kxor_v16i1, x86_mask2int_v16i1, x86_mmx_emms, x86_mmx_femms, x86_mmx_maskmovq, x86_mmx_movnt_dq, x86_mmx_packssdw, x86_mmx_packsswb, x86_mmx_packuswb, x86_mmx_padd_b, x86_mmx_padd_d, x86_mmx_padd_q, x86_mmx_padd_w, x86_mmx_padds_b, x86_mmx_padds_w, x86_mmx_paddus_b, x86_mmx_paddus_w, x86_mmx_palignr_b, x86_mmx_pand, x86_mmx_pandn, x86_mmx_pavg_b, x86_mmx_pavg_w, x86_mmx_pcmpeq_b, x86_mmx_pcmpeq_d, x86_mmx_pcmpeq_w, x86_mmx_pcmpgt_b, x86_mmx_pcmpgt_d, x86_mmx_pcmpgt_w, x86_mmx_pextr_w, x86_mmx_pinsr_w, x86_mmx_pmadd_wd, x86_mmx_pmaxs_w, x86_mmx_pmaxu_b, x86_mmx_pmins_w, x86_mmx_pminu_b, x86_mmx_pmovmskb, x86_mmx_pmulh_w, x86_mmx_pmulhu_w, x86_mmx_pmull_w, x86_mmx_pmulu_dq, x86_mmx_por, x86_mmx_psad_bw, x86_mmx_psll_d, x86_mmx_psll_q, x86_mmx_psll_w, x86_mmx_pslli_d, x86_mmx_pslli_q, x86_mmx_pslli_w, x86_mmx_psra_d, x86_mmx_psra_w, x86_mmx_psrai_d, x86_mmx_psrai_w, x86_mmx_psrl_d, x86_mmx_psrl_q, x86_mmx_psrl_w, x86_mmx_psrli_d, x86_mmx_psrli_q, x86_mmx_psrli_w, x86_mmx_psub_b, x86_mmx_psub_d, x86_mmx_psub_q, x86_mmx_psub_w, x86_mmx_psubs_b, x86_mmx_psubs_w, x86_mmx_psubus_b, x86_mmx_psubus_w, x86_mmx_punpckhbw, x86_mmx_punpckhdq, x86_mmx_punpckhwd, x86_mmx_punpcklbw, x86_mmx_punpckldq, x86_mmx_punpcklwd, x86_mmx_pxor, x86_pclmulqdq, x86_rdfsbase_32, x86_rdfsbase_64, x86_rdgsbase_32, x86_rdgsbase_64, x86_rdrand_16, x86_rdrand_32, x86_rdrand_64, x86_rdseed_16, x86_rdseed_32, x86_rdseed_64, x86_sha1msg1, x86_sha1msg2, x86_sha1nexte, x86_sha1rnds4, x86_sha256msg1, x86_sha256msg2, x86_sha256rnds2, x86_sse2_add_sd, x86_sse2_clflush, x86_sse2_cmp_pd, x86_sse2_cmp_sd, x86_sse2_comieq_sd, x86_sse2_comige_sd, x86_sse2_comigt_sd, x86_sse2_comile_sd, x86_sse2_comilt_sd, x86_sse2_comineq_sd, x86_sse2_cvtdq2pd, x86_sse2_cvtdq2ps, x86_sse2_cvtpd2dq, x86_sse2_cvtpd2ps, x86_sse2_cvtps2dq, x86_sse2_cvtps2pd, x86_sse2_cvtsd2si, x86_sse2_cvtsd2si64, x86_sse2_cvtsd2ss, x86_sse2_cvtsi2sd, x86_sse2_cvtsi642sd, x86_sse2_cvtss2sd, x86_sse2_cvttpd2dq, x86_sse2_cvttps2dq, x86_sse2_cvttsd2si, x86_sse2_cvttsd2si64, x86_sse2_div_sd, x86_sse2_lfence, x86_sse2_maskmov_dqu, x86_sse2_max_pd, x86_sse2_max_sd, x86_sse2_mfence, x86_sse2_min_pd, x86_sse2_min_sd, x86_sse2_movmsk_pd, x86_sse2_mul_sd, x86_sse2_packssdw_128, x86_sse2_packsswb_128, x86_sse2_packuswb_128, x86_sse2_padds_b, x86_sse2_padds_w, x86_sse2_paddus_b, x86_sse2_paddus_w, x86_sse2_pavg_b, x86_sse2_pavg_w, x86_sse2_pmadd_wd, x86_sse2_pmaxs_w, x86_sse2_pmaxu_b, x86_sse2_pmins_w, x86_sse2_pminu_b, x86_sse2_pmovmskb_128, x86_sse2_pmulh_w, x86_sse2_pmulhu_w, x86_sse2_pmulu_dq, x86_sse2_psad_bw, x86_sse2_psll_d, x86_sse2_psll_dq, x86_sse2_psll_dq_bs, x86_sse2_psll_q, x86_sse2_psll_w, x86_sse2_pslli_d, x86_sse2_pslli_q, x86_sse2_pslli_w, x86_sse2_psra_d, x86_sse2_psra_w, x86_sse2_psrai_d, x86_sse2_psrai_w, x86_sse2_psrl_d, x86_sse2_psrl_dq, x86_sse2_psrl_dq_bs, x86_sse2_psrl_q, x86_sse2_psrl_w, x86_sse2_psrli_d, x86_sse2_psrli_q, x86_sse2_psrli_w, x86_sse2_psubs_b, x86_sse2_psubs_w, x86_sse2_psubus_b, x86_sse2_psubus_w, x86_sse2_sqrt_pd, x86_sse2_sqrt_sd, x86_sse2_storel_dq, x86_sse2_storeu_dq, x86_sse2_storeu_pd, x86_sse2_sub_sd, x86_sse2_ucomieq_sd, x86_sse2_ucomige_sd, x86_sse2_ucomigt_sd, x86_sse2_ucomile_sd, x86_sse2_ucomilt_sd, x86_sse2_ucomineq_sd, x86_sse3_addsub_pd, x86_sse3_addsub_ps, x86_sse3_hadd_pd, x86_sse3_hadd_ps, x86_sse3_hsub_pd, x86_sse3_hsub_ps, x86_sse3_ldu_dq, x86_sse3_monitor, x86_sse3_mwait, x86_sse41_blendpd, x86_sse41_blendps, x86_sse41_blendvpd, x86_sse41_blendvps, x86_sse41_dppd, x86_sse41_dpps, x86_sse41_extractps, x86_sse41_insertps, x86_sse41_movntdqa, x86_sse41_mpsadbw, x86_sse41_packusdw, x86_sse41_pblendvb, x86_sse41_pblendw, x86_sse41_pextrb, x86_sse41_pextrd, x86_sse41_pextrq, x86_sse41_phminposuw, x86_sse41_pmaxsb, x86_sse41_pmaxsd, x86_sse41_pmaxud, x86_sse41_pmaxuw, x86_sse41_pminsb, x86_sse41_pminsd, x86_sse41_pminud, x86_sse41_pminuw, x86_sse41_pmovsxbd, x86_sse41_pmovsxbq, x86_sse41_pmovsxbw, x86_sse41_pmovsxdq, x86_sse41_pmovsxwd, x86_sse41_pmovsxwq, x86_sse41_pmovzxbd, x86_sse41_pmovzxbq, x86_sse41_pmovzxbw, x86_sse41_pmovzxdq, x86_sse41_pmovzxwd, x86_sse41_pmovzxwq, x86_sse41_pmuldq, x86_sse41_ptestc, x86_sse41_ptestnzc, x86_sse41_ptestz, x86_sse41_round_pd, x86_sse41_round_ps, x86_sse41_round_sd, x86_sse41_round_ss, x86_sse42_crc32_32_16, x86_sse42_crc32_32_32, x86_sse42_crc32_32_8, x86_sse42_crc32_64_64, x86_sse42_crc32_64_8, x86_sse42_pcmpestri128, x86_sse42_pcmpestria128, x86_sse42_pcmpestric128, x86_sse42_pcmpestrio128, x86_sse42_pcmpestris128, x86_sse42_pcmpestriz128, x86_sse42_pcmpestrm128, x86_sse42_pcmpistri128, x86_sse42_pcmpistria128, x86_sse42_pcmpistric128, x86_sse42_pcmpistrio128, x86_sse42_pcmpistris128, x86_sse42_pcmpistriz128, x86_sse42_pcmpistrm128, x86_sse4a_extrq, x86_sse4a_extrqi, x86_sse4a_insertq, x86_sse4a_insertqi, x86_sse4a_movnt_sd, x86_sse4a_movnt_ss, x86_sse_add_ss, x86_sse_cmp_ps, x86_sse_cmp_ss, x86_sse_comieq_ss, x86_sse_comige_ss, x86_sse_comigt_ss, x86_sse_comile_ss, x86_sse_comilt_ss, x86_sse_comineq_ss, x86_sse_cvtpd2pi, x86_sse_cvtpi2pd, x86_sse_cvtpi2ps, x86_sse_cvtps2pi, x86_sse_cvtsi2ss, x86_sse_cvtsi642ss, x86_sse_cvtss2si, x86_sse_cvtss2si64, x86_sse_cvttpd2pi, x86_sse_cvttps2pi, x86_sse_cvttss2si, x86_sse_cvttss2si64, x86_sse_div_ss, x86_sse_ldmxcsr, x86_sse_max_ps, x86_sse_max_ss, x86_sse_min_ps, x86_sse_min_ss, x86_sse_movmsk_ps, x86_sse_mul_ss, x86_sse_pshuf_w, x86_sse_rcp_ps, x86_sse_rcp_ss, x86_sse_rsqrt_ps, x86_sse_rsqrt_ss, x86_sse_sfence, x86_sse_sqrt_ps, x86_sse_sqrt_ss, x86_sse_stmxcsr, x86_sse_storeu_ps, x86_sse_sub_ss, x86_sse_ucomieq_ss, x86_sse_ucomige_ss, x86_sse_ucomigt_ss, x86_sse_ucomile_ss, x86_sse_ucomilt_ss, x86_sse_ucomineq_ss, x86_ssse3_pabs_b, x86_ssse3_pabs_b_128, x86_ssse3_pabs_d, x86_ssse3_pabs_d_128, x86_ssse3_pabs_w, x86_ssse3_pabs_w_128, x86_ssse3_phadd_d, x86_ssse3_phadd_d_128, x86_ssse3_phadd_sw, x86_ssse3_phadd_sw_128, x86_ssse3_phadd_w, x86_ssse3_phadd_w_128, x86_ssse3_phsub_d, x86_ssse3_phsub_d_128, x86_ssse3_phsub_sw, x86_ssse3_phsub_sw_128, x86_ssse3_phsub_w, x86_ssse3_phsub_w_128, x86_ssse3_pmadd_ub_sw, x86_ssse3_pmadd_ub_sw_128, x86_ssse3_pmul_hr_sw, x86_ssse3_pmul_hr_sw_128, x86_ssse3_pshuf_b, x86_ssse3_pshuf_b_128, x86_ssse3_psign_b, x86_ssse3_psign_b_128, x86_ssse3_psign_d, x86_ssse3_psign_d_128, x86_ssse3_psign_w, x86_ssse3_psign_w_128, x86_tbm_bextri_u32, x86_tbm_bextri_u64, x86_vcvtph2ps_128, x86_vcvtph2ps_256, x86_vcvtps2ph_128, x86_vcvtps2ph_256, x86_wrfsbase_32, x86_wrfsbase_64, x86_wrgsbase_32, x86_wrgsbase_64, x86_xabort, x86_xbegin, x86_xend, x86_xop_vfrcz_pd, x86_xop_vfrcz_pd_256, x86_xop_vfrcz_ps, x86_xop_vfrcz_ps_256, x86_xop_vfrcz_sd, x86_xop_vfrcz_ss, x86_xop_vpcmov, x86_xop_vpcmov_256, x86_xop_vpcomb, x86_xop_vpcomd, x86_xop_vpcomq, x86_xop_vpcomub, x86_xop_vpcomud, x86_xop_vpcomuq, x86_xop_vpcomuw, x86_xop_vpcomw, x86_xop_vpermil2pd, x86_xop_vpermil2pd_256, x86_xop_vpermil2ps, x86_xop_vpermil2ps_256, x86_xop_vphaddbd, x86_xop_vphaddbq, x86_xop_vphaddbw, x86_xop_vphadddq, x86_xop_vphaddubd, x86_xop_vphaddubq, x86_xop_vphaddubw, x86_xop_vphaddudq, x86_xop_vphadduwd, x86_xop_vphadduwq, x86_xop_vphaddwd, x86_xop_vphaddwq, x86_xop_vphsubbw, x86_xop_vphsubdq, x86_xop_vphsubwd, x86_xop_vpmacsdd, x86_xop_vpmacsdqh, x86_xop_vpmacsdql, x86_xop_vpmacssdd, x86_xop_vpmacssdqh, x86_xop_vpmacssdql, x86_xop_vpmacsswd, x86_xop_vpmacssww, x86_xop_vpmacswd, x86_xop_vpmacsww, x86_xop_vpmadcsswd, x86_xop_vpmadcswd, x86_xop_vpperm, x86_xop_vprotb, x86_xop_vprotbi, x86_xop_vprotd, x86_xop_vprotdi, x86_xop_vprotq, x86_xop_vprotqi, x86_xop_vprotw, x86_xop_vprotwi, x86_xop_vpshab, x86_xop_vpshad, x86_xop_vpshaq, x86_xop_vpshaw, x86_xop_vpshlb, x86_xop_vpshld, x86_xop_vpshlq, x86_xop_vpshlw, x86_xtest, xcore_bitrev, xcore_checkevent, xcore_chkct, xcore_clre, xcore_clrsr, xcore_crc32, xcore_crc8, xcore_eeu, xcore_endin, xcore_freer, xcore_geted, xcore_getet, xcore_getid, xcore_getps, xcore_getr, xcore_getst, xcore_getts, xcore_in, xcore_inct, xcore_initcp, xcore_initdp, xcore_initlr, xcore_initpc, xcore_initsp, xcore_inshr, xcore_int, xcore_mjoin, xcore_msync, xcore_out, xcore_outct, xcore_outshr, xcore_outt, xcore_peek, xcore_setc, xcore_setclk, xcore_setd, xcore_setev, xcore_setps, xcore_setpsc, xcore_setpt, xcore_setrdy, xcore_setsr, xcore_settw, xcore_setv, xcore_sext, xcore_ssync, xcore_syncr, xcore_testct, xcore_testwct, xcore_waitevent, xcore_zext, num_intrinsics };
  3078. struct IITDescriptor { enum IITDescriptorKind { Void, MMX, Metadata, Half, Float, Double, Integer, Vector, Pointer, Struct, Argument, ExtendVecArgument, TruncVecArgument } Kind; union { unsigned Integer_Width; unsigned Float_Width; unsigned Vector_Width; unsigned Pointer_AddressSpace; unsigned Struct_NumElements; unsigned Argument_Info; }; enum ArgKind { AK_AnyInteger, AK_AnyFloat, AK_AnyVector, AK_AnyPointer }; unsigned getArgumentNumber() const { (void)((!!(Kind == Argument || Kind == ExtendVecArgument || Kind == TruncVecArgument)) || (_wassert(L"Kind == Argument || Kind == ExtendVecArgument || Kind " L"== TruncVecArgument", L"..\\include\\llvm/IR/Intrinsics.h", 102), 0)); return Argument_Info >> 2; } ArgKind getArgumentKind() const { (void)((!!(Kind == Argument || Kind == ExtendVecArgument || Kind == TruncVecArgument)) || (_wassert(L"Kind == Argument || Kind == ExtendVecArgument || Kind " L"== TruncVecArgument", L"..\\include\\llvm/IR/Intrinsics.h", 107), 0)); return (ArgKind)(Argument_Info & 3); } static IITDescriptor get(IITDescriptorKind K, unsigned Field) { IITDescriptor Result = {K, {Field}}; return Result; } };
  3079. void getIntrinsicInfoTableEntries(ID id, SmallVectorImpl<IITDescriptor> &T);
  3080. }
  3081. class TargetTransformInfo {
  3082. protected: TargetTransformInfo *PrevTTI;
  3083. static char ID;
  3084. };
  3085. class StringMapEntryBase {
  3086. };
  3087. class StringMapImpl {
  3088. protected: StringMapEntryBase **TheTable;
  3089. unsigned NumBuckets;
  3090. unsigned NumItems;
  3091. unsigned NumTombstones;
  3092. void swap(StringMapImpl &Other) { std::swap(TheTable, Other.TheTable); std::swap(NumBuckets, Other.NumBuckets); std::swap(NumItems, Other.NumItems); std::swap(NumTombstones, Other.NumTombstones); }
  3093. };
  3094. template <typename ValueTy> class StringMapEntry : public StringMapEntryBase {
  3095. StringMapEntry(StringMapEntry &E) = delete;
  3096. void Destroy() { MallocAllocator A; Destroy(A); }
  3097. };
  3098. template <typename ValueTy, typename AllocatorTy = MallocAllocator> class StringMap : public StringMapImpl {
  3099. };
  3100. }
  3101. namespace llvm {
  3102. namespace cl {
  3103. void ParseCommandLineOptions(int argc, const char *const *argv, const char *Overview = 0);
  3104. void MarkOptionsChanged();
  3105. enum NumOccurrencesFlag { Optional = 0x00, ZeroOrMore = 0x01, Required = 0x02, OneOrMore = 0x03, ConsumeAfter = 0x04 };
  3106. enum ValueExpected { ValueOptional = 0x01, ValueRequired = 0x02, ValueDisallowed = 0x03 };
  3107. enum OptionHidden { NotHidden = 0x00, Hidden = 0x01, ReallyHidden = 0x02 };
  3108. enum FormattingFlags { NormalFormatting = 0x00, Positional = 0x01, Prefix = 0x02, Grouping = 0x03 };
  3109. class OptionCategory { private: const char *const Name; const char *const Description; void registerCategory(); public: OptionCategory(const char *const Name, const char *const Description = 0) : Name(Name), Description(Description) { registerCategory(); } const char *getName() { return Name; } const char *getDescription() { return Description; } };
  3110. extern OptionCategory GeneralCategory;
  3111. class Option { friend class alias; virtual bool handleOccurrence(unsigned pos, StringRef ArgName, StringRef Arg) = 0; virtual enum ValueExpected getValueExpectedFlagDefault() const { return ValueOptional; } virtual void anchor(); int NumOccurrences; unsigned Occurrences : 3; unsigned Value : 2; unsigned HiddenFlag : 2; unsigned Formatting : 2; unsigned Misc : 3; unsigned Position; unsigned AdditionalVals; Option *NextRegistered; public: const char *ArgStr; const char *HelpStr; const char *ValueStr; OptionCategory *Category; inline enum NumOccurrencesFlag getNumOccurrencesFlag() const { return (enum NumOccurrencesFlag)Occurrences; } inline enum ValueExpected getValueExpectedFlag() const { return Value ? ((enum ValueExpected)Value) : getValueExpectedFlagDefault(); } inline enum OptionHidden getOptionHiddenFlag() const { return (enum OptionHidden)HiddenFlag; } inline enum FormattingFlags getFormattingFlag() const { return (enum FormattingFlags)Formatting; } inline unsigned getMiscFlags() const { return Misc; } inline unsigned getPosition() const { return Position; } inline unsigned getNumAdditionalVals() const { return AdditionalVals; } bool hasArgStr() const { return ArgStr[0] != 0; } void setArgStr(const char *S) { ArgStr = S; } void setDescription(const char *S) { HelpStr = S; } void setValueStr(const char *S) { ValueStr = S; } void setNumOccurrencesFlag(enum NumOccurrencesFlag Val) { Occurrences = Val; } void setValueExpectedFlag(enum ValueExpected Val) { Value = Val; } void setHiddenFlag(enum OptionHidden Val) { HiddenFlag = Val; } void setFormattingFlag(enum FormattingFlags V) { Formatting = V; } void setMiscFlag(enum MiscFlags M) { Misc |= M; } void setPosition(unsigned pos) { Position = pos; } void setCategory(OptionCategory &C) { Category = &C; } protected: explicit Option(enum NumOccurrencesFlag OccurrencesFlag, enum OptionHidden Hidden) : NumOccurrences(0), Occurrences(OccurrencesFlag), Value(0), HiddenFlag(Hidden), Formatting(NormalFormatting), Misc(0), Position(0), AdditionalVals(0), NextRegistered(0), ArgStr(""), HelpStr(""), ValueStr(""), Category(&GeneralCategory) {} inline void setNumAdditionalVals(unsigned n) { AdditionalVals = n; } public: void addArgument(); Option *getNextRegisteredOption() const { return NextRegistered; } virtual size_t getOptionWidth() const = 0; virtual void printOptionInfo(size_t GlobalWidth) const = 0; virtual void printOptionValue(size_t GlobalWidth, bool Force) const = 0; virtual void getExtraOptionNames(SmallVectorImpl<const char *> &) {} bool addOccurrence(unsigned pos, StringRef ArgName, StringRef Value, bool MultiArg = false); bool error(const Twine &Message, StringRef ArgName = StringRef()); public: inline int getNumOccurrences() const { return NumOccurrences; } virtual ~Option() {} };
  3112. struct desc { const char *Desc; desc(const char *Str) : Desc(Str) {} void apply(Option &O) const { O.setDescription(Desc); } };
  3113. template <class Ty> struct initializer { const Ty &Init; initializer(const Ty &Val) : Init(Val) {} template <class Opt> void apply(Opt &O) const { O.setInitialValue(Init); } };
  3114. template <class Ty> initializer<Ty> init(const Ty &Val) { return initializer<Ty>(Val); }
  3115. struct GenericOptionValue { virtual ~GenericOptionValue() {} virtual bool compare(const GenericOptionValue &V) const = 0; };
  3116. template <class DataType> struct OptionValue;
  3117. template <class DataType, bool isClass> struct OptionValueBase : public GenericOptionValue { typedef OptionValue<DataType> WrapperType; bool hasValue() const { return false; } const DataType &getValue() const { ::llvm::llvm_unreachable_internal( "no default value", "..\\include\\llvm/Support/CommandLine.h", 366); } template <class DT> void setValue(const DT &) {} bool compare(const DataType &) const { return false; } virtual bool compare(const GenericOptionValue &) const { return false; } };
  3118. template <class DataType> class OptionValueCopy : public GenericOptionValue { DataType Value; bool Valid; public: OptionValueCopy() : Valid(false) {} bool hasValue() const { return Valid; } const DataType &getValue() const { (void)((!!(Valid && "invalid option value")) || (_wassert(L"Valid && \"invalid option value\"", L"..\\include\\llvm/Support/CommandLine.h", 388), 0)); return Value; } void setValue(const DataType &V) { Valid = true; Value = V; } bool compare(const DataType &V) const { return Valid && (Value != V); } virtual bool compare(const GenericOptionValue &V) const { const OptionValueCopy<DataType> &VC = static_cast<const OptionValueCopy<DataType> &>(V); if (!VC.hasValue()) return false; return compare(VC.getValue()); } };
  3119. template <class DataType> struct OptionValueBase<DataType, false> : OptionValueCopy<DataType> { typedef DataType WrapperType; };
  3120. template <class DataType> struct OptionValue : OptionValueBase<DataType, is_class<DataType>::value> { OptionValue() {} OptionValue(const DataType &V) { this->setValue(V); } template <class DT> OptionValue<DataType> &operator=(const DT &V) { this->setValue(V); return *this; } };
  3121. class generic_parser_base { protected: class GenericOptionInfo { public: GenericOptionInfo(const char *name, const char *helpStr) : Name(name), HelpStr(helpStr) {} const char *Name; const char *HelpStr; }; public: virtual ~generic_parser_base() {} virtual unsigned getNumOptions() const = 0; virtual const char *getOption(unsigned N) const = 0; virtual const char *getDescription(unsigned N) const = 0; virtual size_t getOptionWidth(const Option &O) const; virtual const GenericOptionValue &getOptionValue(unsigned N) const = 0; virtual void printOptionInfo(const Option &O, size_t GlobalWidth) const; void printGenericOptionDiff(const Option &O, const GenericOptionValue &V, const GenericOptionValue &Default, size_t GlobalWidth) const; template <class AnyOptionValue> void printOptionDiff(const Option &O, const AnyOptionValue &V, const AnyOptionValue &Default, size_t GlobalWidth) const { printGenericOptionDiff(O, V, Default, GlobalWidth); } void initialize(Option &O) { hasArgStr = O.hasArgStr(); } void getExtraOptionNames(SmallVectorImpl<const char *> &OptionNames) { if (!hasArgStr) for (unsigned i = 0, e = getNumOptions(); i != e; ++i) OptionNames.push_back(getOption(i)); } enum ValueExpected getValueExpectedFlagDefault() const { if (hasArgStr) return ValueRequired; else return ValueDisallowed; } unsigned findOption(const char *Name); protected: bool hasArgStr; };
  3122. template <class DataType> class parser : public generic_parser_base { protected: class OptionInfo : public GenericOptionInfo { public: OptionInfo(const char *name, DataType v, const char *helpStr) : GenericOptionInfo(name, helpStr), V(v) {} OptionValue<DataType> V; }; SmallVector<OptionInfo, 8> Values; public: typedef DataType parser_data_type; unsigned getNumOptions() const { return unsigned(Values.size()); } const char *getOption(unsigned N) const { return Values[N].Name; } const char *getDescription(unsigned N) const { return Values[N].HelpStr; } virtual const GenericOptionValue &getOptionValue(unsigned N) const { return Values[N].V; } bool parse(Option &O, StringRef ArgName, StringRef Arg, DataType &V) { StringRef ArgVal; if (hasArgStr) ArgVal = Arg; else ArgVal = ArgName; for (size_t i = 0, e = Values.size(); i != e; ++i) if (Values[i].Name == ArgVal) { V = Values[i].V.getValue(); return false; } return O.error("Cannot find option named '" + ArgVal + "'!"); } template <class DT> void addLiteralOption(const char *Name, const DT &V, const char *HelpStr) { (void)((!!(findOption(Name) == Values.size() && "Option already exists!")) || (_wassert(L"findOption(Name) == Values.size() && \"Option already " L"exists!\"", L"..\\include\\llvm/Support/CommandLine.h", 672), 0)); OptionInfo X(Name, static_cast<DataType>(V), HelpStr); Values.push_back(X); MarkOptionsChanged(); } void removeLiteralOption(const char *Name) { unsigned N = findOption(Name); (void)((!!(N != Values.size() && "Option not found!")) || (_wassert(L"N != Values.size() && \"Option not found!\"", L"..\\include\\llvm/Support/CommandLine.h", 682), 0)); Values.erase(Values.begin() + N); } };
  3123. class basic_parser_impl { public: virtual ~basic_parser_impl() {} enum ValueExpected getValueExpectedFlagDefault() const { return ValueRequired; } void getExtraOptionNames(SmallVectorImpl<const char *> &) {} void initialize(Option &) {} size_t getOptionWidth(const Option &O) const; void printOptionInfo(const Option &O, size_t GlobalWidth) const; void printOptionNoValue(const Option &O, size_t GlobalWidth) const; virtual const char *getValueName() const { return "value"; } virtual void anchor(); protected: void printOptionName(const Option &O, size_t GlobalWidth) const; };
  3124. template <class DataType> class basic_parser : public basic_parser_impl { public: typedef DataType parser_data_type; typedef OptionValue<DataType> OptVal; };
  3125. template <> class parser<bool> : public basic_parser<bool> { const char *ArgStr; public: bool parse(Option &O, StringRef ArgName, StringRef Arg, bool &Val); template <class Opt> void initialize(Opt &O) { return false; } virtual const char *getValueName() const { return "char"; } void printOptionDiff(const Option &O, char V, OptVal Default, size_t GlobalWidth) const; virtual void anchor(); };
  3126. template <class ParserClass, class DT> void printOptionDiff(const Option &O, const generic_parser_base &P, const DT &V, const OptionValue<DT> &Default, size_t GlobalWidth) { OptionValue<DT> OV = V; P.printOptionDiff(O, OV, Default, GlobalWidth); }
  3127. template <class ParserDT, class ValDT> struct OptionDiffPrinter { void print(const Option &O, const parser<ParserDT> P, const ValDT &, const OptionValue<ValDT> &, size_t GlobalWidth) { P.printOptionNoValue(O, GlobalWidth); } };
  3128. template <class ParserClass, class ValDT> void printOptionDiff( const Option &O, const basic_parser<typename ParserClass::parser_data_type> &P, const ValDT &V, const OptionValue<ValDT> &Default, size_t GlobalWidth) { OptionDiffPrinter<typename ParserClass::parser_data_type, ValDT> printer; printer.print(O, static_cast<const ParserClass &>(P), V, Default, GlobalWidth); }
  3129. template <class Mod> struct applicator { template <class Opt> static void opt(const Mod &M, Opt &O) { M.apply(O); } };
  3130. template <unsigned n> struct applicator<char[n]> { template <class Opt> static void opt(const char *Str, Opt &O) { O.setArgStr(Str); } };
  3131. template <> struct applicator<ValueExpected> { static void opt(ValueExpected VE, Option &O) { O.setValueExpectedFlag(VE); } };
  3132. template <> struct applicator<OptionHidden> { static void opt(OptionHidden OH, Option &O) { O.setHiddenFlag(OH); } };
  3133. template <> struct applicator<MiscFlags> { static void opt(MiscFlags MF, Option &O) { O.setMiscFlag(MF); } };
  3134. template <class Mod, class Opt> void apply(const Mod &M, Opt *O) { applicator<Mod>::opt(M, *O); }
  3135. template <class DataType, bool ExternalStorage, bool isClass> class opt_storage { DataType *Location; OptionValue<DataType> Default; void check() const { (void)((!!(Location != 0 && "cl::location(...) not specified for a command " "line option with external storage, " "or cl::init specified before cl::location()!!")) || (_wassert(L"Location != 0 && \"cl::location(...) not specified for " L"a command \" \"line option with external storage, \" " L"\"or cl::init specified before cl::location()!!\"", L"..\\include\\llvm/Support/CommandLine.h", 1058), 0)); } public: opt_storage() : Location(0) {} bool setLocation(Option &O, DataType &L) { if (Location) return O.error("cl::location(x) specified more than once!"); return Default; } };
  3136. template <class DataType> class opt_storage<DataType, false, true> : public DataType { public: OptionValue<DataType> Default; template <class T> void setValue(const T &V, bool initial = false) { DataType::operator=(V); if (initial) Default = V; } DataType &getValue() { return *this; } const DataType &getValue() const { return *this; } const OptionValue<DataType> &getDefault() const { return Default; } };
  3137. template <class DataType> class opt_storage<DataType, false, false> { public: DataType Value; OptionValue<DataType> Default; opt_storage() : Value(DataType()), Default(DataType()) {} template <class T> void setValue(const T &V, bool initial = false) { Value = V; if (initial) Default = V; } DataType &getValue() { return Value; } DataType getValue() const { return Value; } const OptionValue<DataType> &getDefault() const { return Default; } operator DataType() const { return getValue(); } DataType operator->() const { return Value; } };
  3138. template <class DataType, bool ExternalStorage = false, class ParserClass = parser<DataType> > class opt : public Option, public opt_storage<DataType, ExternalStorage, is_class<DataType>::value> { ParserClass Parser; virtual bool handleOccurrence(unsigned pos, StringRef ArgName, StringRef Arg) { typename ParserClass::parser_data_type Val = typename ParserClass::parser_data_type(); if (Parser.parse(*this, ArgName, Arg, Val)) return true; this->setValue(Val); this->setPosition(pos); return false; } virtual enum ValueExpected getValueExpectedFlagDefault() const { return Parser.getValueExpectedFlagDefault(); } virtual void getExtraOptionNames(SmallVectorImpl<const char *> &OptionNames) { return Parser.getExtraOptionNames(OptionNames); } virtual size_t getOptionWidth() const { return Parser.getOptionWidth(*this); } virtual void printOptionInfo(size_t GlobalWidth) const { Parser.printOptionInfo(*this, GlobalWidth); } virtual void printOptionValue(size_t GlobalWidth, bool Force) const { if (Force || this->getDefault().compare(this->getValue())) { cl::printOptionDiff<ParserClass>(*this, Parser, this->getValue(), this->getDefault(), GlobalWidth); } } void done() { addArgument(); Parser.initialize(*this); } public: void setInitialValue(const DataType &V) { this->setValue(V, true); } ParserClass &getParser() { return Parser; } template <class T> DataType &operator=(const T &Val) { this->setValue(Val); return this->getValue(); } template <class M0t> explicit opt(const M0t &M0) : Option(Optional, NotHidden) { apply(M0, this); done(); } template <class M0t, class M1t> opt(const M0t &M0, const M1t &M1) : Option(Optional, NotHidden) { apply(M0, this); apply(M1, this); done(); } template <class M0t, class M1t, class M2t> opt(const M0t &M0, const M1t &M1, const M2t &M2) : Option(Optional, NotHidden) { apply(M0, this); apply(M1, this); apply(M2, this); done(); } template <class M0t, class M1t, class M2t, class M3t> opt(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3) : Option(Optional, NotHidden) { apply(M0, this); apply(M1, this); apply(M2, this); apply(M3, this); done(); } template <class M0t, class M1t, class M2t, class M3t, class M4t> opt(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4) : Option(Optional, NotHidden) { apply(M4, this); apply(M5, this); apply(M6, this); done(); } template <class M0t, class M1t, class M2t, class M3t, class M4t, class M5t, class M6t, class M7t> opt(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5, const M6t &M6, const M7t &M7) : Option(Optional, NotHidden) { apply(M0, this); apply(M1, this); apply(M2, this); apply(M3, this); apply(M4, this); apply(M5, this); apply(M6, this); apply(M7, this); done(); } };
  3139. ;
  3140. }
  3141. }
  3142. namespace llvm {
  3143. class raw_ostream;
  3144. extern bool DebugFlag;
  3145. bool isCurrentDebugType(const char *Type);
  3146. extern bool EnableDebugBuffering;
  3147. raw_ostream &dbgs();
  3148. BasicBlock *SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P = 0, bool MergeIdenticalEdges = false, bool DontDeleteUselessPHIs = false, bool SplitLandingPads = false);
  3149. inline BasicBlock *SplitCriticalEdge(BasicBlock *BB, succ_iterator SI, Pass *P = 0) {
  3150. return SplitCriticalEdge(BB->getTerminator(), SI.getSuccessorIndex(), P);
  3151. }
  3152. inline bool SplitCriticalEdge(BasicBlock *Succ, pred_iterator PI, Pass *P = 0) {
  3153. bool MadeChange = false;
  3154. TerminatorInst *TI = (*PI)->getTerminator();
  3155. for (unsigned i = 0, e = TI->getNumSuccessors();
  3156. i != e;
  3157. ++i) if (TI->getSuccessor(i) == Succ) MadeChange |= !!SplitCriticalEdge(TI, i, P);
  3158. return MadeChange;
  3159. }
  3160. inline BasicBlock *SplitCriticalEdge(BasicBlock *Src, BasicBlock *Dst, Pass *P = 0, bool MergeIdenticalEdges = false, bool DontDeleteUselessPHIs = false) {
  3161. }
  3162. BasicBlock *SplitEdge(BasicBlock *From, BasicBlock *To, Pass *P);
  3163. void llvm_execute_on_thread(void (*UserFn)(void *), void *UserData, unsigned RequestedStackSize = 0);
  3164. }
  3165. namespace llvm {
  3166. namespace sys {
  3167. }
  3168. template <typename KeyT, typename ValueT, typename Config> class ValueMapCallbackVH;
  3169. template <typename KeyT> struct ValueMapConfig {
  3170. enum { FollowRAUW = true };
  3171. struct ExtraData {};
  3172. };
  3173. template <typename KeyT, typename ValueT, typename Config = ValueMapConfig<KeyT> > class ValueMap {
  3174. friend class ValueMapCallbackVH<KeyT, ValueT, Config>;
  3175. typedef ValueMapCallbackVH<KeyT, ValueT, Config> ValueMapCVH;
  3176. typedef DenseMap<ValueMapCVH, ValueT, DenseMapInfo<ValueMapCVH> > MapT;
  3177. typedef typename Config::ExtraData ExtraData;
  3178. MapT Map;
  3179. ExtraData Data;
  3180. public: typedef KeyT key_type;
  3181. ValueT &operator[](const KeyT &Key) { return Map[Wrap(Key)]; }
  3182. private: ValueMapCVH Wrap(KeyT key) const { return ValueMapCVH(key, const_cast<ValueMap *>(this)); }
  3183. };
  3184. template <typename KeyT, typename ValueT, typename Config> class ValueMapCallbackVH : public CallbackVH {
  3185. friend class ValueMap<KeyT, ValueT, Config>;
  3186. friend struct DenseMapInfo<ValueMapCallbackVH>;
  3187. typedef ValueMap<KeyT, ValueT, Config> ValueMapT;
  3188. ValueMapT *Map;
  3189. ValueMapCallbackVH(KeyT Key, ValueMapT *Map) : CallbackVH(const_cast<Value *>(static_cast<const Value *>(Key))), Map(Map) {}
  3190. };
  3191. template <typename KeyT, typename ValueT, typename Config> struct DenseMapInfo<ValueMapCallbackVH<KeyT, ValueT, Config> > {
  3192. typedef ValueMapCallbackVH<KeyT, ValueT, Config> VH;
  3193. typedef DenseMapInfo<KeyT> PointerInfo;
  3194. static inline VH getEmptyKey() { return VH(PointerInfo::getEmptyKey(), 0); }
  3195. static inline VH getTombstoneKey() { return VH(PointerInfo::getTombstoneKey(), 0); }
  3196. static unsigned getHashValue(const KeyT &Val) { return PointerInfo::getHashValue(Val); }
  3197. static bool isEqual(const VH &LHS, const VH &RHS) { return LHS == RHS; }
  3198. };
  3199. class Instruction;
  3200. typedef ValueMap<const Value *, WeakVH> ValueToValueMapTy;
  3201. class ValueMapTypeRemapper {
  3202. };
  3203. class ValueMaterializer {
  3204. };
  3205. enum RemapFlags {
  3206. RF_None = 0, RF_NoModuleLevelChanges = 1, RF_IgnoreMissingEntries = 2 };
  3207. static inline RemapFlags operator|(RemapFlags LHS, RemapFlags RHS) {
  3208. return RemapFlags(unsigned(LHS) | unsigned(RHS));
  3209. }
  3210. Value *MapValue(const Value *V, ValueToValueMapTy &VM, RemapFlags Flags = RF_None, ValueMapTypeRemapper *TypeMapper = 0, ValueMaterializer *Materializer = 0);
  3211. void RemapInstruction(Instruction *I, ValueToValueMapTy &VM, RemapFlags Flags = RF_None, ValueMapTypeRemapper *TypeMapper = 0, ValueMaterializer *Materializer = 0);
  3212. inline MDNode *MapValue(const MDNode *V, ValueToValueMapTy &VM, RemapFlags Flags = RF_None, ValueMapTypeRemapper *TypeMapper = 0, ValueMaterializer *Materializer = 0) {
  3213. return cast<MDNode>( MapValue((const Value *)V, VM, Flags, TypeMapper, Materializer));
  3214. }
  3215. struct ClonedCodeInfo {
  3216. bool ContainsCalls;
  3217. bool ContainsDynamicAllocas;
  3218. ClonedCodeInfo() : ContainsCalls(false), ContainsDynamicAllocas(false) {}
  3219. };
  3220. BasicBlock *CloneBasicBlock(const BasicBlock *BB, ValueToValueMapTy &VMap, const Twine &NameSuffix = "", Function *F = 0, ClonedCodeInfo *CodeInfo = 0);
  3221. }
  3222. using namespace llvm;
  3223. static llvm::Statistic NumBranches = {
  3224. "loop-unswitch", "Number of branches unswitched", 0, 0};
  3225. static llvm::Statistic NumSwitches = {
  3226. "loop-unswitch", "Number of switches unswitched", 0, 0};
  3227. static llvm::Statistic NumSelects = {
  3228. "loop-unswitch", "Number of selects unswitched", 0, 0};
  3229. static llvm::Statistic TotalInsts = {
  3230. "loop-unswitch", "Total number of instructions analyzed", 0, 0};
  3231. static cl::opt<unsigned> Threshold("loop-unswitch-threshold", cl::desc("Max loop size to unswitch"), cl::init(100), cl::Hidden);
  3232. namespace {
  3233. class LUAnalysisCache {
  3234. typedef DenseMap<const SwitchInst *, SmallPtrSet<const Value *, 8> > UnswitchedValsMap;
  3235. typedef UnswitchedValsMap::iterator UnswitchedValsIt;
  3236. struct LoopProperties { unsigned CanBeUnswitchedCount; unsigned SizeEstimation; UnswitchedValsMap UnswitchedVals; };
  3237. UnswitchedValsMap *CurLoopInstructions;
  3238. LoopProperties *CurrentLoopProperties;
  3239. unsigned MaxSize;
  3240. public: LUAnalysisCache() : CurLoopInstructions(0), CurrentLoopProperties(0), MaxSize(Threshold) {}
  3241. bool countLoop(const Loop *L, const TargetTransformInfo &TTI);
  3242. void setUnswitched(const SwitchInst *SI, const Value *V);
  3243. bool isUnswitched(const SwitchInst *SI, const Value *V);
  3244. };
  3245. class LoopUnswitch : public LoopPass {
  3246. LUAnalysisCache BranchesInfo;
  3247. bool OptimizeForSize;
  3248. bool redoLoop;
  3249. Loop *currentLoop;
  3250. DominatorTree *DT;
  3251. BasicBlock *loopHeader;
  3252. BasicBlock *loopPreheader;
  3253. std::vector<BasicBlock *> LoopBlocks;
  3254. std::vector<BasicBlock *> NewBlocks;
  3255. public: static char ID;
  3256. explicit LoopUnswitch(bool Os = false) : LoopPass(ID), OptimizeForSize(Os), redoLoop(false), currentLoop(0), DT(0), loopHeader(0), loopPreheader(0) { initializeLoopUnswitchPass(*PassRegistry::getPassRegistry()); }
  3257. bool runOnLoop(Loop *L, LPPassManager &LPM);
  3258. bool processCurrentLoop();
  3259. void SplitExitEdges(Loop *L, const SmallVectorImpl<BasicBlock *> &ExitBlocks);
  3260. bool UnswitchIfProfitable(Value *LoopCond, Constant *Val);
  3261. void UnswitchTrivialCondition(Loop *L, Value *Cond, Constant *Val, BasicBlock *ExitBlock);
  3262. void UnswitchNontrivialCondition(Value *LIC, Constant *OnVal, Loop *L);
  3263. void RewriteLoopBodyWithConditionConstant(Loop *L, Value *LIC, Constant *Val, bool isEqual);
  3264. bool IsTrivialUnswitchCondition(Value *Cond, Constant **Val = 0, BasicBlock **LoopExit = 0);
  3265. };
  3266. }
  3267. Pass *llvm::createLoopUnswitchPass(bool Os) {
  3268. return new LoopUnswitch(Os);
  3269. }
  3270. static Value *FindLIVLoopCondition(Value *Cond, Loop *L, bool &Changed) {
  3271. ++TotalInsts;
  3272. if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Cond)) if (BO->getOpcode() == Instruction::And || BO->getOpcode() == Instruction::Or) {
  3273. }
  3274. return 0;
  3275. }
  3276. bool LoopUnswitch::runOnLoop(Loop *L, LPPassManager &LPM_Ref) {
  3277. Function *F = currentLoop->getHeader()->getParent();
  3278. bool Changed = false;
  3279. do {
  3280. Changed |= processCurrentLoop();
  3281. }
  3282. while (redoLoop);
  3283. }
  3284. bool LoopUnswitch::processCurrentLoop() {
  3285. bool Changed = false;
  3286. LLVMContext &Context = loopHeader->getContext();
  3287. if (!BranchesInfo.countLoop(currentLoop, getAnalysis<TargetTransformInfo>())) return false;
  3288. for (Loop::block_iterator I = currentLoop->block_begin(), E = currentLoop->block_end();
  3289. I != E;
  3290. ++I) {
  3291. TerminatorInst *TI = (*I)->getTerminator();
  3292. if (BranchInst *BI = dyn_cast<BranchInst>(TI)) { if (BI->isConditional()) { Value *LoopCond = FindLIVLoopCondition(BI->getCondition(), currentLoop, Changed); if (LoopCond && UnswitchIfProfitable(LoopCond, ConstantInt::getTrue(Context))) { ++NumBranches; return true; } } }
  3293. else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) { Value *LoopCond = FindLIVLoopCondition(SI->getCondition(), currentLoop, Changed); unsigned NumCases = SI->getNumCases(); if (LoopCond && NumCases) { Constant *UnswitchVal = 0; for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end(); i != e; ++i) { Constant *UnswitchValCandidate = i.getCaseValue(); if (!BranchesInfo.isUnswitched(SI, UnswitchValCandidate)) { UnswitchVal = UnswitchValCandidate; break; } } if (!UnswitchVal) continue; if (UnswitchIfProfitable(LoopCond, UnswitchVal)) { ++NumSwitches; return true; } } }
  3294. }
  3295. return Changed;
  3296. }
  3297. bool LoopUnswitch::UnswitchIfProfitable(Value *LoopCond, Constant *Val) {
  3298. Function *F = loopHeader->getParent();
  3299. Constant *CondVal = 0;
  3300. BasicBlock *ExitBlock = 0;
  3301. if (IsTrivialUnswitchCondition(LoopCond, &CondVal, &ExitBlock)) {
  3302. UnswitchTrivialCondition(currentLoop, LoopCond, CondVal, ExitBlock);
  3303. }
  3304. if (OptimizeForSize || F->getAttributes().hasAttribute(AttributeSet::FunctionIndex, Attribute::OptimizeForSize)) return false;
  3305. UnswitchNontrivialCondition(LoopCond, Val, currentLoop);
  3306. return true;
  3307. }
  3308. static Loop *CloneLoop(Loop *L, Loop *PL, ValueToValueMapTy &VM, LoopInfo *LI, LPPassManager *LPM) {
  3309. }
  3310. void LoopUnswitch::UnswitchNontrivialCondition(Value *LIC, Constant *Val, Loop *L) {
  3311. Function *F = loopHeader->getParent();
  3312. do {
  3313. if (::llvm::DebugFlag && ::llvm::isCurrentDebugType("loop-unswitch")) { dbgs() << "loop-unswitch: Unswitching loop %" << loopHeader->getName() << " [" << L->getBlocks().size() << " blocks] in Function " << F->getName() << " when '" << *Val << "' == " << *LIC << "\n"; }
  3314. }
  3315. while (0);
  3316. if (ScalarEvolution *SE = getAnalysisIfAvailable<ScalarEvolution>()) SE->forgetLoop(L);
  3317. NewBlocks.clear();
  3318. BasicBlock *NewPreheader = SplitEdge(loopPreheader, loopHeader, this);
  3319. SmallVector<BasicBlock *, 8> ExitBlocks;
  3320. L->getUniqueExitBlocks(ExitBlocks);
  3321. NewBlocks.reserve(LoopBlocks.size());
  3322. ValueToValueMapTy VMap;
  3323. for (unsigned i = 0, e = LoopBlocks.size();
  3324. i != e;
  3325. ++i) {
  3326. }
  3327. F->getBasicBlockList().splice(NewPreheader, F->getBasicBlockList(), NewBlocks[0], F->end());
  3328. for (unsigned i = 0, e = ExitBlocks.size();
  3329. i != e;
  3330. ++i) {
  3331. BasicBlock *NewExit = cast<BasicBlock>(VMap[ExitBlocks[i]]);
  3332. }
  3333. for (unsigned i = 0, e = NewBlocks.size();
  3334. i != e;
  3335. ++i) for (BasicBlock::iterator I = NewBlocks[i]->begin(), E = NewBlocks[i]->end();
  3336. I != E;
  3337. ++I) RemapInstruction(I, VMap, RF_NoModuleLevelChanges | RF_IgnoreMissingEntries);
  3338. }
  3339.  
  3340.  
  3341. // this should reproduce the crash:
  3342. // /usr/local/google/home/rnk/creduce/build/creduce/../clang_delta/clang_delta --transformation=replace-function-def-with-decl --counter=1 /usr/local/google/home/rnk/creduce/build/clang_delta_crash_tmp_fileOEa1FV.ii
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement