Skip to content

Conversation

@workingjubilee
Copy link
Contributor

Support for select ... !unpredictable was added some time ago and is even tested for some backends, but was apparently never documented. e.g. llvm/test/CodeGen/X86/x86-cmov-converter.ll tests to guarantee that select ... !unpredictable survives the infamous cmov-to-jmp conversion.

Support for `select ... !unpredictable` was added some time ago and
is even tested for some backends, but was apparently never documented.
e.g. llvm/test/CodeGen/X86/x86-cmov-converter.ll tests to guarantee that
`select ... !unpredictable` survives the infamous cmov-to-jmp conversion.
@llvmbot
Copy link
Member

llvmbot commented Oct 23, 2024

@llvm/pr-subscribers-llvm-ir

Author: Jubilee (workingjubilee)

Changes

Support for select ... !unpredictable was added some time ago and is even tested for some backends, but was apparently never documented. e.g. llvm/test/CodeGen/X86/x86-cmov-converter.ll tests to guarantee that select ... !unpredictable survives the infamous cmov-to-jmp conversion.


Full diff: https://github.com/llvm/llvm-project/pull/113502.diff

1 Files Affected:

  • (modified) llvm/docs/LangRef.rst (+9-6)
diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst
index 6fa35486669d69..fc0129dec1c83d 100644
--- a/llvm/docs/LangRef.rst
+++ b/llvm/docs/LangRef.rst
@@ -7154,12 +7154,15 @@ sections that the user does not want removed after linking.
 '``unpredictable``' Metadata
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-``unpredictable`` metadata may be attached to any branch or switch
-instruction. It can be used to express the unpredictability of control
-flow. Similar to the llvm.expect intrinsic, it may be used to alter
-optimizations related to compare and branch instructions. The metadata
-is treated as a boolean value; if it exists, it signals that the branch
-or switch that it is attached to is completely unpredictable.
+``unpredictable``` can be used to express the unpredictability of control flow.
+Similar to the ``llvm.expect`` intrinsic, it may be used to alter optimizations
+related to compare and branch instructions. This is treated as a boolean value:
+Any instruction it is attached to signals it is completely unpredictable.
+
+``!unpredictable`` may be attached to, and will affect, these instructions:
+* branch
+* select
+* switch
 
 .. _md_dereferenceable:
 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants