Index: lib/Analysis/InlineCost.cpp
===================================================================
--- lib/Analysis/InlineCost.cpp
+++ lib/Analysis/InlineCost.cpp
@@ -1255,7 +1255,9 @@
       Cost -= InlineConstants::InstrCost;
     }
   }
-
+  // The call instruction also disappears after inlining.
+  Cost -= InlineConstants::InstrCost + InlineConstants::CallPenalty;
+  
   // If there is only one call of the function, and it has internal linkage,
   // the cost of inlining it drops dramatically.
   bool OnlyOneCallAndLocalLinkage =
Index: test/Transforms/Inline/alloca-bonus.ll
===================================================================
--- test/Transforms/Inline/alloca-bonus.ll
+++ test/Transforms/Inline/alloca-bonus.ll
@@ -22,6 +22,7 @@
   %E = bitcast i32* %ptr to i8*
   %F = select i1 false, i32* %ptr, i32* @glbl
   call void @llvm.lifetime.start(i64 0, i8* %E)
+  call void @extern()
   ret void
 }
 
@@ -42,6 +43,7 @@
   %E = bitcast i32* %ptr to i8*
   %F = select i1 false, i32* %ptr, i32* @glbl
   call void @llvm.lifetime.start(i64 0, i8* %E)
+  call void @extern()
   ret void
 }
 
@@ -56,6 +58,7 @@
 define void @inner3(i32 *%ptr, i1 %x) {
   %A = icmp eq i32* %ptr, null
   %B = and i1 %x, %A
+  call void @extern()
   br i1 %A, label %bb.true, label %bb.false
 bb.true:
   ; This block musn't be counted in the inline cost.
@@ -97,6 +100,7 @@
 define void @inner4(i32 *%ptr, i32 %A) {
   %B = getelementptr inbounds i32, i32* %ptr, i32 %A
   %C = icmp eq i32* %ptr, null
+  call void @extern()
   br i1 %C, label %bb.true, label %bb.false
 bb.true:
   ; This block musn't be counted in the inline cost.
@@ -139,6 +143,7 @@
 define void @inner5(i1 %flag, i32 *%ptr) {
   %A = load i32, i32* %ptr
   store i32 0, i32* %ptr
+  call void @extern()
   %C = getelementptr inbounds i32, i32* %ptr, i32 0
   br i1 %flag, label %if.then, label %exit
 
@@ -153,3 +158,4 @@
   ret void
 }
 
+declare void @extern()
Index: test/Transforms/Inline/inline-cold-callee.ll
===================================================================
--- test/Transforms/Inline/inline-cold-callee.ll
+++ test/Transforms/Inline/inline-cold-callee.ll
@@ -9,7 +9,7 @@
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
   %x3 = add i32 %x2, 1
-
+  call void @extern()
   ret i32 %x3
 }
 
@@ -18,7 +18,7 @@
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
   %x3 = add i32 %x2, 1
-
+  call void @extern()
   ret i32 %x3
 }
 
@@ -32,6 +32,8 @@
   ret i32 %y3
 }
 
+declare void @extern()
+
 !llvm.module.flags = !{!1}
 !21 = !{!"function_entry_count", i64 100}
 !22 = !{!"function_entry_count", i64 1}
Index: test/Transforms/Inline/inline-cold.ll
===================================================================
--- test/Transforms/Inline/inline-cold.ll
+++ test/Transforms/Inline/inline-cold.ll
@@ -17,6 +17,7 @@
 ; Function Attrs: nounwind readnone uwtable
 define i32 @simpleFunction(i32 %a) #0 {
 entry:
+  call void @extern()
   %a1 = load volatile i32, i32* @a
   %x1 = add i32 %a1,  %a1
   %a2 = load volatile i32, i32* @a
@@ -54,6 +55,7 @@
 ; DEFAULT-LABEL: @ColdFunction
 ; DEFAULT: ret
 entry:
