From: Jakub Jelinek Date: Fri, 19 Jan 2024 09:01:43 +0000 (+0100) Subject: lower-bitint: Don't use m_loads for loads used in GIMPLE_ASM [PR113464] X-Git-Tag: basepoints/gcc-15~1861 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ee2aa93e9cd0d62f840cb6614c3cd12c15301a72;p=thirdparty%2Fgcc.git lower-bitint: Don't use m_loads for loads used in GIMPLE_ASM [PR113464] Like for GIMPLE_PHIs or calls, even for GIMPLE_ASMs we want a corresponding VAR_DECL assigned for lhs SSA_NAMEs of loads from memory, as even GIMPLE_ASM relies on those VAR_DECLs to exist. 2024-01-19 Jakub Jelinek PR tree-optimization/113464 * gimple-lower-bitint.cc (gimple_lower_bitint): Don't try to optimize loads into GIMPLE_ASM stmts. * gcc.dg/bitint-75.c: New test. --- diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index e48125daec99..be11d77fe4dd 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -6249,7 +6249,8 @@ gimple_lower_bitint (void) if (is_gimple_debug (use_stmt)) continue; if (gimple_code (use_stmt) == GIMPLE_PHI - || is_gimple_call (use_stmt)) + || is_gimple_call (use_stmt) + || gimple_code (use_stmt) == GIMPLE_ASM) { optimizable_load = false; break; diff --git a/gcc/testsuite/gcc.dg/bitint-75.c b/gcc/testsuite/gcc.dg/bitint-75.c new file mode 100644 index 000000000000..dd8292e8adf1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-75.c @@ -0,0 +1,11 @@ +/* PR tree-optimization/113464 */ +/* { dg-do compile { target bitint65535 } } */ +/* { dg-options "-O2 -w -std=gnu23" } */ + +_BitInt(65532) i; + +void +foo (void) +{ + __asm__ ("" : "+r" (i)); /* { dg-error "impossible constraint" } */ +}