brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · 11bee02 Raw
101 lines · plain
1; This test checks if a singleton instance (an instance that appears only once) can be outlined2; using codegen data from a previous codegen run.3; Unlike cgdata-read-single-outline.ll, this test also examines various suffixes that LLVM appends to names.4; Specifically, we aim to disregard the suffixes `.llvm.{number}` and `.__uniq.{number}` during the matching of call targets in hash computations.5; This approach helps in accurately identifying the original call target, especially when an LTO build may append additional suffixes for uniqueness.6; Conversely, we only consider the number from the suffix `.content.{number}`.7; This matching strategy is crucial for recursively finding outlining candidates when multiple outliner runs are enabled.8 9; RUN: split-file %s %t10 11; First, we generate the cgdata file from a local outline instance present in local-two.ll.12; RUN: llc -mtriple=arm64-apple-darwin -enable-machine-outliner -codegen-data-generate=true -filetype=obj %t/local-two.ll -o %t_write13; RUN: llvm-cgdata --merge %t_write -o %t_cgdata14; RUN: llvm-cgdata --show %t_cgdata | FileCheck %s --check-prefix=SHOW15 16; SHOW: Outlined hash tree:17; SHOW-NEXT:  Total Node Count: 418; SHOW-NEXT:  Terminal Node Count: 119; SHOW-NEXT:  Depth: 320 21; Now, we read the cgdata in the machine outliner, enabling us to optimistically22; outline a singleton instance in local-one.ll that matches against the cgdata.23; We outline instances while disregarding the suffixes `.llvm.{number}` or `.__uniq.{number}` in names.24; RUN: llc -mtriple=arm64-apple-darwin -enable-machine-outliner -codegen-data-use-path=%t_cgdata -filetype=obj %t/local-one-ignore-suffix-1.ll -o %t_read_ignore_125; RUN: llvm-objdump -d %t_read_ignore_1 | FileCheck %s26; RUN: llc -mtriple=arm64-apple-darwin -enable-machine-outliner -codegen-data-use-path=%t_cgdata -filetype=obj %t/local-one-ignore-suffix-2.ll -o %t_read_ignore_227; RUN: llvm-objdump -d %t_read_ignore_2 | FileCheck %s28 29; CHECK: _OUTLINED_FUNCTION30; CHECK-NEXT:  mov31; CHECK-NEXT:  mov32; CHECK-NEXT:  b33 34; We don't ignore `.invalid.{number}`. So no outlining occurs.35; RUN: llc -mtriple=arm64-apple-darwin -enable-machine-outliner -codegen-data-use-path=%t_cgdata -filetype=obj %t/local-one-no-ignore-suffix.ll -o %t_read_no_ignore36; RUN: llvm-objdump -d %t_read_no_ignore | FileCheck %s --check-prefix=NOOUTLINE37 38; NOOUTLINE-NOT: _OUTLINED_FUNCTION39 40;--- local-two.ll41declare i32 @g(i32, i32, i32)42define i32 @f1() minsize {43  %1 = call i32 @g(i32 10, i32 1, i32 2);44  ret i32 %145}46define i32 @f2() minsize {47  %1 = call i32 @g(i32 20, i32 1, i32 2);48  ret i32 %149}50 51;--- local-one-ignore-suffix-1.ll52declare i32 @g.llvm.123(i32, i32, i32)53define i32 @f3() minsize {54  %1 = call i32 @g.llvm.123(i32 30, i32 1, i32 2);55 ret i32 %156}57 58;--- local-one-ignore-suffix-2.ll59declare i32 @g.__uniq.456(i32, i32, i32)60define i32 @f4() minsize {61  %1 = call i32 @g.__uniq.456(i32 30, i32 1, i32 2);62 ret i32 %163}64 65;--- local-one-no-ignore-suffix.ll66declare i32 @g.invalid.789(i32, i32, i32)67define i32 @f5() minsize {68  %1 = call i32 @g.invalid.789(i32 30, i32 1, i32 2);69 ret i32 %170}71 72; Similarly, we outline functions that have already been processed in previous outliner runs.73; Assuming `-machine-outliner-reruns` is locally enabled, we might already have `OUTLINED_FUNCTION*` instances.74; First, we generate the cgdata file from a local outline instance found in local-two-content.ll.75; RUN: llc -mtriple=arm64-apple-darwin -enable-machine-outliner -codegen-data-generate=true -filetype=obj %t/local-two-content.ll -o %t_write_content76; RUN: llvm-cgdata --merge %t_write_content -o %t_cgdata_content77; RUN: llvm-cgdata --show %t_cgdata_content | FileCheck %s --check-prefix=SHOW78 79; Despite the target function names being different -- `OUTLINED_FUNCTION_0.content.123` vs. `OUTLINED_FUNCTION_1.content.123`,80; We compute the same hash based on the suffix `.content.{number}`, and optimistically outline them.81; RUN: llc -mtriple=arm64-apple-darwin -enable-machine-outliner -codegen-data-use-path=%t_cgdata_content -filetype=obj %t/local-one-content.ll -o %t_read_content82; RUN: llvm-objdump -d %t_read_content | FileCheck %s83 84;--- local-two-content.ll85declare i32 @OUTLINED_FUNCTION_0.content.123(i32, i32, i32)86define i32 @f6() minsize {87  %1 = call i32 @OUTLINED_FUNCTION_0.content.123(i32 10, i32 1, i32 2);88  ret i32 %189}90define i32 @f7() minsize {91  %1 = call i32 @OUTLINED_FUNCTION_0.content.123(i32 20, i32 1, i32 2);92  ret i32 %193}94 95;--- local-one-content.ll96declare i32 @OUTLINED_FUNCTION_1.content.123(i32, i32, i32)97define i32 @f8() minsize {98  %1 = call i32 @OUTLINED_FUNCTION_1.content.123(i32 30, i32 1, i32 2);99 ret i32 %1100}101