[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