Skip to content

Commit c7c0229

Browse files
authored
Revert "[AMDGPU] SelectionDAG divergence tracking should take into account Target divergency. (#147560)" (#152548)
This reverts commit 9293b65.
1 parent ff0093c commit c7c0229

File tree

8 files changed

+26
-96
lines changed

8 files changed

+26
-96
lines changed

llvm/include/llvm/CodeGen/SelectionDAG.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,6 @@ class SelectionDAG {
238238
LLVMContext *Context;
239239
CodeGenOptLevel OptLevel;
240240

241-
bool DivergentTarget = false;
242-
243241
UniformityInfo *UA = nullptr;
244242
FunctionLoweringInfo * FLI = nullptr;
245243

@@ -473,16 +471,14 @@ class SelectionDAG {
473471
Pass *PassPtr, const TargetLibraryInfo *LibraryInfo,
474472
UniformityInfo *UA, ProfileSummaryInfo *PSIin,
475473
BlockFrequencyInfo *BFIin, MachineModuleInfo &MMI,
476-
FunctionVarLocs const *FnVarLocs, bool HasDivergency);
474+
FunctionVarLocs const *FnVarLocs);
477475

478476
void init(MachineFunction &NewMF, OptimizationRemarkEmitter &NewORE,
479477
MachineFunctionAnalysisManager &AM,
480478
const TargetLibraryInfo *LibraryInfo, UniformityInfo *UA,
481479
ProfileSummaryInfo *PSIin, BlockFrequencyInfo *BFIin,
482-
MachineModuleInfo &MMI, FunctionVarLocs const *FnVarLocs,
483-
bool HasDivergency) {
484-
init(NewMF, NewORE, nullptr, LibraryInfo, UA, PSIin, BFIin, MMI, FnVarLocs,
485-
HasDivergency);
480+
MachineModuleInfo &MMI, FunctionVarLocs const *FnVarLocs) {
481+
init(NewMF, NewORE, nullptr, LibraryInfo, UA, PSIin, BFIin, MMI, FnVarLocs);
486482
MFAM = &AM;
487483
}
488484

llvm/include/llvm/CodeGen/SelectionDAGISel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ class SelectionDAGISel {
5757
AssumptionCache *AC = nullptr;
5858
GCFunctionInfo *GFI = nullptr;
5959
SSPLayoutInfo *SP = nullptr;
60+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
6061
TargetTransformInfo *TTI = nullptr;
62+
#endif
6163
CodeGenOptLevel OptLevel;
6264
const TargetInstrInfo *TII;
6365
const TargetLowering *TLI;

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,7 +1371,7 @@ void SelectionDAG::init(MachineFunction &NewMF,
13711371
const TargetLibraryInfo *LibraryInfo,
13721372
UniformityInfo *NewUA, ProfileSummaryInfo *PSIin,
13731373
BlockFrequencyInfo *BFIin, MachineModuleInfo &MMIin,
1374-
FunctionVarLocs const *VarLocs, bool HasDivergency) {
1374+
FunctionVarLocs const *VarLocs) {
13751375
MF = &NewMF;
13761376
SDAGISelPass = PassPtr;
13771377
ORE = &NewORE;
@@ -1384,7 +1384,6 @@ void SelectionDAG::init(MachineFunction &NewMF,
13841384
BFI = BFIin;
13851385
MMI = &MMIin;
13861386
FnVarLocs = VarLocs;
1387-
DivergentTarget = HasDivergency;
13881387
}
13891388

13901389
SelectionDAG::~SelectionDAG() {
@@ -2331,8 +2330,7 @@ SDValue SelectionDAG::getRegister(Register Reg, EVT VT) {
23312330
return SDValue(E, 0);
23322331

23332332
auto *N = newSDNode<RegisterSDNode>(Reg, VTs);
2334-
N->SDNodeBits.IsDivergent =
2335-
DivergentTarget && TLI->isSDNodeSourceOfDivergence(N, FLI, UA);
2333+
N->SDNodeBits.IsDivergent = TLI->isSDNodeSourceOfDivergence(N, FLI, UA);
23362334
CSEMap.InsertNode(N, IP);
23372335
InsertNode(N);
23382336
return SDValue(N, 0);
@@ -12264,8 +12262,6 @@ static bool gluePropagatesDivergence(const SDNode *Node) {
1226412262
}
1226512263

1226612264
bool SelectionDAG::calculateDivergence(SDNode *N) {
12267-
if (!DivergentTarget)
12268-
return false;
1226912265
if (TLI->isSDNodeAlwaysUniform(N)) {
1227012266
assert(!TLI->isSDNodeSourceOfDivergence(N, FLI, UA) &&
1227112267
"Conflicting divergence information!");
@@ -12285,8 +12281,6 @@ bool SelectionDAG::calculateDivergence(SDNode *N) {
1228512281
}
1228612282

1228712283
void SelectionDAG::updateDivergence(SDNode *N) {
12288-
if (!DivergentTarget)
12289-
return;
1229012284
SmallVector<SDNode *, 16> Worklist(1, N);
1229112285
do {
1229212286
N = Worklist.pop_back_val();
@@ -13847,20 +13841,16 @@ void SelectionDAG::createOperands(SDNode *Node, ArrayRef<SDValue> Vals) {
1384713841
Ops[I].setInitial(Vals[I]);
1384813842
EVT VT = Ops[I].getValueType();
1384913843

13850-
// Take care of the Node's operands iff target has divergence
1385113844
// Skip Chain. It does not carry divergence.
13852-
if (DivergentTarget && VT != MVT::Other &&
13845+
if (VT != MVT::Other &&
1385313846
(VT != MVT::Glue || gluePropagatesDivergence(Ops[I].getNode())) &&
1385413847
Ops[I].getNode()->isDivergent()) {
13855-
// Node is going to be divergent if at least one of its operand is
13856-
// divergent, unless it belongs to the "AlwaysUniform" exemptions.
1385713848
IsDivergent = true;
1385813849
}
1385913850
}
1386013851
Node->NumOperands = Vals.size();
1386113852
Node->OperandList = Ops;
13862-
// Check the divergence of the Node itself.
13863-
if (DivergentTarget && !TLI->isSDNodeAlwaysUniform(Node)) {
13853+
if (!TLI->isSDNodeAlwaysUniform(Node)) {
1386413854
IsDivergent |= TLI->isSDNodeSourceOfDivergence(Node, FLI, UA);
1386513855
Node->SDNodeBits.IsDivergent = IsDivergent;
1386613856
}

llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -480,10 +480,7 @@ void SelectionDAGISel::initializeAnalysisResults(
480480
MachineModuleInfo &MMI =
481481
MAMP.getCachedResult<MachineModuleAnalysis>(*Fn.getParent())->getMMI();
482482

483-
TTI = &FAM.getResult<TargetIRAnalysis>(Fn);
484-
485-
CurDAG->init(*MF, *ORE, MFAM, LibInfo, UA, PSI, BFI, MMI, FnVarLocs,
486-
TTI->hasBranchDivergence(&Fn));
483+
CurDAG->init(*MF, *ORE, MFAM, LibInfo, UA, PSI, BFI, MMI, FnVarLocs);
487484

488485
// Now get the optional analyzes if we want to.
489486
// This is based on the possibly changed OptLevel (after optnone is taken
@@ -501,6 +498,10 @@ void SelectionDAGISel::initializeAnalysisResults(
501498
BatchAA = std::nullopt;
502499

503500
SP = &FAM.getResult<SSPLayoutAnalysis>(Fn);
501+
502+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
503+
TTI = &FAM.getResult<TargetIRAnalysis>(Fn);
504+
#endif
504505
}
505506

506507
void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
@@ -536,10 +537,7 @@ void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
536537
MachineModuleInfo &MMI =
537538
MFP.getAnalysis<MachineModuleInfoWrapperPass>().getMMI();
538539

539-
TTI = &MFP.getAnalysis<TargetTransformInfoWrapperPass>().getTTI(Fn);
540-
541-
CurDAG->init(*MF, *ORE, &MFP, LibInfo, UA, PSI, BFI, MMI, FnVarLocs,
542-
TTI->hasBranchDivergence(&Fn));
540+
CurDAG->init(*MF, *ORE, &MFP, LibInfo, UA, PSI, BFI, MMI, FnVarLocs);
543541

544542
// Now get the optional analyzes if we want to.
545543
// This is based on the possibly changed OptLevel (after optnone is taken
@@ -558,6 +556,10 @@ void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
558556
BatchAA = std::nullopt;
559557

560558
SP = &MFP.getAnalysis<StackProtector>().getLayoutInfo();
559+
560+
#if !defined(NDEBUG) && LLVM_ENABLE_ABI_BREAKING_CHECKS
561+
TTI = &MFP.getAnalysis<TargetTransformInfoWrapperPass>().getTTI(Fn);
562+
#endif
561563
}
562564

563565
bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {

llvm/test/CodeGen/AMDGPU/load-constant-always-uniform.ll

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ define amdgpu_cs void @test_uniform_load_b96(ptr addrspace(1) %ptr, i32 %arg) "a
1818
; GFX11-NEXT: s_load_b64 s[2:3], s[0:1], 0x0
1919
; GFX11-NEXT: s_load_b32 s0, s[0:1], 0x8
2020
; GFX11-NEXT: s_waitcnt lgkmcnt(0)
21-
; GFX11-NEXT: s_or_b32 s1, s2, s3
22-
; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
23-
; GFX11-NEXT: s_or_b32 s0, s0, s1
24-
; GFX11-NEXT: v_mov_b32_e32 v2, s0
21+
; GFX11-NEXT: v_mov_b32_e32 v2, s3
22+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
23+
; GFX11-NEXT: v_or3_b32 v2, s2, v2, s0
2524
; GFX11-NEXT: global_store_b32 v[0:1], v2, off
2625
; GFX11-NEXT: s_endpgm
2726
;
@@ -34,14 +33,12 @@ define amdgpu_cs void @test_uniform_load_b96(ptr addrspace(1) %ptr, i32 %arg) "a
3433
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
3534
; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, v1, v3, vcc_lo
3635
; GFX12-NEXT: v_readfirstlane_b32 s0, v2
37-
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)
36+
; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
3837
; GFX12-NEXT: v_readfirstlane_b32 s1, v3
3938
; GFX12-NEXT: s_load_b96 s[0:2], s[0:1], 0x0
4039
; GFX12-NEXT: s_wait_kmcnt 0x0
41-
; GFX12-NEXT: s_or_b32 s0, s0, s1
42-
; GFX12-NEXT: s_or_b32 s0, s2, s0
43-
; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
4440
; GFX12-NEXT: v_mov_b32_e32 v2, s0
41+
; GFX12-NEXT: v_or3_b32 v2, v2, s1, s2
4542
; GFX12-NEXT: global_store_b32 v[0:1], v2, off
4643
; GFX12-NEXT: s_endpgm
4744
bb:

llvm/test/CodeGen/AMDGPU/test_isel_single_lane.ll

Lines changed: 0 additions & 47 deletions
This file was deleted.

llvm/unittests/CodeGen/SelectionDAGTestBase.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
10-
#include "llvm/Analysis/TargetTransformInfo.h"
1110
#include "llvm/AsmParser/Parser.h"
1211
#include "llvm/CodeGen/MachineModuleInfo.h"
1312
#include "llvm/CodeGen/TargetLowering.h"
@@ -72,12 +71,8 @@ class SelectionDAGTestBase : public testing::Test {
7271
if (!DAG)
7372
reportFatalUsageError("Failed to create SelectionDAG?");
7473
OptimizationRemarkEmitter ORE(F);
75-
FunctionAnalysisManager FAM;
76-
FAM.registerPass([&] { return TM->getTargetIRAnalysis(); });
77-
78-
TargetTransformInfo TTI = TM->getTargetIRAnalysis().run(*F, FAM);
7974
DAG->init(*MF, ORE, nullptr, nullptr, nullptr, nullptr, nullptr, MMI,
80-
nullptr, TTI.hasBranchDivergence(F));
75+
nullptr);
8176
}
8277

8378
TargetLoweringBase::LegalizeTypeAction getTypeAction(EVT VT) {

llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include "AArch64SelectionDAGInfo.h"
99
#include "llvm/Analysis/MemoryLocation.h"
1010
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
11-
#include "llvm/Analysis/TargetTransformInfo.h"
1211
#include "llvm/AsmParser/Parser.h"
1312
#include "llvm/CodeGen/MachineModuleInfo.h"
1413
#include "llvm/CodeGen/SelectionDAG.h"
@@ -63,12 +62,8 @@ class AArch64SelectionDAGTest : public testing::Test {
6362
if (!DAG)
6463
report_fatal_error("DAG?");
6564
OptimizationRemarkEmitter ORE(F);
66-
FunctionAnalysisManager FAM;
67-
FAM.registerPass([&] { return TM->getTargetIRAnalysis(); });
68-
69-
TargetTransformInfo TTI = TM->getTargetIRAnalysis().run(*F, FAM);
7065
DAG->init(*MF, ORE, nullptr, nullptr, nullptr, nullptr, nullptr, MMI,
71-
nullptr, TTI.hasBranchDivergence(F));
66+
nullptr);
7267
}
7368

7469
TargetLoweringBase::LegalizeTypeAction getTypeAction(EVT VT) {

0 commit comments

Comments
 (0)