1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Allocate 8 bytes, no need to align stack. 4*9880d681SAndroid Build Coastguard Workerdefine void @f0() { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f0: 6*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -168 7*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: nil 8*9880d681SAndroid Build Coastguard Worker; CHECK: mvghi 160(%r15), 10 9*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 168 10*9880d681SAndroid Build Coastguard Worker %x = alloca i64 11*9880d681SAndroid Build Coastguard Worker store volatile i64 10, i64* %x 12*9880d681SAndroid Build Coastguard Worker ret void 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; Allocate %len * 8, no need to align stack. 16*9880d681SAndroid Build Coastguard Workerdefine void @f1(i64 %len) { 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 18*9880d681SAndroid Build Coastguard Worker; CHECK: sllg %r0, %r2, 3 19*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r1, %r15 20*9880d681SAndroid Build Coastguard Worker; CHECK: sgr %r1, %r0 21*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ngr 22*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r15, %r1 23*9880d681SAndroid Build Coastguard Worker; CHECK: la %r1, 160(%r1) 24*9880d681SAndroid Build Coastguard Worker; CHECK: mvghi 0(%r1), 10 25*9880d681SAndroid Build Coastguard Worker %x = alloca i64, i64 %len 26*9880d681SAndroid Build Coastguard Worker store volatile i64 10, i64* %x 27*9880d681SAndroid Build Coastguard Worker ret void 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; Static alloca, align 128. 31*9880d681SAndroid Build Coastguard Workerdefine void @f2() { 32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 33*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r1, -128 34*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r15, %r1 35*9880d681SAndroid Build Coastguard Worker; CHECK: la %r1, 280(%r1) 36*9880d681SAndroid Build Coastguard Worker; CHECK: nill %r1, 65408 37*9880d681SAndroid Build Coastguard Worker; CHECK: mvghi 0(%r1), 10 38*9880d681SAndroid Build Coastguard Worker %x = alloca i64, i64 1, align 128 39*9880d681SAndroid Build Coastguard Worker store volatile i64 10, i64* %x, align 128 40*9880d681SAndroid Build Coastguard Worker ret void 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; Dynamic alloca, align 128. 44*9880d681SAndroid Build Coastguard Workerdefine void @f3(i64 %len) { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 46*9880d681SAndroid Build Coastguard Worker; CHECK: sllg %r1, %r2, 3 47*9880d681SAndroid Build Coastguard Worker; CHECK: la %r0, 120(%r1) 48*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r1, %r15 49*9880d681SAndroid Build Coastguard Worker; CHECK: sgr %r1, %r0 50*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r15, %r1 51*9880d681SAndroid Build Coastguard Worker; CHECK: la %r1, 280(%r1) 52*9880d681SAndroid Build Coastguard Worker; CHECK: nill %r1, 65408 53*9880d681SAndroid Build Coastguard Worker; CHECK: mvghi 0(%r1), 10 54*9880d681SAndroid Build Coastguard Worker %x = alloca i64, i64 %len, align 128 55*9880d681SAndroid Build Coastguard Worker store volatile i64 10, i64* %x, align 128 56*9880d681SAndroid Build Coastguard Worker ret void 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; Static alloca w/out alignment - part of frame. 60*9880d681SAndroid Build Coastguard Workerdefine void @f4() { 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 62*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -168 63*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 164(%r15), 10 64*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 168 65*9880d681SAndroid Build Coastguard Worker %x = alloca i32 66*9880d681SAndroid Build Coastguard Worker store volatile i32 10, i32* %x 67*9880d681SAndroid Build Coastguard Worker ret void 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; Static alloca of one i32, aligned by 128. 71*9880d681SAndroid Build Coastguard Workerdefine void @f5() { 72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r1, %r15 75*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r1, -128 76*9880d681SAndroid Build Coastguard Worker; CHECK: lgr %r15, %r1 77*9880d681SAndroid Build Coastguard Worker; CHECK: la %r1, 280(%r1) 78*9880d681SAndroid Build Coastguard Worker; CHECK: nill %r1, 65408 79*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r1), 10 80*9880d681SAndroid Build Coastguard Worker %x = alloca i32, i64 1, align 128 81*9880d681SAndroid Build Coastguard Worker store volatile i32 10, i32* %x 82*9880d681SAndroid Build Coastguard Worker ret void 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85