diff options
author | Shraiysh Vaishay <cs17btech11050@iith.ac.in> | 2020-03-19 13:09:31 +0100 |
---|---|---|
committer | Alex Zinenko <zinenko@google.com> | 2020-03-19 13:14:25 +0100 |
commit | ff77397fcf6ef74906b28be435c159706ed60d43 (patch) | |
tree | b1c6e83ea3a66e3e4a78f5f63d971f096eda7cd7 /llvm/lib/CodeGen/LiveDebugValues.cpp | |
parent | 718d94187dbb2388dbc84deb5d49004fd552817c (diff) | |
download | llvm-ff77397fcf6ef74906b28be435c159706ed60d43.zip llvm-ff77397fcf6ef74906b28be435c159706ed60d43.tar.gz llvm-ff77397fcf6ef74906b28be435c159706ed60d43.tar.bz2 |
[mlir] Added llvm.resume and personality functions in LLVM IR Dialect
`llvm.resume` is similar to `llvm.return` except that has to be exactly
one operand and that should be derived from a `llvm.landingpad`
instruction. Any function having `llvm.landingpad` instruction must
have a personality attribute.
Example:
LLVM IR
```
define dso_local i32 @main() personality i32 (...)* @__gxx_personality_v0 {
invoke void @foo(i32 42)
to label %3 unwind label %1
1: ; preds = %0
%2 = landingpad i8*
catch i8** @_ZTIi
catch i8* bitcast (i8** @_ZTIi to i8*)
resume i8* %2
3: ; preds = %0
ret i32 1
}
```
MLIR - LLVM IR Dialect
```
llvm.func @main() -> !llvm.i32 attributes {personality = @__gxx_personality_v0} {
%0 = llvm.mlir.constant(1 : i32) : !llvm.i32
%1 = llvm.mlir.addressof @_ZTIi : !llvm<"i8**">
%2 = llvm.bitcast %1 : !llvm<"i8**"> to !llvm<"i8*">
%3 = llvm.mlir.addressof @_ZTIi : !llvm<"i8**">
%4 = llvm.mlir.constant(42 : i32) : !llvm.i32
llvm.invoke @foo(%4) to ^bb2 unwind ^bb1 : (!llvm.i32) -> ()
^bb1: // pred: ^bb0
%5 = llvm.landingpad (catch %3 : !llvm<"i8**">) (catch %2 : !llvm<"i8*">) : !llvm<"i8*">
llvm.resume %5 : !llvm<"i8*">
^bb2: // pred: ^bb0
llvm.return %0 : !llvm.i32
}
```
Differential Revision: https://reviews.llvm.org/D71888
Diffstat (limited to 'llvm/lib/CodeGen/LiveDebugValues.cpp')
0 files changed, 0 insertions, 0 deletions