| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 | |
| ; Test longjmp load from jmp_buf. | |
| ; Frame pointer from Slot 1. | |
| ; Jump address from Slot 2. | |
| ; Backchain Value from Slot 3. | |
| ; Stack Pointer from Slot 4. | |
| ; Literal Pool Pointer from Slot 5. | |
| ; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck %s | |
| @buf = global [20 x ptr] zeroinitializer, align 8 | |
| define void @foo() { | |
| ; CHECK-LABEL: foo: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: stmg %r11, %r15, 88(%r15) | |
| ; CHECK-NEXT: .cfi_offset %r11, -72 | |
| ; CHECK-NEXT: .cfi_offset %r13, -56 | |
| ; CHECK-NEXT: .cfi_offset %r15, -40 | |
| ; CHECK-NEXT: lgrl %r1, buf@GOT | |
| ; CHECK-NEXT: lg %r2, 8(%r1) | |
| ; CHECK-NEXT: lg %r11, 0(%r1) | |
| ; CHECK-NEXT: lg %r13, 32(%r1) | |
| ; CHECK-NEXT: lg %r15, 24(%r1) | |
| ; CHECK-NEXT: br %r2 | |
| entry: | |
| tail call void @llvm.eh.sjlj.longjmp(ptr nonnull @buf) | |
| unreachable | |
| } | |
| define void @bar() "backchain" { | |
| ; CHECK-LABEL: bar: | |
| ; CHECK: # %bb.0: # %entry | |
| ; CHECK-NEXT: stmg %r11, %r15, 88(%r15) | |
| ; CHECK-NEXT: .cfi_offset %r11, -72 | |
| ; CHECK-NEXT: .cfi_offset %r13, -56 | |
| ; CHECK-NEXT: .cfi_offset %r15, -40 | |
| ; CHECK-NEXT: lgrl %r1, buf@GOT | |
| ; CHECK-NEXT: lg %r2, 8(%r1) | |
| ; CHECK-NEXT: lg %r11, 0(%r1) | |
| ; CHECK-NEXT: lg %r13, 32(%r1) | |
| ; CHECK-NEXT: lg %r3, 16(%r1) | |
| ; CHECK-NEXT: lg %r15, 24(%r1) | |
| ; CHECK-NEXT: stg %r3, 0(%r15) | |
| ; CHECK-NEXT: br %r2 | |
| entry: | |
| tail call void @llvm.eh.sjlj.longjmp(ptr nonnull @buf) | |
| unreachable | |
| } |