diff --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h index 98af41d8b2ac3..986004f63ef08 100644 --- a/llvm/include/llvm/Transforms/IPO/Attributor.h +++ b/llvm/include/llvm/Transforms/IPO/Attributor.h @@ -2137,7 +2137,8 @@ struct Attributor { bool checkForAllCallSites(function_ref Pred, const Function &Fn, bool RequireAllCallSites, const AbstractAttribute *QueryingAA, - bool &UsedAssumedInformation); + bool &UsedAssumedInformation, + bool CheckPotentiallyDead = false); /// Check \p Pred on all values potentially returned by \p F. /// diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp index 1f14b1c3ec238..92b711658baf9 100644 --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -1608,7 +1608,8 @@ bool Attributor::checkForAllCallSites(function_ref Pred, const Function &Fn, bool RequireAllCallSites, const AbstractAttribute *QueryingAA, - bool &UsedAssumedInformation) { + bool &UsedAssumedInformation, + bool CheckPotentiallyDead) { if (RequireAllCallSites && !Fn.hasLocalLinkage()) { LLVM_DEBUG( dbgs() @@ -1632,7 +1633,8 @@ bool Attributor::checkForAllCallSites(function_ref Pred, dbgs() << "[Attributor] Check use: " << *U << " in " << *U.getUser() << "\n"; }); - if (isAssumedDead(U, QueryingAA, nullptr, UsedAssumedInformation, + if (!CheckPotentiallyDead && + isAssumedDead(U, QueryingAA, nullptr, UsedAssumedInformation, /* CheckBBLivenessOnly */ true)) { DEBUG_WITH_TYPE(VERBOSE_DEBUG_TYPE, dbgs() << "[Attributor] Dead use, skip!\n"); @@ -2865,7 +2867,8 @@ ChangeStatus Attributor::rewriteFunctionSignatures( // Use the CallSiteReplacementCreator to create replacement call sites. bool UsedAssumedInformation = false; bool Success = checkForAllCallSites(CallSiteReplacementCreator, *OldFn, - true, nullptr, UsedAssumedInformation); + true, nullptr, UsedAssumedInformation, + /* CheckPotentiallyDead */ true); (void)Success; assert(Success && "Assumed call site replacement to succeed!"); diff --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll index c901939ed02bb..7122a8b16f6a6 100644 --- a/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll +++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll @@ -1,11 +1,11 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT -; opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC +; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC define internal void @dead() { ; CGSCC-LABEL: define {{[^@]+}}@dead() { -; CGSCC-NEXT: [[TMP1:%.*]] = call i32 poison(ptr null, ptr null) +; CGSCC-NEXT: [[TMP1:%.*]] = call i32 @test() ; CGSCC-NEXT: ret void ; call i32 @test(ptr null, ptr null) diff --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll index f95761d968283..f6cbb6775b128 100644 --- a/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll +++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll @@ -1,11 +1,11 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT -; opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC +; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC define internal void @dead() { ; CGSCC-LABEL: define {{[^@]+}}@dead() { -; CGSCC-NEXT: [[TMP1:%.*]] = call i32 poison(ptr null, ptr null) +; CGSCC-NEXT: [[TMP1:%.*]] = call i32 @test(ptr null) ; CGSCC-NEXT: ret void ; call i32 @test(ptr null, ptr null) diff --git a/llvm/test/Transforms/Attributor/align.ll b/llvm/test/Transforms/Attributor/align.ll index 7ee1009a4a7d0..c2bb8041c8bed 100644 --- a/llvm/test/Transforms/Attributor/align.ll +++ b/llvm/test/Transforms/Attributor/align.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=6 -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT -; opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC +; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" @@ -264,7 +264,7 @@ define internal ptr @f2b(ptr readnone %0) local_unnamed_addr #0 { ; CGSCC-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null ; CGSCC-NEXT: br i1 [[TMP2]], label [[TMP5:%.*]], label [[TMP3:%.*]] ; CGSCC: 3: -; CGSCC-NEXT: [[TMP4:%.*]] = tail call ptr poison(ptr nonnull [[TMP0]]) +; CGSCC-NEXT: [[TMP4:%.*]] = tail call ptr @f1b() ; CGSCC-NEXT: br label [[TMP7:%.*]] ; CGSCC: 5: ; CGSCC-NEXT: [[TMP6:%.*]] = tail call ptr @f3b()