| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| ; Verify that MachineLICM recognizes that EH landing pad entry clobbers %r6/%r7 |
| ; |
| ; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s |
| |
| declare i64 @personality(i64, i64, i64, ptr, ptr) |
| declare void @callee(i64, i64, i64, i64, i64) |
| declare void @panic() |
| |
| define void @test() uwtable personality ptr @personality { |
| ; CHECK-LABEL: test: |
| ; CHECK: .Lfunc_begin0: |
| ; CHECK-NEXT: .cfi_startproc |
| ; CHECK-NEXT: .cfi_personality 0, personality |
| ; CHECK-NEXT: .cfi_lsda 0, .Lexception0 |
| ; CHECK-NEXT: # %bb.0: # %start |
| ; CHECK-NEXT: stmg %r6, %r15, 48(%r15) |
| ; CHECK-NEXT: .cfi_offset %r6, -112 |
| ; CHECK-NEXT: .cfi_offset %r7, -104 |
| ; CHECK-NEXT: .cfi_offset %r14, -48 |
| ; CHECK-NEXT: .cfi_offset %r15, -40 |
| ; CHECK-NEXT: aghi %r15, -160 |
| ; CHECK-NEXT: .cfi_def_cfa_offset 320 |
| ; CHECK-NEXT: .LBB0_1: # %bb1 |
| ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 |
| ; CHECK-NEXT: lghi %r2, 0 |
| ; CHECK-NEXT: lghi %r3, 0 |
| ; CHECK-NEXT: lghi %r4, 0 |
| ; CHECK-NEXT: lghi %r5, 0 |
| ; CHECK-NEXT: lghi %r6, 0 |
| ; CHECK-NEXT: brasl %r14, callee@PLT |
| ; CHECK-NEXT: .Ltmp0: |
| ; CHECK-NEXT: brasl %r14, panic@PLT |
| ; CHECK-NEXT: .Ltmp1: |
| ; CHECK-NEXT: j .LBB0_3 |
| ; CHECK-NEXT: .LBB0_2: # %bb3 |
| ; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=1 |
| ; CHECK-NEXT: .Ltmp2: |
| ; CHECK-NEXT: j .LBB0_1 |
| ; CHECK-NEXT: .LBB0_3: # %bb2 |
| ; CHECK-NEXT: lmg %r6, %r15, 208(%r15) |
| ; CHECK-NEXT: br %r14 |
| start: |
| br label %bb1 |
| |
| bb1: |
| call void @callee(i64 0, i64 0, i64 0, i64 0, i64 0) |
| invoke void @panic() |
| to label %bb2 unwind label %bb3 |
| |
| bb2: |
| ret void |
| |
| bb3: |
| %lp = landingpad { ptr, i32 } |
| catch ptr null |
| br label %bb1 |
| } |
| |