[PATCH] D130466: [LICM] - Add option to allow data races

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 1 00:26:47 PDT 2022


nikic added a comment.

In D130466#3761744 <https://reviews.llvm.org/D130466#3761744>, @efriedma wrote:

>> Prohibit this transformation if store points to constant memory using bool PointToConstantMemory.
>
> You can't use pointsToConstantMemory to prove the property you need.  The problem is that it doesn't do what you want if it can't prove anything.  You need a function that says the memory isn't writable unless it can prove the memory is writable (maybe call it something like "pointsToWritableMemory").
>
> Getting the proof requirements wrong is a common trap for newcomers to writing compiler optimizations; please watch out for it in the future.

In practice, would that be alloca and non-constant globals, or can we handle any other cases as well? I don't think doing this for noalias calls would be legal, because the noalias semantics don't say anything about the memory being writable, right?



================
Comment at: llvm/test/Transforms/LICM/promote-sink-store.ll:1
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -licm -licm-force-thread-model-single -S %s | FileCheck %s
----------------
Please run the tests through `-instnamer` so the instructions have names. Also, it should be able to significantly reduce this test, it currently contains code not relevant to the transform.

You'll also want to add a negative test for the constant memory case.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130466/new/

https://reviews.llvm.org/D130466



More information about the llvm-commits mailing list