Re: [PATCH v2] PR middle-end/123236: Simplify (int)((long long)x >> 4)

Torbjorn SVENSSON <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
Hi,

This change introduces a (size) regression for arm-none-eabi:


Testing arm/pr42879.c
doing compile
Executing on host: /build/r17-2833-g32657f29f91871/bin/arm-none-eabi-gcc  /build/gcc_src/gcc/testsuite/gcc.target/arm/pr42879.c  -mthumb -march=armv7-m -mcpu=cortex-m3 -mfloat-abi=soft -mfpu=auto   -fdiagnostics-plain-output  -mthumb -Os -ffat-lto-objects -fno-ident -S     -o pr42879.s    (timeout = 800)
spawn -ignore SIGHUP /build/r17-2833-g32657f29f91871/bin/arm-none-eabi-gcc /build/gcc_src/gcc/testsuite/gcc.target/arm/pr42879.c -mthumb -march=armv7-m -mcpu=cortex-m3 -mfloat-abi=soft -mfpu=auto -fdiagnostics-plain-output -mthumb -Os -ffat-lto-objects -fno-ident -S -o pr42879.s
pid is 180 -180
pid is -1
output is  status 0

PASS: gcc.target/arm/pr42879.c (test for excess errors)
FAIL: gcc.target/arm/pr42879.c scan-assembler lsls



$ /build/r17-2412-g2fcbe075ec3b32/bin/arm-none-eabi-gcc  /build/gcc_src/gcc/testsuite/gcc.target/arm/pr42879.c -mthumb -march=armv7-m -mcpu=cortex-m3 -mfloat-abi=soft -mfpu=auto -Os -fno-ident -S -o -
         .cpu cortex-m3
         .arch armv7-m
         .fpu softvfp
         .eabi_attribute 20, 1
         .eabi_attribute 21, 1
         .eabi_attribute 23, 3
         .eabi_attribute 24, 1
         .eabi_attribute 25, 1
         .eabi_attribute 26, 1
         .eabi_attribute 30, 4
         .eabi_attribute 34, 1
         .eabi_attribute 18, 4
         .file   "pr42879.c"
         .text
         .align  1
         .global foo
         .syntax unified
         .thumb
         .thumb_func
         .type   foo, %function
foo:
         @ args = 0, pretend = 0, frame = 0
         @ frame_needed = 0, uses_anonymous_args = 0
         @ link register save eliminated.
         ldrb    r3, [r0]        @ zero_extendqisi2
         lsls    r3, r3, #31
         bmi     .L2
         b       bar
.L2:
         movs    r0, #1
         bx      lr
         .size   foo, .-foo


$ /build/r17-2413-ge46d96d20bbfa7/bin/arm-none-eabi-gcc  /build/gcc_src/gcc/testsuite/gcc.target/arm/pr42879.c -mthumb -march=armv7-m -mcpu=cortex-m3 -mfloat-abi=soft -mfpu=auto -Os -fno-ident -S -o -
         .cpu cortex-m3
         .arch armv7-m
         .fpu softvfp
         .eabi_attribute 20, 1
         .eabi_attribute 21, 1
         .eabi_attribute 23, 3
         .eabi_attribute 24, 1
         .eabi_attribute 25, 1
         .eabi_attribute 26, 1
         .eabi_attribute 30, 4
         .eabi_attribute 34, 1
         .eabi_attribute 18, 4
         .file   "pr42879.c"
         .text
         .align  1
         .global foo
         .syntax unified
         .thumb
         .thumb_func
         .type   foo, %function
foo:
         @ args = 0, pretend = 0, frame = 0
         @ frame_needed = 0, uses_anonymous_args = 0
         @ link register save eliminated.
         ldrb    r3, [r0]        @ zero_extendqisi2
         and     r3, r3, #1
         cbnz    r3, .L2
         b       bar
.L2:
         movs    r0, #1
         bx      lr
         .size   foo, .-foo



Kind regards,
Torbjörn

On 2026-07-14 11:07, Richard Biener wrote:
> On Fri, Jul 10, 2026 at 7:44 PM Roger Sayle <[email protected]> wrote:
>>
>>
>> Long story... Back in January I proposed the following patch:
>> https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705292.html
>> which contained two pieces, one in combine, the other in simplify-rtx.
>> Both of which were initially approved by Jeff Law here
>> https://gcc.gnu.org/pipermail/gcc-patches/2026-May/715595.html
>> but then Richard Sandiford pointed out the combine piece might
>> cause problems on RISC machines, and suggested improvements.
>> https://gcc.gnu.org/pipermail/gcc-patches/2026-May/715668.html
>>
>> In addition to making Richard's recommended changes, I've also
>> decided to split the patch into two, to enable bisection and
>> isolate these transformations [in case Richard S's fears come
>> to pass and the combine transformation needs to be reverted].
>>
>> This is the "safe" (or less controversial) half.  Hopefully,
>> folks are (still) happy for this bit to be committed?
>> p.s. the second and third hunks are just micro-optimizations;
>> we don't need to call simplify_gen_unary (TRUNCATE, ...)
>> if the operand already has the correct mode.  The significant
>> change is that the modes don't need to match, and the operand
>> need not be a register [combine can put anything in a SUBREG].
>>
>> This patch has been tested on x86_64-pc-linux-gnu with make bootstrap
>> and make -k check, both with and without --target_board=unix{-m32},
>> with no new failures.  Ok for mainline?
> 
> OK.
> 
> Thanks,
> Richard.
> 
>>
>> 2026-07-10  Roger Sayle  <[email protected]>
>>
>> gcc/ChangeLog
>>          PR rtl-optimization/123236
>>          * simplify-rtx.cc (simplify_context::simplify_truncation): Handle
>>          cases where a ZERO_EXTRACT or SIGN_EXTRACT has a different mode
>>          to (but at least as wide as) its first operand.
>>
>> gcc/testsuite/ChangeLog
>>          PR rtl-optimization/123236
>>          * gcc.target/i386/pr123236-1.c: New test case.
>>
>>
>> Thank again,
>> Roger
>> --
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.