From d9e8b2cbccccfea5189277f1e5e793320cbbeb19 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 23 Dec 2019 17:34:59 -0500 Subject: [PATCH] AMDGPU/GlobalISel: Skip DAG hack passes on selected functions The way fallback to SelectionDAG works is somewhat surprising to me. When the fallback path is enabled, the entire set of SelectionDAG selector passes is added to the pass pipeline, and each one needs to check if the function was selected. This results in the surprising behavior of running SIFixSGPRCopies for example, but only if -global-isel-abort=2 is used. SIAddIMGInitPass is also added in addInstSelector, but I'm not sure why we have this pass or if it should be added somewhere else for GlobalISel. --- llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp | 5 +++++ llvm/lib/Target/AMDGPU/SIFixupVectorISel.cpp | 5 +++++ llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp b/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp index 914d2a5..f067e96 100644 --- a/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp +++ b/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp @@ -587,6 +587,11 @@ static bool hoistAndMergeSGPRInits(unsigned Reg, } bool SIFixSGPRCopies::runOnMachineFunction(MachineFunction &MF) { + // Only need to run this in SelectionDAG path. + if (MF.getProperties().hasProperty( + MachineFunctionProperties::Property::Selected)) + return false; + const GCNSubtarget &ST = MF.getSubtarget(); MRI = &MF.getRegInfo(); TRI = ST.getRegisterInfo(); diff --git a/llvm/lib/Target/AMDGPU/SIFixupVectorISel.cpp b/llvm/lib/Target/AMDGPU/SIFixupVectorISel.cpp index a011929..8e3402b 100644 --- a/llvm/lib/Target/AMDGPU/SIFixupVectorISel.cpp +++ b/llvm/lib/Target/AMDGPU/SIFixupVectorISel.cpp @@ -217,6 +217,11 @@ static bool fixupGlobalSaddr(MachineBasicBlock &MBB, } bool SIFixupVectorISel::runOnMachineFunction(MachineFunction &MF) { + // Only need to run this in SelectionDAG path. + if (MF.getProperties().hasProperty( + MachineFunctionProperties::Property::Selected)) + return false; + if (skipFunction(MF.getFunction())) return false; diff --git a/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp b/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp index 1d45e62..236a24a 100644 --- a/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp +++ b/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp @@ -452,6 +452,11 @@ static unsigned insertUndefLaneMask(MachineBasicBlock &MBB) { /// all others, because phi lowering looks through copies and can therefore /// often make copy lowering unnecessary. bool SILowerI1Copies::runOnMachineFunction(MachineFunction &TheMF) { + // Only need to run this in SelectionDAG path. + if (TheMF.getProperties().hasProperty( + MachineFunctionProperties::Property::Selected)) + return false; + MF = &TheMF; MRI = &MF->getRegInfo(); DT = &getAnalysis(); -- 2.7.4