| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -S -passes=inline < %s | FileCheck %s |
| |
| ; Check that the exception handling code is fully pruned, and does not |
| ; leave behind invalid IR. |
| |
| define internal void @foo() personality ptr undef { |
| entry: |
| br i1 false, label %join, label %split |
| |
| split: |
| br label %join |
| |
| join: |
| %phi = phi i64 [ 1, %split ], [ 0, %entry ] |
| %cmp = icmp ugt i64 1, %phi |
| br i1 %cmp, label %invoke1, label %exit |
| |
| invoke1: |
| invoke void undef() |
| to label %exit unwind label %cleanup1 |
| |
| cleanup1: |
| %pad1 = cleanuppad within none [] |
| br label %cleanup1.cont |
| |
| cleanup1.cont: |
| br i1 undef, label %cleanupret, label %invoke2 |
| |
| invoke2: |
| invoke void undef() [ "funclet"(token %pad1) ] |
| to label %cleanup1.cont unwind label %cleanup2 |
| |
| cleanup2: |
| %pad2 = cleanuppad within %pad1 [] |
| unreachable |
| |
| cleanupret: |
| unreachable |
| |
| exit: |
| ret void |
| } |
| |
| define void @test() personality ptr undef { |
| ; CHECK-LABEL: @test( |
| ; CHECK-NEXT: ret void |
| ; |
| call void @foo() |
| ret void |
| } |