------- Comment #14 from mikpe at it dot uu dot se 2010-09-19 15:30 -------
On the trivial sreal.c test case the dumps (-fdump-rtl-all -fdump-tree-all)
from stage1 and stage2 start to diverge at `150r.expand':
diff -ru dumps1/sreal.c.150r.expand dumps2/sreal.c.150r.expand
--- dumps1/sreal.c.150r.expand 2010-09-19 17:20:07.000000000 +0200
+++ dumps2/sreal.c.150r.expand 2010-09-19 17:20:36.000000000 +0200
@@ -26,8 +26,8 @@
(insn 7 6 8 3 (parallel [
(set (reg:DI 137)
- (plus:DI (reg:DI 136)
- (reg:DI 136)))
+ (ashift:DI (reg:DI 136)
+ (const_int 1 [0x1])))
(clobber (reg:CC 24 cc))
]) sreal.c:3 -1
(nil))
The immediately preceeding dump (149t.optimized) is as follows for both stages:
;; Function normalize (normalize)
normalize (long long unsigned int * sreal_sig)
{
long long unsigned int D.2004;
long long unsigned int D.2003;
<bb 2>:
D.2003_2 = *sreal_sig_1(D);
D.2004_3 = D.2003_2 << 1;
*sreal_sig_1(D) = D.2004_3;
return;
}
I'll try mixing stage1 and stage2 .o files next.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45445