From ab2284a6437bff8ba14d21cd6f9da927351dc17a Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 18 Mar 2022 14:47:22 +0100 Subject: [PATCH] [LowerConstantIntrinsics] Make TLI a required dependency The way the pass is actually used in the optimization pipeline, TLI will be available, but this is not the case when running just -lower-constant-intrinsics in tests, which ends up being quite confusing. Require TLI unconditionally, as we usually do. --- .../Transforms/Scalar/LowerConstantIntrinsics.cpp | 12 +++++++----- .../LowerConstantIntrinsics/objectsize_basic.ll | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp b/llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp index c2797d031ff7..a886563a1c25 100644 --- a/llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp +++ b/llvm/lib/Transforms/Scalar/LowerConstantIntrinsics.cpp @@ -94,7 +94,7 @@ static bool replaceConditionalBranchesOnConstant(Instruction *II, return HasDeadBlocks; } -static bool lowerConstantIntrinsics(Function &F, const TargetLibraryInfo *TLI, +static bool lowerConstantIntrinsics(Function &F, const TargetLibraryInfo &TLI, DominatorTree *DT) { Optional DTU; if (DT) @@ -138,7 +138,7 @@ static bool lowerConstantIntrinsics(Function &F, const TargetLibraryInfo *TLI, IsConstantIntrinsicsHandled++; break; case Intrinsic::objectsize: - NewValue = lowerObjectSizeCall(II, DL, TLI, true); + NewValue = lowerObjectSizeCall(II, DL, &TLI, true); ObjectSizeIntrinsicsHandled++; break; } @@ -152,7 +152,7 @@ static bool lowerConstantIntrinsics(Function &F, const TargetLibraryInfo *TLI, PreservedAnalyses LowerConstantIntrinsicsPass::run(Function &F, FunctionAnalysisManager &AM) { - if (lowerConstantIntrinsics(F, AM.getCachedResult(F), + if (lowerConstantIntrinsics(F, AM.getResult(F), AM.getCachedResult(F))) { PreservedAnalyses PA; PA.preserve(); @@ -176,8 +176,8 @@ public: } bool runOnFunction(Function &F) override { - auto *TLIP = getAnalysisIfAvailable(); - const TargetLibraryInfo *TLI = TLIP ? &TLIP->getTLI(F) : nullptr; + const TargetLibraryInfo &TLI = + getAnalysis().getTLI(F); DominatorTree *DT = nullptr; if (auto *DTWP = getAnalysisIfAvailable()) DT = &DTWP->getDomTree(); @@ -185,6 +185,7 @@ public: } void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.addRequired(); AU.addPreserved(); AU.addPreserved(); } @@ -194,6 +195,7 @@ public: char LowerConstantIntrinsics::ID = 0; INITIALIZE_PASS_BEGIN(LowerConstantIntrinsics, "lower-constant-intrinsics", "Lower constant intrinsics", false, false) +INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass) INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) INITIALIZE_PASS_END(LowerConstantIntrinsics, "lower-constant-intrinsics", "Lower constant intrinsics", false, false) diff --git a/llvm/test/Transforms/LowerConstantIntrinsics/objectsize_basic.ll b/llvm/test/Transforms/LowerConstantIntrinsics/objectsize_basic.ll index f6ba114d61f6..a1f0c84aab40 100644 --- a/llvm/test/Transforms/LowerConstantIntrinsics/objectsize_basic.ll +++ b/llvm/test/Transforms/LowerConstantIntrinsics/objectsize_basic.ll @@ -144,7 +144,7 @@ declare i8* @malloc(i64) define i64 @test_objectsize_malloc() { ; CHECK-LABEL: @test_objectsize_malloc( ; CHECK-NEXT: [[PTR:%.*]] = call i8* @malloc(i64 16) -; CHECK-NEXT: ret i64 -1 +; CHECK-NEXT: ret i64 16 ; %ptr = call i8* @malloc(i64 16) %objsize = call i64 @llvm.objectsize.i64(i8* %ptr, i1 false, i1 true, i1 true)