diff options
| author | Kazu Hirata <kazu@google.com> | 2020-01-08 06:57:36 -0800 |
|---|---|---|
| committer | Kazu Hirata <kazu@google.com> | 2020-01-08 06:57:36 -0800 |
| commit | ead815924e6ebeaf02c31c37ebf7a560b5fdf67b (patch) | |
| tree | aff6e36937fef603deb76b190ff6d72c7ef1e88d /llvm/lib/CodeGen | |
| parent | dac7b23cc3efbb4ccb6a9ea101f367f866f334e2 (diff) | |
| download | bcm5719-llvm-ead815924e6ebeaf02c31c37ebf7a560b5fdf67b.tar.gz bcm5719-llvm-ead815924e6ebeaf02c31c37ebf7a560b5fdf67b.zip | |
[JumpThreading] Thread jumps through two basic blocks
Summary:
This patch teaches JumpThreading.cpp to thread through two basic
blocks like:
bb3:
%var = phi i32* [ null, %bb1 ], [ @a, %bb2 ]
%tobool = icmp eq i32 %cond, 0
br i1 %tobool, label %bb4, label ...
bb4:
%cmp = icmp eq i32* %var, null
br i1 %cmp, label bb5, label bb6
by duplicating basic blocks like bb3 above. Once we duplicate bb3 as
bb3.dup and redirect edge bb2->bb3 to bb2->bb3.dup, we have:
bb3:
%var = phi i32* [ @a, %bb2 ]
%tobool = icmp eq i32 %cond, 0
br i1 %tobool, label %bb4, label ...
bb3.dup:
%var = phi i32* [ null, %bb1 ]
%tobool = icmp eq i32 %cond, 0
br i1 %tobool, label %bb4, label ...
bb4:
%cmp = icmp eq i32* %var, null
br i1 %cmp, label bb5, label bb6
Then the existing code in JumpThreading.cpp can thread edge
bb3.dup->bb4 through bb4 and eventually create bb3.dup->bb5.
Reviewers: wmi
Subscribers: hiraditya, jfb, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D70247
Diffstat (limited to 'llvm/lib/CodeGen')
0 files changed, 0 insertions, 0 deletions

