125 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; Test setjmp store jmp_buf3; Return address in slot 2.4; Backchain value is stored in slot 3 for -mbackchain option.5; Stack Pointer in slot 4.6; Clobber %r6-%r15, %f8-%f15.7 8; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck %s9 10declare i32 @llvm.eh.sjlj.setjmp(ptr)11@buf = global [20 x ptr] zeroinitializer, align 812 13define void @foo() {14; CHECK-LABEL: foo:15; CHECK: # %bb.0: # %entry16; CHECK-NEXT: stmg %r6, %r15, 48(%r15)17; CHECK-NEXT: .cfi_offset %r6, -11218; CHECK-NEXT: .cfi_offset %r7, -10419; CHECK-NEXT: .cfi_offset %r8, -9620; CHECK-NEXT: .cfi_offset %r9, -8821; CHECK-NEXT: .cfi_offset %r10, -8022; CHECK-NEXT: .cfi_offset %r11, -7223; CHECK-NEXT: .cfi_offset %r12, -6424; CHECK-NEXT: .cfi_offset %r13, -5625; CHECK-NEXT: .cfi_offset %r14, -4826; CHECK-NEXT: .cfi_offset %r15, -4027; CHECK-NEXT: aghi %r15, -6428; CHECK-NEXT: .cfi_def_cfa_offset 22429; CHECK-NEXT: std %f8, 56(%r15) # 8-byte Spill30; CHECK-NEXT: std %f9, 48(%r15) # 8-byte Spill31; CHECK-NEXT: std %f10, 40(%r15) # 8-byte Spill32; CHECK-NEXT: std %f11, 32(%r15) # 8-byte Spill33; CHECK-NEXT: std %f12, 24(%r15) # 8-byte Spill34; CHECK-NEXT: std %f13, 16(%r15) # 8-byte Spill35; CHECK-NEXT: std %f14, 8(%r15) # 8-byte Spill36; CHECK-NEXT: std %f15, 0(%r15) # 8-byte Spill37; CHECK-NEXT: .cfi_offset %f8, -16838; CHECK-NEXT: .cfi_offset %f9, -17639; CHECK-NEXT: .cfi_offset %f10, -18440; CHECK-NEXT: .cfi_offset %f11, -19241; CHECK-NEXT: .cfi_offset %f12, -20042; CHECK-NEXT: .cfi_offset %f13, -20843; CHECK-NEXT: .cfi_offset %f14, -21644; CHECK-NEXT: .cfi_offset %f15, -22445; CHECK-NEXT: lgrl %r1, buf@GOT46; CHECK-NEXT: larl %r0, .LBB0_147; CHECK-NEXT: stg %r0, 8(%r1)48; CHECK-NEXT: stg %r15, 24(%r1)49; CHECK-NEXT: .LBB0_1: # Block address taken50; CHECK-NEXT: # %entry51; CHECK-NEXT: .LBB0_2: # %entry52; CHECK-NEXT: ld %f8, 56(%r15) # 8-byte Reload53; CHECK-NEXT: ld %f9, 48(%r15) # 8-byte Reload54; CHECK-NEXT: ld %f10, 40(%r15) # 8-byte Reload55; CHECK-NEXT: ld %f11, 32(%r15) # 8-byte Reload56; CHECK-NEXT: ld %f12, 24(%r15) # 8-byte Reload57; CHECK-NEXT: ld %f13, 16(%r15) # 8-byte Reload58; CHECK-NEXT: ld %f14, 8(%r15) # 8-byte Reload59; CHECK-NEXT: ld %f15, 0(%r15) # 8-byte Reload60; CHECK-NEXT: lmg %r6, %r15, 112(%r15)61; CHECK-NEXT: br %r1462entry:63 %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf)64 ret void65}66 67define void @foo1() "backchain" {68; CHECK-LABEL: foo1:69; CHECK: # %bb.0: # %entry70; CHECK-NEXT: stmg %r6, %r15, 48(%r15)71; CHECK-NEXT: .cfi_offset %r6, -11272; CHECK-NEXT: .cfi_offset %r7, -10473; CHECK-NEXT: .cfi_offset %r8, -9674; CHECK-NEXT: .cfi_offset %r9, -8875; CHECK-NEXT: .cfi_offset %r10, -8076; CHECK-NEXT: .cfi_offset %r11, -7277; CHECK-NEXT: .cfi_offset %r12, -6478; CHECK-NEXT: .cfi_offset %r13, -5679; CHECK-NEXT: .cfi_offset %r14, -4880; CHECK-NEXT: .cfi_offset %r15, -4081; CHECK-NEXT: lgr %r1, %r1582; CHECK-NEXT: aghi %r15, -6483; CHECK-NEXT: .cfi_def_cfa_offset 22484; CHECK-NEXT: stg %r1, 0(%r15)85; CHECK-NEXT: std %f8, 56(%r15) # 8-byte Spill86; CHECK-NEXT: std %f9, 48(%r15) # 8-byte Spill87; CHECK-NEXT: std %f10, 40(%r15) # 8-byte Spill88; CHECK-NEXT: std %f11, 32(%r15) # 8-byte Spill89; CHECK-NEXT: std %f12, 24(%r15) # 8-byte Spill90; CHECK-NEXT: std %f13, 16(%r15) # 8-byte Spill91; CHECK-NEXT: std %f14, 8(%r15) # 8-byte Spill92; CHECK-NEXT: std %f15, 0(%r15) # 8-byte Spill93; CHECK-NEXT: .cfi_offset %f8, -16894; CHECK-NEXT: .cfi_offset %f9, -17695; CHECK-NEXT: .cfi_offset %f10, -18496; CHECK-NEXT: .cfi_offset %f11, -19297; CHECK-NEXT: .cfi_offset %f12, -20098; CHECK-NEXT: .cfi_offset %f13, -20899; CHECK-NEXT: .cfi_offset %f14, -216100; CHECK-NEXT: .cfi_offset %f15, -224101; CHECK-NEXT: lgrl %r1, buf@GOT102; CHECK-NEXT: larl %r0, .LBB1_1103; CHECK-NEXT: stg %r0, 8(%r1)104; CHECK-NEXT: stg %r15, 24(%r1)105; CHECK-NEXT: lg %r0, 0(%r15)106; CHECK-NEXT: stg %r0, 16(%r1)107; CHECK-NEXT: .LBB1_1: # Block address taken108; CHECK-NEXT: # %entry109; CHECK-NEXT: .LBB1_2: # %entry110; CHECK-NEXT: ld %f8, 56(%r15) # 8-byte Reload111; CHECK-NEXT: ld %f9, 48(%r15) # 8-byte Reload112; CHECK-NEXT: ld %f10, 40(%r15) # 8-byte Reload113; CHECK-NEXT: ld %f11, 32(%r15) # 8-byte Reload114; CHECK-NEXT: ld %f12, 24(%r15) # 8-byte Reload115; CHECK-NEXT: ld %f13, 16(%r15) # 8-byte Reload116; CHECK-NEXT: ld %f14, 8(%r15) # 8-byte Reload117; CHECK-NEXT: ld %f15, 0(%r15) # 8-byte Reload118; CHECK-NEXT: lmg %r6, %r15, 112(%r15)119; CHECK-NEXT: br %r14120entry:121 %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf)122 ret void123}124 125