diff options
| author | Easwaran Raman <eraman@google.com> | 2015-12-22 00:32:35 +0000 |
|---|---|---|
| committer | Easwaran Raman <eraman@google.com> | 2015-12-22 00:32:35 +0000 |
| commit | bdb6f1dcc39c35882b2b7e22c820a88a179cad75 (patch) | |
| tree | 415f4233b4b97d00e2eee94dea56c68723ba96b2 /llvm/test/Transforms | |
| parent | 8827f2db855054b64a0944b39f8376ac317daf1f (diff) | |
| download | bcm5719-llvm-bdb6f1dcc39c35882b2b7e22c820a88a179cad75.tar.gz bcm5719-llvm-bdb6f1dcc39c35882b2b7e22c820a88a179cad75.zip | |
Determine callee's hotness and adjust threshold based on that. NFC.
This uses the same criteria used in CFE's CodeGenPGO to identify hot and cold
callees and uses values of inlinehint-threshold and inlinecold-threshold
respectively as the thresholds for such callees.
Differential Revision: http://reviews.llvm.org/D15245
llvm-svn: 256222
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/Inline/inline-cold-callee.ll | 39 | ||||
| -rw-r--r-- | llvm/test/Transforms/Inline/inline-hot-callee.ll | 39 |
2 files changed, 78 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Inline/inline-cold-callee.ll b/llvm/test/Transforms/Inline/inline-cold-callee.ll new file mode 100644 index 00000000000..1fd9f105db5 --- /dev/null +++ b/llvm/test/Transforms/Inline/inline-cold-callee.ll @@ -0,0 +1,39 @@ +; RUN: opt < %s -inline -inlinecold-threshold=0 -S | FileCheck %s + +; This tests that a cold callee gets the (lower) inlinecold-threshold even without +; Cold hint and does not get inlined because the cost exceeds the inlinecold-threshold. +; A callee with identical body does gets inlined because cost fits within the +; inline-threshold + +define i32 @callee1(i32 %x) !prof !1 { + %x1 = add i32 %x, 1 + %x2 = add i32 %x1, 1 + %x3 = add i32 %x2, 1 + + ret i32 %x3 +} + +define i32 @callee2(i32 %x) !prof !2 { +; CHECK-LABEL: @callee2( + %x1 = add i32 %x, 1 + %x2 = add i32 %x1, 1 + %x3 = add i32 %x2, 1 + + ret i32 %x3 +} + +define i32 @caller2(i32 %y1) !prof !2 { +; CHECK-LABEL: @caller2( +; CHECK: call i32 @callee2 +; CHECK-NOT: call i32 @callee1 +; CHECK: ret i32 %x3.i + %y2 = call i32 @callee2(i32 %y1) + %y3 = call i32 @callee1(i32 %y2) + ret i32 %y3 +} + +!llvm.module.flags = !{!0} +!0 = !{i32 1, !"MaxFunctionCount", i32 1000} +!1 = !{!"function_entry_count", i64 100} +!2 = !{!"function_entry_count", i64 1} + diff --git a/llvm/test/Transforms/Inline/inline-hot-callee.ll b/llvm/test/Transforms/Inline/inline-hot-callee.ll new file mode 100644 index 00000000000..93ea9d43c78 --- /dev/null +++ b/llvm/test/Transforms/Inline/inline-hot-callee.ll @@ -0,0 +1,39 @@ +; RUN: opt < %s -inline -inline-threshold=0 -inlinehint-threshold=100 -S | FileCheck %s + +; This tests that a hot callee gets the (higher) inlinehint-threshold even without +; inline hints and gets inlined because the cost is less than inlinehint-threshold. +; A cold callee with identical body does not get inlined because cost exceeds the +; inline-threshold + +define i32 @callee1(i32 %x) !prof !1 { + %x1 = add i32 %x, 1 + %x2 = add i32 %x1, 1 + %x3 = add i32 %x2, 1 + + ret i32 %x3 +} + +define i32 @callee2(i32 %x) !prof !2 { +; CHECK-LABEL: @callee2( + %x1 = add i32 %x, 1 + %x2 = add i32 %x1, 1 + %x3 = add i32 %x2, 1 + + ret i32 %x3 +} + +define i32 @caller2(i32 %y1) !prof !2 { +; CHECK-LABEL: @caller2( +; CHECK: call i32 @callee2 +; CHECK-NOT: call i32 @callee1 +; CHECK: ret i32 %x3.i + %y2 = call i32 @callee2(i32 %y1) + %y3 = call i32 @callee1(i32 %y2) + ret i32 %y3 +} + +!llvm.module.flags = !{!0} +!0 = !{i32 1, !"MaxFunctionCount", i32 10} +!1 = !{!"function_entry_count", i64 10} +!2 = !{!"function_entry_count", i64 1} + |