+  call void @extern()
   %a1 = load volatile i32, i32* @a
   %x1 = add i32 %a1,  %a1
   %a2 = load volatile i32, i32* @a
@@ -91,6 +93,7 @@
 ; DEFAULT-LABEL: @ColdFunction2
 ; DEFAULT: ret
 entry:
+  call void @extern()
   %a1 = load volatile i32, i32* @a
   %x1 = add i32 %a1,  %a1
   %a2 = load volatile i32, i32* @a
@@ -196,5 +199,6 @@
   ret i32 %add
 }
 
+declare void @extern()
 attributes #0 = { nounwind readnone uwtable }
 attributes #1 = { nounwind cold readnone uwtable }
Index: test/Transforms/Inline/inline-hot-callee.ll
===================================================================
--- test/Transforms/Inline/inline-hot-callee.ll
+++ test/Transforms/Inline/inline-hot-callee.ll
@@ -9,7 +9,7 @@
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
   %x3 = add i32 %x2, 1
-
+  call void @extern()
   ret i32 %x3
 }
 
@@ -18,7 +18,7 @@
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
   %x3 = add i32 %x2, 1
-
+  call void @extern()
   ret i32 %x3
 }
 
@@ -32,6 +32,8 @@
   ret i32 %y3
 }
 
+declare void @extern()
+
 !llvm.module.flags = !{!1}
 !21 = !{!"function_entry_count", i64 300}
 !22 = !{!"function_entry_count", i64 1}
Index: test/Transforms/Inline/inline-hot-callsite.ll
===================================================================
--- test/Transforms/Inline/inline-hot-callsite.ll
+++ test/Transforms/Inline/inline-hot-callsite.ll
@@ -9,7 +9,7 @@
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
   %x3 = add i32 %x2, 1
-
+  call void @extern()
   ret i32 %x3
 }
 
@@ -18,7 +18,7 @@
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
   %x3 = add i32 %x2, 1
-
+  call void @extern()
   ret i32 %x3
 }
 
@@ -32,6 +32,8 @@
   ret i32 %y3
 }
 
+declare void @extern()
+
 !llvm.module.flags = !{!1}
 !21 = !{!"branch_weights", i64 300}
 !22 = !{!"branch_weights", i64 1}
Index: test/Transforms/Inline/inline-optsize.ll
===================================================================
--- test/Transforms/Inline/inline-optsize.ll
+++ test/Transforms/Inline/inline-optsize.ll
@@ -12,6 +12,7 @@
 ; This function should be larger than the inline threshold for -Oz (25), but
 ; smaller than the inline threshold for optsize (75).
 define i32 @inner() {
+  call void @extern()
   %a1 = load volatile i32, i32* @a
   %x1 = add i32 %a1,  %a1
   %a2 = load volatile i32, i32* @a
@@ -42,3 +43,5 @@
    %r = call i32 @inner()
    ret i32 %r
 }
+
+declare void @extern()
\ No newline at end of file
Index: test/Transforms/Inline/inline_unreachable-2.ll
===================================================================
--- test/Transforms/Inline/inline_unreachable-2.ll
+++ test/Transforms/Inline/inline_unreachable-2.ll
@@ -8,6 +8,7 @@
 }
 
 define void @callee(i32 %a, i1 %b) {
+  call void @extern()
   call void asm sideeffect "", ""()
   br i1 %b, label %bb1, label %bb2
 bb1:
@@ -17,3 +18,5 @@
   call void asm sideeffect "", ""()
   ret void
 }
+
+declare void @extern()
\ No newline at end of file
Index: test/Transforms/Inline/optimization-remarks-passed-yaml.ll
===================================================================
--- test/Transforms/Inline/optimization-remarks-passed-yaml.ll
+++ test/Transforms/Inline/optimization-remarks-passed-yaml.ll
@@ -12,7 +12,7 @@
 ;  4       return foo();
 ;  5     }
 
-; CHECK:      remark: /tmp/s.c:4:10: foo can be inlined into bar with cost={{[0-9]+}} (threshold={{[0-9]+}}) (hotness: 30)
+; CHECK:      remark: /tmp/s.c:4:10: foo can be inlined into bar with cost={{[0-9\-]+}} (threshold={{[0-9]+}}) (hotness: 30)
 ; CHECK-NEXT: remark: /tmp/s.c:4:10: foo inlined into bar (hotness: 30)
 
 ; YAML:      --- !Analysis
@@ -26,7 +26,7 @@
 ; YAML-NEXT:   - String: ' can be inlined into '
 ; YAML-NEXT:   - Caller: bar
 ; YAML-NEXT:   - String: ' with cost='
-; YAML-NEXT:   - Cost: '{{[0-9]+}}'
+; YAML-NEXT:   - Cost: '{{[0-9\-]+}}'
 ; YAML-NEXT:   - String: ' (threshold='
 ; YAML-NEXT:   - Threshold: '{{[0-9]+}}'
 ; YAML-NEXT:   - String: ')'
Index: test/Transforms/Inline/ptr-diff.ll
===================================================================
--- test/Transforms/Inline/ptr-diff.ll
+++ test/Transforms/Inline/ptr-diff.ll
@@ -4,7 +4,7 @@
 
 define i32 @outer1() {
 ; CHECK-LABEL: @outer1(
-; CHECK-NOT: call
+; CHECK-NOT: call i32
 ; CHECK: ret i32
 
   %ptr = alloca i32
@@ -15,6 +15,7 @@
 }
 
 define i32 @inner1(i32* %begin, i32* %end) {
+  call void @extern()
   %begin.i = ptrtoint i32* %begin to i32
   %end.i = ptrtoint i32* %end to i32
   %distance = sub i32 %end.i, %begin.i
@@ -43,6 +44,7 @@
 }
 
 define i32 @inner2(i32* %begin, i32* %end) {
+  call void @extern()
   %begin.i = ptrtoint i32* %begin to i32
   %end.i = ptrtoint i32* %end to i32
   %distance = sub i32 %end.i, %begin.i
@@ -60,6 +62,7 @@
 ; The inttoptrs are free since it is a smaller integer to a larger
 ; pointer size
 define i32 @inttoptr_free_cost(i32 %a, i32 %b, i32 %c) {
+  call void @extern()
   %p1 = inttoptr i32 %a to i32 addrspace(1)*
   %p2 = inttoptr i32 %b to i32 addrspace(1)*
   %p3 = inttoptr i32 %c to i32 addrspace(1)*
@@ -73,7 +76,7 @@
 
 define i32 @inttoptr_free_cost_user(i32 %begin, i32 %end) {
 ; CHECK-LABEL: @inttoptr_free_cost_user(
-; CHECK-NOT: call
+; CHECK-NOT: call i32
   %x = call i32 @inttoptr_free_cost(i32 %begin, i32 %end, i32 9)
   ret i32 %x
 }
@@ -81,6 +84,7 @@
 ; The inttoptrs have a cost since it is a larger integer to a smaller
 ; pointer size
 define i32 @inttoptr_cost_smaller_ptr(i32 %a, i32 %b, i32 %c) {
+  call void @extern()
   %p1 = inttoptr i32 %a to i32 addrspace(2)*
   %p2 = inttoptr i32 %b to i32 addrspace(2)*
   %p3 = inttoptr i32 %c to i32 addrspace(2)*
@@ -94,8 +98,9 @@
 
 define i32 @inttoptr_cost_smaller_ptr_user(i32 %begin, i32 %end) {
 ; CHECK-LABEL: @inttoptr_cost_smaller_ptr_user(
-; CHECK: call
+; CHECK: call i32
   %x = call i32 @inttoptr_cost_smaller_ptr(i32 %begin, i32 %end, i32 9)
   ret i32 %x
 }
 
+declare void @extern()
\ No newline at end of file