[llvm] 70b96be - [NewPM] Port x86-insert-x87-wait (#180128)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 10 22:58:07 PST 2026
Author: Kyungtak Woo
Date: 2026-02-10T22:58:02-08:00
New Revision: 70b96befd832f45a007dc8788a38ff849b3f9a98
URL: https://github.com/llvm/llvm-project/commit/70b96befd832f45a007dc8788a38ff849b3f9a98
DIFF: https://github.com/llvm/llvm-project/commit/70b96befd832f45a007dc8788a38ff849b3f9a98.diff
LOG: [NewPM] Port x86-insert-x87-wait (#180128)
Similar to other portings created by @aidenboom154. No specific test
coverage as there are no MIR->MIR tests that exercise this pass. Going
with other naming conventions, I renamed WaitInsert to
X86InsertX87WaitLegacy
Added:
llvm/lib/Target/X86/X86InsertX87Wait.cpp
Modified:
llvm/lib/Target/X86/CMakeLists.txt
llvm/lib/Target/X86/X86.h
llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
llvm/lib/Target/X86/X86PassRegistry.def
llvm/lib/Target/X86/X86TargetMachine.cpp
llvm/test/CodeGen/X86/llc-pipeline-npm.ll
Removed:
llvm/lib/Target/X86/X86InsertWait.cpp
################################################################################
diff --git a/llvm/lib/Target/X86/CMakeLists.txt b/llvm/lib/Target/X86/CMakeLists.txt
index 086dd6963286d..a5bbe8080d108 100644
--- a/llvm/lib/Target/X86/CMakeLists.txt
+++ b/llvm/lib/Target/X86/CMakeLists.txt
@@ -60,6 +60,7 @@ set(sources
X86ISelLoweringCall.cpp
X86IndirectBranchTracking.cpp
X86IndirectThunks.cpp
+ X86InsertX87Wait.cpp
X86InterleavedAccess.cpp
X86InstCombineIntrinsic.cpp
X86InstrFMA3Info.cpp
@@ -88,7 +89,6 @@ set(sources
X86VZeroUpper.cpp
X86WinEHState.cpp
X86WinEHUnwindV2.cpp
- X86InsertWait.cpp
GISel/X86CallLowering.cpp
GISel/X86InstructionSelector.cpp
GISel/X86LegalizerInfo.cpp
diff --git a/llvm/lib/Target/X86/X86.h b/llvm/lib/Target/X86/X86.h
index 594d5d57145ab..9e67c71427853 100644
--- a/llvm/lib/Target/X86/X86.h
+++ b/llvm/lib/Target/X86/X86.h
@@ -317,7 +317,12 @@ FunctionPass *createX86ReturnThunksLegacyPass();
/// This pass insert wait instruction after X87 instructions which could raise
/// fp exceptions when strict-fp enabled.
-FunctionPass *createX86InsertX87waitPass();
+class X86InsertX87WaitPass : public PassInfoMixin<X86InsertX87WaitPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &);
+};
+
+FunctionPass *createX86InsertX87WaitLegacyPass();
/// This pass optimizes arithmetic based on knowledge that is only used by
/// a reduction sequence and is therefore safe to reassociate in interesting
diff --git a/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp b/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
index a2cd61ea8699a..11d843c8d371e 100644
--- a/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
@@ -186,7 +186,7 @@ void X86CodeGenPassBuilder::addPreEmitPass(PassManagerWrapper &PMW) const {
addMachineFunctionPass(X86FixupVectorConstantsPass(), PMW);
}
addMachineFunctionPass(X86CompressEVEXPass(), PMW);
- // TODO(boomanaiden154): Add InsertX86WaitPass here once it has been ported.
+ addMachineFunctionPass(X86InsertX87WaitPass(), PMW);
}
void X86CodeGenPassBuilder::addPreEmitPass2(PassManagerWrapper &PMW) const {
diff --git a/llvm/lib/Target/X86/X86InsertWait.cpp b/llvm/lib/Target/X86/X86InsertX87Wait.cpp
similarity index 79%
rename from llvm/lib/Target/X86/X86InsertWait.cpp
rename to llvm/lib/Target/X86/X86InsertX87Wait.cpp
index 69a3d32a93149..6d192d61301ab 100644
--- a/llvm/lib/Target/X86/X86InsertWait.cpp
+++ b/llvm/lib/Target/X86/X86InsertX87Wait.cpp
@@ -1,4 +1,4 @@
-//- X86Insertwait.cpp - Strict-Fp:Insert wait instruction X87 instructions --//
+// X86InsertX87Wait.cpp - Strict-Fp:Insert wait instruction X87 instructions //
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -32,15 +32,15 @@
using namespace llvm;
-#define DEBUG_TYPE "x86-insert-wait"
+#define DEBUG_TYPE "x86-insert-x87-wait"
namespace {
-class WaitInsert : public MachineFunctionPass {
+class X86InsertX87WaitLegacy : public MachineFunctionPass {
public:
static char ID;
- WaitInsert() : MachineFunctionPass(ID) {}
+ X86InsertX87WaitLegacy() : MachineFunctionPass(ID) {}
bool runOnMachineFunction(MachineFunction &MF) override;
@@ -48,12 +48,13 @@ class WaitInsert : public MachineFunctionPass {
return "X86 insert wait instruction";
}
};
+} // end anonymous namespace
-} // namespace
+char X86InsertX87WaitLegacy::ID = 0;
-char WaitInsert::ID = 0;
-
-FunctionPass *llvm::createX86InsertX87waitPass() { return new WaitInsert(); }
+FunctionPass *llvm::createX86InsertX87WaitLegacyPass() {
+ return new X86InsertX87WaitLegacy();
+}
static bool isX87ControlInstruction(MachineInstr &MI) {
switch (MI.getOpcode()) {
@@ -93,7 +94,7 @@ static bool isX87NonWaitingControlInstruction(MachineInstr &MI) {
}
}
-bool WaitInsert::runOnMachineFunction(MachineFunction &MF) {
+static bool insertWaitInstruction(MachineFunction &MF) {
if (!MF.getFunction().hasFnAttribute(Attribute::StrictFP))
return false;
@@ -128,3 +129,14 @@ bool WaitInsert::runOnMachineFunction(MachineFunction &MF) {
}
return Changed;
}
+
+bool X86InsertX87WaitLegacy::runOnMachineFunction(MachineFunction &MF) {
+ return insertWaitInstruction(MF);
+}
+
+PreservedAnalyses X86InsertX87WaitPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &) {
+ return insertWaitInstruction(MF) ? getMachineFunctionPassPreservedAnalyses()
+ .preserveSet<CFGAnalyses>()
+ : PreservedAnalyses::all();
+}
diff --git a/llvm/lib/Target/X86/X86PassRegistry.def b/llvm/lib/Target/X86/X86PassRegistry.def
index c203e3b2660ab..14235f27a55f9 100644
--- a/llvm/lib/Target/X86/X86PassRegistry.def
+++ b/llvm/lib/Target/X86/X86PassRegistry.def
@@ -50,6 +50,7 @@ MACHINE_FUNCTION_PASS("x86-flags-copy-lowering", X86FlagsCopyLoweringPass())
MACHINE_FUNCTION_PASS("x86-fp-stackifier", X86FPStackifierPass())
MACHINE_FUNCTION_PASS("x86-global-base-reg", X86GlobalBaseRegPass())
MACHINE_FUNCTION_PASS("x86-indirect-branch-tracking", X86IndirectBranchTrackingPass())
+MACHINE_FUNCTION_PASS("x86-insert-x87-wait", X86InsertX87WaitPass())
MACHINE_FUNCTION_PASS("x86-isel", X86ISelDAGToDAGPass(*this))
MACHINE_FUNCTION_PASS("x86-lower-tile-copy", X86LowerTileCopyPass())
MACHINE_FUNCTION_PASS("x86-lvi-load", X86LoadValueInjectionLoadHardeningPass())
@@ -69,7 +70,6 @@ MACHINE_FUNCTION_PASS("x86-wineh-unwindv2", X86WinEHUnwindV2Pass())
#endif
DUMMY_MACHINE_FUNCTION_PASS("x86-execution-domain-fix", X86ExecutionDomainFix())
DUMMY_MACHINE_FUNCTION_PASS("x86-indirect-thunks", X86IndirectThunks())
-DUMMY_MACHINE_FUNCTION_PASS("x86-insert-x87-wait", X86InsertX87WaitPass())
DUMMY_MACHINE_FUNCTION_PASS("x86-issue-vzero-upper", X86IssueVZeroUpperPass())
DUMMY_MACHINE_FUNCTION_PASS("x86-pad-short-functions", X86PadShortFunctionsPass())
#undef DUMMY_MACHINE_FUNCTION_PASS
diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp
index 9b91b9bc82533..a71ec74ebc9b8 100644
--- a/llvm/lib/Target/X86/X86TargetMachine.cpp
+++ b/llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -578,7 +578,7 @@ void X86PassConfig::addPreEmitPass() {
addPass(createX86FixupVectorConstantsLegacyPass());
}
addPass(createX86CompressEVEXLegacyPass());
- addPass(createX86InsertX87waitPass());
+ addPass(createX86InsertX87WaitLegacyPass());
}
void X86PassConfig::addPreEmitPass2() {
diff --git a/llvm/test/CodeGen/X86/llc-pipeline-npm.ll b/llvm/test/CodeGen/X86/llc-pipeline-npm.ll
index 37c76babfc5ff..ec27b156ece41 100644
--- a/llvm/test/CodeGen/X86/llc-pipeline-npm.ll
+++ b/llvm/test/CodeGen/X86/llc-pipeline-npm.ll
@@ -58,6 +58,7 @@
; O0-NEXT: patchable-function
; O0-NEXT: x86-indirect-branch-tracking
; O0-NEXT: x86-compress-evex
+; O0-NEXT: x86-insert-x87-wait
; O0-NEXT: FuncletLayoutPass
; O0-NEXT: remove-loads-into-fake-uses
; O0-NEXT: StackMapLivenessPass
@@ -173,6 +174,7 @@
; O2-NEXT: x86-fixup-inst-tuning
; O2-NEXT: x86-fixup-inst-tuning
; O2-NEXT: x86-compress-evex
+; O2-NEXT: x86-insert-x87-wait
; O2-NEXT: FuncletLayoutPass
; O2-NEXT: remove-loads-into-fake-uses
; O2-NEXT: StackMapLivenessPass
@@ -235,6 +237,7 @@
; O0-WINDOWS-NEXT: patchable-function
; O0-WINDOWS-NEXT: x86-indirect-branch-tracking
; O0-WINDOWS-NEXT: x86-compress-evex
+; O0-WINDOWS-NEXT: x86-insert-x87-wait
; O0-WINDOWS-NEXT: FuncletLayoutPass
; O0-WINDOWS-NEXT: remove-loads-into-fake-uses
; O0-WINDOWS-NEXT: StackMapLivenessPass
@@ -353,6 +356,7 @@
; O3-WINDOWS-NEXT: x86-fixup-inst-tuning
; O3-WINDOWS-NEXT: x86-fixup-inst-tuning
; O3-WINDOWS-NEXT: x86-compress-evex
+; O3-WINDOWS-NEXT: x86-insert-x87-wait
; O3-WINDOWS-NEXT: FuncletLayoutPass
; O3-WINDOWS-NEXT: remove-loads-into-fake-uses
; O3-WINDOWS-NEXT: StackMapLivenessPass
More information about the llvm-commits
mailing list