[committed] Fix minor problem in stack probing

Message ID 6227dee3-744e-418d-bc09-edf7da1923af@ventanamicro.com
State Accepted
Headers
Series [committed] Fix minor problem in stack probing |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Jeff Law Oct. 16, 2023, 11:16 p.m. UTC
  probe_stack_range has an assert to capture the possibility that that 
expand_binop might not construct its result in the provided target 
(TEST_ADDR in this case).

We triggered that internally a little while ago.  I'm pretty sure it was 
in the testsuite, so no new testcase.  The fix is easy, copy the result 
into the proper target when needed.

Bootstrapped and regression tested on x86.  Pushed to the trunk.


Jeff
commit b626751a4e87b090531c648631df33ac20c4fab8
Author: Jeff Law <jlaw@ventanamicro.com>
Date:   Mon Oct 16 17:14:38 2023 -0600

    Fix minor problem in stack probing
    
    probe_stack_range has an assert to capture the possibility that that
    expand_binop might not construct its result in the provided target.
    
    We triggered that internally a little while ago.  I'm pretty sure it was in the
    testsuite, so no new testcase.  The fix is easy, copy the result into the
    proper target when needed.
    
    Bootstrapped and regression tested on x86.
    
    gcc/
            * explow.cc (probe_stack_range): Handle case when expand_binop
            does not construct its result in the expected location.
  

Patch

diff --git a/gcc/explow.cc b/gcc/explow.cc
index 6424c0802f0..0c03ac350bb 100644
--- a/gcc/explow.cc
+++ b/gcc/explow.cc
@@ -1818,7 +1818,10 @@  probe_stack_range (HOST_WIDE_INT first, rtx size)
 			   gen_int_mode (PROBE_INTERVAL, Pmode), test_addr,
 			   1, OPTAB_WIDEN);
 
-      gcc_assert (temp == test_addr);
+      /* There is no guarantee that expand_binop constructs its result
+	 in TEST_ADDR.  So copy into TEST_ADDR if necessary.  */
+      if (temp != test_addr)
+	emit_move_insn (test_addr, temp);
 
       /* Probe at TEST_ADDR.  */
       emit_stack_probe (test_addr);