[llvm] [CodeGen] Treat hasOrderedMemoryRef as implying arbitrary loads or stores (PR #182000)

Jay Foad via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 4 09:48:02 PST 2026


jayfoad wrote:

> ⚠️ undef deprecator found issues in your code. ⚠️
> 
> You can test this locally with the following command:
> ```shell
> git diff -U0 --pickaxe-regex -S '([^a-zA-Z0-9#_-]undef([^a-zA-Z0-9_-]|$)|UndefValue::get)' 'HEAD~1' HEAD llvm/test/CodeGen/AMDGPU/machine-sink-fence.ll llvm/lib/CodeGen/MachineInstr.cpp llvm/test/CodeGen/AArch64/sme-streaming-checkvl.ll llvm/test/CodeGen/AMDGPU/iglp-no-clobber.ll llvm/test/CodeGen/AMDGPU/misched-remat-revert.ll llvm/test/CodeGen/Thumb2/mve-postinc-lsr.ll
> ```
> 
> The following files introduce new uses of undef:
> 
> * llvm/test/CodeGen/AMDGPU/misched-remat-revert.ll
> 
> [Undef](https://llvm.org/docs/LangRef.html#undefined-values) is now deprecated and should only be used in the rare cases where no replacement is possible. For example, a load of uninitialized memory yields `undef`. You should use `poison` values for placeholders instead.
> 
> In tests, avoid using `undef` and having tests that trigger undefined behavior. If you need an operand with some unimportant value, you can add a new argument to the function and use that instead.
> 
> For example, this is considered a bad practice:
> 
> ```llvm
> define void @fn() {
>   ...
>   br i1 undef, ...
> }
> ```
> 
> Please use the following instead:
> 
> ```llvm
> define void @fn(i1 %cond) {
>   ...
>   br i1 %cond, ...
> }
> ```
> 
> Please refer to the [Undefined Behavior Manual](https://llvm.org/docs/UndefinedBehavior.html) for more information.

New uses of `undef` are only in the generated MIR checks so I'm going to ignore this.

https://github.com/llvm/llvm-project/pull/182000


More information about the llvm-commits mailing list