New fibonacci heap and sreal enhancement.

Hello.

Following patch set introduces new template class for fibonacci heap
that is mainly utilized by IPA inliner. Apart from that, I also enhanced
existing sreal implementation so that it can also handle negative numbers.

I was primary motivated by Honza, because current heap implementation
in ipa-inline.c suffers from round off problems.

I was able to run WPA phase which was by about ~3% slower than current
implementation.

All patches can bootstrap and no regression was seen on x86_64-linux-pc.

I welcome any remarks connected to the patch set.

Thanks,
Martin

(please ignore following ChangeLog diff)
New template fibonacci_heap class introduced.

gcc/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* fibonacci_heap.h: New file.
	* ipa-inline.c (update_edge_key): New heap API is used.
	(update_caller_keys): Likewise.
	(update_callee_keys): Likewise.
	(lookup_recursive_calls): Likewise.
	(recursive_inlining): Likewise.
	(add_new_edges_to_heap): Likewise.
	(heap_edge_removal_hook): Likewise.
	(inline_small_functions): Likewise.
fibonacci_heap is used for bb-reoder purpose.

gcc/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* bb-reorder.c (mark_bb_visited): New fibonacci_heap is used.
	(find_traces): Likewise.
	(find_traces_1_round): Likewise.
tracer ported to new fibonacci_heap data structure.

2014-11-13  Martin Liska  <mliska@suse.cz>

	* tracer.c (tail_duplicate): New fibonacci_heap class is used.
bt-load is ported to fibonacci_heap.

gcc/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* bt-load.c (add_btr_def): New fibonacci_heap is used.
	(migrate_btr_defs): Likewise.
fibonacci_heap is used for var-tracking.

gcc/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* var-tracking.c (vt_find_locations): New fibonacci_node is used.
Old libiberty fib_heap removed.

gcc/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* bb-reorder.c (find_traces_1_round): Old fibheap_t type removed.
	* bt-load.c: Include of fibheap.h is removed.
	* cgraphunit.c: Likewise.
	* config/i386/i386.c: Likewise.
	* ipa-inline.c: Likewise.
	* var-tracking.c: Likewise.

include/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* fibheap.h: Remove.

libiberty/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* Makefile.in: Remove.
	* fibheap.c: Remove.
Negative numbers added for sreal class.

gcc/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* predict.c (propagate_freq): More elegant sreal API is used.
	(estimate_bb_frequencies): New static constants defined by sreal
	replace precomputed ones.
	* sreal.c (sreal::normalize): New function.
	(sreal::to_int): Likewise.
	(sreal::operator+): Likewise.
	(sreal::operator-): Likewise.
	* sreal.h: Definition of new functions added.
ipa-inline uses sreal for as fibonacci_heap template argument.

gcc/ChangeLog:

2014-11-13  Martin Liska  <mliska@suse.cz>

	* ipa-inline.c (edge_badness): long is replaced by sreal
	as fibonacci_heap template type.
	(update_edge_key): Likewise.
	(inline_small_functions): Likewise.
	* sreal.h (inline sreal operator<<): New function added.
	(inline sreal operator>>): Likewise.