diff options
| author | Adam Nemet <anemet@apple.com> | 2016-12-01 16:40:32 +0000 |
|---|---|---|
| committer | Adam Nemet <anemet@apple.com> | 2016-12-01 16:40:32 +0000 |
| commit | 4d2a6e59983add05b2377df3ae09eec8ff870731 (patch) | |
| tree | d06848dad33b76d9adb9ecbaea7355ca28d91a98 /llvm/test | |
| parent | 2ff768475df08510c4ce955fadc82f73037540c6 (diff) | |
| download | bcm5719-llvm-4d2a6e59983add05b2377df3ae09eec8ff870731.tar.gz bcm5719-llvm-4d2a6e59983add05b2377df3ae09eec8ff870731.zip | |
[GVN] Basic optimization remark support
[recommitting after the fix in r288307]
Follow-on patches will add more interesting cases.
The goal of this patch-set is to get the GVN messages printed in
opt-viewer from Dhrystone as was presented in my Dev Meeting talk. This
is the optimization view for the function (the last remark in the
function has a bug which is fixed in this series):
http://lab.llvm.org:8080/artifacts/opt-view_test-suite/build/SingleSource/Benchmarks/Dhrystone/CMakeFiles/dry.dir/html/_org_test-suite_SingleSource_Benchmarks_Dhrystone_dry.c.html#L430
Differential Revision: https://reviews.llvm.org/D26488
llvm-svn: 288370
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Transforms/GVN/opt-remarks.ll | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/llvm/test/Transforms/GVN/opt-remarks.ll b/llvm/test/Transforms/GVN/opt-remarks.ll new file mode 100644 index 00000000000..c451833f765 --- /dev/null +++ b/llvm/test/Transforms/GVN/opt-remarks.ll @@ -0,0 +1,59 @@ +; RUN: opt < %s -gvn -o /dev/null -pass-remarks-output=%t -S -pass-remarks=gvn \ +; RUN: 2>&1 | FileCheck %s +; RUN: cat %t | FileCheck -check-prefix=YAML %s + +; CHECK: remark: <unknown>:0:0: load of type i32 eliminated{{$}} +; CHECK-NEXT: remark: <unknown>:0:0: load of type i32 eliminated{{$}} +; CHECK-NEXT: remark: <unknown>:0:0: load of type i32 eliminated{{$}} +; CHECK-NOT: remark: + +; YAML: --- !Passed +; YAML-NEXT: Pass: gvn +; YAML-NEXT: Name: LoadElim +; YAML-NEXT: Function: arg +; YAML-NEXT: Args: +; YAML-NEXT: - String: 'load of type ' +; YAML-NEXT: - Type: i32 +; YAML-NEXT: - String: ' eliminated' +; YAML-NEXT: ... +; YAML-NEXT: --- !Passed +; YAML-NEXT: Pass: gvn +; YAML-NEXT: Name: LoadElim +; YAML-NEXT: Function: const +; YAML-NEXT: Args: +; YAML-NEXT: - String: 'load of type ' +; YAML-NEXT: - Type: i32 +; YAML-NEXT: - String: ' eliminated' +; YAML-NEXT: ... +; YAML-NEXT: --- !Passed +; YAML-NEXT: Pass: gvn +; YAML-NEXT: Name: LoadElim +; YAML-NEXT: Function: inst +; YAML-NEXT: Args: +; YAML-NEXT: - String: 'load of type ' +; YAML-NEXT: - Type: i32 +; YAML-NEXT: - String: ' eliminated' +; YAML-NEXT: ... + + +define i32 @arg(i32* %p, i32 %i) { +entry: + store i32 %i, i32* %p + %load = load i32, i32* %p + ret i32 %load +} + +define i32 @const(i32* %p) { +entry: + store i32 4, i32* %p + %load = load i32, i32* %p + ret i32 %load +} + +define i32 @inst(i32* %p) { +entry: + %load1 = load i32, i32* %p + %load = load i32, i32* %p + %add = add i32 %load1, %load + ret i32 %add +} |

