Message ID | 2676a5d7-678c-4879-a296-c9ce13c830d9@gjlay.de |
---|---|
State | New |
Headers | show |
Series | [avr] PR114975: Better 8-bit popcount detection. | expand |
On 5/7/24 11:25 AM, Georg-Johann Lay wrote: > Add a pattern for better popcount detection. > > Ok for master? > > Johann > > -- > > AVR: target/114975 - Add combine-pattern for __popcountqi2. > > PR target/114975 > gcc/ > * config/avr/avr.md: Add combine pattern for > 8-bit popcount detection. > > gcc/testsuite/ > * gcc.target/avr/pr114975-popcount.c: New test. OK jeff
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 97f42be7729..d4fcff46123 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -8527,6 +8542,19 @@ (define_expand "popcountsi2" operands[2] = gen_reg_rtx (HImode); }) +(define_insn_and_split "*popcounthi2.split8" + [(set (reg:HI 24) + (zero_extend:HI (popcount:QI (match_operand:QI 0 "register_operand"))))] + "! reload_completed" + { gcc_unreachable(); } + "&& 1" + [(set (reg:QI 24) + (match_dup 0)) + (set (reg:QI 24) + (popcount:QI (reg:QI 24))) + (set (reg:QI 25) + (const_int 0))]) + (define_insn_and_split "*popcounthi2.libgcc_split" [(set (reg:HI 24) (popcount:HI (reg:HI 24)))] diff --git a/gcc/testsuite/gcc.target/avr/pr114975-popcount.c b/gcc/testsuite/gcc.target/avr/pr114975-popcount.c new file mode 100644 index 00000000000..87eb56b56c5 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/pr114975-popcount.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-Os" } */ + +typedef __UINT8_TYPE__ uint8_t; + +uint8_t use_pop1 (int y, uint8_t x) +{ + return 1 + __builtin_popcount (x); +} + +uint8_t use_pop2 (uint8_t x) +{ + x += 1; + return 1 - __builtin_popcount (x); +} + +/* { dg-final { scan-assembler-times "__popcountqi2" 2 } } */