On Thu, May 23, 2013 at 7:20 PM, Richard Henderson <r...@redhat.com> wrote: > On 05/23/2013 12:38 AM, Uros Bizjak wrote: >> 2013-05-23 Uros Bizjak <ubiz...@gmail.com> >> >> * config/alpha/alpha.md (unspec): Add UNSPEC_XFLT_COMPARE. >> * config/alpha/alpha.c (alpha_emit_xfloating_compare): Construct >> REG_EQUAL note as UNSPEC_XFLT_COMPARE unspec. >> >> Patch was bootstrapped and regression tested on alphaev68-linux-gnu. >> >> OK for mainline and release branches? >> >> [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57379 > > Ok.
Actually, backport uncovered the problem with different compares, which now shared the same REG_EQUAL note. Attached patch fixes this oversight. 2013-06-10 Uros Bizjak <ubiz...@gmail.com> * config/alpha/alpha.c (alpha_emit_xfloating_compare): Also use cmp_code to construct REG_EQUAL note. Tested on alphaev68-pc-linux-gnu and committed to mainline SVN. Uros. Index: alpha.c =================================================================== --- alpha.c (revision 199788) +++ alpha.c (working copy) @@ -3068,7 +3068,8 @@ alpha_emit_xfloating_compare (enum rtx_code *pcode out = gen_reg_rtx (DImode); /* What's actually returned is -1,0,1, not a proper boolean value. */ - note = gen_rtx_UNSPEC (DImode, gen_rtvec (2, op0, op1), UNSPEC_XFLT_COMPARE); + note = gen_rtx_fmt_ee (cmp_code, VOIDmode, op0, op1); + note = gen_rtx_UNSPEC (DImode, gen_rtvec (1, note), UNSPEC_XFLT_COMPARE); alpha_emit_xfloating_libcall (func, out, operands, 2, note); return out;