diff options
author | Adam Nemet <anemet@apple.com> | 2016-11-29 22:37:01 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2016-11-29 22:37:01 +0000 |
commit | d5747be721edab8afa7ef4ff440be55f9a44866f (patch) | |
tree | d2cfc94f712cc6df0d509e7eb3af7f784b248999 /llvm/test/Transforms/GVN | |
parent | 849473ae99e6a67af4656ed752fe10d73699751b (diff) | |
download | bcm5719-llvm-d5747be721edab8afa7ef4ff440be55f9a44866f.tar.gz bcm5719-llvm-d5747be721edab8afa7ef4ff440be55f9a44866f.zip |
[GVN] Basic optimization remark support
[recommiting patches one-by-one to see which breaks the stage2 LTO bot]
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: 288210
Diffstat (limited to 'llvm/test/Transforms/GVN')
-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 +} |