Index: llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp =================================================================== --- llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp +++ llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp @@ -88,8 +88,7 @@ FunctionCallee Fsincos); // sin/cos - bool fold_sincos(FPMathOperator *FPOp, IRBuilder<> &B, const FuncInfo &FInfo, - AliasAnalysis *AA); + bool fold_sincos(FPMathOperator *FPOp, IRBuilder<> &B, const FuncInfo &FInfo); // __read_pipe/__write_pipe bool fold_read_write_pipe(CallInst *CI, IRBuilder<> &B, @@ -115,7 +114,7 @@ public: AMDGPULibCalls() {} - bool fold(CallInst *CI, AliasAnalysis *AA = nullptr); + bool fold(CallInst *CI); void initFunction(const Function &F); void initNativeFuncs(); @@ -139,10 +138,6 @@ initializeAMDGPUSimplifyLibCallsPass(*PassRegistry::getPassRegistry()); } - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.addRequired(); - } - bool runOnFunction(Function &M) override; }; @@ -158,6 +153,10 @@ Simplifier.initNativeFuncs(); } + void getAnalysisUsage(AnalysisUsage &AU) const override { + // TODO: Preserves most + } + bool runOnFunction(Function &F) override; }; @@ -168,7 +167,6 @@ INITIALIZE_PASS_BEGIN(AMDGPUSimplifyLibCalls, "amdgpu-simplifylib", "Simplify well-known AMD library calls", false, false) -INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass) INITIALIZE_PASS_END(AMDGPUSimplifyLibCalls, "amdgpu-simplifylib", "Simplify well-known AMD library calls", false, false) @@ -586,7 +584,7 @@ } // This function returns false if no change; return true otherwise. -bool AMDGPULibCalls::fold(CallInst *CI, AliasAnalysis *AA) { +bool AMDGPULibCalls::fold(CallInst *CI) { Function *Callee = CI->getCalledFunction(); // Ignore indirect calls. if (!Callee || Callee->isIntrinsic() || CI->isNoBuiltin()) @@ -630,7 +628,7 @@ return fold_sqrt(FPOp, B, FInfo); case AMDGPULibFunc::EI_COS: case AMDGPULibFunc::EI_SIN: - return fold_sincos(FPOp, B, FInfo, AA); + return fold_sincos(FPOp, B, FInfo); default: break; } @@ -1128,7 +1126,7 @@ // fold sin, cos -> sincos. bool AMDGPULibCalls::fold_sincos(FPMathOperator *FPOp, IRBuilder<> &B, - const FuncInfo &fInfo, AliasAnalysis *AA) { + const FuncInfo &fInfo) { assert(fInfo.getId() == AMDGPULibFunc::EI_SIN || fInfo.getId() == AMDGPULibFunc::EI_COS); @@ -1141,26 +1139,8 @@ Value *CArgVal = FPOp->getOperand(0); CallInst *CI = cast(FPOp); - BasicBlock * const CBB = CI->getParent(); - - int const MaxScan = 30; bool Changed = false; - { // fold in load value. - LoadInst *LI = dyn_cast(CArgVal); - if (LI && LI->getParent() == CBB) { - BasicBlock::iterator BBI = LI->getIterator(); - Value *AvailableVal = FindAvailableLoadedValue(LI, CBB, BBI, MaxScan, AA); - if (AvailableVal) { - Changed = true; - CArgVal->replaceAllUsesWith(AvailableVal); - if (CArgVal->getNumUses() == 0) - LI->eraseFromParent(); - CArgVal = FPOp->getOperand(0); - } - } - } - Function *F = B.GetInsertBlock()->getParent(); Module *M = F->getParent(); @@ -1553,7 +1533,6 @@ Simplifier.initFunction(F); bool Changed = false; - auto AA = &getAnalysis().getAAResults(); LLVM_DEBUG(dbgs() << "AMDIC: process function "; F.printAsOperand(dbgs(), false, F.getParent()); dbgs() << '\n';); @@ -1564,7 +1543,7 @@ CallInst *CI = dyn_cast(I); ++I; if (CI) { - if (Simplifier.fold(CI, AA)) + if (Simplifier.fold(CI)) Changed = true; } } @@ -1579,7 +1558,6 @@ Simplifier.initFunction(F); bool Changed = false; - auto AA = &AM.getResult(F); LLVM_DEBUG(dbgs() << "AMDIC: process function "; F.printAsOperand(dbgs(), false, F.getParent()); dbgs() << '\n';); @@ -1591,7 +1569,7 @@ ++I; if (CI) { - if (Simplifier.fold(CI, AA)) + if (Simplifier.fold(CI)) Changed = true; } }