64 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=zEC12 -verify-machineinstrs \3; RUN: | FileCheck %s --check-prefix=NOVEC4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z16 -verify-machineinstrs \5; RUN: | FileCheck %s --check-prefix=VECTOR6 7declare void @foo(ptr)8 9; Test an alloca.10define half @f1() {11; NOVEC-LABEL: f1:12; NOVEC: # %bb.0:13; NOVEC-NEXT: stmg %r14, %r15, 112(%r15)14; NOVEC-NEXT: .cfi_offset %r14, -4815; NOVEC-NEXT: .cfi_offset %r15, -4016; NOVEC-NEXT: aghi %r15, -16817; NOVEC-NEXT: .cfi_def_cfa_offset 32818; NOVEC-NEXT: la %r2, 166(%r15)19; NOVEC-NEXT: brasl %r14, foo@PLT20; NOVEC-NEXT: lgh %r0, 166(%r15)21; NOVEC-NEXT: sllg %r0, %r0, 4822; NOVEC-NEXT: ldgr %f0, %r023; NOVEC-NEXT: # kill: def $f0h killed $f0h killed $f0d24; NOVEC-NEXT: lmg %r14, %r15, 280(%r15)25; NOVEC-NEXT: br %r1426;27; VECTOR-LABEL: f1:28; VECTOR: # %bb.0:29; VECTOR-NEXT: stmg %r14, %r15, 112(%r15)30; VECTOR-NEXT: .cfi_offset %r14, -4831; VECTOR-NEXT: .cfi_offset %r15, -4032; VECTOR-NEXT: aghi %r15, -16833; VECTOR-NEXT: .cfi_def_cfa_offset 32834; VECTOR-NEXT: la %r2, 166(%r15)35; VECTOR-NEXT: brasl %r14, foo@PLT36; VECTOR-NEXT: vlreph %v0, 166(%r15)37; VECTOR-NEXT: lmg %r14, %r15, 280(%r15)38; VECTOR-NEXT: br %r1439 %ptr = alloca half40 call void @foo(ptr %ptr)41 %orig = load half, ptr %ptr42 ret half %orig43}44 45; Test accessing a half element of an aggregate type.46%s.half = type { half, half, half, half, half }47define half @f2(ptr %P) {48; NOVEC-LABEL: f2:49; NOVEC: # %bb.0:50; NOVEC-NEXT: lgh %r0, 6(%r2)51; NOVEC-NEXT: sllg %r0, %r0, 4852; NOVEC-NEXT: ldgr %f0, %r053; NOVEC-NEXT: # kill: def $f0h killed $f0h killed $f0d54; NOVEC-NEXT: br %r1455;56; VECTOR-LABEL: f2:57; VECTOR: # %bb.0:58; VECTOR-NEXT: vlreph %v0, 6(%r2)59; VECTOR-NEXT: br %r1460 %gep = getelementptr inbounds %s.half, ptr %P, i64 0, i32 361 %res = load half, ptr %gep62 ret half %res63}64