From aeca47fa0fbc36a43bced6a482a2e61acc3162a1 Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Mon, 18 Nov 2019 13:55:52 -0800 Subject: [PATCH] ThinLTO: Fix assembler to emit alwaysInline in the summary Summary: The earlier commit (https://reviews.llvm.org/D70014) missed this one : If Always_Inline happens to be the only entry in FuncFlags, then the assembler will not print it in the summary. Patch by Bharathi Seshadri Reviewers: tejohnson Reviewed By: tejohnson Subscribers: mehdi_amini, inglorion, hiraditya, steven_wu, dexonsmith, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D70323 --- llvm/lib/IR/AsmWriter.cpp | 2 +- llvm/test/ThinLTO/X86/funcimport_alwaysinline.ll | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp index 5ee0d52..01989b9 100644 --- a/llvm/lib/IR/AsmWriter.cpp +++ b/llvm/lib/IR/AsmWriter.cpp @@ -2955,7 +2955,7 @@ void AssemblyWriter::printFunctionSummary(const FunctionSummary *FS) { FunctionSummary::FFlags FFlags = FS->fflags(); if (FFlags.ReadNone | FFlags.ReadOnly | FFlags.NoRecurse | - FFlags.ReturnDoesNotAlias | FFlags.NoInline) { + FFlags.ReturnDoesNotAlias | FFlags.NoInline | FFlags.AlwaysInline) { Out << ", funcFlags: ("; Out << "readNone: " << FFlags.ReadNone; Out << ", readOnly: " << FFlags.ReadOnly; diff --git a/llvm/test/ThinLTO/X86/funcimport_alwaysinline.ll b/llvm/test/ThinLTO/X86/funcimport_alwaysinline.ll index 38e63b2..aa49476 100644 --- a/llvm/test/ThinLTO/X86/funcimport_alwaysinline.ll +++ b/llvm/test/ThinLTO/X86/funcimport_alwaysinline.ll @@ -6,11 +6,12 @@ ; RUN: -r=%t2.bc,main,plx \ ; RUN: -r=%t2.bc,foo,l \ ; RUN: -import-instr-limit=0 -; RUN: llvm-dis %t.o.2.3.import.bc -o - | FileCheck %s +; RUN: llvm-dis %t.o.2.3.import.bc -o - | FileCheck %s --check-prefix=CHECK1 +; RUN: llvm-dis %t.o.index.bc -o - | FileCheck %s --check-prefix=CHECK2 ; foo() being always_inline should be imported irrespective of the ; instruction limit -; CHECK: define available_externally dso_local void @foo() +; CHECK1: define available_externally dso_local void @foo() target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @@ -22,3 +23,4 @@ entry: } attributes #0 = { alwaysinline nounwind uwtable } +; CHECK2: ^2 = gv: (guid: {{.*}}, summaries: (function: (module: ^0, flags: (linkage: external, notEligibleToImport: 0, live: 1, dsoLocal: 1, canAutoHide: 0), insts: 1, funcFlags: (readNone: 0, readOnly: 0, noRecurse: 0, returnDoesNotAlias: 0, noInline: 0, alwaysInline: 1)))) -- 2.7.4