This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/51933] [4.7 regression] wrong code due to -free
- From: "ebotcazou at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sat, 21 Jan 2012 21:27:40 +0000
- Subject: [Bug rtl-optimization/51933] [4.7 regression] wrong code due to -free
- Auto-submitted: auto-generated
- References: <bug-51933-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51933
Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |NEW
AssignedTo|ebotcazou at gcc dot |unassigned at gcc dot
|gnu.org |gnu.org
--- Comment #5 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2012-01-21 21:27:40 UTC ---
> But then when make_defs_and_copies_lists is called on the QImode -> DImode
> extension, we reach:
> /* Initialize the work list. */
> if (!get_defs (extend_insn, src_reg, &work_list))
> {
> VEC_free (rtx, heap, work_list);
> /* The number of defs being equal to zero can only mean that all the
> definitions have been previously merged. */
> return 2;
> }
> and because the definition has been changed already. But nothing performs the
> ext_src_mode check that used to be performed otherwise.
> So we either need to do the src mode checking earlier when we haven't started
> modifying insns (in add_removable_extension?), or we'd need to look even at the
> newly added defs and see what mode they extend from.
OK, I didn't realize that there could be an implicit truncation hidden within
an extension. And I think that your change to add_removable_extension is fine,
as it still leaves the new flavor of the pass more powerful than the old one.
The other PR is a different problem.