1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; Test setjmp store jmp_buf 3; 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 %s 9 10declare i32 @llvm.eh.sjlj.setjmp(ptr) 11@buf = global [20 x ptr] zeroinitializer, align 8 12 13define void @foo() { 14; CHECK-LABEL: foo: 15; CHECK: # %bb.0: # %entry 16; CHECK-NEXT: stmg %r6, %r15, 48(%r15) 17; CHECK-NEXT: .cfi_offset %r6, -112 18; CHECK-NEXT: .cfi_offset %r7, -104 19; CHECK-NEXT: .cfi_offset %r8, -96 20; CHECK-NEXT: .cfi_offset %r9, -88 21; CHECK-NEXT: .cfi_offset %r10, -80 22; CHECK-NEXT: .cfi_offset %r11, -72 23; CHECK-NEXT: .cfi_offset %r12, -64 24; CHECK-NEXT: .cfi_offset %r13, -56 25; CHECK-NEXT: .cfi_offset %r14, -48 26; CHECK-NEXT: .cfi_offset %r15, -40 27; CHECK-NEXT: aghi %r15, -64 28; CHECK-NEXT: .cfi_def_cfa_offset 224 29; CHECK-NEXT: std %f8, 56(%r15) # 8-byte Folded Spill 30; CHECK-NEXT: std %f9, 48(%r15) # 8-byte Folded Spill 31; CHECK-NEXT: std %f10, 40(%r15) # 8-byte Folded Spill 32; CHECK-NEXT: std %f11, 32(%r15) # 8-byte Folded Spill 33; CHECK-NEXT: std %f12, 24(%r15) # 8-byte Folded Spill 34; CHECK-NEXT: std %f13, 16(%r15) # 8-byte Folded Spill 35; CHECK-NEXT: std %f14, 8(%r15) # 8-byte Folded Spill 36; CHECK-NEXT: std %f15, 0(%r15) # 8-byte Folded Spill 37; CHECK-NEXT: .cfi_offset %f8, -168 38; CHECK-NEXT: .cfi_offset %f9, -176 39; CHECK-NEXT: .cfi_offset %f10, -184 40; CHECK-NEXT: .cfi_offset %f11, -192 41; CHECK-NEXT: .cfi_offset %f12, -200 42; CHECK-NEXT: .cfi_offset %f13, -208 43; CHECK-NEXT: .cfi_offset %f14, -216 44; CHECK-NEXT: .cfi_offset %f15, -224 45; CHECK-NEXT: lgrl %r1, buf@GOT 46; CHECK-NEXT: larl %r0, .LBB0_1 47; CHECK-NEXT: stg %r0, 8(%r1) 48; CHECK-NEXT: stg %r15, 24(%r1) 49; CHECK-NEXT: .LBB0_1: # Block address taken 50; CHECK-NEXT: # %entry 51; CHECK-NEXT: .LBB0_2: # %entry 52; CHECK-NEXT: ld %f8, 56(%r15) # 8-byte Folded Reload 53; CHECK-NEXT: ld %f9, 48(%r15) # 8-byte Folded Reload 54; CHECK-NEXT: ld %f10, 40(%r15) # 8-byte Folded Reload 55; CHECK-NEXT: ld %f11, 32(%r15) # 8-byte Folded Reload 56; CHECK-NEXT: ld %f12, 24(%r15) # 8-byte Folded Reload 57; CHECK-NEXT: ld %f13, 16(%r15) # 8-byte Folded Reload 58; CHECK-NEXT: ld %f14, 8(%r15) # 8-byte Folded Reload 59; CHECK-NEXT: ld %f15, 0(%r15) # 8-byte Folded Reload 60; CHECK-NEXT: lmg %r6, %r15, 112(%r15) 61; CHECK-NEXT: br %r14 62entry: 63 %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf) 64 ret void 65} 66 67define void @foo1() "backchain" { 68; CHECK-LABEL: foo1: 69; CHECK: # %bb.0: # %entry 70; CHECK-NEXT: stmg %r6, %r15, 48(%r15) 71; CHECK-NEXT: .cfi_offset %r6, -112 72; CHECK-NEXT: .cfi_offset %r7, -104 73; CHECK-NEXT: .cfi_offset %r8, -96 74; CHECK-NEXT: .cfi_offset %r9, -88 75; CHECK-NEXT: .cfi_offset %r10, -80 76; CHECK-NEXT: .cfi_offset %r11, -72 77; CHECK-NEXT: .cfi_offset %r12, -64 78; CHECK-NEXT: .cfi_offset %r13, -56 79; CHECK-NEXT: .cfi_offset %r14, -48 80; CHECK-NEXT: .cfi_offset %r15, -40 81; CHECK-NEXT: lgr %r1, %r15 82; CHECK-NEXT: aghi %r15, -64 83; CHECK-NEXT: .cfi_def_cfa_offset 224 84; CHECK-NEXT: stg %r1, 0(%r15) 85; CHECK-NEXT: std %f8, 56(%r15) # 8-byte Folded Spill 86; CHECK-NEXT: std %f9, 48(%r15) # 8-byte Folded Spill 87; CHECK-NEXT: std %f10, 40(%r15) # 8-byte Folded Spill 88; CHECK-NEXT: std %f11, 32(%r15) # 8-byte Folded Spill 89; CHECK-NEXT: std %f12, 24(%r15) # 8-byte Folded Spill 90; CHECK-NEXT: std %f13, 16(%r15) # 8-byte Folded Spill 91; CHECK-NEXT: std %f14, 8(%r15) # 8-byte Folded Spill 92; CHECK-NEXT: std %f15, 0(%r15) # 8-byte Folded Spill 93; CHECK-NEXT: .cfi_offset %f8, -168 94; CHECK-NEXT: .cfi_offset %f9, -176 95; CHECK-NEXT: .cfi_offset %f10, -184 96; CHECK-NEXT: .cfi_offset %f11, -192 97; CHECK-NEXT: .cfi_offset %f12, -200 98; CHECK-NEXT: .cfi_offset %f13, -208 99; CHECK-NEXT: .cfi_offset %f14, -216 100; CHECK-NEXT: .cfi_offset %f15, -224 101; CHECK-NEXT: lgrl %r1, buf@GOT 102; CHECK-NEXT: larl %r0, .LBB1_1 103; 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 taken 108; CHECK-NEXT: # %entry 109; CHECK-NEXT: .LBB1_2: # %entry 110; CHECK-NEXT: ld %f8, 56(%r15) # 8-byte Folded Reload 111; CHECK-NEXT: ld %f9, 48(%r15) # 8-byte Folded Reload 112; CHECK-NEXT: ld %f10, 40(%r15) # 8-byte Folded Reload 113; CHECK-NEXT: ld %f11, 32(%r15) # 8-byte Folded Reload 114; CHECK-NEXT: ld %f12, 24(%r15) # 8-byte Folded Reload 115; CHECK-NEXT: ld %f13, 16(%r15) # 8-byte Folded Reload 116; CHECK-NEXT: ld %f14, 8(%r15) # 8-byte Folded Reload 117; CHECK-NEXT: ld %f15, 0(%r15) # 8-byte Folded Reload 118; CHECK-NEXT: lmg %r6, %r15, 112(%r15) 119; CHECK-NEXT: br %r14 120entry: 121 %0 = tail call i32 @llvm.eh.sjlj.setjmp(ptr nonnull @buf) 122 ret void 123} 124 125