<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div> </div><div><br></div><div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">Index: lib/Analysis/IPA/InlineCost.cpp</div><div style="margin: 0px; font-family: Menlo;">===================================================================</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">--- lib/Analysis/IPA/InlineCost.cpp     (revision 206204)</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">+++ lib/Analysis/IPA/InlineCost.cpp     (working copy)</div><div style="margin: 0px; font-family: Menlo; color: rgb(206, 121, 36);">@@ -1301,7 +1301,8 @@</div><div style="margin: 0px; font-family: Menlo;">                                    Attribute::ReturnsTwice);</div><div style="margin: 0px; font-family: Menlo;">   for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; ++BI) {</div><div style="margin: 0px; font-family: Menlo;">     // Disallow inlining of functions which contain an indirect branch.</div><div style="margin: 0px; font-family: Menlo; color: rgb(213, 59, 211);">-    if (isa<IndirectBrInst>(BI->getTerminator()))</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+    if (isa<IndirectBrInst>(BI->getTerminator()) &&</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+        !F.hasFnAttribute(Attribute::AlwaysInline))</div><div style="margin: 0px; font-family: Menlo;">       return false;</div><p style="margin: 0px; font-family: Menlo; background-color: rgb(175, 95, 0); min-height: 21px;"> <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-family: Menlo;">     for (BasicBlock::iterator II = BI->begin(), IE = BI->end(); II != IE;</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">Index: test/Transforms/Inline/always-inline-attribute.ll</div><div style="margin: 0px; font-family: Menlo;">===================================================================</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">--- test/Transforms/Inline/always-inline-attribute.ll   (revision 0)</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">+++ test/Transforms/Inline/always-inline-attribute.ll   (working copy)</div><div style="margin: 0px; font-family: Menlo; color: rgb(206, 121, 36);">@@ -0,0 +1,26 @@</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+; RUN: opt < %s -O3 -S | FileCheck %s</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+@gv = external global i32</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+define i32 @main() nounwind {</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+; CHECK-NOT: call i32 @foo</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %1 = load i32* @gv, align 4</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %2 = tail call i32 @foo(i32 %1)</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  unreachable</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+}</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+define internal i32 @foo(i32) alwaysinline {</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  br label %2</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+; <label>:2                                       ; preds = %8, %1</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %3 = phi i32 [ %0, %1 ], [ %10, %8 ]</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %4 = phi i8* [ blockaddress(@foo, %2), %1 ], [ %6, %8 ]</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %5 = icmp eq i32 %3, 1</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %6 = select i1 %5, i8* blockaddress(@foo, %8), i8* %4</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %7 = add nsw i32 %3, -1</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  br label %8</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+; <label>:8                                       ; preds = %8, %2</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %9 = phi i32 [ %7, %2 ], [ %10, %8 ]</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  %10 = add nsw i32 %9, -1</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+  indirectbr i8* %6, [label %2, label %8]</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+}</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">Index: test/Transforms/Inline/always-inline.ll</div><div style="margin: 0px; font-family: Menlo;">===================================================================</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">--- test/Transforms/Inline/always-inline.ll     (revision 206203)</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 189, 38);">+++ test/Transforms/Inline/always-inline.ll     (working copy)</div><div style="margin: 0px; font-family: Menlo; color: rgb(206, 121, 36);">@@ -78,7 +78,7 @@</div><div style="margin: 0px; font-family: Menlo;">   ret i32 %add</div><div style="margin: 0px; font-family: Menlo;"> }</div><p style="margin: 0px; font-family: Menlo; background-color: rgb(175, 95, 0); min-height: 21px;"> <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-family: Menlo; color: rgb(213, 59, 211);">-define i32 @inner5(i8* %addr) alwaysinline {</div><div style="margin: 0px; font-family: Menlo; color: rgb(52, 187, 199);">+define i32 @inner5(i8* %addr) {</div><div style="margin: 0px; font-family: Menlo;"> entry:</div><div style="margin: 0px; font-family: Menlo;">   indirectbr i8* %addr, [ label %one, label %two ]</div></div><div><br></div></body></html>