53 lines · plain
1; Make sure that the alloca offset isn't lost when the alloca result is2; used directly in a load or store. There must always be an LA or LAY.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-A5; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-B6; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-C7; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-D8 9declare i64 @bar(ptr %a)10 11define i64 @f1(i64 %length, i64 %index) {12; CHECK-A-LABEL: f1:13; CHECK-A-DAG: lgr %r15, [[ADDR:%r[1-5]]]14; CHECK-A-DAG: la %r2, 160([[ADDR]])15; CHECK-A: mvi 0(%r2), 016;17; CHECK-B-LABEL: f1:18; CHECK-B-DAG: lgr %r15, [[ADDR:%r[1-5]]]19; CHECK-B-DAG: la %r2, 160([[ADDR]])20; CHECK-B: mvi 4095(%r2), 121;22; CHECK-C-LABEL: f1:23; CHECK-C-DAG: lgr %r15, [[ADDR:%r[1-5]]]24; CHECK-C-DAG: la %r2, 160([[ADDR]])25; CHECK-C-DAG: lhi [[TMP:%r[0-5]]], 226; CHECK-C: stc [[TMP]], 0({{%r3,%r2|%r2,%r3}})27;28; CHECK-D-LABEL: f1:29; CHECK-D-DAG: lgr %r15, [[ADDR:%r[1-5]]]30; CHECK-D-DAG: la %r2, 160([[ADDR]])31; CHECK-D-DAG: lhi [[TMP:%r[0-5]]], 332; CHECK-D: stc [[TMP]], 4095({{%r3,%r2|%r2,%r3}})33;34; CHECK-E-LABEL: f1:35; CHECK-E-DAG: lgr %r15, [[ADDR:%r[1-5]]]36; CHECK-E-DAG: la %r2, 160([[ADDR]])37; CHECK-E-DAG: lhi [[TMP:%r[0-5]]], 438; CHECK-E: stcy [[TMP]], 4096({{%r3,%r2|%r2,%r3}})39 %a = alloca i8, i64 %length40 store volatile i8 0, ptr %a41 %b = getelementptr i8, ptr %a, i64 409542 store volatile i8 1, ptr %b43 %c = getelementptr i8, ptr %a, i64 %index44 store volatile i8 2, ptr %c45 %d = getelementptr i8, ptr %c, i64 409546 store volatile i8 3, ptr %d47 %e = getelementptr i8, ptr %d, i64 148 store volatile i8 4, ptr %e49 %count = call i64 @bar(ptr %a)50 %res = add i64 %count, 151 ret i64 %res52}53