PR target/16909: [3.5 Regression] "unrecognizable insn" ICE

H. J. Lu hjl@lucon.org
Sat Aug 7 17:39:00 GMT 2004


On Sat, Aug 07, 2004 at 09:31:00AM -0700, H. J. Lu wrote:
> during bootstrap
> Reply-To: 
> 
> There is a typo in
> 
> http://gcc.gnu.org/ml/gcc-patches/2004-08/msg00305.html
> 
> I will check in this patch as an obvious fix.
> 

Well, my patch isn't enough. The code

+	    while (repcount-- > 0)
+	      {
+		rtx mem = adjust_automodify_address_nv (dst,
+							GET_MODE
(zeroreg),
+							destreg,
offset);
+		emit_insn (gen_strset (destreg, mem, zeroreg));
+		offset += size;
+	      }

in

http://gcc.gnu.org/ml/gcc-patches/2004-08/msg00305.html

doesn't look right. It looks like "strset" won't take DImode and
adjust_automodify_address_nv assumes it does. There is
"*strsetdi_rex_1". But it is only used when

"TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)"

So the code will work for

const int x86_single_stringop = m_386 | m_PENT4 | m_NOCONA;

But not the default x86_64 target. Maybe I shouldn't complain :-).


H.J.
> 
> H.J.
> ---
> 2004-08-06  H.J. Lu  <hongjiu.lu@intel.com>
> 
> 	* config/i386/i386.c (ix86_expand_clrmem): Properly call
> 	gen_strset for 64bit target.
> 
> --- gcc/config/i386/i386.c.64	2004-08-06 11:07:16.000000000 -0700
> +++ gcc/config/i386/i386.c	2004-08-07 09:23:31.006373343 -0700
> @@ -11569,7 +11569,10 @@ ix86_expand_clrmem (rtx dst, rtx count_e
>  		rtx mem = adjust_automodify_address_nv (dst,
>  							GET_MODE (zeroreg),
>  							destreg, offset);
> -		emit_insn (gen_strset (destreg, mem, zeroreg));
> +		emit_insn (gen_strset (destreg, mem,
> +				       (TARGET_64BIT
> +					? gen_rtx_SUBREG (SImode, zeroreg, 0)
> +					: zeroreg)));
>  		offset += size;
>  	      }
>  	  else



More information about the Gcc-patches mailing list