[WebAssembly] Unstackify regs after fixing unwinding mismatches
authorHeejin Ahn <aheejin@gmail.com>
Tue, 1 Oct 2019 06:21:53 +0000 (06:21 +0000)
committerHeejin Ahn <aheejin@gmail.com>
Tue, 1 Oct 2019 06:21:53 +0000 (06:21 +0000)
commit61d5c76a181360ca8f039b2f6c914a18540684b5
treea64ab6feb4a6ad459956348462b89c258a127c4a
parent5b5274eaf8c26064b6d10b43171f6252c10f576e
[WebAssembly] Unstackify regs after fixing unwinding mismatches

Summary:
Fixing unwind mismatches for exception handling can result in splicing
existing BBs and moving some of instructions to new BBs. In this case
some of stackified def registers in the original BB can be used in the
split BB. For example, we have this BB and suppose %r0 is a stackified
register.
```
bb.1:
  %r0 = call @foo
  ... use %r0 ...
```

After fixing unwind mismatches in CFGStackify, `bb.1` can be split and
some instructions can be moved to a newly created BB:
```
bb.1:
  %r0 = call @foo

bb.split (new):
  ... use %r0 ...
```

In this case we should make %r0 un-stackified, because its use is now in
another BB.

When spliting a BB, this CL unstackifies all def registers that have
uses in the new split BB.

Reviewers: dschuff

Subscribers: sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68218

llvm-svn: 373301
llvm/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp
llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h
llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll