diff options
| author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-11-11 21:38:02 +0000 |
|---|---|---|
| committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-11-11 21:38:02 +0000 |
| commit | cdafd8490a2d48aa14fe79b5a23ef37c2666112f (patch) | |
| tree | 770980591c6dcaa83e23603f189b45f00874e659 /llvm/test/Verifier/operand-bundles.ll | |
| parent | 77ef54288ab901a44545d2e69dad8365ad1ee27a (diff) | |
| download | bcm5719-llvm-cdafd8490a2d48aa14fe79b5a23ef37c2666112f.tar.gz bcm5719-llvm-cdafd8490a2d48aa14fe79b5a23ef37c2666112f.zip | |
Introduce deoptimization operand bundles
Summary:
This change introduces the notion of "deoptimization" operand bundles.
LLVM can recognize and optimize these in more precise ways than it can a
generic "unknown" operand bundles.
The current form of this special recognition / optimization is an enum
entry in LLVMContext, a LangRef blurb and a verifier rule. Over time we
will teach LLVM to do more aggressive optimization around deoptimization
operand bundles, exploiting known facts about kinds of state
deoptimization operand bundles are allowed to track.
Reviewers: reames, majnemer, chandlerc, dexonsmith
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D14551
llvm-svn: 252806
Diffstat (limited to 'llvm/test/Verifier/operand-bundles.ll')
| -rw-r--r-- | llvm/test/Verifier/operand-bundles.ll | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/test/Verifier/operand-bundles.ll b/llvm/test/Verifier/operand-bundles.ll index 0aba61cccb8..d822568a044 100644 --- a/llvm/test/Verifier/operand-bundles.ll +++ b/llvm/test/Verifier/operand-bundles.ll @@ -34,3 +34,16 @@ normal: %x = add i32 42, 1 ret void } + +define void @f_deopt(i32* %ptr) { +; CHECK: Multiple deopt operand bundles +; CHECK-NEXT: call void @g() [ "deopt"(i32 42, i64 100, i32 %x), "deopt"(float 0.000000e+00, i64 100, i32 %l) ] +; CHECK-NOT: call void @g() [ "deopt"(i32 42, i64 120, i32 %x) ] + + entry: + %l = load i32, i32* %ptr + call void @g() [ "deopt"(i32 42, i64 100, i32 %x), "deopt"(float 0.0, i64 100, i32 %l) ] + call void @g() [ "deopt"(i32 42, i64 120) ] ;; The verifier should not complain about this one + %x = add i32 42, 1 + ret void +} |

