annotate gcc/testsuite/g++.dg/tree-ssa/pr42337.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR tree-optimize/42337
kono
parents:
diff changeset
2 // { dg-do compile }
kono
parents:
diff changeset
3 // { dg-options "-O2" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
4 // { dg-additional-options "-Wno-return-type" }
111
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 template<class _T1, class _T2> struct pair {
kono
parents:
diff changeset
7 _T2 second;
kono
parents:
diff changeset
8 };
kono
parents:
diff changeset
9 template<typename _Tp>
kono
parents:
diff changeset
10 inline const _Tp& max(const _Tp& __a, const _Tp& __b) { }
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 template<typename _ForwardIterator, typename _Tp, typename _Compare> _ForwardIterator
kono
parents:
diff changeset
13 lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp) { }
kono
parents:
diff changeset
14 template<class _CharT> struct char_traits {};
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 template<typename _Iterator, typename _Container> class __normal_iterator {
kono
parents:
diff changeset
17 public: typedef _Iterator iterator_type;
kono
parents:
diff changeset
18 __normal_iterator& operator++() {
kono
parents:
diff changeset
19 }
kono
parents:
diff changeset
20 };
kono
parents:
diff changeset
21 template<typename _IteratorL, typename _IteratorR, typename _Container>
kono
parents:
diff changeset
22 inline bool operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) { }
kono
parents:
diff changeset
23 template<typename _Tp> class new_allocator {
kono
parents:
diff changeset
24 public:
kono
parents:
diff changeset
25 typedef _Tp* pointer;
kono
parents:
diff changeset
26 typedef const _Tp* const_pointer;
kono
parents:
diff changeset
27 };
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 template<typename _Tp>
kono
parents:
diff changeset
30 class allocator: public new_allocator<_Tp> {
kono
parents:
diff changeset
31 public:
kono
parents:
diff changeset
32 template<typename _Tp1> struct rebind {
kono
parents:
diff changeset
33 typedef allocator<_Tp1> other;
kono
parents:
diff changeset
34 };
kono
parents:
diff changeset
35 };
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 template<typename _Arg, typename _Result> struct unary_function { };
kono
parents:
diff changeset
38 template<typename _Arg1, typename _Arg2, typename _Result> struct binary_function { };
kono
parents:
diff changeset
39 template<typename _Tp> struct less : public binary_function<_Tp, _Tp, bool> { };
kono
parents:
diff changeset
40 template<typename _Pair> struct _Select1st : public unary_function<_Pair, typename _Pair::first_type> { };
kono
parents:
diff changeset
41 template<typename _Tp> struct _Rb_tree_iterator {
kono
parents:
diff changeset
42 typedef _Tp* pointer;
kono
parents:
diff changeset
43 pointer operator->() const {
kono
parents:
diff changeset
44 }
kono
parents:
diff changeset
45 };
kono
parents:
diff changeset
46 template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc = allocator<_Val> >
kono
parents:
diff changeset
47 class _Rb_tree {
kono
parents:
diff changeset
48 typedef _Val value_type;
kono
parents:
diff changeset
49 public: typedef _Rb_tree_iterator<value_type> iterator;
kono
parents:
diff changeset
50 };
kono
parents:
diff changeset
51 template <typename _Key, typename _Tp, typename _Compare = less<_Key>, typename _Alloc = allocator<pair<const _Key, _Tp> > >
kono
parents:
diff changeset
52 class map {
kono
parents:
diff changeset
53 public: typedef _Key key_type;
kono
parents:
diff changeset
54 typedef pair<const _Key, _Tp> value_type;
kono
parents:
diff changeset
55 typedef _Compare key_compare;
kono
parents:
diff changeset
56 private: typedef typename _Alloc::template rebind<value_type>::other _Pair_alloc_type;
kono
parents:
diff changeset
57 typedef _Rb_tree<key_type, value_type, _Select1st<value_type>, key_compare, _Pair_alloc_type> _Rep_type;
kono
parents:
diff changeset
58 public: typedef typename _Pair_alloc_type::pointer pointer;
kono
parents:
diff changeset
59 typedef typename _Rep_type::iterator iterator;
kono
parents:
diff changeset
60 iterator find(const key_type& __x) { }
kono
parents:
diff changeset
61 };
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 template<typename _Tp, typename _Alloc> struct _Vector_base {
kono
parents:
diff changeset
64 typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
kono
parents:
diff changeset
65 };
kono
parents:
diff changeset
66 template<typename _Tp, typename _Alloc = allocator<_Tp> >
kono
parents:
diff changeset
67 class vector : protected _Vector_base<_Tp, _Alloc> {
kono
parents:
diff changeset
68 typedef _Vector_base<_Tp, _Alloc> _Base;
kono
parents:
diff changeset
69 typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
kono
parents:
diff changeset
70 public:
kono
parents:
diff changeset
71 typedef typename _Tp_alloc_type::pointer pointer;
kono
parents:
diff changeset
72 typedef typename _Tp_alloc_type::const_pointer const_pointer;
kono
parents:
diff changeset
73 typedef __normal_iterator<pointer, vector> iterator;
kono
parents:
diff changeset
74 typedef __normal_iterator<const_pointer, vector> const_iterator;
kono
parents:
diff changeset
75 iterator begin() { }
kono
parents:
diff changeset
76 const_iterator begin() const { }
kono
parents:
diff changeset
77 const_iterator end() const { }
kono
parents:
diff changeset
78 unsigned long size() const { }
kono
parents:
diff changeset
79 };
kono
parents:
diff changeset
80
kono
parents:
diff changeset
81 class SSC {
kono
parents:
diff changeset
82 public:
kono
parents:
diff changeset
83 SSC () {}
kono
parents:
diff changeset
84 SSC (const int& cs);
kono
parents:
diff changeset
85 };
kono
parents:
diff changeset
86 extern int flag;
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88 struct TP {
kono
parents:
diff changeset
89 const int cl_;
kono
parents:
diff changeset
90 const vector<int> &its_;
kono
parents:
diff changeset
91 int max_s_;
kono
parents:
diff changeset
92 };
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 double foo(TP *p);
kono
parents:
diff changeset
95 map<int, int> cs_;
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 template <typename T> class vector32 {
kono
parents:
diff changeset
98 public:
kono
parents:
diff changeset
99 typedef T& reference;
kono
parents:
diff changeset
100 typedef T* iterator;
kono
parents:
diff changeset
101 typedef const T* const_iterator;
kono
parents:
diff changeset
102 iterator begin() { return data_; }
kono
parents:
diff changeset
103 iterator end() { return data_ + size_; }
kono
parents:
diff changeset
104 long unsigned int size() const { return size_; }
kono
parents:
diff changeset
105 T* data_;
kono
parents:
diff changeset
106 unsigned size_;
kono
parents:
diff changeset
107 };
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 struct SF : public pair<unsigned long long, double> { };
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 template<typename KEY, typename VALUE> class SFVT {
kono
parents:
diff changeset
112 private: typedef vector32<SF> Container;
kono
parents:
diff changeset
113 typedef typename Container::const_iterator CI;
kono
parents:
diff changeset
114 mutable Container v_;
kono
parents:
diff changeset
115 mutable bool sorted_;
kono
parents:
diff changeset
116 struct Cmp : public binary_function<SF, SF, bool> {
kono
parents:
diff changeset
117 };
kono
parents:
diff changeset
118 __attribute__((always_inline)) VALUE IS(const SFVT &sfv) const {
kono
parents:
diff changeset
119 if (sfv.v_.size() < v_.size()) {
kono
parents:
diff changeset
120 return sfv.IS(*this);
kono
parents:
diff changeset
121 }
kono
parents:
diff changeset
122 else {
kono
parents:
diff changeset
123 VALUE sum = 0.0;
kono
parents:
diff changeset
124 CI beg = sfv.v_.begin();
kono
parents:
diff changeset
125 CI end = sfv.v_.end();
kono
parents:
diff changeset
126 for (CI i = v_.begin();
kono
parents:
diff changeset
127 i != v_.end();
kono
parents:
diff changeset
128 ++i) { beg = lower_bound(beg, end, *i, Cmp()); if (beg == end) { return sum; } }
kono
parents:
diff changeset
129 }
kono
parents:
diff changeset
130 }
kono
parents:
diff changeset
131 public: explicit SFVT(const int capacity = 0) : sorted_(true) { }
kono
parents:
diff changeset
132 long unsigned int size() const { }
kono
parents:
diff changeset
133 __attribute__((always_inline)) VALUE DP(const SFVT &sfv) const {
kono
parents:
diff changeset
134 return IS(sfv);
kono
parents:
diff changeset
135 }
kono
parents:
diff changeset
136 };
kono
parents:
diff changeset
137 class SFV : public SFVT<unsigned long long, double> { };
kono
parents:
diff changeset
138
kono
parents:
diff changeset
139 class Edge;
kono
parents:
diff changeset
140 extern int flag2;
kono
parents:
diff changeset
141
kono
parents:
diff changeset
142 double foo(TP *p) {
kono
parents:
diff changeset
143 int nbests_requested = max(p->max_s_, flag);
kono
parents:
diff changeset
144 map<int, int>::iterator it = cs_.find(p->cl_);
kono
parents:
diff changeset
145 int* c = &it->second;
kono
parents:
diff changeset
146 for (vector<int>::const_iterator iter = p->its_.begin();
kono
parents:
diff changeset
147 iter != p->its_.end();
kono
parents:
diff changeset
148 ++iter) {
kono
parents:
diff changeset
149 }
kono
parents:
diff changeset
150 vector<int*> fb;
kono
parents:
diff changeset
151 vector<double> w;
kono
parents:
diff changeset
152 int *hg = 0;
kono
parents:
diff changeset
153 if (flag2 == 10) {
kono
parents:
diff changeset
154 hg = &flag2;
kono
parents:
diff changeset
155 }
kono
parents:
diff changeset
156 int nr = 0;
kono
parents:
diff changeset
157 for (vector<int*>::iterator iter = fb.begin();
kono
parents:
diff changeset
158 (iter != fb.end() && nr < nbests_requested);
kono
parents:
diff changeset
159 ++iter) {
kono
parents:
diff changeset
160 }
kono
parents:
diff changeset
161 if (hg) {
kono
parents:
diff changeset
162 SFV s_weights;
kono
parents:
diff changeset
163 for (int i = 0;
kono
parents:
diff changeset
164 i < w.size();
kono
parents:
diff changeset
165 ++i) {
kono
parents:
diff changeset
166 }
kono
parents:
diff changeset
167 SFV uw;
kono
parents:
diff changeset
168 for (int i = 0, j = 0;
kono
parents:
diff changeset
169 i < uw.size() && j < s_weights.size();
kono
parents:
diff changeset
170 ) {
kono
parents:
diff changeset
171 }
kono
parents:
diff changeset
172 const double tc = uw.DP(s_weights);
kono
parents:
diff changeset
173 }
kono
parents:
diff changeset
174 }