]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[committed] Fix length computation of single bit bitfield extraction on H8
authorJeff Law <jlaw@ventanamicro.com>
Sun, 10 Dec 2023 17:05:18 +0000 (10:05 -0700)
committerJeff Law <jlaw@ventanamicro.com>
Sun, 10 Dec 2023 17:05:18 +0000 (10:05 -0700)
Various approaches are used to optimize extracting a sign extended single bit
bitfield.  The length computation of 10 bytes was conservatively correct, but
inaccurate.

In particular when the bit we want is in the low half word we don't need the
move high half to low half instruction.  Account for that in the length
computation.

This was spotted when looking at regressions in the generalized signed bitfield
extraction pattern.

This has been regression tested on the H8 port.

gcc/
* config/h8300/combiner.md (single bit signed bitfield extraction): Fix
length computation when the bit we want is in the low half word.

gcc/config/h8300/combiner.md

index e1179b5fea61a5cd7e637a38a52aeccab4f72d51..cce187805c72186ebabb170d21f9c7b4ef30b654 100644 (file)
      to get that bit into the destination, properly extended.  */
   return "subx\t%s0,%s0\;exts.w %T0\;exts.l %0";
 }
-  [(set_attr "length" "10")])
+  [(set (attr "length") (symbol_ref "INTVAL (operands[2]) >= 16 ? 10 : 8"))])
 
 ;; For shift counts >= 16 we can always do better than the
 ;; generic sequences.  Other patterns handle smaller counts.