public inbox for [email protected]  
help / color / mirror / Atom feed
From: XChy <[email protected]>
To: [email protected]
Subject: Missed compiler optimization issue in function select_rtable_names_for_explain
Date: Wed, 22 May 2024 17:27:44 +0800
Message-ID: <OS0P286MB016392E0B2017DDB6709A11C82EB2@OS0P286MB0163.JPNP286.PROD.OUTLOOK.COM> (raw)

Hi everyone,

I'm a compiler developer working on detecting missed optimization in 
real-world applications. Recently, we found that LLVM missed a dead 
store elimination optimization in the PostgreSQL code 
<https://github.com/postgres/postgres/blob/c37267162e889fe783786b9e28d1b65b82365a00/src/backend/utils...; 
(https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/ruleutils.c#L3794) 
in the master branch.

For the example below:

```

int dst[128];

memset(dst, 0, 128);

*unrelated = some_value;

dst[1] = 0;

dst[2] = 0;

```

LLVM cannot eliminate the useless stores after memset since the store to 
"unrelated" clobbers. But if we put the stores to "dst" ahead of the 
store to "unrelated", we could prevent confusing the compiler. See also 
the compiler explorer link: https://godbolt.org/z/P9jnKod3v and the 
issue of LLVM: https://github.com/llvm/llvm-project/issues/88632

To improve the codegen quality, I think it's also possible to modify the 
source code, changing the order of initialization of the member, to get 
better optimization. But I don't know whether this can be considered as 
a bug, thus post the issue here.

If anyone could confirm this problem or post a patch for it, let me know 
please. Thanks!


Best regards. Hongyu.


reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected]
  Subject: Re: Missed compiler optimization issue in function select_rtable_names_for_explain
  In-Reply-To: <OS0P286MB016392E0B2017DDB6709A11C82EB2@OS0P286MB0163.JPNP286.PROD.OUTLOOK.COM>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox