+2017-05-02 Martin Liska <mliska@suse.cz>
+
+ PR lto/79489.
+ * lto-streamer-in.c (lto_read_tree_1): Remove
+ LTO_STREAMER_DEBUG.
+ * lto-streamer.c (struct tree_hash_entry): Likewise.
+ (struct tree_entry_hasher): Likewise.
+ (tree_entry_hasher::hash): Likewise.
+ (tree_entry_hasher::equal): Likewise.
+ (lto_streamer_init): Likewise.
+ (lto_orig_address_map): Likewise.
+ (lto_orig_address_get): Likewise.
+ (lto_orig_address_remove): Likewise.
+ * lto-streamer.h: Likewise.
+ * tree-streamer-in.c (streamer_alloc_tree): Likewise.
+ * tree-streamer-out.c (streamer_write_tree_header): Likewise.
+
2017-05-02 Sebastian Peryt <sebastian.peryt@intel.com>
* config/i386/avx512fintrin.h (_mm_mask_add_round_sd)
&& TREE_CODE (expr) != FUNCTION_DECL
&& TREE_CODE (expr) != TRANSLATION_UNIT_DECL)
DECL_INITIAL (expr) = stream_read_tree (ib, data_in);
-
-#ifdef LTO_STREAMER_DEBUG
- /* Remove the mapping to RESULT's original address set by
- streamer_alloc_tree. */
- lto_orig_address_remove (expr);
-#endif
}
/* Read the physical representation of a tree node with tag TAG from
lto_section_name[i], lto_stats.section_size[i]);
}
-
-#ifdef LTO_STREAMER_DEBUG
-struct tree_hash_entry
-{
- tree key;
- intptr_t value;
-};
-
-struct tree_entry_hasher : nofree_ptr_hash <tree_hash_entry>
-{
- static inline hashval_t hash (const tree_hash_entry *);
- static inline bool equal (const tree_hash_entry *, const tree_hash_entry *);
-};
-
-inline hashval_t
-tree_entry_hasher::hash (const tree_hash_entry *e)
-{
- return htab_hash_pointer (e->key);
-}
-
-inline bool
-tree_entry_hasher::equal (const tree_hash_entry *e1, const tree_hash_entry *e2)
-{
- return (e1->key == e2->key);
-}
-
-static hash_table<tree_entry_hasher> *tree_htab;
-#endif
-
/* Initialization common to the LTO reader and writer. */
void
handle it. */
if (flag_checking)
streamer_check_handled_ts_structures ();
-
-#ifdef LTO_STREAMER_DEBUG
- tree_htab = new hash_table<tree_entry_hasher> (31);
-#endif
}
&& !seen_error ());
}
-
-#ifdef LTO_STREAMER_DEBUG
-/* Add a mapping between T and ORIG_T, which is the numeric value of
- the original address of T as it was seen by the LTO writer. This
- mapping is useful when debugging streaming problems. A debugging
- session can be started on both reader and writer using ORIG_T
- as a breakpoint value in both sessions.
-
- Note that this mapping is transient and only valid while T is
- being reconstructed. Once T is fully built, the mapping is
- removed. */
-
-void
-lto_orig_address_map (tree t, intptr_t orig_t)
-{
- struct tree_hash_entry ent;
- struct tree_hash_entry **slot;
-
- ent.key = t;
- ent.value = orig_t;
- slot = tree_htab->find_slot (&ent, INSERT);
- gcc_assert (!*slot);
- *slot = XNEW (struct tree_hash_entry);
- **slot = ent;
-}
-
-
-/* Get the original address of T as it was seen by the writer. This
- is only valid while T is being reconstructed. */
-
-intptr_t
-lto_orig_address_get (tree t)
-{
- struct tree_hash_entry ent;
- struct tree_hash_entry **slot;
-
- ent.key = t;
- slot = tree_htab->find_slot (&ent, NO_INSERT);
- return (slot ? (*slot)->value : 0);
-}
-
-
-/* Clear the mapping of T to its original address. */
-
-void
-lto_orig_address_remove (tree t)
-{
- struct tree_hash_entry ent;
- struct tree_hash_entry **slot;
-
- ent.key = t;
- slot = tree_htab->find_slot (&ent, NO_INSERT);
- gcc_assert (slot);
- free (*slot);
- tree_htab->clear_slot (slot);
-}
-#endif
-
-
/* Check that the version MAJOR.MINOR is the correct version number. */
void
#include "gcov-io.h"
#include "diagnostic.h"
-/* Define when debugging the LTO streamer. This causes the writer
- to output the numeric value for the memory address of the tree node
- being emitted. When debugging a problem in the reader, check the
- original address that the writer was emitting using lto_orig_address_get.
- With this value, set a breakpoint in the writer (e.g., lto_output_tree)
- to trace how the faulty node is being emitted. */
-/* #define LTO_STREAMER_DEBUG 1 */
-
/* The encoding for a function consists of the following sections:
1) The header.
extern void print_lto_report (const char *);
extern void lto_streamer_init (void);
extern bool gate_lto_out (void);
-#ifdef LTO_STREAMER_DEBUG
-extern void lto_orig_address_map (tree, intptr_t);
-extern intptr_t lto_orig_address_get (tree);
-extern void lto_orig_address_remove (tree);
-#endif
extern void lto_check_version (int, int, const char *);
extern void lto_streamer_hooks_init (void);
{
enum tree_code code;
tree result;
-#ifdef LTO_STREAMER_DEBUG
- HOST_WIDE_INT orig_address_in_writer;
-#endif
result = NULL_TREE;
-#ifdef LTO_STREAMER_DEBUG
- /* Read the word representing the memory address for the tree
- as it was written by the writer. This is useful when
- debugging differences between the writer and reader. */
- orig_address_in_writer = streamer_read_hwi (ib);
- gcc_assert ((intptr_t) orig_address_in_writer == orig_address_in_writer);
-#endif
-
code = lto_tag_to_tree_code (tag);
/* We should never see an SSA_NAME tree. Only the version numbers of
result = make_node (code);
}
-#ifdef LTO_STREAMER_DEBUG
- /* Store the original address of the tree as seen by the writer
- in RESULT's aux field. This is useful when debugging streaming
- problems. This way, a debugging session can be started on
- both writer and reader with a breakpoint using this address
- value in both. */
- lto_orig_address_map (result, (intptr_t) orig_address_in_writer);
-#endif
-
return result;
}
tag = lto_tree_code_to_tag (code);
streamer_write_record_start (ob, tag);
- /* The following will cause bootstrap miscomparisons. Enable with care. */
-#ifdef LTO_STREAMER_DEBUG
- /* This is used mainly for debugging purposes. When the reader
- and the writer do not agree on a streamed node, the pointer
- value for EXPR can be used to track down the differences in
- the debugger. */
- gcc_assert ((HOST_WIDE_INT) (intptr_t) expr == (intptr_t) expr);
- streamer_write_hwi (ob, (HOST_WIDE_INT) (intptr_t) expr);
-#endif
-
/* The text in strings and identifiers are completely emitted in
the header. */
if (CODE_CONTAINS_STRUCT (code, TS_STRING))