https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120090
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |pinskia at gcc dot
gnu.org
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #5)
> before:(and:SI (subreg:SI (unspec:QI [
> (mem:V8HI (reg/f:SI 98 [ pi128.0_1 ]) [0 *pi128.0_1+0 S16
> A128])
> (reg:V8HI 110 [ _16 ])
> (const_int 0 [0])
> ] UNSPEC_UNSIGNED_PCMP) 0)
> (const_int 255 [0xff]))
> after:(and:DI (clobber:DI (const_int 0 [0]))
> (const_int 255 [0xff]))
>
>
> clobber means we can't do it ...
Instead of rtl_hooks.gen_lowpart_no_emit return NULL, combine's gen_lowpart
returns a clobber.
This fixes the issue at hand:
```
diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
index 7bcbe11370f..ea730c4d9aa 100644
--- a/gcc/simplify-rtx.cc
+++ b/gcc/simplify-rtx.cc
@@ -1716,7 +1716,7 @@ simplify_context::simplify_unary_operation_1 (rtx_code
code, machine_mode mode,
&& INTVAL (XEXP (op, 1)) > 0)
{
rtx tem = rtl_hooks.gen_lowpart_no_emit (mode, XEXP (op, 0));
- if (tem)
+ if (tem && GET_CODE (tem) != CLOBBER)
return simplify_gen_binary (AND, mode, tem, XEXP (op, 1));
}
```
But nowhere in simplify-rtx.cc checks that gen_lowpart_no_emit will return
CLOBBER. Or should we wrap gen_lowpart_for_combine and return NULL when it is a
clobber ...
Still deciding.