llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-selectiondag

Author: Matt Arsenault (arsenm)

<details>
<summary>Changes</summary>

Previously this was taking a duplicate copy of this information
from TargetLowering. This moves the bulk of libcall checks to use
the new analysis. There are still a few straggler uses in misc.
passes in a few backends (mainly AArch64 has some libcall emission
in FinalizeISel and PrologEpilogInserter).

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


5 Files Affected:

- (modified) llvm/include/llvm/CodeGen/SelectionDAGISel.h (+1) 
- (modified) llvm/include/llvm/Passes/CodeGenPassBuilder.h (+3) 
- (modified) llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (+29-16) 
- (modified) llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll (+3) 
- (modified) llvm/test/CodeGen/X86/llc-pipeline-npm.ll (+4) 


``````````diff
diff --git a/llvm/include/llvm/CodeGen/SelectionDAGISel.h 
b/llvm/include/llvm/CodeGen/SelectionDAGISel.h
index c1467cfb81bdc..c94dc4241368e 100644
--- a/llvm/include/llvm/CodeGen/SelectionDAGISel.h
+++ b/llvm/include/llvm/CodeGen/SelectionDAGISel.h
@@ -46,6 +46,7 @@ class SelectionDAGISel {
 public:
   TargetMachine &TM;
   const TargetLibraryInfo *LibInfo;
+  const LibcallLoweringInfo *LibcallLowering;
 
   std::unique_ptr<FunctionLoweringInfo> FuncInfo;
   std::unique_ptr<SwiftErrorValueTracking> SwiftError;
diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h 
b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
index 005b695741903..83b3f4f8b5720 100644
--- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h
+++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
@@ -581,6 +581,9 @@ Error CodeGenPassBuilder<Derived, 
TargetMachineT>::buildPipeline(
                 /*Force=*/true);
   addModulePass(RequireAnalysisPass<RuntimeLibraryAnalysis, Module>(), PMW,
                 /*Force=*/true);
+  addModulePass(RequireAnalysisPass<LibcallLoweringModuleAnalysis, Module>(),
+                PMW,
+                /*Force=*/true);
   addISelPasses(PMW);
   flushFPMsToMPM(PMW);
 
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp 
b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index b8e18dd4b0241..14c70751442db 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -437,6 +437,9 @@ void SelectionDAGISelLegacy::getAnalysisUsage(AnalysisUsage 
&AU) const {
   AU.addPreserved<AssignmentTrackingAnalysis>();
   if (RegisterPGOPasses)
     LazyBlockFrequencyInfoPass::getLazyBFIAnalysisUsage(AU);
+
+  AU.addRequired<LibcallLoweringInfoWrapper>();
+
   MachineFunctionPass::getAnalysisUsage(AU);
 }
 
@@ -489,9 +492,10 @@ void SelectionDAGISel::initializeAnalysisResults(
   (void)MatchFilterFuncName;
 #endif
 
+  const TargetSubtargetInfo &Subtarget = MF->getSubtarget();
   bool RegisterPGOPasses = maintainPGOProfile(TM, OptLevel);
-  TII = MF->getSubtarget().getInstrInfo();
-  TLI = MF->getSubtarget().getTargetLowering();
+  TII = Subtarget.getInstrInfo();
+  TLI = Subtarget.getTargetLowering();
   RegInfo = &MF->getRegInfo();
   LibInfo = &FAM.getResult<TargetLibraryAnalysis>(Fn);
 
@@ -512,9 +516,16 @@ void SelectionDAGISel::initializeAnalysisResults(
   MachineModuleInfo &MMI =
       MAMP.getCachedResult<MachineModuleAnalysis>(*Fn.getParent())->getMMI();
 
-  CurDAG->init(*MF, *ORE, MFAM, LibInfo,
-               &TLI->getLibcallLoweringInfo(), // FIXME: Take from analysis
-               UA, PSI, BFI, MMI, FnVarLocs);
+  const LibcallLoweringModuleAnalysisResult *LibcallResult =
+      MAMP.getCachedResult<LibcallLoweringModuleAnalysis>(*Fn.getParent());
+  if (!LibcallResult) {
+    reportFatalUsageError("'" + LibcallLoweringModuleAnalysis::name() +
+                          "' analysis required");
+  }
+
+  LibcallLowering = &LibcallResult->getLibcallLowering(Subtarget);
+  CurDAG->init(*MF, *ORE, MFAM, LibInfo, LibcallLowering, UA, PSI, BFI, MMI,
+               FnVarLocs);
 
   // Now get the optional analyzes if we want to.
   // This is based on the possibly changed OptLevel (after optnone is taken
@@ -535,7 +546,7 @@ void SelectionDAGISel::initializeAnalysisResults(
 
   TTI = &FAM.getResult<TargetIRAnalysis>(Fn);
 
-  HwMode = MF->getSubtarget().getHwMode();
+  HwMode = Subtarget.getHwMode();
 }
 
 void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
@@ -547,9 +558,11 @@ void 
SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
   (void)MatchFilterFuncName;
 #endif
 
+  const TargetSubtargetInfo &Subtarget = MF->getSubtarget();
+
   bool RegisterPGOPasses = maintainPGOProfile(TM, OptLevel);
-  TII = MF->getSubtarget().getInstrInfo();
-  TLI = MF->getSubtarget().getTargetLowering();
+  TII = Subtarget.getInstrInfo();
+  TLI = Subtarget.getTargetLowering();
   RegInfo = &MF->getRegInfo();
   LibInfo = &MFP.getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(Fn);
 
@@ -573,9 +586,12 @@ void 
SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
   MachineModuleInfo &MMI =
       MFP.getAnalysis<MachineModuleInfoWrapperPass>().getMMI();
 
-  CurDAG->init(*MF, *ORE, &MFP, LibInfo,
-               &TLI->getLibcallLoweringInfo(), // FIXME: Take from analysis
-               UA, PSI, BFI, MMI, FnVarLocs);
+  LibcallLowering =
+      &MFP.getAnalysis<LibcallLoweringInfoWrapper>().getLibcallLowering(
+          *Fn.getParent(), Subtarget);
+
+  CurDAG->init(*MF, *ORE, &MFP, LibInfo, LibcallLowering, UA, PSI, BFI, MMI,
+               FnVarLocs);
 
   // Now get the optional analyzes if we want to.
   // This is based on the possibly changed OptLevel (after optnone is taken
@@ -597,7 +613,7 @@ void 
SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
 
   TTI = &MFP.getAnalysis<TargetTransformInfoWrapperPass>().getTTI(Fn);
 
-  HwMode = MF->getSubtarget().getHwMode();
+  HwMode = Subtarget.getHwMode();
 }
 
 bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
@@ -1658,10 +1674,7 @@ void SelectionDAGISel::SelectAllBasicBlocks(const 
Function &Fn) {
   FastISel *FastIS = nullptr;
   if (TM.Options.EnableFastISel) {
     LLVM_DEBUG(dbgs() << "Enabling fast-isel\n");
-    FastIS = TLI->createFastISel(
-        *FuncInfo, LibInfo,
-        &TLI->getLibcallLoweringInfo() // FIXME: Take from analysis
-    );
+    FastIS = TLI->createFastISel(*FuncInfo, LibInfo, LibcallLowering);
   }
 
   ReversePostOrderTraversal<const Function*> RPOT(&Fn);
diff --git a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll 
b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
index 6305806c48f18..5a47e18f54a12 100644
--- a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
+++ b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
@@ -11,6 +11,7 @@
 ; GCN-O0-NEXT: require<profile-summary>
 ; GCN-O0-NEXT: require<collector-metadata>
 ; GCN-O0-NEXT: require<runtime-libcall-info>
+; GCN-O0-NEXT: require<libcall-lowering-info>
 ; GCN-O0-NEXT: pre-isel-intrinsic-lowering
 ; GCN-O0-NEXT: function(expand-ir-insts<O0>)
 ; GCN-O0-NEXT: amdgpu-remove-incompatible-functions
@@ -90,6 +91,7 @@
 ; GCN-O2-NEXT: require<profile-summary>
 ; GCN-O2-NEXT: require<collector-metadata>
 ; GCN-O2-NEXT: require<runtime-libcall-info>
+; GCN-O2-NEXT: require<libcall-lowering-info>
 ; GCN-O2-NEXT: pre-isel-intrinsic-lowering
 ; GCN-O2-NEXT: function(expand-ir-insts<O2>)
 ; GCN-O2-NEXT: amdgpu-remove-incompatible-functions
@@ -261,6 +263,7 @@
 ; GCN-O3-NEXT: require<profile-summary>
 ; GCN-O3-NEXT: require<collector-metadata>
 ; GCN-O3-NEXT: require<runtime-libcall-info>
+; GCN-O3-NEXT: require<libcall-lowering-info>
 ; GCN-O3-NEXT: pre-isel-intrinsic-lowering
 ; GCN-O3-NEXT: function(expand-ir-insts<O3>)
 ; GCN-O3-NEXT: amdgpu-remove-incompatible-functions
diff --git a/llvm/test/CodeGen/X86/llc-pipeline-npm.ll 
b/llvm/test/CodeGen/X86/llc-pipeline-npm.ll
index 8230539452f0d..d1bb666b9f423 100644
--- a/llvm/test/CodeGen/X86/llc-pipeline-npm.ll
+++ b/llvm/test/CodeGen/X86/llc-pipeline-npm.ll
@@ -14,6 +14,7 @@
 ; O0-NEXT: require<profile-summary>
 ; O0-NEXT: require<collector-metadata>
 ; O0-NEXT: require<runtime-libcall-info>
+; O0-NEXT: require<libcall-lowering-info>
 ; O0-NEXT: pre-isel-intrinsic-lowering
 ; O0-NEXT: function(expand-ir-insts<O0>
 ; O0-NEXT: atomic-expand
@@ -70,6 +71,7 @@
 ; O2-NEXT: require<profile-summary>
 ; O2-NEXT: require<collector-metadata>
 ; O2-NEXT: require<runtime-libcall-info>
+; O2-NEXT: require<libcall-lowering-info>
 ; O2-NEXT: pre-isel-intrinsic-lowering
 ; O2-NEXT: function(expand-ir-insts<O2>
 ; O2-NEXT: atomic-expand
@@ -180,6 +182,7 @@
 ; O0-WINDOWS-NEXT: require<profile-summary>
 ; O0-WINDOWS-NEXT: require<collector-metadata>
 ; O0-WINDOWS-NEXT: require<runtime-libcall-info>
+; O0-WINDOWS-NEXT: require<libcall-lowering-info>
 ; O0-WINDOWS-NEXT: pre-isel-intrinsic-lowering
 ; O0-WINDOWS-NEXT: function(expand-ir-insts<O0>
 ; O0-WINDOWS-NEXT: atomic-expand
@@ -239,6 +242,7 @@
 ; O3-WINDOWS-NEXT: require<profile-summary>
 ; O3-WINDOWS-NEXT: require<collector-metadata>
 ; O3-WINDOWS-NEXT: require<runtime-libcall-info>
+; O3-WINDOWS-NEXT: require<libcall-lowering-info>
 ; O3-WINDOWS-NEXT: pre-isel-intrinsic-lowering
 ; O3-WINDOWS-NEXT: function(expand-ir-insts<O3>
 ; O3-WINDOWS-NEXT: atomic-expand

``````````

</details>


https://github.com/llvm/llvm-project/pull/176800
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to