aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAlex Samuel <samuel@gcc.gnu.org>2000-03-10 08:16:55 +0000
committerAlex Samuel <samuel@gcc.gnu.org>2000-03-10 08:16:55 +0000
commitd9d4fb433e86047a5bab699548322cfa745795d6 (patch)
tree03e5dea61e82a209e52f9313b2506ef3fc4b78a4 /include
parentea7f51a4af057b3a231b25fc037417373a5421cd (diff)
downloadgcc-d9d4fb433e86047a5bab699548322cfa745795d6.zip
gcc-d9d4fb433e86047a5bab699548322cfa745795d6.tar.gz
gcc-d9d4fb433e86047a5bab699548322cfa745795d6.tar.bz2
Changes in include:
* partition.h: New file. Changes in libiberty: * Makefile.in (CFILES): Add partition.c. (REQUIRED_OFILES): Add partition.o. (partition.o): New rule. * partition.c: New file. Changes in gcc: * Makefile.in (ssa.o): New rule. (OBJS): Add ssa.o. (STAGESTUFF): Add *.ssa and *.ussa. (mostlyclean): Delete *.ssa, *.ussa, */*.ssa, */*.ussa. * rtl.def (PHI): New RTL expression. * rtl.h (clear_log_links): New declaration. (convert_to_ssa): Likewise. (convert_from_ssa): Likewise. * flow.c (split_edge): If the entry node falls through to the split edge's source block, split the entry edge. (clear_log_links): New function. * toplev.c (ssa_dump): New variable. (flag_ssa): Likewise. (f_options): Add "ssa". (compile_file): Create SSA dump files. (rest_of_compilation): Go to and from SSA if enabled. (decide_d_option): Handle -de for SSA dump files. * ssa.c: New file. From-SVN: r32465
Diffstat (limited to 'include')
-rw-r--r--include/ChangeLog4
-rw-r--r--include/partition.h81
2 files changed, 85 insertions, 0 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index a73e5fe..be7061c 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2000-03-09 Alex Samuel <samuel@codesourcery.com>
+
+ * partition.h: New file.
+
2000-03-09 Zack Weinberg <zack@wolery.cumb.org>
* hashtab.h (struct htab): Add del_f.
diff --git a/include/partition.h b/include/partition.h
new file mode 100644
index 0000000..f49d67a
--- /dev/null
+++ b/include/partition.h
@@ -0,0 +1,81 @@
+/* List implentation of a partition of consecutive integers.
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ Contributed by CodeSourcery, LLC.
+
+ This file is part of GNU CC.
+
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* This package implements a partition of consecutive integers. The
+ elements are partitioned into classes. Each class is represented
+ by one of its elements, the canonical element, which is chosen
+ arbitrarily from elements in the class. The principal operations
+ on a partition are FIND, which takes an element, determines its
+ class, and returns the canonical element for that class, and UNION,
+ which unites the two classes that contain two given elements into a
+ single class.
+
+ The list implementation used here provides constant-time finds. By
+ storing the size of each class with the class's canonical element,
+ it is able to perform unions over all the classes in the partition
+ in O (N log N) time. */
+
+#ifndef _PARTITION_H
+#define _PARTITION_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <ansidecl.h>
+#include <stdio.h>
+
+struct partition_elem
+{
+ /* The canonical element that represents the class containing this
+ element. */
+ int class_element;
+ /* The next element in this class. Elements in each class form a
+ circular list. */
+ struct partition_elem* next;
+ /* The number of elements in this class. Valid only if this is the
+ canonical element for its class. */
+ unsigned class_count;
+};
+
+typedef struct partition_def
+{
+ /* The number of elements in this partition. */
+ int num_elements;
+ /* The elements in the partition. */
+ struct partition_elem elements[1];
+} *partition;
+
+extern partition partition_new PARAMS((int));
+extern void partition_delete PARAMS((partition));
+extern int partition_union PARAMS((partition,
+ int,
+ int));
+extern void partition_print PARAMS((partition,
+ FILE*));
+
+/* Returns the canonical element corresponding to the class containing
+ ELEMENT__ in PARTITION__. */
+
+#define partition_find(partition__, element__) \
+ ((partition__)->elements[(element__)].class_element)
+
+#endif /* _PARTITION_H */