Skip to content

Conversation

@frederik-h
Copy link
Contributor

The pass now contains a non-fp expansion and should
be used for any similar expansions regardless of the
types involved. Hence a generic name seems apt.

Rename the source files, pass, and adjust the pass
description. Move all tests for the expansions
that have previously been merged into the pass
to a single directory.

Copy link
Contributor Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@frederik-h frederik-h force-pushed the users/frederik-h/Rename_expand-fp_to_expand-ir-insts_to_better_reflect_its_functionality branch from 5903043 to 0304d78 Compare December 17, 2025 16:03
@github-actions
Copy link

github-actions bot commented Dec 17, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

The pass now contains a non-fp expansion and should
be used for any similar expansions regardless of the
types involved. Hence a generic name seems apt.

Rename the source files, pass, and adjust the pass
description. Move all tests for the expansions
that have previously been merged into the pass
to a single directory.
@llvmbot
Copy link
Member

llvmbot commented Dec 17, 2025

@llvm/pr-subscribers-backend-powerpc
@llvm/pr-subscribers-backend-spir-v
@llvm/pr-subscribers-backend-amdgpu

@llvm/pr-subscribers-backend-m68k

Author: Frederik Harwath (frederik-h)

Changes

The pass now contains a non-fp expansion and should
be used for any similar expansions regardless of the
types involved. Hence a generic name seems apt.

Rename the source files, pass, and adjust the pass
description. Move all tests for the expansions
that have previously been merged into the pass
to a single directory.


Patch is 67.80 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/172681.diff

52 Files Affected:

  • (modified) llvm/docs/WritingAnLLVMPass.rst (+1-1)
  • (renamed) llvm/include/llvm/CodeGen/ExpandIRInsts.h (+6-6)
  • (modified) llvm/include/llvm/CodeGen/Passes.h (+2-2)
  • (modified) llvm/include/llvm/CodeGen/TargetLowering.h (+6-6)
  • (modified) llvm/include/llvm/InitializePasses.h (+1-1)
  • (modified) llvm/include/llvm/Passes/CodeGenPassBuilder.h (+2-2)
  • (modified) llvm/lib/CodeGen/CMakeLists.txt (+1-1)
  • (modified) llvm/lib/CodeGen/CodeGen.cpp (+1-1)
  • (renamed) llvm/lib/CodeGen/ExpandIRInsts.cpp (+33-23)
  • (modified) llvm/lib/CodeGen/TargetPassConfig.cpp (+1-1)
  • (modified) llvm/lib/Passes/PassBuilder.cpp (+4-4)
  • (modified) llvm/lib/Passes/PassRegistry.def (+3-3)
  • (modified) llvm/test/CodeGen/AArch64/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/AArch64/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/AMDGPU/dagcombine-select.ll (+2-2)
  • (modified) llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll (+1-1)
  • (modified) llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll (+3-3)
  • (modified) llvm/test/CodeGen/AMDGPU/llc-pipeline.ll (+5-5)
  • (modified) llvm/test/CodeGen/ARM/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/LoongArch/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/LoongArch/opt-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/M68k/pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/PowerPC/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/PowerPC/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/RISCV/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/RISCV/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/SPIRV/llc-pipeline.ll (+2-2)
  • (modified) llvm/test/CodeGen/X86/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/X86/expand-large-fp-optnone.ll (+1-1)
  • (modified) llvm/test/CodeGen/X86/opt-pipeline.ll (+1-1)
  • (removed) llvm/test/Transforms/ExpandFp/AMDGPU/pass-parameters.ll (-20)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/frem-inf.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/frem.ll (+1-1)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/lit.local.cfg ()
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/missing-analysis.ll (+1-1)
  • (added) llvm/test/Transforms/ExpandIRInsts/AMDGPU/pass-parameters.ll (+20)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptosi129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptoui129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-si129tofp.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-ui129tofp.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-optnone.ll (+3-3)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/lit.local.cfg ()
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/sdiv129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/srem129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/udiv129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/urem129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/vector.ll (+2-2)
  • (removed) llvm/test/Transforms/ExpandLargeFpConvert/X86/lit.local.cfg (-2)
  • (modified) llvm/test/tools/opt/no-target-machine.ll (+2-2)
  • (modified) llvm/tools/opt/optdriver.cpp (+2-2)
  • (modified) llvm/utils/gn/secondary/llvm/lib/CodeGen/BUILD.gn (+1-1)
  • (modified) llvm/utils/profcheck-xfail.txt (+9-9)
diff --git a/llvm/docs/WritingAnLLVMPass.rst b/llvm/docs/WritingAnLLVMPass.rst
index f475676e15367..216e693087d96 100644
--- a/llvm/docs/WritingAnLLVMPass.rst
+++ b/llvm/docs/WritingAnLLVMPass.rst
@@ -673,7 +673,7 @@ default optimization pipelines, e.g. (the output has been trimmed):
   ModulePass Manager
   Pre-ISel Intrinsic Lowering
   FunctionPass Manager
-    Expand fp
+    Expand IR instructions
     Expand Atomic instructions
   SVE intrinsics optimizations
     FunctionPass Manager
diff --git a/llvm/include/llvm/CodeGen/ExpandFp.h b/llvm/include/llvm/CodeGen/ExpandIRInsts.h
similarity index 68%
rename from llvm/include/llvm/CodeGen/ExpandFp.h
rename to llvm/include/llvm/CodeGen/ExpandIRInsts.h
index 28e6aecc2beb5..5d3fcf75cd530 100644
--- a/llvm/include/llvm/CodeGen/ExpandFp.h
+++ b/llvm/include/llvm/CodeGen/ExpandIRInsts.h
@@ -1,4 +1,4 @@
-//===- ExpandFp.h -----------------------------------*- C++ -*-===//
+//===- ExpandIRInsts.h -----------------------------------*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_CODEGEN_EXPANDFP_H
-#define LLVM_CODEGEN_EXPANDFP_H
+#ifndef LLVM_CODEGEN_EXPANDIRINSTS_H
+#define LLVM_CODEGEN_EXPANDIRINSTS_H
 
 #include "llvm/IR/PassManager.h"
 #include "llvm/Support/CodeGen.h"
@@ -16,13 +16,13 @@ namespace llvm {
 
 class TargetMachine;
 
-class ExpandFpPass : public PassInfoMixin<ExpandFpPass> {
+class ExpandIRInstsPass : public PassInfoMixin<ExpandIRInstsPass> {
 private:
   const TargetMachine *TM;
   CodeGenOptLevel OptLevel;
 
 public:
-  explicit ExpandFpPass(const TargetMachine &TM, CodeGenOptLevel OptLevel);
+  explicit ExpandIRInstsPass(const TargetMachine &TM, CodeGenOptLevel OptLevel);
 
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
   static bool isRequired() { return true; }
@@ -32,4 +32,4 @@ class ExpandFpPass : public PassInfoMixin<ExpandFpPass> {
 
 } // end namespace llvm
 
-#endif // LLVM_CODEGEN_EXPANDFP_H
+#endif // LLVM_CODEGEN_EXPANDIRINSTS_H
diff --git a/llvm/include/llvm/CodeGen/Passes.h b/llvm/include/llvm/CodeGen/Passes.h
index 08dabd69a48e9..fe19e6a32c680 100644
--- a/llvm/include/llvm/CodeGen/Passes.h
+++ b/llvm/include/llvm/CodeGen/Passes.h
@@ -547,7 +547,7 @@ LLVM_ABI FunctionPass *createExpandReductionsPass();
 LLVM_ABI FunctionPass *createReplaceWithVeclibLegacyPass();
 
 // Expands large div/rem instructions.
-LLVM_ABI FunctionPass *createExpandFpPass();
+LLVM_ABI FunctionPass *createExpandIRInstsPass();
 
 // This pass expands memcmp() to load/stores.
 LLVM_ABI FunctionPass *createExpandMemCmpLegacyPass();
@@ -565,7 +565,7 @@ LLVM_ABI FunctionPass *createCFIFixup();
 LLVM_ABI FunctionPass *createCFIInstrInserter();
 
 // Expands floating point instructions.
-FunctionPass *createExpandFpPass(CodeGenOptLevel);
+FunctionPass *createExpandIRInstsPass(CodeGenOptLevel);
 
 /// Creates CFGuard longjmp target identification pass.
 /// \see CFGuardLongjmp.cpp
diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 06bc5caefd063..8ad64a852b74d 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -2220,13 +2220,13 @@ class LLVM_ABI TargetLoweringBase {
   }
 
   /// Returns the size in bits of the maximum div/rem the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   unsigned getMaxDivRemBitWidthSupported() const {
     return MaxDivRemBitWidthSupported;
   }
 
   /// Returns the size in bits of the maximum fp to/from int conversion the
-  /// backend supports. Larger operations will be expanded by ExpandFp.
+  /// backend supports. Larger operations will be expanded by ExpandIRInsts.
   unsigned getMaxLargeFPConvertBitWidthSupported() const {
     return MaxLargeFPConvertBitWidthSupported;
   }
@@ -2886,13 +2886,13 @@ class LLVM_ABI TargetLoweringBase {
   }
 
   /// Set the size in bits of the maximum div/rem the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   void setMaxDivRemBitWidthSupported(unsigned SizeInBits) {
     MaxDivRemBitWidthSupported = SizeInBits;
   }
 
   /// Set the size in bits of the maximum fp to/from int conversion the backend
-  /// supports. Larger operations will be expanded by ExpandFp.
+  /// supports. Larger operations will be expanded by ExpandIRInsts.
   void setMaxLargeFPConvertBitWidthSupported(unsigned SizeInBits) {
     MaxLargeFPConvertBitWidthSupported = SizeInBits;
   }
@@ -3743,12 +3743,12 @@ class LLVM_ABI TargetLoweringBase {
   unsigned MaxAtomicSizeInBitsSupported;
 
   /// Size in bits of the maximum div/rem size the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   unsigned MaxDivRemBitWidthSupported;
 
   /// Size in bits of the maximum fp to/from int conversion size the
   /// backend supports. Larger operations will be expanded by
-  /// ExpandFp.
+  /// ExpandIRInsts.
   unsigned MaxLargeFPConvertBitWidthSupported;
 
   /// Size in bits of the minimum cmpxchg or ll/sc operation the
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index b4f96674bea9e..2bc00a2f71e1a 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -112,7 +112,7 @@ LLVM_ABI void initializeEarlyMachineLICMPass(PassRegistry &);
 LLVM_ABI void initializeEarlyTailDuplicateLegacyPass(PassRegistry &);
 LLVM_ABI void initializeEdgeBundlesWrapperLegacyPass(PassRegistry &);
 LLVM_ABI void initializeEHContGuardTargetsPass(PassRegistry &);
-LLVM_ABI void initializeExpandFpLegacyPassPass(PassRegistry &);
+LLVM_ABI void initializeExpandIRInstsLegacyPassPass(PassRegistry &);
 LLVM_ABI void initializeExpandMemCmpLegacyPassPass(PassRegistry &);
 LLVM_ABI void initializeExpandPostRALegacyPass(PassRegistry &);
 LLVM_ABI void initializeExpandReductionsPass(PassRegistry &);
diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
index 0462adb835d89..9bf8e1976fad8 100644
--- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h
+++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
@@ -32,7 +32,7 @@
 #include "llvm/CodeGen/DetectDeadLanes.h"
 #include "llvm/CodeGen/DwarfEHPrepare.h"
 #include "llvm/CodeGen/EarlyIfConversion.h"
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/CodeGen/ExpandMemCmp.h"
 #include "llvm/CodeGen/ExpandPostRAPseudos.h"
 #include "llvm/CodeGen/ExpandReductions.h"
@@ -677,7 +677,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addISelPasses(
     addModulePass(LowerEmuTLSPass(), PMW);
 
   addModulePass(PreISelIntrinsicLoweringPass(&TM), PMW);
-  addFunctionPass(ExpandFpPass(TM, getOptLevel()), PMW);
+  addFunctionPass(ExpandIRInstsPass(TM, getOptLevel()), PMW);
 
   derived().addIRPasses(PMW);
   derived().addCodeGenPrepare(PMW);
diff --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt
index 8c9b172c0da65..871934ea4b76e 100644
--- a/llvm/lib/CodeGen/CMakeLists.txt
+++ b/llvm/lib/CodeGen/CMakeLists.txt
@@ -57,7 +57,7 @@ add_llvm_component_library(LLVMCodeGen
   EdgeBundles.cpp
   EHContGuardTargets.cpp
   ExecutionDomainFix.cpp
-  ExpandFp.cpp
+  ExpandIRInsts.cpp
   ExpandMemCmp.cpp
   ExpandPostRAPseudos.cpp
   ExpandReductions.cpp
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 47633f89b70e9..3550eea13979a 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -39,7 +39,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
   initializeEarlyIfPredicatorPass(Registry);
   initializeEarlyMachineLICMPass(Registry);
   initializeEarlyTailDuplicateLegacyPass(Registry);
-  initializeExpandFpLegacyPassPass(Registry);
+  initializeExpandIRInstsLegacyPassPass(Registry);
   initializeExpandMemCmpLegacyPassPass(Registry);
   initializeExpandPostRALegacyPass(Registry);
   initializeFEntryInserterLegacyPass(Registry);
diff --git a/llvm/lib/CodeGen/ExpandFp.cpp b/llvm/lib/CodeGen/ExpandIRInsts.cpp
similarity index 95%
rename from llvm/lib/CodeGen/ExpandFp.cpp
rename to llvm/lib/CodeGen/ExpandIRInsts.cpp
index 395fef19a13b9..1d09000fbca6b 100644
--- a/llvm/lib/CodeGen/ExpandFp.cpp
+++ b/llvm/lib/CodeGen/ExpandIRInsts.cpp
@@ -1,26 +1,33 @@
-//===--- ExpandFp.cpp - Expand fp instructions ----------------------------===//
+//===--- ExpandIRInsts.cpp - Expand IR instructions -----------------------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-// This pass expands certain floating point instructions at the IR level.
+// This pass expands certain instructions at the IR level.
 //
-// It expands ‘fptoui .. to’, ‘fptosi .. to’, ‘uitofp ..  to’, ‘sitofp
+// The following expansions are implemented:
+// - Expansion of ‘fptoui .. to’, ‘fptosi .. to’, ‘uitofp ..  to’, ‘sitofp
 // .. to’ instructions with a bitwidth above a threshold.  This is
 // useful for targets like x86_64 that cannot lower fp convertions
 // with more than 128 bits.
 //
-// This pass also expands div/rem instructions with a bitwidth above a
-// threshold into a call to auto-generated functions.  This is useful
-// for targets like x86_64 that cannot lower divisions with more than
-// 128 bits or targets like x86_32 that cannot lower divisions with
-// more than 64 bits.
+// - Expansion of ‘frem‘ for types MVT::f16, MVT::f32, and MVT::f64 for
+// targets which use "Expand" as the legalization action for the
+// corresponding type.
 //
+// - Expansion of ‘udiv‘, ‘sdiv‘, ‘urem‘, and ‘srem‘ instructions with
+// a bitwidth above a threshold into a call to auto-generated
+// functions.  This is useful for targets like x86_64 that cannot
+// lower divisions with more than 128 bits or targets like x86_32 that
+// cannot lower divisions with more than 64 bits.
+//
+// Instructions with vector types are scalarized first if their scalar
+// types can be expanded. Scalable vector types are not supported.
 //===----------------------------------------------------------------------===//
 
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Analysis/AssumptionCache.h"
 #include "llvm/Analysis/GlobalsModRef.h"
@@ -45,7 +52,7 @@
 #include <llvm/Support/Casting.h>
 #include <optional>
 
-#define DEBUG_TYPE "expand-fp"
+#define DEBUG_TYPE "expand-ir-insts"
 
 using namespace llvm;
 
@@ -1125,18 +1132,18 @@ static bool runImpl(Function &F, const TargetLowering &TLI,
 }
 
 namespace {
-class ExpandFpLegacyPass : public FunctionPass {
+class ExpandIRInstsLegacyPass : public FunctionPass {
   CodeGenOptLevel OptLevel;
 
 public:
   static char ID;
 
-  ExpandFpLegacyPass(CodeGenOptLevel OptLevel)
+  ExpandIRInstsLegacyPass(CodeGenOptLevel OptLevel)
       : FunctionPass(ID), OptLevel(OptLevel) {
-    initializeExpandFpLegacyPassPass(*PassRegistry::getPassRegistry());
+    initializeExpandIRInstsLegacyPassPass(*PassRegistry::getPassRegistry());
   }
 
-  ExpandFpLegacyPass() : ExpandFpLegacyPass(CodeGenOptLevel::None) {};
+  ExpandIRInstsLegacyPass() : ExpandIRInstsLegacyPass(CodeGenOptLevel::None) {};
 
   bool runOnFunction(Function &F) override {
     auto *TM = &getAnalysis<TargetPassConfig>().getTM<TargetMachine>();
@@ -1165,19 +1172,21 @@ class ExpandFpLegacyPass : public FunctionPass {
 };
 } // namespace
 
-ExpandFpPass::ExpandFpPass(const TargetMachine &TM, CodeGenOptLevel OptLevel)
+ExpandIRInstsPass::ExpandIRInstsPass(const TargetMachine &TM,
+                                     CodeGenOptLevel OptLevel)
     : TM(&TM), OptLevel(OptLevel) {}
 
-void ExpandFpPass::printPipeline(
+void ExpandIRInstsPass::printPipeline(
     raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
-  static_cast<PassInfoMixin<ExpandFpPass> *>(this)->printPipeline(
+  static_cast<PassInfoMixin<ExpandIRInstsPass> *>(this)->printPipeline(
       OS, MapClassName2PassName);
   OS << '<';
   OS << "O" << (int)OptLevel;
   OS << '>';
 }
 
-PreservedAnalyses ExpandFpPass::run(Function &F, FunctionAnalysisManager &FAM) {
+PreservedAnalyses ExpandIRInstsPass::run(Function &F,
+                                         FunctionAnalysisManager &FAM) {
   const TargetSubtargetInfo *STI = TM->getSubtargetImpl(F);
   auto &TLI = *STI->getTargetLowering();
   AssumptionCache *AC = nullptr;
@@ -1202,12 +1211,13 @@ PreservedAnalyses ExpandFpPass::run(Function &F, FunctionAnalysisManager &FAM) {
                                        : PreservedAnalyses::all();
 }
 
-char ExpandFpLegacyPass::ID = 0;
-INITIALIZE_PASS_BEGIN(ExpandFpLegacyPass, "expand-fp",
+char ExpandIRInstsLegacyPass::ID = 0;
+INITIALIZE_PASS_BEGIN(ExpandIRInstsLegacyPass, "expand-ir-insts",
                       "Expand certain fp instructions", false, false)
 INITIALIZE_PASS_DEPENDENCY(LibcallLoweringInfoWrapper)
-INITIALIZE_PASS_END(ExpandFpLegacyPass, "expand-fp", "Expand fp", false, false)
+INITIALIZE_PASS_END(ExpandIRInstsLegacyPass, "expand-ir-insts",
+                    "Expand IR instructions", false, false)
 
-FunctionPass *llvm::createExpandFpPass(CodeGenOptLevel OptLevel) {
-  return new ExpandFpLegacyPass(OptLevel);
+FunctionPass *llvm::createExpandIRInstsPass(CodeGenOptLevel OptLevel) {
+  return new ExpandIRInstsLegacyPass(OptLevel);
 }
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp
index acceb66468409..ca75d3b47cf3a 100644
--- a/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -1090,7 +1090,7 @@ bool TargetPassConfig::addISelPasses() {
 
   PM->add(createTargetTransformInfoWrapperPass(TM->getTargetIRAnalysis()));
   addPass(createPreISelIntrinsicLoweringPass());
-  addPass(createExpandFpPass(getOptLevel()));
+  addPass(createExpandIRInstsPass(getOptLevel()));
   addIRPasses();
   addCodeGenPrepare();
   addPassesToHandleExceptions();
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index d639c24664ad1..84ee043b5da56 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -91,7 +91,7 @@
 #include "llvm/CodeGen/DwarfEHPrepare.h"
 #include "llvm/CodeGen/EarlyIfConversion.h"
 #include "llvm/CodeGen/EdgeBundles.h"
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/CodeGen/ExpandMemCmp.h"
 #include "llvm/CodeGen/ExpandPostRAPseudos.h"
 #include "llvm/CodeGen/ExpandReductions.h"
@@ -1632,7 +1632,7 @@ parseBoundsCheckingOptions(StringRef Params) {
   return Options;
 }
 
-Expected<CodeGenOptLevel> parseExpandFpOptions(StringRef Param) {
+Expected<CodeGenOptLevel> parseExpandIRInstsOptions(StringRef Param) {
   if (Param.empty())
     return CodeGenOptLevel::None;
 
@@ -1641,13 +1641,13 @@ Expected<CodeGenOptLevel> parseExpandFpOptions(StringRef Param) {
 
   uint8_t N;
   if (!Prefix.empty() || Digit.getAsInteger(10, N))
-    return createStringError("invalid expand-fp pass parameter '%s'",
+    return createStringError("invalid expand-ir-insts pass parameter '%s'",
                              Param.str().c_str());
 
   std::optional<CodeGenOptLevel> Level = CodeGenOpt::getLevel(N);
   if (!Level.has_value())
     return createStringError(
-        "invalid optimization level for expand-fp pass: %s",
+        "invalid optimization level for expand-ir-insts pass: %s",
         Digit.str().c_str());
 
   return *Level;
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 14215bb32e777..daf6b3d6dbd28 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -729,11 +729,11 @@ FUNCTION_PASS_WITH_PARAMS(
     parseBoundsCheckingOptions,
     "trap;rt;rt-abort;min-rt;min-rt-abort;merge;guard=N")
 FUNCTION_PASS_WITH_PARAMS(
-    "expand-fp", "ExpandFpPass",
+    "expand-ir-insts", "ExpandIRInstsPass",
     [TM = TM](CodeGenOptLevel OL) {
-      return ExpandFpPass(*TM, OL);
+      return ExpandIRInstsPass(*TM, OL);
     },
-    parseExpandFpOptions, "O0;O1;O2;O3")
+    parseExpandIRInstsOptions, "O0;O1;O2;O3")
 
 #undef FUNCTION_PASS_WITH_PARAMS
 
diff --git a/llvm/test/CodeGen/AArch64/O0-pipeline.ll b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
index 2a1264446c70d..f4f9d38336608 100644
--- a/llvm/test/CodeGen/AArch64/O0-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
@@ -17,7 +17,7 @@
 ; CHECK-NEXT:   ModulePass Manager
 ; CHECK-NEXT:     Pre-ISel Intrinsic Lowering
 ; CHECK-NEXT:     FunctionPass Manager
-; CHECK-NEXT:       Expand fp
+; CHECK-NEXT:       Expand IR instructions
 ; CHECK-NEXT:       Expand Atomic instructions
 ; CHECK-NEXT:       Module Verifier
 ; CHECK-NEXT:       Lower Garbage Collection Instructions
diff --git a/llvm/test/CodeGen/AArch64/O3-pipeline.ll b/llvm/test/CodeGen/AArch64/O3-pipeline.ll
index 4dc3cd1d6b786..f6ed7d5eed814 100644
--- a/llvm/test/CodeGen/AArch64/O3-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O3-pipeline.ll
@@ -21,7 +21,7 @@
 ; CHECK-NEXT:   ModulePass Manager
 ; CHECK-NEXT:     Pre-ISel Intrinsic Lowering
 ; CHECK-NEXT:     FunctionPass Manager
-; CHECK-NEXT:       Expand fp
+; CHECK-NEXT:       Expand IR instructions
 ; CHECK-NEXT:       Expand Atomic instructions
 ; CHECK-NEXT:     SVE intrinsics optimizations
 ; CHECK-NEXT:       FunctionPass Manager
diff --git a/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll b/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
index 39365fe7b6f15..c828f0b538bec 100644
--- a/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
+++ b/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
@@ -579,8 +579,8 @@ define amdgpu_kernel void @fdiv_constant_sel_constants(ptr addrspace(1) %p, i1 %
   ret void
 }
 
-; ExpandFp now expands frem before it reaches dagcombine.
-; TODO Implement this optimization in/before ExpandFP
+; ExpandIRInsts now expands frem before it reaches dagcombine.
+; TODO Implement this optimization in/before ExpandIRInsts?
 define amdgpu_kernel void @frem_constant_sel_constants(ptr addrspace(1) %p, i1 %cond) {
 ; GFX9-LABEL: frem_constant_sel_constants:
 ; GFX9:       ; %bb.0:
diff --git a/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll b/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
index c001df48499c7..eee3352fa7452 100644
--- a/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
+++ b/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
@@ -2,7 +2,7 @@
 ; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,SDAG %s
 ; RUN: not --crash llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s 2>&1 | FileCheck -check-prefix=GISEL %s
 
-; FIXME: GISEL can't handle the "fptrunc float to bfloat" that expand-fp emits.
+; FIXME: GISEL can't handle the "fptrunc float to bfloat" that expand-ir-insts emits.
 
 ; GISEL: unable to translate instruction: fptrunc
 
diff --git a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
index edf4b6f26d08e..61c751a9816a2 100644
--- a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
+++ b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
@@ -9,11 +9,11 @@
 ; RUN:   | FileCheck -check-prefix=GCN-O3 %s
 
 
-; GCN-O0: require<MachineModuleAnalysis>,require<profile-summary>,require<collector-metadata>,require<runtime-libcall-info>,pre-isel-intrinsic-lowering,function(expand-fp<O0>),amdgpu-remove-incompatible-functions,amdgpu-printf-runtime-binding,amdgpu-lower-ctor-dtor,function(amdgpu-uniform-intrinsic-combine),expand-variadics,amdgpu-always-inline,always-inline,amdgpu-export-kernel-runtime-handles,amdgpu-lower-exec-sync,amdgpu-sw-lower-lds,amdgpu-lower-module-lds,function(atomic-expand,verify,gc-lowering,lower-constant-intrinsics,unreachableblockelim,ee-instrument<post-inline>,scalarize-masked-mem-intrin,expand-reductions,amdgpu-lower-kernel-arguments),amdgpu-lower-buffer-fat-pointers,amdgpu-lower-intrinsics,cgscc(function(lower-switch,lower-invoke,unreachableblockelim)),require<amdgpu-argument-usage>,cgscc(function(amdgp...
[truncated]

@llvmbot
Copy link
Member

llvmbot commented Dec 17, 2025

@llvm/pr-subscribers-backend-arm

Author: Frederik Harwath (frederik-h)

Changes

The pass now contains a non-fp expansion and should
be used for any similar expansions regardless of the
types involved. Hence a generic name seems apt.

Rename the source files, pass, and adjust the pass
description. Move all tests for the expansions
that have previously been merged into the pass
to a single directory.


Patch is 67.80 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/172681.diff

52 Files Affected:

  • (modified) llvm/docs/WritingAnLLVMPass.rst (+1-1)
  • (renamed) llvm/include/llvm/CodeGen/ExpandIRInsts.h (+6-6)
  • (modified) llvm/include/llvm/CodeGen/Passes.h (+2-2)
  • (modified) llvm/include/llvm/CodeGen/TargetLowering.h (+6-6)
  • (modified) llvm/include/llvm/InitializePasses.h (+1-1)
  • (modified) llvm/include/llvm/Passes/CodeGenPassBuilder.h (+2-2)
  • (modified) llvm/lib/CodeGen/CMakeLists.txt (+1-1)
  • (modified) llvm/lib/CodeGen/CodeGen.cpp (+1-1)
  • (renamed) llvm/lib/CodeGen/ExpandIRInsts.cpp (+33-23)
  • (modified) llvm/lib/CodeGen/TargetPassConfig.cpp (+1-1)
  • (modified) llvm/lib/Passes/PassBuilder.cpp (+4-4)
  • (modified) llvm/lib/Passes/PassRegistry.def (+3-3)
  • (modified) llvm/test/CodeGen/AArch64/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/AArch64/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/AMDGPU/dagcombine-select.ll (+2-2)
  • (modified) llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll (+1-1)
  • (modified) llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll (+3-3)
  • (modified) llvm/test/CodeGen/AMDGPU/llc-pipeline.ll (+5-5)
  • (modified) llvm/test/CodeGen/ARM/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/LoongArch/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/LoongArch/opt-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/M68k/pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/PowerPC/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/PowerPC/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/RISCV/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/RISCV/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/SPIRV/llc-pipeline.ll (+2-2)
  • (modified) llvm/test/CodeGen/X86/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/X86/expand-large-fp-optnone.ll (+1-1)
  • (modified) llvm/test/CodeGen/X86/opt-pipeline.ll (+1-1)
  • (removed) llvm/test/Transforms/ExpandFp/AMDGPU/pass-parameters.ll (-20)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/frem-inf.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/frem.ll (+1-1)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/lit.local.cfg ()
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/missing-analysis.ll (+1-1)
  • (added) llvm/test/Transforms/ExpandIRInsts/AMDGPU/pass-parameters.ll (+20)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptosi129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptoui129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-si129tofp.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-ui129tofp.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-optnone.ll (+3-3)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/lit.local.cfg ()
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/sdiv129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/srem129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/udiv129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/urem129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/vector.ll (+2-2)
  • (removed) llvm/test/Transforms/ExpandLargeFpConvert/X86/lit.local.cfg (-2)
  • (modified) llvm/test/tools/opt/no-target-machine.ll (+2-2)
  • (modified) llvm/tools/opt/optdriver.cpp (+2-2)
  • (modified) llvm/utils/gn/secondary/llvm/lib/CodeGen/BUILD.gn (+1-1)
  • (modified) llvm/utils/profcheck-xfail.txt (+9-9)
diff --git a/llvm/docs/WritingAnLLVMPass.rst b/llvm/docs/WritingAnLLVMPass.rst
index f475676e15367..216e693087d96 100644
--- a/llvm/docs/WritingAnLLVMPass.rst
+++ b/llvm/docs/WritingAnLLVMPass.rst
@@ -673,7 +673,7 @@ default optimization pipelines, e.g. (the output has been trimmed):
   ModulePass Manager
   Pre-ISel Intrinsic Lowering
   FunctionPass Manager
-    Expand fp
+    Expand IR instructions
     Expand Atomic instructions
   SVE intrinsics optimizations
     FunctionPass Manager
diff --git a/llvm/include/llvm/CodeGen/ExpandFp.h b/llvm/include/llvm/CodeGen/ExpandIRInsts.h
similarity index 68%
rename from llvm/include/llvm/CodeGen/ExpandFp.h
rename to llvm/include/llvm/CodeGen/ExpandIRInsts.h
index 28e6aecc2beb5..5d3fcf75cd530 100644
--- a/llvm/include/llvm/CodeGen/ExpandFp.h
+++ b/llvm/include/llvm/CodeGen/ExpandIRInsts.h
@@ -1,4 +1,4 @@
-//===- ExpandFp.h -----------------------------------*- C++ -*-===//
+//===- ExpandIRInsts.h -----------------------------------*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_CODEGEN_EXPANDFP_H
-#define LLVM_CODEGEN_EXPANDFP_H
+#ifndef LLVM_CODEGEN_EXPANDIRINSTS_H
+#define LLVM_CODEGEN_EXPANDIRINSTS_H
 
 #include "llvm/IR/PassManager.h"
 #include "llvm/Support/CodeGen.h"
@@ -16,13 +16,13 @@ namespace llvm {
 
 class TargetMachine;
 
-class ExpandFpPass : public PassInfoMixin<ExpandFpPass> {
+class ExpandIRInstsPass : public PassInfoMixin<ExpandIRInstsPass> {
 private:
   const TargetMachine *TM;
   CodeGenOptLevel OptLevel;
 
 public:
-  explicit ExpandFpPass(const TargetMachine &TM, CodeGenOptLevel OptLevel);
+  explicit ExpandIRInstsPass(const TargetMachine &TM, CodeGenOptLevel OptLevel);
 
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
   static bool isRequired() { return true; }
@@ -32,4 +32,4 @@ class ExpandFpPass : public PassInfoMixin<ExpandFpPass> {
 
 } // end namespace llvm
 
-#endif // LLVM_CODEGEN_EXPANDFP_H
+#endif // LLVM_CODEGEN_EXPANDIRINSTS_H
diff --git a/llvm/include/llvm/CodeGen/Passes.h b/llvm/include/llvm/CodeGen/Passes.h
index 08dabd69a48e9..fe19e6a32c680 100644
--- a/llvm/include/llvm/CodeGen/Passes.h
+++ b/llvm/include/llvm/CodeGen/Passes.h
@@ -547,7 +547,7 @@ LLVM_ABI FunctionPass *createExpandReductionsPass();
 LLVM_ABI FunctionPass *createReplaceWithVeclibLegacyPass();
 
 // Expands large div/rem instructions.
-LLVM_ABI FunctionPass *createExpandFpPass();
+LLVM_ABI FunctionPass *createExpandIRInstsPass();
 
 // This pass expands memcmp() to load/stores.
 LLVM_ABI FunctionPass *createExpandMemCmpLegacyPass();
@@ -565,7 +565,7 @@ LLVM_ABI FunctionPass *createCFIFixup();
 LLVM_ABI FunctionPass *createCFIInstrInserter();
 
 // Expands floating point instructions.
-FunctionPass *createExpandFpPass(CodeGenOptLevel);
+FunctionPass *createExpandIRInstsPass(CodeGenOptLevel);
 
 /// Creates CFGuard longjmp target identification pass.
 /// \see CFGuardLongjmp.cpp
diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 06bc5caefd063..8ad64a852b74d 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -2220,13 +2220,13 @@ class LLVM_ABI TargetLoweringBase {
   }
 
   /// Returns the size in bits of the maximum div/rem the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   unsigned getMaxDivRemBitWidthSupported() const {
     return MaxDivRemBitWidthSupported;
   }
 
   /// Returns the size in bits of the maximum fp to/from int conversion the
-  /// backend supports. Larger operations will be expanded by ExpandFp.
+  /// backend supports. Larger operations will be expanded by ExpandIRInsts.
   unsigned getMaxLargeFPConvertBitWidthSupported() const {
     return MaxLargeFPConvertBitWidthSupported;
   }
@@ -2886,13 +2886,13 @@ class LLVM_ABI TargetLoweringBase {
   }
 
   /// Set the size in bits of the maximum div/rem the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   void setMaxDivRemBitWidthSupported(unsigned SizeInBits) {
     MaxDivRemBitWidthSupported = SizeInBits;
   }
 
   /// Set the size in bits of the maximum fp to/from int conversion the backend
-  /// supports. Larger operations will be expanded by ExpandFp.
+  /// supports. Larger operations will be expanded by ExpandIRInsts.
   void setMaxLargeFPConvertBitWidthSupported(unsigned SizeInBits) {
     MaxLargeFPConvertBitWidthSupported = SizeInBits;
   }
@@ -3743,12 +3743,12 @@ class LLVM_ABI TargetLoweringBase {
   unsigned MaxAtomicSizeInBitsSupported;
 
   /// Size in bits of the maximum div/rem size the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   unsigned MaxDivRemBitWidthSupported;
 
   /// Size in bits of the maximum fp to/from int conversion size the
   /// backend supports. Larger operations will be expanded by
-  /// ExpandFp.
+  /// ExpandIRInsts.
   unsigned MaxLargeFPConvertBitWidthSupported;
 
   /// Size in bits of the minimum cmpxchg or ll/sc operation the
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index b4f96674bea9e..2bc00a2f71e1a 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -112,7 +112,7 @@ LLVM_ABI void initializeEarlyMachineLICMPass(PassRegistry &);
 LLVM_ABI void initializeEarlyTailDuplicateLegacyPass(PassRegistry &);
 LLVM_ABI void initializeEdgeBundlesWrapperLegacyPass(PassRegistry &);
 LLVM_ABI void initializeEHContGuardTargetsPass(PassRegistry &);
-LLVM_ABI void initializeExpandFpLegacyPassPass(PassRegistry &);
+LLVM_ABI void initializeExpandIRInstsLegacyPassPass(PassRegistry &);
 LLVM_ABI void initializeExpandMemCmpLegacyPassPass(PassRegistry &);
 LLVM_ABI void initializeExpandPostRALegacyPass(PassRegistry &);
 LLVM_ABI void initializeExpandReductionsPass(PassRegistry &);
diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
index 0462adb835d89..9bf8e1976fad8 100644
--- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h
+++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
@@ -32,7 +32,7 @@
 #include "llvm/CodeGen/DetectDeadLanes.h"
 #include "llvm/CodeGen/DwarfEHPrepare.h"
 #include "llvm/CodeGen/EarlyIfConversion.h"
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/CodeGen/ExpandMemCmp.h"
 #include "llvm/CodeGen/ExpandPostRAPseudos.h"
 #include "llvm/CodeGen/ExpandReductions.h"
@@ -677,7 +677,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addISelPasses(
     addModulePass(LowerEmuTLSPass(), PMW);
 
   addModulePass(PreISelIntrinsicLoweringPass(&TM), PMW);
-  addFunctionPass(ExpandFpPass(TM, getOptLevel()), PMW);
+  addFunctionPass(ExpandIRInstsPass(TM, getOptLevel()), PMW);
 
   derived().addIRPasses(PMW);
   derived().addCodeGenPrepare(PMW);
diff --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt
index 8c9b172c0da65..871934ea4b76e 100644
--- a/llvm/lib/CodeGen/CMakeLists.txt
+++ b/llvm/lib/CodeGen/CMakeLists.txt
@@ -57,7 +57,7 @@ add_llvm_component_library(LLVMCodeGen
   EdgeBundles.cpp
   EHContGuardTargets.cpp
   ExecutionDomainFix.cpp
-  ExpandFp.cpp
+  ExpandIRInsts.cpp
   ExpandMemCmp.cpp
   ExpandPostRAPseudos.cpp
   ExpandReductions.cpp
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 47633f89b70e9..3550eea13979a 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -39,7 +39,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
   initializeEarlyIfPredicatorPass(Registry);
   initializeEarlyMachineLICMPass(Registry);
   initializeEarlyTailDuplicateLegacyPass(Registry);
-  initializeExpandFpLegacyPassPass(Registry);
+  initializeExpandIRInstsLegacyPassPass(Registry);
   initializeExpandMemCmpLegacyPassPass(Registry);
   initializeExpandPostRALegacyPass(Registry);
   initializeFEntryInserterLegacyPass(Registry);
diff --git a/llvm/lib/CodeGen/ExpandFp.cpp b/llvm/lib/CodeGen/ExpandIRInsts.cpp
similarity index 95%
rename from llvm/lib/CodeGen/ExpandFp.cpp
rename to llvm/lib/CodeGen/ExpandIRInsts.cpp
index 395fef19a13b9..1d09000fbca6b 100644
--- a/llvm/lib/CodeGen/ExpandFp.cpp
+++ b/llvm/lib/CodeGen/ExpandIRInsts.cpp
@@ -1,26 +1,33 @@
-//===--- ExpandFp.cpp - Expand fp instructions ----------------------------===//
+//===--- ExpandIRInsts.cpp - Expand IR instructions -----------------------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-// This pass expands certain floating point instructions at the IR level.
+// This pass expands certain instructions at the IR level.
 //
-// It expands ‘fptoui .. to’, ‘fptosi .. to’, ‘uitofp ..  to’, ‘sitofp
+// The following expansions are implemented:
+// - Expansion of ‘fptoui .. to’, ‘fptosi .. to’, ‘uitofp ..  to’, ‘sitofp
 // .. to’ instructions with a bitwidth above a threshold.  This is
 // useful for targets like x86_64 that cannot lower fp convertions
 // with more than 128 bits.
 //
-// This pass also expands div/rem instructions with a bitwidth above a
-// threshold into a call to auto-generated functions.  This is useful
-// for targets like x86_64 that cannot lower divisions with more than
-// 128 bits or targets like x86_32 that cannot lower divisions with
-// more than 64 bits.
+// - Expansion of ‘frem‘ for types MVT::f16, MVT::f32, and MVT::f64 for
+// targets which use "Expand" as the legalization action for the
+// corresponding type.
 //
+// - Expansion of ‘udiv‘, ‘sdiv‘, ‘urem‘, and ‘srem‘ instructions with
+// a bitwidth above a threshold into a call to auto-generated
+// functions.  This is useful for targets like x86_64 that cannot
+// lower divisions with more than 128 bits or targets like x86_32 that
+// cannot lower divisions with more than 64 bits.
+//
+// Instructions with vector types are scalarized first if their scalar
+// types can be expanded. Scalable vector types are not supported.
 //===----------------------------------------------------------------------===//
 
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Analysis/AssumptionCache.h"
 #include "llvm/Analysis/GlobalsModRef.h"
@@ -45,7 +52,7 @@
 #include <llvm/Support/Casting.h>
 #include <optional>
 
-#define DEBUG_TYPE "expand-fp"
+#define DEBUG_TYPE "expand-ir-insts"
 
 using namespace llvm;
 
@@ -1125,18 +1132,18 @@ static bool runImpl(Function &F, const TargetLowering &TLI,
 }
 
 namespace {
-class ExpandFpLegacyPass : public FunctionPass {
+class ExpandIRInstsLegacyPass : public FunctionPass {
   CodeGenOptLevel OptLevel;
 
 public:
   static char ID;
 
-  ExpandFpLegacyPass(CodeGenOptLevel OptLevel)
+  ExpandIRInstsLegacyPass(CodeGenOptLevel OptLevel)
       : FunctionPass(ID), OptLevel(OptLevel) {
-    initializeExpandFpLegacyPassPass(*PassRegistry::getPassRegistry());
+    initializeExpandIRInstsLegacyPassPass(*PassRegistry::getPassRegistry());
   }
 
-  ExpandFpLegacyPass() : ExpandFpLegacyPass(CodeGenOptLevel::None) {};
+  ExpandIRInstsLegacyPass() : ExpandIRInstsLegacyPass(CodeGenOptLevel::None) {};
 
   bool runOnFunction(Function &F) override {
     auto *TM = &getAnalysis<TargetPassConfig>().getTM<TargetMachine>();
@@ -1165,19 +1172,21 @@ class ExpandFpLegacyPass : public FunctionPass {
 };
 } // namespace
 
-ExpandFpPass::ExpandFpPass(const TargetMachine &TM, CodeGenOptLevel OptLevel)
+ExpandIRInstsPass::ExpandIRInstsPass(const TargetMachine &TM,
+                                     CodeGenOptLevel OptLevel)
     : TM(&TM), OptLevel(OptLevel) {}
 
-void ExpandFpPass::printPipeline(
+void ExpandIRInstsPass::printPipeline(
     raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
-  static_cast<PassInfoMixin<ExpandFpPass> *>(this)->printPipeline(
+  static_cast<PassInfoMixin<ExpandIRInstsPass> *>(this)->printPipeline(
       OS, MapClassName2PassName);
   OS << '<';
   OS << "O" << (int)OptLevel;
   OS << '>';
 }
 
-PreservedAnalyses ExpandFpPass::run(Function &F, FunctionAnalysisManager &FAM) {
+PreservedAnalyses ExpandIRInstsPass::run(Function &F,
+                                         FunctionAnalysisManager &FAM) {
   const TargetSubtargetInfo *STI = TM->getSubtargetImpl(F);
   auto &TLI = *STI->getTargetLowering();
   AssumptionCache *AC = nullptr;
@@ -1202,12 +1211,13 @@ PreservedAnalyses ExpandFpPass::run(Function &F, FunctionAnalysisManager &FAM) {
                                        : PreservedAnalyses::all();
 }
 
-char ExpandFpLegacyPass::ID = 0;
-INITIALIZE_PASS_BEGIN(ExpandFpLegacyPass, "expand-fp",
+char ExpandIRInstsLegacyPass::ID = 0;
+INITIALIZE_PASS_BEGIN(ExpandIRInstsLegacyPass, "expand-ir-insts",
                       "Expand certain fp instructions", false, false)
 INITIALIZE_PASS_DEPENDENCY(LibcallLoweringInfoWrapper)
-INITIALIZE_PASS_END(ExpandFpLegacyPass, "expand-fp", "Expand fp", false, false)
+INITIALIZE_PASS_END(ExpandIRInstsLegacyPass, "expand-ir-insts",
+                    "Expand IR instructions", false, false)
 
-FunctionPass *llvm::createExpandFpPass(CodeGenOptLevel OptLevel) {
-  return new ExpandFpLegacyPass(OptLevel);
+FunctionPass *llvm::createExpandIRInstsPass(CodeGenOptLevel OptLevel) {
+  return new ExpandIRInstsLegacyPass(OptLevel);
 }
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp
index acceb66468409..ca75d3b47cf3a 100644
--- a/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -1090,7 +1090,7 @@ bool TargetPassConfig::addISelPasses() {
 
   PM->add(createTargetTransformInfoWrapperPass(TM->getTargetIRAnalysis()));
   addPass(createPreISelIntrinsicLoweringPass());
-  addPass(createExpandFpPass(getOptLevel()));
+  addPass(createExpandIRInstsPass(getOptLevel()));
   addIRPasses();
   addCodeGenPrepare();
   addPassesToHandleExceptions();
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index d639c24664ad1..84ee043b5da56 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -91,7 +91,7 @@
 #include "llvm/CodeGen/DwarfEHPrepare.h"
 #include "llvm/CodeGen/EarlyIfConversion.h"
 #include "llvm/CodeGen/EdgeBundles.h"
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/CodeGen/ExpandMemCmp.h"
 #include "llvm/CodeGen/ExpandPostRAPseudos.h"
 #include "llvm/CodeGen/ExpandReductions.h"
@@ -1632,7 +1632,7 @@ parseBoundsCheckingOptions(StringRef Params) {
   return Options;
 }
 
-Expected<CodeGenOptLevel> parseExpandFpOptions(StringRef Param) {
+Expected<CodeGenOptLevel> parseExpandIRInstsOptions(StringRef Param) {
   if (Param.empty())
     return CodeGenOptLevel::None;
 
@@ -1641,13 +1641,13 @@ Expected<CodeGenOptLevel> parseExpandFpOptions(StringRef Param) {
 
   uint8_t N;
   if (!Prefix.empty() || Digit.getAsInteger(10, N))
-    return createStringError("invalid expand-fp pass parameter '%s'",
+    return createStringError("invalid expand-ir-insts pass parameter '%s'",
                              Param.str().c_str());
 
   std::optional<CodeGenOptLevel> Level = CodeGenOpt::getLevel(N);
   if (!Level.has_value())
     return createStringError(
-        "invalid optimization level for expand-fp pass: %s",
+        "invalid optimization level for expand-ir-insts pass: %s",
         Digit.str().c_str());
 
   return *Level;
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 14215bb32e777..daf6b3d6dbd28 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -729,11 +729,11 @@ FUNCTION_PASS_WITH_PARAMS(
     parseBoundsCheckingOptions,
     "trap;rt;rt-abort;min-rt;min-rt-abort;merge;guard=N")
 FUNCTION_PASS_WITH_PARAMS(
-    "expand-fp", "ExpandFpPass",
+    "expand-ir-insts", "ExpandIRInstsPass",
     [TM = TM](CodeGenOptLevel OL) {
-      return ExpandFpPass(*TM, OL);
+      return ExpandIRInstsPass(*TM, OL);
     },
-    parseExpandFpOptions, "O0;O1;O2;O3")
+    parseExpandIRInstsOptions, "O0;O1;O2;O3")
 
 #undef FUNCTION_PASS_WITH_PARAMS
 
diff --git a/llvm/test/CodeGen/AArch64/O0-pipeline.ll b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
index 2a1264446c70d..f4f9d38336608 100644
--- a/llvm/test/CodeGen/AArch64/O0-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
@@ -17,7 +17,7 @@
 ; CHECK-NEXT:   ModulePass Manager
 ; CHECK-NEXT:     Pre-ISel Intrinsic Lowering
 ; CHECK-NEXT:     FunctionPass Manager
-; CHECK-NEXT:       Expand fp
+; CHECK-NEXT:       Expand IR instructions
 ; CHECK-NEXT:       Expand Atomic instructions
 ; CHECK-NEXT:       Module Verifier
 ; CHECK-NEXT:       Lower Garbage Collection Instructions
diff --git a/llvm/test/CodeGen/AArch64/O3-pipeline.ll b/llvm/test/CodeGen/AArch64/O3-pipeline.ll
index 4dc3cd1d6b786..f6ed7d5eed814 100644
--- a/llvm/test/CodeGen/AArch64/O3-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O3-pipeline.ll
@@ -21,7 +21,7 @@
 ; CHECK-NEXT:   ModulePass Manager
 ; CHECK-NEXT:     Pre-ISel Intrinsic Lowering
 ; CHECK-NEXT:     FunctionPass Manager
-; CHECK-NEXT:       Expand fp
+; CHECK-NEXT:       Expand IR instructions
 ; CHECK-NEXT:       Expand Atomic instructions
 ; CHECK-NEXT:     SVE intrinsics optimizations
 ; CHECK-NEXT:       FunctionPass Manager
diff --git a/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll b/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
index 39365fe7b6f15..c828f0b538bec 100644
--- a/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
+++ b/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
@@ -579,8 +579,8 @@ define amdgpu_kernel void @fdiv_constant_sel_constants(ptr addrspace(1) %p, i1 %
   ret void
 }
 
-; ExpandFp now expands frem before it reaches dagcombine.
-; TODO Implement this optimization in/before ExpandFP
+; ExpandIRInsts now expands frem before it reaches dagcombine.
+; TODO Implement this optimization in/before ExpandIRInsts?
 define amdgpu_kernel void @frem_constant_sel_constants(ptr addrspace(1) %p, i1 %cond) {
 ; GFX9-LABEL: frem_constant_sel_constants:
 ; GFX9:       ; %bb.0:
diff --git a/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll b/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
index c001df48499c7..eee3352fa7452 100644
--- a/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
+++ b/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
@@ -2,7 +2,7 @@
 ; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,SDAG %s
 ; RUN: not --crash llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s 2>&1 | FileCheck -check-prefix=GISEL %s
 
-; FIXME: GISEL can't handle the "fptrunc float to bfloat" that expand-fp emits.
+; FIXME: GISEL can't handle the "fptrunc float to bfloat" that expand-ir-insts emits.
 
 ; GISEL: unable to translate instruction: fptrunc
 
diff --git a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
index edf4b6f26d08e..61c751a9816a2 100644
--- a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
+++ b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
@@ -9,11 +9,11 @@
 ; RUN:   | FileCheck -check-prefix=GCN-O3 %s
 
 
-; GCN-O0: require<MachineModuleAnalysis>,require<profile-summary>,require<collector-metadata>,require<runtime-libcall-info>,pre-isel-intrinsic-lowering,function(expand-fp<O0>),amdgpu-remove-incompatible-functions,amdgpu-printf-runtime-binding,amdgpu-lower-ctor-dtor,function(amdgpu-uniform-intrinsic-combine),expand-variadics,amdgpu-always-inline,always-inline,amdgpu-export-kernel-runtime-handles,amdgpu-lower-exec-sync,amdgpu-sw-lower-lds,amdgpu-lower-module-lds,function(atomic-expand,verify,gc-lowering,lower-constant-intrinsics,unreachableblockelim,ee-instrument<post-inline>,scalarize-masked-mem-intrin,expand-reductions,amdgpu-lower-kernel-arguments),amdgpu-lower-buffer-fat-pointers,amdgpu-lower-intrinsics,cgscc(function(lower-switch,lower-invoke,unreachableblockelim)),require<amdgpu-argument-usage>,cgscc(function(amdgp...
[truncated]

@llvmbot
Copy link
Member

llvmbot commented Dec 17, 2025

@llvm/pr-subscribers-backend-loongarch

Author: Frederik Harwath (frederik-h)

Changes

The pass now contains a non-fp expansion and should
be used for any similar expansions regardless of the
types involved. Hence a generic name seems apt.

Rename the source files, pass, and adjust the pass
description. Move all tests for the expansions
that have previously been merged into the pass
to a single directory.


Patch is 67.80 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/172681.diff

52 Files Affected:

  • (modified) llvm/docs/WritingAnLLVMPass.rst (+1-1)
  • (renamed) llvm/include/llvm/CodeGen/ExpandIRInsts.h (+6-6)
  • (modified) llvm/include/llvm/CodeGen/Passes.h (+2-2)
  • (modified) llvm/include/llvm/CodeGen/TargetLowering.h (+6-6)
  • (modified) llvm/include/llvm/InitializePasses.h (+1-1)
  • (modified) llvm/include/llvm/Passes/CodeGenPassBuilder.h (+2-2)
  • (modified) llvm/lib/CodeGen/CMakeLists.txt (+1-1)
  • (modified) llvm/lib/CodeGen/CodeGen.cpp (+1-1)
  • (renamed) llvm/lib/CodeGen/ExpandIRInsts.cpp (+33-23)
  • (modified) llvm/lib/CodeGen/TargetPassConfig.cpp (+1-1)
  • (modified) llvm/lib/Passes/PassBuilder.cpp (+4-4)
  • (modified) llvm/lib/Passes/PassRegistry.def (+3-3)
  • (modified) llvm/test/CodeGen/AArch64/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/AArch64/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/AMDGPU/dagcombine-select.ll (+2-2)
  • (modified) llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll (+1-1)
  • (modified) llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll (+3-3)
  • (modified) llvm/test/CodeGen/AMDGPU/llc-pipeline.ll (+5-5)
  • (modified) llvm/test/CodeGen/ARM/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/LoongArch/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/LoongArch/opt-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/M68k/pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/PowerPC/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/PowerPC/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/RISCV/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/RISCV/O3-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/SPIRV/llc-pipeline.ll (+2-2)
  • (modified) llvm/test/CodeGen/X86/O0-pipeline.ll (+1-1)
  • (modified) llvm/test/CodeGen/X86/expand-large-fp-optnone.ll (+1-1)
  • (modified) llvm/test/CodeGen/X86/opt-pipeline.ll (+1-1)
  • (removed) llvm/test/Transforms/ExpandFp/AMDGPU/pass-parameters.ll (-20)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/frem-inf.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/frem.ll (+1-1)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/lit.local.cfg ()
  • (renamed) llvm/test/Transforms/ExpandIRInsts/AMDGPU/missing-analysis.ll (+1-1)
  • (added) llvm/test/Transforms/ExpandIRInsts/AMDGPU/pass-parameters.ll (+20)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptosi129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-fptoui129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-si129tofp.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-convert-ui129tofp.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/expand-large-fp-optnone.ll (+3-3)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/lit.local.cfg ()
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/sdiv129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/srem129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/udiv129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/urem129.ll (+2-2)
  • (renamed) llvm/test/Transforms/ExpandIRInsts/X86/vector.ll (+2-2)
  • (removed) llvm/test/Transforms/ExpandLargeFpConvert/X86/lit.local.cfg (-2)
  • (modified) llvm/test/tools/opt/no-target-machine.ll (+2-2)
  • (modified) llvm/tools/opt/optdriver.cpp (+2-2)
  • (modified) llvm/utils/gn/secondary/llvm/lib/CodeGen/BUILD.gn (+1-1)
  • (modified) llvm/utils/profcheck-xfail.txt (+9-9)
diff --git a/llvm/docs/WritingAnLLVMPass.rst b/llvm/docs/WritingAnLLVMPass.rst
index f475676e15367..216e693087d96 100644
--- a/llvm/docs/WritingAnLLVMPass.rst
+++ b/llvm/docs/WritingAnLLVMPass.rst
@@ -673,7 +673,7 @@ default optimization pipelines, e.g. (the output has been trimmed):
   ModulePass Manager
   Pre-ISel Intrinsic Lowering
   FunctionPass Manager
-    Expand fp
+    Expand IR instructions
     Expand Atomic instructions
   SVE intrinsics optimizations
     FunctionPass Manager
diff --git a/llvm/include/llvm/CodeGen/ExpandFp.h b/llvm/include/llvm/CodeGen/ExpandIRInsts.h
similarity index 68%
rename from llvm/include/llvm/CodeGen/ExpandFp.h
rename to llvm/include/llvm/CodeGen/ExpandIRInsts.h
index 28e6aecc2beb5..5d3fcf75cd530 100644
--- a/llvm/include/llvm/CodeGen/ExpandFp.h
+++ b/llvm/include/llvm/CodeGen/ExpandIRInsts.h
@@ -1,4 +1,4 @@
-//===- ExpandFp.h -----------------------------------*- C++ -*-===//
+//===- ExpandIRInsts.h -----------------------------------*- C++ -*-===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_CODEGEN_EXPANDFP_H
-#define LLVM_CODEGEN_EXPANDFP_H
+#ifndef LLVM_CODEGEN_EXPANDIRINSTS_H
+#define LLVM_CODEGEN_EXPANDIRINSTS_H
 
 #include "llvm/IR/PassManager.h"
 #include "llvm/Support/CodeGen.h"
@@ -16,13 +16,13 @@ namespace llvm {
 
 class TargetMachine;
 
-class ExpandFpPass : public PassInfoMixin<ExpandFpPass> {
+class ExpandIRInstsPass : public PassInfoMixin<ExpandIRInstsPass> {
 private:
   const TargetMachine *TM;
   CodeGenOptLevel OptLevel;
 
 public:
-  explicit ExpandFpPass(const TargetMachine &TM, CodeGenOptLevel OptLevel);
+  explicit ExpandIRInstsPass(const TargetMachine &TM, CodeGenOptLevel OptLevel);
 
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
   static bool isRequired() { return true; }
@@ -32,4 +32,4 @@ class ExpandFpPass : public PassInfoMixin<ExpandFpPass> {
 
 } // end namespace llvm
 
-#endif // LLVM_CODEGEN_EXPANDFP_H
+#endif // LLVM_CODEGEN_EXPANDIRINSTS_H
diff --git a/llvm/include/llvm/CodeGen/Passes.h b/llvm/include/llvm/CodeGen/Passes.h
index 08dabd69a48e9..fe19e6a32c680 100644
--- a/llvm/include/llvm/CodeGen/Passes.h
+++ b/llvm/include/llvm/CodeGen/Passes.h
@@ -547,7 +547,7 @@ LLVM_ABI FunctionPass *createExpandReductionsPass();
 LLVM_ABI FunctionPass *createReplaceWithVeclibLegacyPass();
 
 // Expands large div/rem instructions.
-LLVM_ABI FunctionPass *createExpandFpPass();
+LLVM_ABI FunctionPass *createExpandIRInstsPass();
 
 // This pass expands memcmp() to load/stores.
 LLVM_ABI FunctionPass *createExpandMemCmpLegacyPass();
@@ -565,7 +565,7 @@ LLVM_ABI FunctionPass *createCFIFixup();
 LLVM_ABI FunctionPass *createCFIInstrInserter();
 
 // Expands floating point instructions.
-FunctionPass *createExpandFpPass(CodeGenOptLevel);
+FunctionPass *createExpandIRInstsPass(CodeGenOptLevel);
 
 /// Creates CFGuard longjmp target identification pass.
 /// \see CFGuardLongjmp.cpp
diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 06bc5caefd063..8ad64a852b74d 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -2220,13 +2220,13 @@ class LLVM_ABI TargetLoweringBase {
   }
 
   /// Returns the size in bits of the maximum div/rem the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   unsigned getMaxDivRemBitWidthSupported() const {
     return MaxDivRemBitWidthSupported;
   }
 
   /// Returns the size in bits of the maximum fp to/from int conversion the
-  /// backend supports. Larger operations will be expanded by ExpandFp.
+  /// backend supports. Larger operations will be expanded by ExpandIRInsts.
   unsigned getMaxLargeFPConvertBitWidthSupported() const {
     return MaxLargeFPConvertBitWidthSupported;
   }
@@ -2886,13 +2886,13 @@ class LLVM_ABI TargetLoweringBase {
   }
 
   /// Set the size in bits of the maximum div/rem the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   void setMaxDivRemBitWidthSupported(unsigned SizeInBits) {
     MaxDivRemBitWidthSupported = SizeInBits;
   }
 
   /// Set the size in bits of the maximum fp to/from int conversion the backend
-  /// supports. Larger operations will be expanded by ExpandFp.
+  /// supports. Larger operations will be expanded by ExpandIRInsts.
   void setMaxLargeFPConvertBitWidthSupported(unsigned SizeInBits) {
     MaxLargeFPConvertBitWidthSupported = SizeInBits;
   }
@@ -3743,12 +3743,12 @@ class LLVM_ABI TargetLoweringBase {
   unsigned MaxAtomicSizeInBitsSupported;
 
   /// Size in bits of the maximum div/rem size the backend supports.
-  /// Larger operations will be expanded by ExpandFp.
+  /// Larger operations will be expanded by ExpandIRInsts.
   unsigned MaxDivRemBitWidthSupported;
 
   /// Size in bits of the maximum fp to/from int conversion size the
   /// backend supports. Larger operations will be expanded by
-  /// ExpandFp.
+  /// ExpandIRInsts.
   unsigned MaxLargeFPConvertBitWidthSupported;
 
   /// Size in bits of the minimum cmpxchg or ll/sc operation the
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index b4f96674bea9e..2bc00a2f71e1a 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -112,7 +112,7 @@ LLVM_ABI void initializeEarlyMachineLICMPass(PassRegistry &);
 LLVM_ABI void initializeEarlyTailDuplicateLegacyPass(PassRegistry &);
 LLVM_ABI void initializeEdgeBundlesWrapperLegacyPass(PassRegistry &);
 LLVM_ABI void initializeEHContGuardTargetsPass(PassRegistry &);
-LLVM_ABI void initializeExpandFpLegacyPassPass(PassRegistry &);
+LLVM_ABI void initializeExpandIRInstsLegacyPassPass(PassRegistry &);
 LLVM_ABI void initializeExpandMemCmpLegacyPassPass(PassRegistry &);
 LLVM_ABI void initializeExpandPostRALegacyPass(PassRegistry &);
 LLVM_ABI void initializeExpandReductionsPass(PassRegistry &);
diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
index 0462adb835d89..9bf8e1976fad8 100644
--- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h
+++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
@@ -32,7 +32,7 @@
 #include "llvm/CodeGen/DetectDeadLanes.h"
 #include "llvm/CodeGen/DwarfEHPrepare.h"
 #include "llvm/CodeGen/EarlyIfConversion.h"
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/CodeGen/ExpandMemCmp.h"
 #include "llvm/CodeGen/ExpandPostRAPseudos.h"
 #include "llvm/CodeGen/ExpandReductions.h"
@@ -677,7 +677,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addISelPasses(
     addModulePass(LowerEmuTLSPass(), PMW);
 
   addModulePass(PreISelIntrinsicLoweringPass(&TM), PMW);
-  addFunctionPass(ExpandFpPass(TM, getOptLevel()), PMW);
+  addFunctionPass(ExpandIRInstsPass(TM, getOptLevel()), PMW);
 
   derived().addIRPasses(PMW);
   derived().addCodeGenPrepare(PMW);
diff --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt
index 8c9b172c0da65..871934ea4b76e 100644
--- a/llvm/lib/CodeGen/CMakeLists.txt
+++ b/llvm/lib/CodeGen/CMakeLists.txt
@@ -57,7 +57,7 @@ add_llvm_component_library(LLVMCodeGen
   EdgeBundles.cpp
   EHContGuardTargets.cpp
   ExecutionDomainFix.cpp
-  ExpandFp.cpp
+  ExpandIRInsts.cpp
   ExpandMemCmp.cpp
   ExpandPostRAPseudos.cpp
   ExpandReductions.cpp
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 47633f89b70e9..3550eea13979a 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -39,7 +39,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
   initializeEarlyIfPredicatorPass(Registry);
   initializeEarlyMachineLICMPass(Registry);
   initializeEarlyTailDuplicateLegacyPass(Registry);
-  initializeExpandFpLegacyPassPass(Registry);
+  initializeExpandIRInstsLegacyPassPass(Registry);
   initializeExpandMemCmpLegacyPassPass(Registry);
   initializeExpandPostRALegacyPass(Registry);
   initializeFEntryInserterLegacyPass(Registry);
diff --git a/llvm/lib/CodeGen/ExpandFp.cpp b/llvm/lib/CodeGen/ExpandIRInsts.cpp
similarity index 95%
rename from llvm/lib/CodeGen/ExpandFp.cpp
rename to llvm/lib/CodeGen/ExpandIRInsts.cpp
index 395fef19a13b9..1d09000fbca6b 100644
--- a/llvm/lib/CodeGen/ExpandFp.cpp
+++ b/llvm/lib/CodeGen/ExpandIRInsts.cpp
@@ -1,26 +1,33 @@
-//===--- ExpandFp.cpp - Expand fp instructions ----------------------------===//
+//===--- ExpandIRInsts.cpp - Expand IR instructions -----------------------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-// This pass expands certain floating point instructions at the IR level.
+// This pass expands certain instructions at the IR level.
 //
-// It expands ‘fptoui .. to’, ‘fptosi .. to’, ‘uitofp ..  to’, ‘sitofp
+// The following expansions are implemented:
+// - Expansion of ‘fptoui .. to’, ‘fptosi .. to’, ‘uitofp ..  to’, ‘sitofp
 // .. to’ instructions with a bitwidth above a threshold.  This is
 // useful for targets like x86_64 that cannot lower fp convertions
 // with more than 128 bits.
 //
-// This pass also expands div/rem instructions with a bitwidth above a
-// threshold into a call to auto-generated functions.  This is useful
-// for targets like x86_64 that cannot lower divisions with more than
-// 128 bits or targets like x86_32 that cannot lower divisions with
-// more than 64 bits.
+// - Expansion of ‘frem‘ for types MVT::f16, MVT::f32, and MVT::f64 for
+// targets which use "Expand" as the legalization action for the
+// corresponding type.
 //
+// - Expansion of ‘udiv‘, ‘sdiv‘, ‘urem‘, and ‘srem‘ instructions with
+// a bitwidth above a threshold into a call to auto-generated
+// functions.  This is useful for targets like x86_64 that cannot
+// lower divisions with more than 128 bits or targets like x86_32 that
+// cannot lower divisions with more than 64 bits.
+//
+// Instructions with vector types are scalarized first if their scalar
+// types can be expanded. Scalable vector types are not supported.
 //===----------------------------------------------------------------------===//
 
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Analysis/AssumptionCache.h"
 #include "llvm/Analysis/GlobalsModRef.h"
@@ -45,7 +52,7 @@
 #include <llvm/Support/Casting.h>
 #include <optional>
 
-#define DEBUG_TYPE "expand-fp"
+#define DEBUG_TYPE "expand-ir-insts"
 
 using namespace llvm;
 
@@ -1125,18 +1132,18 @@ static bool runImpl(Function &F, const TargetLowering &TLI,
 }
 
 namespace {
-class ExpandFpLegacyPass : public FunctionPass {
+class ExpandIRInstsLegacyPass : public FunctionPass {
   CodeGenOptLevel OptLevel;
 
 public:
   static char ID;
 
-  ExpandFpLegacyPass(CodeGenOptLevel OptLevel)
+  ExpandIRInstsLegacyPass(CodeGenOptLevel OptLevel)
       : FunctionPass(ID), OptLevel(OptLevel) {
-    initializeExpandFpLegacyPassPass(*PassRegistry::getPassRegistry());
+    initializeExpandIRInstsLegacyPassPass(*PassRegistry::getPassRegistry());
   }
 
-  ExpandFpLegacyPass() : ExpandFpLegacyPass(CodeGenOptLevel::None) {};
+  ExpandIRInstsLegacyPass() : ExpandIRInstsLegacyPass(CodeGenOptLevel::None) {};
 
   bool runOnFunction(Function &F) override {
     auto *TM = &getAnalysis<TargetPassConfig>().getTM<TargetMachine>();
@@ -1165,19 +1172,21 @@ class ExpandFpLegacyPass : public FunctionPass {
 };
 } // namespace
 
-ExpandFpPass::ExpandFpPass(const TargetMachine &TM, CodeGenOptLevel OptLevel)
+ExpandIRInstsPass::ExpandIRInstsPass(const TargetMachine &TM,
+                                     CodeGenOptLevel OptLevel)
     : TM(&TM), OptLevel(OptLevel) {}
 
-void ExpandFpPass::printPipeline(
+void ExpandIRInstsPass::printPipeline(
     raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) {
-  static_cast<PassInfoMixin<ExpandFpPass> *>(this)->printPipeline(
+  static_cast<PassInfoMixin<ExpandIRInstsPass> *>(this)->printPipeline(
       OS, MapClassName2PassName);
   OS << '<';
   OS << "O" << (int)OptLevel;
   OS << '>';
 }
 
-PreservedAnalyses ExpandFpPass::run(Function &F, FunctionAnalysisManager &FAM) {
+PreservedAnalyses ExpandIRInstsPass::run(Function &F,
+                                         FunctionAnalysisManager &FAM) {
   const TargetSubtargetInfo *STI = TM->getSubtargetImpl(F);
   auto &TLI = *STI->getTargetLowering();
   AssumptionCache *AC = nullptr;
@@ -1202,12 +1211,13 @@ PreservedAnalyses ExpandFpPass::run(Function &F, FunctionAnalysisManager &FAM) {
                                        : PreservedAnalyses::all();
 }
 
-char ExpandFpLegacyPass::ID = 0;
-INITIALIZE_PASS_BEGIN(ExpandFpLegacyPass, "expand-fp",
+char ExpandIRInstsLegacyPass::ID = 0;
+INITIALIZE_PASS_BEGIN(ExpandIRInstsLegacyPass, "expand-ir-insts",
                       "Expand certain fp instructions", false, false)
 INITIALIZE_PASS_DEPENDENCY(LibcallLoweringInfoWrapper)
-INITIALIZE_PASS_END(ExpandFpLegacyPass, "expand-fp", "Expand fp", false, false)
+INITIALIZE_PASS_END(ExpandIRInstsLegacyPass, "expand-ir-insts",
+                    "Expand IR instructions", false, false)
 
-FunctionPass *llvm::createExpandFpPass(CodeGenOptLevel OptLevel) {
-  return new ExpandFpLegacyPass(OptLevel);
+FunctionPass *llvm::createExpandIRInstsPass(CodeGenOptLevel OptLevel) {
+  return new ExpandIRInstsLegacyPass(OptLevel);
 }
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp
index acceb66468409..ca75d3b47cf3a 100644
--- a/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -1090,7 +1090,7 @@ bool TargetPassConfig::addISelPasses() {
 
   PM->add(createTargetTransformInfoWrapperPass(TM->getTargetIRAnalysis()));
   addPass(createPreISelIntrinsicLoweringPass());
-  addPass(createExpandFpPass(getOptLevel()));
+  addPass(createExpandIRInstsPass(getOptLevel()));
   addIRPasses();
   addCodeGenPrepare();
   addPassesToHandleExceptions();
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index d639c24664ad1..84ee043b5da56 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -91,7 +91,7 @@
 #include "llvm/CodeGen/DwarfEHPrepare.h"
 #include "llvm/CodeGen/EarlyIfConversion.h"
 #include "llvm/CodeGen/EdgeBundles.h"
-#include "llvm/CodeGen/ExpandFp.h"
+#include "llvm/CodeGen/ExpandIRInsts.h"
 #include "llvm/CodeGen/ExpandMemCmp.h"
 #include "llvm/CodeGen/ExpandPostRAPseudos.h"
 #include "llvm/CodeGen/ExpandReductions.h"
@@ -1632,7 +1632,7 @@ parseBoundsCheckingOptions(StringRef Params) {
   return Options;
 }
 
-Expected<CodeGenOptLevel> parseExpandFpOptions(StringRef Param) {
+Expected<CodeGenOptLevel> parseExpandIRInstsOptions(StringRef Param) {
   if (Param.empty())
     return CodeGenOptLevel::None;
 
@@ -1641,13 +1641,13 @@ Expected<CodeGenOptLevel> parseExpandFpOptions(StringRef Param) {
 
   uint8_t N;
   if (!Prefix.empty() || Digit.getAsInteger(10, N))
-    return createStringError("invalid expand-fp pass parameter '%s'",
+    return createStringError("invalid expand-ir-insts pass parameter '%s'",
                              Param.str().c_str());
 
   std::optional<CodeGenOptLevel> Level = CodeGenOpt::getLevel(N);
   if (!Level.has_value())
     return createStringError(
-        "invalid optimization level for expand-fp pass: %s",
+        "invalid optimization level for expand-ir-insts pass: %s",
         Digit.str().c_str());
 
   return *Level;
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 14215bb32e777..daf6b3d6dbd28 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -729,11 +729,11 @@ FUNCTION_PASS_WITH_PARAMS(
     parseBoundsCheckingOptions,
     "trap;rt;rt-abort;min-rt;min-rt-abort;merge;guard=N")
 FUNCTION_PASS_WITH_PARAMS(
-    "expand-fp", "ExpandFpPass",
+    "expand-ir-insts", "ExpandIRInstsPass",
     [TM = TM](CodeGenOptLevel OL) {
-      return ExpandFpPass(*TM, OL);
+      return ExpandIRInstsPass(*TM, OL);
     },
-    parseExpandFpOptions, "O0;O1;O2;O3")
+    parseExpandIRInstsOptions, "O0;O1;O2;O3")
 
 #undef FUNCTION_PASS_WITH_PARAMS
 
diff --git a/llvm/test/CodeGen/AArch64/O0-pipeline.ll b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
index 2a1264446c70d..f4f9d38336608 100644
--- a/llvm/test/CodeGen/AArch64/O0-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
@@ -17,7 +17,7 @@
 ; CHECK-NEXT:   ModulePass Manager
 ; CHECK-NEXT:     Pre-ISel Intrinsic Lowering
 ; CHECK-NEXT:     FunctionPass Manager
-; CHECK-NEXT:       Expand fp
+; CHECK-NEXT:       Expand IR instructions
 ; CHECK-NEXT:       Expand Atomic instructions
 ; CHECK-NEXT:       Module Verifier
 ; CHECK-NEXT:       Lower Garbage Collection Instructions
diff --git a/llvm/test/CodeGen/AArch64/O3-pipeline.ll b/llvm/test/CodeGen/AArch64/O3-pipeline.ll
index 4dc3cd1d6b786..f6ed7d5eed814 100644
--- a/llvm/test/CodeGen/AArch64/O3-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O3-pipeline.ll
@@ -21,7 +21,7 @@
 ; CHECK-NEXT:   ModulePass Manager
 ; CHECK-NEXT:     Pre-ISel Intrinsic Lowering
 ; CHECK-NEXT:     FunctionPass Manager
-; CHECK-NEXT:       Expand fp
+; CHECK-NEXT:       Expand IR instructions
 ; CHECK-NEXT:       Expand Atomic instructions
 ; CHECK-NEXT:     SVE intrinsics optimizations
 ; CHECK-NEXT:       FunctionPass Manager
diff --git a/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll b/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
index 39365fe7b6f15..c828f0b538bec 100644
--- a/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
+++ b/llvm/test/CodeGen/AMDGPU/dagcombine-select.ll
@@ -579,8 +579,8 @@ define amdgpu_kernel void @fdiv_constant_sel_constants(ptr addrspace(1) %p, i1 %
   ret void
 }
 
-; ExpandFp now expands frem before it reaches dagcombine.
-; TODO Implement this optimization in/before ExpandFP
+; ExpandIRInsts now expands frem before it reaches dagcombine.
+; TODO Implement this optimization in/before ExpandIRInsts?
 define amdgpu_kernel void @frem_constant_sel_constants(ptr addrspace(1) %p, i1 %cond) {
 ; GFX9-LABEL: frem_constant_sel_constants:
 ; GFX9:       ; %bb.0:
diff --git a/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll b/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
index c001df48499c7..eee3352fa7452 100644
--- a/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
+++ b/llvm/test/CodeGen/AMDGPU/itofp.i128.bf.ll
@@ -2,7 +2,7 @@
 ; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,SDAG %s
 ; RUN: not --crash llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s 2>&1 | FileCheck -check-prefix=GISEL %s
 
-; FIXME: GISEL can't handle the "fptrunc float to bfloat" that expand-fp emits.
+; FIXME: GISEL can't handle the "fptrunc float to bfloat" that expand-ir-insts emits.
 
 ; GISEL: unable to translate instruction: fptrunc
 
diff --git a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
index edf4b6f26d08e..61c751a9816a2 100644
--- a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
+++ b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
@@ -9,11 +9,11 @@
 ; RUN:   | FileCheck -check-prefix=GCN-O3 %s
 
 
-; GCN-O0: require<MachineModuleAnalysis>,require<profile-summary>,require<collector-metadata>,require<runtime-libcall-info>,pre-isel-intrinsic-lowering,function(expand-fp<O0>),amdgpu-remove-incompatible-functions,amdgpu-printf-runtime-binding,amdgpu-lower-ctor-dtor,function(amdgpu-uniform-intrinsic-combine),expand-variadics,amdgpu-always-inline,always-inline,amdgpu-export-kernel-runtime-handles,amdgpu-lower-exec-sync,amdgpu-sw-lower-lds,amdgpu-lower-module-lds,function(atomic-expand,verify,gc-lowering,lower-constant-intrinsics,unreachableblockelim,ee-instrument<post-inline>,scalarize-masked-mem-intrin,expand-reductions,amdgpu-lower-kernel-arguments),amdgpu-lower-buffer-fat-pointers,amdgpu-lower-intrinsics,cgscc(function(lower-switch,lower-invoke,unreachableblockelim)),require<amdgpu-argument-usage>,cgscc(function(amdgp...
[truncated]

Copy link
Contributor

@arsenm arsenm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe should use the work legalize instead of expand but I suppose atomic is already atomic expand

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants