Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
af078bb0
Commit
af078bb0
authored
Dec 09, 2009
by
Xinliang David Li
Committed by
Xinliang David Li
Dec 09, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixing pr42337
From-SVN: r155111
parent
ab8d2734
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
192 additions
and
2 deletions
+192
-2
gcc/ChangeLog
+5
-0
gcc/testsuite/ChangeLog
+5
-0
gcc/testsuite/g++.dg/tree-ssa/pr42337.C
+173
-0
gcc/tree-ssa-pre.c
+9
-2
No files found.
gcc/ChangeLog
View file @
af078bb0
2009
-
12
-
09
Xinliang
David
Li
<
davidxl
@
google
.
com
>
PR
tree
-
optimization
/
42337
*
tree
-
ssa
-
pre
.
c
(
phi_translate_1
):
Push
and
Pop
SEEN
set
.
2009
-
12
-
09
Nathan
Froyd
<
froydnj
@
codesourcery
.
com
>
*
config
/
rs6000
/
vector
.
md
(
absv2sf2
,
negv2sf2
,
addv2sf3
,
subv2sf3
,
gcc/testsuite/ChangeLog
View file @
af078bb0
2009-12-09 Xinliang David Li <davidxl@google.com>
PR tree-optimization/42337
* g++.dg/tree-ssa/pr42337.C: New test.
2009-12-08 Tobias Burnus <burnus@net-b.de>
PR fortran/41711
...
...
gcc/testsuite/g++.dg/tree-ssa/pr42337.C
0 → 100644
View file @
af078bb0
// PR tree-optimize/42337
// { dg-do compile }
// { dg-options "-O2" }
template
<
class
_T1
,
class
_T2
>
struct
pair
{
_T2
second
;
};
template
<
typename
_Tp
>
inline
const
_Tp
&
max
(
const
_Tp
&
__a
,
const
_Tp
&
__b
)
{
}
template
<
typename
_ForwardIterator
,
typename
_Tp
,
typename
_Compare
>
_ForwardIterator
lower_bound
(
_ForwardIterator
__first
,
_ForwardIterator
__last
,
const
_Tp
&
__val
,
_Compare
__comp
)
{
}
template
<
class
_CharT
>
struct
char_traits
{};
template
<
typename
_Iterator
,
typename
_Container
>
class
__normal_iterator
{
public
:
typedef
_Iterator
iterator_type
;
__normal_iterator
&
operator
++
()
{
}
};
template
<
typename
_IteratorL
,
typename
_IteratorR
,
typename
_Container
>
inline
bool
operator
!=
(
const
__normal_iterator
<
_IteratorL
,
_Container
>&
__lhs
,
const
__normal_iterator
<
_IteratorR
,
_Container
>&
__rhs
)
{
}
template
<
typename
_Tp
>
class
new_allocator
{
public
:
typedef
_Tp
*
pointer
;
typedef
const
_Tp
*
const_pointer
;
};
template
<
typename
_Tp
>
class
allocator
:
public
new_allocator
<
_Tp
>
{
public
:
template
<
typename
_Tp1
>
struct
rebind
{
typedef
allocator
<
_Tp1
>
other
;
};
};
template
<
typename
_Arg
,
typename
_Result
>
struct
unary_function
{
};
template
<
typename
_Arg1
,
typename
_Arg2
,
typename
_Result
>
struct
binary_function
{
};
template
<
typename
_Tp
>
struct
less
:
public
binary_function
<
_Tp
,
_Tp
,
bool
>
{
};
template
<
typename
_Pair
>
struct
_Select1st
:
public
unary_function
<
_Pair
,
typename
_Pair
::
first_type
>
{
};
template
<
typename
_Tp
>
struct
_Rb_tree_iterator
{
typedef
_Tp
*
pointer
;
pointer
operator
->
()
const
{
}
};
template
<
typename
_Key
,
typename
_Val
,
typename
_KeyOfValue
,
typename
_Compare
,
typename
_Alloc
=
allocator
<
_Val
>
>
class
_Rb_tree
{
typedef
_Val
value_type
;
public
:
typedef
_Rb_tree_iterator
<
value_type
>
iterator
;
};
template
<
typename
_Key
,
typename
_Tp
,
typename
_Compare
=
less
<
_Key
>
,
typename
_Alloc
=
allocator
<
pair
<
const
_Key
,
_Tp
>
>
>
class
map
{
public
:
typedef
_Key
key_type
;
typedef
pair
<
const
_Key
,
_Tp
>
value_type
;
typedef
_Compare
key_compare
;
private
:
typedef
typename
_Alloc
::
template
rebind
<
value_type
>::
other
_Pair_alloc_type
;
typedef
_Rb_tree
<
key_type
,
value_type
,
_Select1st
<
value_type
>
,
key_compare
,
_Pair_alloc_type
>
_Rep_type
;
public
:
typedef
typename
_Pair_alloc_type
::
pointer
pointer
;
typedef
typename
_Rep_type
::
iterator
iterator
;
iterator
find
(
const
key_type
&
__x
)
{
}
};
template
<
typename
_Tp
,
typename
_Alloc
>
struct
_Vector_base
{
typedef
typename
_Alloc
::
template
rebind
<
_Tp
>::
other
_Tp_alloc_type
;
};
template
<
typename
_Tp
,
typename
_Alloc
=
allocator
<
_Tp
>
>
class
vector
:
protected
_Vector_base
<
_Tp
,
_Alloc
>
{
typedef
_Vector_base
<
_Tp
,
_Alloc
>
_Base
;
typedef
typename
_Base
::
_Tp_alloc_type
_Tp_alloc_type
;
public
:
typedef
typename
_Tp_alloc_type
::
pointer
pointer
;
typedef
typename
_Tp_alloc_type
::
const_pointer
const_pointer
;
typedef
__normal_iterator
<
pointer
,
vector
>
iterator
;
typedef
__normal_iterator
<
const_pointer
,
vector
>
const_iterator
;
iterator
begin
()
{
}
const_iterator
begin
()
const
{
}
const_iterator
end
()
const
{
}
unsigned
long
size
()
const
{
}
};
class
SSC
{
public
:
SSC
()
{}
SSC
(
const
int
&
cs
);
};
extern
int
flag
;
struct
TP
{
const
int
cl_
;
const
vector
<
int
>
&
its_
;
int
max_s_
;
};
double
foo
(
TP
*
p
);
map
<
int
,
int
>
cs_
;
template
<
typename
T
>
class
vector32
{
public
:
typedef
T
&
reference
;
typedef
T
*
iterator
;
typedef
const
T
*
const_iterator
;
iterator
begin
()
{
return
data_
;
}
iterator
end
()
{
return
data_
+
size_
;
}
long
unsigned
int
size
()
const
{
return
size_
;
}
T
*
data_
;
unsigned
size_
;
};
struct
SF
:
public
pair
<
unsigned
long
long
,
double
>
{
};
template
<
typename
KEY
,
typename
VALUE
>
class
SFVT
{
private
:
typedef
vector32
<
SF
>
Container
;
typedef
typename
Container
::
const_iterator
CI
;
mutable
Container
v_
;
mutable
bool
sorted_
;
struct
Cmp
:
public
binary_function
<
SF
,
SF
,
bool
>
{
};
__attribute__
((
always_inline
))
VALUE
IS
(
const
SFVT
&
sfv
)
const
{
if
(
sfv
.
v_
.
size
()
<
v_
.
size
())
{
return
sfv
.
IS
(
*
this
);
}
else
{
VALUE
sum
=
0
.
0
;
CI
beg
=
sfv
.
v_
.
begin
();
CI
end
=
sfv
.
v_
.
end
();
for
(
CI
i
=
v_
.
begin
();
i
!=
v_
.
end
();
++
i
)
{
beg
=
lower_bound
(
beg
,
end
,
*
i
,
Cmp
());
if
(
beg
==
end
)
{
return
sum
;
}
}
}
}
public
:
explicit
SFVT
(
const
int
capacity
=
0
)
:
sorted_
(
true
)
{
}
long
unsigned
int
size
()
const
{
}
__attribute__
((
always_inline
))
VALUE
DP
(
const
SFVT
&
sfv
)
const
{
return
IS
(
sfv
);
}
};
class
SFV
:
public
SFVT
<
unsigned
long
long
,
double
>
{
};
class
Edge
;
extern
int
flag2
;
double
foo
(
TP
*
p
)
{
int
nbests_requested
=
max
(
p
->
max_s_
,
flag
);
map
<
int
,
int
>::
iterator
it
=
cs_
.
find
(
p
->
cl_
);
int
*
c
=
&
it
->
second
;
for
(
vector
<
int
>::
const_iterator
iter
=
p
->
its_
.
begin
();
iter
!=
p
->
its_
.
end
();
++
iter
)
{
}
vector
<
int
*>
fb
;
vector
<
double
>
w
;
int
*
hg
=
0
;
if
(
flag2
==
10
)
{
hg
=
&
flag2
;
}
int
nr
=
0
;
for
(
vector
<
int
*>::
iterator
iter
=
fb
.
begin
();
(
iter
!=
fb
.
end
()
&&
nr
<
nbests_requested
);
++
iter
)
{
}
if
(
hg
)
{
SFV
s_weights
;
for
(
int
i
=
0
;
i
<
w
.
size
();
++
i
)
{
}
SFV
uw
;
for
(
int
i
=
0
,
j
=
0
;
i
<
uw
.
size
()
&&
j
<
s_weights
.
size
();
)
{
}
const
double
tc
=
uw
.
DP
(
s_weights
);
}
}
gcc/tree-ssa-pre.c
View file @
af078bb0
...
...
@@ -1490,10 +1490,17 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2,
continue
;
else
{
pre_expr
leader
,
result
;
bitmap
temp
=
BITMAP_ALLOC
(
&
grand_bitmap_obstack
);
unsigned
int
op_val_id
=
VN_INFO
(
newnary
.
op
[
i
])
->
value_id
;
pre_expr
leader
=
find_leader_in_sets
(
op_val_id
,
set1
,
set2
);
pre_expr
result
=
phi_translate_1
(
leader
,
set1
,
set2
,
bitmap_copy
(
temp
,
seen
);
leader
=
find_leader_in_sets
(
op_val_id
,
set1
,
set2
);
result
=
phi_translate_1
(
leader
,
set1
,
set2
,
pred
,
phiblock
,
seen
);
bitmap_copy
(
seen
,
temp
);
BITMAP_FREE
(
temp
);
if
(
result
&&
result
!=
leader
)
{
tree
name
=
get_representative_for
(
result
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment