Lines Matching +full:ri +full:- +full:override

1 //===- AMDGPURewriteOutArgumentsPass.cpp - Create struct returns ----------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
42 //===----------------------------------------------------------------------===//
57 #define DEBUG_TYPE "amdgpu-rewrite-out-arguments"
62 "amdgpu-any-address-space-out-arguments",
64 "struct returns for non-private address space"),
69 "amdgpu-max-return-arg-num-regs",
94 void getAnalysisUsage(AnalysisUsage &AU) const override {
99 bool doInitialization(Module &M) override;
100 bool runOnFunction(Function &F) override;
125 if (auto *BCI = dyn_cast<BitCastInst>(U->getUser())) {
126 for (Use &U : BCI->uses())
131 if (auto *SI = dyn_cast<StoreInst>(U->getUser())) {
135 if (!SI->isSimple() ||
136 U->getOperandNo() != StoreInst::getPointerOperandIndex())
139 if (StoredType && StoredType != SI->getValueOperand()->getType())
141 StoredType = SI->getValueOperand()->getType();
157 if (!ArgTy || (ArgTy->getAddressSpace() != DL->getAllocaAddrSpace() &&
164 if (!StoredType || DL->getTypeStoreSize(StoredType) > MaxOutArgSizeBytes)
190 if (!RetTy->isVoidTy()) {
191 ReturnNumRegs = DL->getTypeStoreSize(RetTy) / 4;
217 if (ReturnInst *RI = dyn_cast<ReturnInst>(&BB.back()))
218 Returns.push_back(RI);
248 unsigned ArgNumRegs = DL->getTypeStoreSize(ArgTy) / 4;
254 for (ReturnInst *RI : Returns) {
255 BasicBlock *BB = RI->getParent();
257 MemDepResult Q = MDA->getPointerDependencyFrom(
258 MemoryLocation::getBeforeOrAfter(OutArg), true, BB->end(), BB, RI);
265 ReplaceableStores.emplace_back(RI, SI);
276 Value *ReplVal = Store.second->getValueOperand();
292 Store.second->eraseFromParent();
297 OutArgIndexes.insert({OutArg->getArgNo(), ArgTy});
307 LLVMContext &Ctx = F.getParent()->getContext();
311 F.getFunctionType()->params(),
318 F.getParent()->getFunctionList().insert(F.getIterator(), NewFunc);
319 NewFunc->copyAttributesFrom(&F);
320 NewFunc->setComdat(F.getComdat());
324 NewFunc->stealArgumentListFrom(F);
330 NewFunc->removeRetAttrs(RetAttrs);
333 NewFunc->setIsNewDbgInfoFormat(F.IsNewDbgInfoFormat);
337 NewFunc->splice(NewFunc->begin(), &F);
340 ReturnInst *RI = Replacement.first;
341 IRBuilder<> B(RI);
342 B.SetCurrentDebugLocation(RI->getDebugLoc());
347 Value *RetVal = RI->getReturnValue();
355 RI->setOperand(0, NewRetVal);
358 RI->eraseFromParent();
377 int RetIdx = RetTy->isVoidTy() ? 0 : 1;
384 DL->getValueOrABITypeAlignment(Arg.getParamAlign(), EltTy);
390 if (!RetTy->isVoidTy()) {