| ; RUN: opt -passes=inline -S %s -inline-threshold=20 2>&1 | FileCheck %s |
| |
| %struct.nodemask_t = type { [16 x i64] } |
| @numa_nodes_parsed = external constant %struct.nodemask_t, align 8 |
| |
| declare void @foo() |
| declare i64 @llvm.objectsize.i64.p0(ptr, i1 immarg, i1 immarg, i1 immarg) |
| |
| ; Test that we inline @callee into @caller. |
| define i64 @caller() { |
| ; CHECK-LABEL: @caller( |
| ; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.objectsize.i64.p0(ptr @numa_nodes_parsed, i1 false, i1 false, i1 false) |
| ; CHECK-NEXT: [[TMP2:%.*]] = icmp uge i64 [[TMP1]], 128 |
| ; CHECK-NEXT: br i1 [[TMP2]], label %[[CALLEE_EXIT:.*]], label %[[HANDLER_TYPE_MISMATCH94_I:.*]] |
| ; CHECK: [[HANDLER_TYPE_MISMATCH94_I]]: |
| ; CHECK-NEXT: call void @foo() |
| ; CHECK-NEXT: call void @foo() |
| ; CHECK-NEXT: call void @foo() |
| ; CHECK-NEXT: call void @foo() |
| ; CHECK-NEXT: call void @foo() |
| ; CHECK-NEXT: call void @foo() |
| ; CHECK-NEXT: br label %[[CALLEE_EXIT]] |
| ; CHECK: [[CALLEE_EXIT]]: |
| ; CHECK-NEXT: ret i64 [[TMP1]] |
| ; |
| %1 = tail call i64 @callee() |
| ret i64 %1 |
| } |
| |
| ; Testing the InlineCost of the call to @llvm.objectsize.i64.p0i8. |
| ; Do not change the linkage of @callee; that will give it a severe discount in |
| ; cost (LastCallToStaticBonus). |
| define i64 @callee() { |
| %1 = tail call i64 @llvm.objectsize.i64.p0(ptr @numa_nodes_parsed, i1 false, i1 false, i1 false) |
| %2 = icmp uge i64 %1, 128 |
| br i1 %2, label %cont95, label %handler.type_mismatch94 |
| |
| handler.type_mismatch94: |
| call void @foo() |
| call void @foo() |
| call void @foo() |
| call void @foo() |
| call void @foo() |
| call void @foo() |
| br label %cont95 |
| |
| cont95: |
| ret i64 %1 |
| } |
| |