Skip to content

Commit 97eaa7b

Browse files
committed
[AMDGPU] Make getAssumedAddrSpace return AS1 for pointer kernel arguments
1 parent 8ba3a23 commit 97eaa7b

37 files changed

+7403
-7724
lines changed

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,10 @@ bool AMDGPUTargetMachine::isNoopAddrSpaceCast(unsigned SrcAS,
951951
}
952952

953953
unsigned AMDGPUTargetMachine::getAssumedAddrSpace(const Value *V) const {
954+
if (auto *Arg = dyn_cast<Argument>(V);
955+
Arg && AMDGPU::isKernelCC(Arg->getParent()))
956+
return AMDGPUAS::GLOBAL_ADDRESS;
957+
954958
const auto *LD = dyn_cast<LoadInst>(V);
955959
if (!LD) // TODO: Handle invariant load like constant.
956960
return AMDGPUAS::UNKNOWN_ADDRESS_SPACE;

llvm/lib/Transforms/IPO/AttributorAttributes.cpp

+6-17
Original file line numberDiff line numberDiff line change
@@ -12597,29 +12597,18 @@ struct AAAddressSpaceImpl : public AAAddressSpace {
1259712597
}
1259812598

1259912599
ChangeStatus updateImpl(Attributor &A) override {
12600-
unsigned FlatAS = A.getInfoCache().getFlatAddressSpace().value();
1260112600
uint32_t OldAddressSpace = AssumedAddressSpace;
1260212601

1260312602
auto CheckAddressSpace = [&](Value &Obj) {
1260412603
if (isa<UndefValue>(&Obj))
1260512604
return true;
12606-
// If an argument in flat address space only has addrspace cast uses, and
12607-
// those casts are same, then we take the dst addrspace.
1260812605
if (auto *Arg = dyn_cast<Argument>(&Obj)) {
12609-
if (Arg->getType()->getPointerAddressSpace() == FlatAS) {
12610-
unsigned CastAddrSpace = FlatAS;
12611-
for (auto *U : Arg->users()) {
12612-
auto *ASCI = dyn_cast<AddrSpaceCastInst>(U);
12613-
if (!ASCI)
12614-
return takeAddressSpace(Obj.getType()->getPointerAddressSpace());
12615-
if (CastAddrSpace != FlatAS &&
12616-
CastAddrSpace != ASCI->getDestAddressSpace())
12617-
return false;
12618-
CastAddrSpace = ASCI->getDestAddressSpace();
12619-
}
12620-
if (CastAddrSpace != FlatAS)
12621-
return takeAddressSpace(CastAddrSpace);
12622-
}
12606+
auto *TTI =
12607+
A.getInfoCache().getAnalysisResultForFunction<TargetIRAnalysis>(
12608+
*Arg->getParent());
12609+
unsigned AssumedAS = TTI->getAssumedAddrSpace(Arg);
12610+
if (AssumedAS != ~0U)
12611+
return takeAddressSpace(AssumedAS);
1262312612
}
1262412613
return takeAddressSpace(Obj.getType()->getPointerAddressSpace());
1262512614
};

0 commit comments

Comments
 (0)