Author: Dávid Bolvanský Date: 2022-01-25T23:13:46+01:00 New Revision: 90f185c964d05e9f3081bb4acc734b3932db221a
URL: https://github.com/llvm/llvm-project/commit/90f185c964d05e9f3081bb4acc734b3932db221a DIFF: https://github.com/llvm/llvm-project/commit/90f185c964d05e9f3081bb4acc734b3932db221a.diff LOG: Revert "[AlwaysInliner] Enable call site inlining to make flatten attribute working again (#53360)" This reverts commit ceec4383681c42bfd3d06a6913ce7554bea160b0. Clang tests fail. Added: Modified: clang/test/CodeGen/flatten.c clang/test/CodeGenCXX/flatten.cpp llvm/lib/Transforms/IPO/AlwaysInliner.cpp llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll llvm/test/Transforms/Inline/always-inline.ll Removed: ################################################################################ diff --git a/clang/test/CodeGen/flatten.c b/clang/test/CodeGen/flatten.c index 4e762223de486..287d4f2a46b65 100644 --- a/clang/test/CodeGen/flatten.c +++ b/clang/test/CodeGen/flatten.c @@ -1,3 +1,9 @@ +// UNSUPPORTED: experimental-new-pass-manager +// Currently, diff erent code seems to be intentionally generated under the new +// PM since we alwaysinline functions and not callsites under new PM. +// Under new PM, f() will not be inlined from g() since f is not marked as +// alwaysinline. + // RUN: %clang_cc1 -triple=x86_64-linux-gnu %s -emit-llvm -o - | FileCheck %s void f(void) {} diff --git a/clang/test/CodeGenCXX/flatten.cpp b/clang/test/CodeGenCXX/flatten.cpp index e988d6d726dd7..7a6484591aaa0 100644 --- a/clang/test/CodeGenCXX/flatten.cpp +++ b/clang/test/CodeGenCXX/flatten.cpp @@ -1,3 +1,7 @@ +// UNSUPPORTED: experimental-new-pass-manager +// See the comment for CodeGen/flatten.c on why this is unsupported with the new +// PM. + // RUN: %clang_cc1 -triple=x86_64-linux-gnu -std=c++11 %s -emit-llvm -o - | FileCheck %s void f(void) {} diff --git a/llvm/lib/Transforms/IPO/AlwaysInliner.cpp b/llvm/lib/Transforms/IPO/AlwaysInliner.cpp index 8f20f59b5e4d7..7acc9b266ad82 100644 --- a/llvm/lib/Transforms/IPO/AlwaysInliner.cpp +++ b/llvm/lib/Transforms/IPO/AlwaysInliner.cpp @@ -54,13 +54,13 @@ PreservedAnalyses AlwaysInlinerPass::run(Module &M, if (F.isPresplitCoroutine()) continue; - if (!F.isDeclaration() && isInlineViable(F).isSuccess()) { + if (!F.isDeclaration() && F.hasFnAttribute(Attribute::AlwaysInline) && + isInlineViable(F).isSuccess()) { Calls.clear(); for (User *U : F.users()) if (auto *CB = dyn_cast<CallBase>(U)) - if (CB->getCalledFunction() == &F && - CB->hasFnAttr(Attribute::AlwaysInline)) + if (CB->getCalledFunction() == &F) Calls.insert(CB); for (CallBase *CB : Calls) { diff --git a/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll b/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll index 5d62747180233..d805d7549231d 100644 --- a/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll +++ b/llvm/test/Transforms/Coroutines/coro-retcon-once-private.ll @@ -3,7 +3,9 @@ target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.12.0" -; CHECK-NOT: define {{.*}} @f(i8* %buffer, i32* %array) +; CHECK: define internal { i8*, i32 } @f(i8* %buffer, i32* %array) +; CHECK-NEXT: entry: +; CHECK-NEXT: unreachable define internal {i8*, i32} @f(i8* %buffer, i32* %array) { entry: diff --git a/llvm/test/Transforms/Inline/always-inline.ll b/llvm/test/Transforms/Inline/always-inline.ll index 8eb3d020f6634..0fcf956199c46 100644 --- a/llvm/test/Transforms/Inline/always-inline.ll +++ b/llvm/test/Transforms/Inline/always-inline.ll @@ -1,11 +1,14 @@ -; RUN: opt < %s -inline-threshold=0 -always-inline -enable-new-pm=0 -S | FileCheck %s --check-prefix=CHECK +; RUN: opt < %s -inline-threshold=0 -always-inline -enable-new-pm=0 -S | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CALL ; ; Ensure the threshold has no impact on these decisions. -; RUN: opt < %s -inline-threshold=20000000 -always-inline -enable-new-pm=0 -S | FileCheck %s --check-prefix=CHECK -; RUN: opt < %s -inline-threshold=-20000000 -always-inline -enable-new-pm=0 -S | FileCheck %s --check-prefix=CHECK +; RUN: opt < %s -inline-threshold=20000000 -always-inline -enable-new-pm=0 -S | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CALL +; RUN: opt < %s -inline-threshold=-20000000 -always-inline -enable-new-pm=0 -S | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CALL ; ; The new pass manager doesn't re-use any threshold based infrastructure for -; the always inliner, but test that we get the correct result. +; the always inliner, but test that we get the correct result. The new PM +; always inliner also doesn't support inlining call-site alwaysinline +; annotations. It isn't clear that this is a reasonable use case for +; 'alwaysinline'. ; RUN: opt < %s -inline-threshold=0 -passes=always-inline -S | FileCheck %s --check-prefix=CHECK ; RUN: opt < %s -inline-threshold=20000000 -passes=always-inline -S | FileCheck %s --check-prefix=CHECK ; RUN: opt < %s -inline-threshold=-20000000 -passes=always-inline -S | FileCheck %s --check-prefix=CHECK @@ -23,6 +26,12 @@ define i32 @outer1() { ret i32 %r } +; The always inliner can't DCE arbitrary internal functions. PR2945 +define internal i32 @pr2945() nounwind { +; CHECK-LABEL: @pr2945( + ret i32 0 +} + define internal void @inner2(i32 %N) alwaysinline { ; CHECK-NOT: @inner2( %P = alloca i32, i32 %N @@ -137,9 +146,10 @@ define i32 @inner7() { ret i32 1 } define i32 @outer7() { -; CHECK-LABEL: @outer7( -; CHECK-NOT: call -; CHECK: ret +; CHECK-CALL-LABEL: @outer7( +; CHECK-CALL-NOT: call +; CHECK-CALL: ret + %r = call i32 @inner7() alwaysinline ret i32 %r } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits