1; RUN: opt < %s -passes="print<inline-cost>" 2>&1 | FileCheck %s 2 3; CHECK: Analyzing call of foo... (caller:main) 4; CHECK: define ptr @foo() { 5; CHECK: cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}} 6; CHECK: %1 = inttoptr i64 754974720 to ptr 7; CHECK: cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}} 8; CHECK: ret ptr %1 9; CHECK: } 10; CHECK: NumConstantArgs: {{.*}} 11; CHECK: NumConstantOffsetPtrArgs: {{.*}} 12; CHECK: NumAllocaArgs: {{.*}} 13; CHECK: NumConstantPtrCmps: {{.*}} 14; CHECK: NumConstantPtrDiffs: {{.*}} 15; CHECK: NumInstructionsSimplified: {{.*}} 16; CHECK: NumInstructions: {{.*}} 17; CHECK: SROACostSavings: {{.*}} 18; CHECK: SROACostSavingsLost: {{.*}} 19; CHECK: LoadEliminationCost: {{.*}} 20; CHECK: ContainsNoDuplicateCall: {{.*}} 21; CHECK: Cost: {{.*}} 22; CHECK: Threshold: {{.*}} 23; CHECK-EMPTY: 24; CHECK: Analyzing call of foo... (caller:main) 25 26define ptr @foo() { 27 %1 = inttoptr i64 754974720 to ptr 28 ret ptr %1 29} 30 31define ptr @main() { 32 %1 = call ptr @foo() 33 %2 = call ptr @foo() 34 ret ptr %1 35} 36 37; Make sure it also analyzes invoke call sites. 38 39; CHECK: Analyzing call of g... (caller:f) 40; CHECK: define i32 @g(i32 %v) { 41; CHECK: ; cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}} 42; CHECK: %p = icmp ugt i32 %v, 35 43; CHECK: ; cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}} 44; CHECK: %r = select i1 %p, i32 %v, i32 7 45; CHECK: ; cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}} 46; CHECK: ret i32 %r 47; CHECK: } 48define i32 @g(i32 %v) { 49 %p = icmp ugt i32 %v, 35 50 %r = select i1 %p, i32 %v, i32 7 51 ret i32 %r 52} 53 54define void @f(i32 %v, ptr %dst) personality ptr @__gxx_personality_v0 { 55 %v1 = invoke i32 @g(i32 %v) 56 to label %bb1 unwind label %bb2 57bb1: 58 store i32 %v1, ptr %dst 59 ret void 60bb2: 61 %lpad.loopexit80 = landingpad { ptr, i32 } 62 cleanup 63 ret void 64} 65 66declare i32 @__gxx_personality_v0(...) 67