[llvm] [LLT] mark the CFI jumptable naked on Windows (PR #170371)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 2 13:57:39 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Mircea Trofin (mtrofin)
<details>
<summary>Changes</summary>
We were not marking the `.cfi.jumptable` functions as `naked` on windows. The referenced bug (https://llvm.org/bugs/show_bug.cgi?id=28641#c3) appears to be fixed:
```bash
build/bin/opt -S -passes=lowertypetests -mtriple=i686-pc-win32 llvm/test/Transforms/LowerTypeTests/function.ll | build/bin/llc -O0
```
```
L_.cfi.jumptable: # @.cfi.jumptable
# %bb.0: # %entry
#APP
jmp _f.cfi@<!-- -->PLT
int3
int3
int3
#NO_APP
#APP
jmp _g.cfi@<!-- -->PLT
int3
int3
int3
#NO_APP
# -- End function
.section .rdata,"dr"
.p2align 4, 0x0 # @<!-- -->0
```
Not seeing the spilled registers described in the bug anymore, no assertions are raised either.
---
Full diff: https://github.com/llvm/llvm-project/pull/170371.diff
2 Files Affected:
- (modified) llvm/lib/Transforms/IPO/LowerTypeTests.cpp (+1-6)
- (modified) llvm/test/Transforms/LowerTypeTests/function.ll (+1-1)
``````````diff
diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
index fa35eef2c00f5..f7aeda95e41b3 100644
--- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
+++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
@@ -1554,12 +1554,7 @@ void LowerTypeTestsModule::createJumpTable(
// Align the whole table by entry size.
F->setAlignment(Align(getJumpTableEntrySize(JumpTableArch)));
- // Skip prologue.
- // Disabled on win32 due to https://llvm.org/bugs/show_bug.cgi?id=28641#c3.
- // Luckily, this function does not get any prologue even without the
- // attribute.
- if (OS != Triple::Win32)
- F->addFnAttr(Attribute::Naked);
+ F->addFnAttr(Attribute::Naked);
if (JumpTableArch == Triple::arm)
F->addFnAttr("target-features", "-thumb-mode");
if (JumpTableArch == Triple::thumb) {
diff --git a/llvm/test/Transforms/LowerTypeTests/function.ll b/llvm/test/Transforms/LowerTypeTests/function.ll
index ab3cfb6acccf8..e654da656362f 100644
--- a/llvm/test/Transforms/LowerTypeTests/function.ll
+++ b/llvm/test/Transforms/LowerTypeTests/function.ll
@@ -115,7 +115,7 @@ define i1 @foo(ptr %p) {
; NATIVE-SAME: "s"(ptr @g.cfi)
; X86-LINUX: attributes #[[ATTR]] = { naked nocf_check noinline }
-; X86-WIN32: attributes #[[ATTR]] = { nocf_check noinline }
+; X86-WIN32: attributes #[[ATTR]] = { naked nocf_check noinline }
; ARM: attributes #[[ATTR]] = { naked noinline
; THUMB: attributes #[[ATTR]] = { naked noinline "target-cpu"="cortex-a8" "target-features"="+thumb-mode" }
; THUMBV6M: attributes #[[ATTR]] = { naked noinline "target-features"="+thumb-mode" }
``````````
</details>
https://github.com/llvm/llvm-project/pull/170371
More information about the llvm-commits
mailing list