[PATCH for H8/300]:Fix ICE for H8SX

Kazu Hirata kazu@codesourcery.com
Sat Jun 24 16:30:00 GMT 2006


Hi Naveen,

> The instructions "XOR" and "BNOT" are not getting generated for H8SX
> when optimization options are enabled. Instead it gives ICE.

Any analysis?

> const unsigned char baCryptX[]="A";
> 
> void TEST(unsigned char *ptrbVal)
> {
>   ptrbVal[0]^=baCryptX[0];
> }
> 
> int main()
> {
>   return 0;
> }

Please turn this into a testcase suitable for the testsuite.  You shouldn't need 
main.  Since this is an ICE on valid code, gcc.c-torture/compile would be 
appropriate.  The file name for the testcase can be something like 20060624-1.c.

>         * gcc/config/h8300/h8300.md: A new insn xorqi3_2 is added.
> 	  xorqi3_1 - Remove the condition for H8SX target.

Note that the path is relative from the location of the closest ChangeLog in the 
directory hierarchy, and that there is a separate ChangeLog for the testsuite, 
namely gcc/testsuite/ChangeLog.

> +(define_insn "*xorqi3_2"
> +  [(set (match_operand:QI 0 "bit_operand" "=rQ,r")
> +        (xor:QI (match_operand:QI 1 "bit_operand" "%0,WU")
> +                (match_operand:QI 2 "h8300_src_operand" "rQi,IP1>X")))]
> +  "TARGET_H8300SX"
> +  "@
> +   xor\\t %X2,%X0
> +   bnot\\t %V2,%R0"
> +  [(set_attr "length" "*,8")
> +   (set_attr "length_table" "logicb,*")
> +   (set_attr "cc" "set_znv,none_0hit")])

I'd suggest a pattern name like *xorqi3_h8300sx to indicate that the pattern is 
only for H8SX.

>  (define_insn "xorqi3_1"
>    [(set (match_operand:QI 0 "bit_operand" "=r,U")
>  	(xor:QI (match_operand:QI 1 "bit_operand" "%0,0")
>  		(match_operand:QI 2 "h8300_src_operand" "rQi,n")))]
> -  "TARGET_H8300SX || register_operand (operands[0], QImode)
> +  "register_operand (operands[0], QImode)
>     || single_one_operand (operands[2], QImode)"
>    "@
>     xor\\t%X2,%X0
>     bnot\\t%V2,%R0"
> -  [(set_attr "length" "*,8")
> -   (set_attr "length_table" "logicb,*")
> +  [(set_attr "length" "2,8")
>     (set_attr "cc" "set_znv,none_0hit")])

I'd like you to put !TARGET_H8SX in the condition for documentation purposes. 
(GCC's pattern matching looks for the first match in the machine description file.)

Kazu Hirata



More information about the Gcc-patches mailing list