Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
5cfbace4
Commit
5cfbace4
authored
Feb 18, 2009
by
Matthias Braun
Browse files
small changes to make unionfind a tiny bit more efficient and easier to use
[r25523]
parent
ac49539a
Changes
2
Hide whitespace changes
Inline
Side-by-side
include/libfirm/adt/unionfind.h
View file @
5cfbace4
...
...
@@ -37,13 +37,13 @@
* Call this to initialize an array of @p count elements to be used by the
* union find functions.
*
* @param data The array (you have to allocate it yourself)
* @param from The first element that should be initialized
* @param to the index of the first element which is not initialized anymore
* @param data The array (you have to allocate it yourself)
* @param n_elems number of elements handled by the datastructure
*/
static
inline
void
uf_init
(
int
*
data
,
int
from
,
int
to
)
{
int
i
;
for
(
i
=
from
;
i
<
to
;
++
i
)
{
static
inline
void
uf_init
(
int
*
data
,
size_t
n_elems
)
{
size_t
i
;
for
(
i
=
0
;
i
<
n_elems
;
++
i
)
{
data
[
i
]
=
-
1
;
}
}
...
...
@@ -58,15 +58,18 @@ static inline void uf_init(int* data, int from, int to) {
* @return 0 if the new union set is represented by set1, 1 if it is
* represented by set2
*/
static
inline
int
uf_union
(
int
*
data
,
int
set1
,
int
set2
)
{
int
d1
=
data
[
set1
];
int
d2
=
data
[
set2
];
static
inline
int
uf_union
(
int
*
data
,
int
set1
,
int
set2
)
{
int
d1
;
int
d2
;
int
newcount
;
if
(
set1
==
set2
)
return
0
;
/* need 2 set representatives */
d1
=
data
[
set1
];
d2
=
data
[
set2
];
assert
(
d1
<
0
&&
d2
<
0
);
newcount
=
d1
+
d2
;
...
...
@@ -91,7 +94,8 @@ static inline int uf_union(int* data, int set1, int set2) {
* @param e The element
* @return The representative of the set that contains @p e
*/
static
inline
int
uf_find
(
int
*
data
,
int
e
)
{
static
inline
int
uf_find
(
int
*
data
,
int
e
)
{
/* go through list to find representative */
int
repr
=
e
;
while
(
data
[
repr
]
>=
0
)
{
...
...
@@ -108,4 +112,4 @@ static inline int uf_find(int* data, int e) {
return
repr
;
}
#endif
/* FIRM_ADT_UNIONFIND_H */
#endif
ir/be/bespillslots.c
View file @
5cfbace4
...
...
@@ -359,7 +359,7 @@ static void do_greedy_coalescing(be_fec_env_t *env)
spillslot_unionfind
=
ALLOCAN
(
int
,
spillcount
);
spilllist
=
ALLOCAN
(
spill_t
*
,
spillcount
);
uf_init
(
spillslot_unionfind
,
0
,
spillcount
);
uf_init
(
spillslot_unionfind
,
spillcount
);
DEBUG_ONLY
(
memset
(
spilllist
,
0
,
spillcount
*
sizeof
(
spilllist
[
0
]));
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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