84 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;7; Test moves (bitcasts) between i16 and half.8 9define half @f1(ptr %ptr) {10; NOVEC-LABEL: f1:11; NOVEC: # %bb.0:12; NOVEC-NEXT: lh %r0, 0(%r2)13; NOVEC-NEXT: oill %r0, 25514; NOVEC-NEXT: sllg %r0, %r0, 4815; NOVEC-NEXT: ldgr %f0, %r016; NOVEC-NEXT: # kill: def $f0h killed $f0h killed $f0d17; NOVEC-NEXT: br %r1418;19; VECTOR-LABEL: f1:20; VECTOR: # %bb.0:21; VECTOR-NEXT: lh %r0, 0(%r2)22; VECTOR-NEXT: oill %r0, 25523; VECTOR-NEXT: vlvgh %v0, %r0, 024; VECTOR-NEXT: br %r1425 %L = load i16, ptr %ptr26 %O = or i16 %L, 25527 %res = bitcast i16 %O to half28 ret half %res29}30 31define half @f2(i16 %Arg) {32; NOVEC-LABEL: f2:33; NOVEC: # %bb.0:34; NOVEC-NEXT: # kill: def $r2l killed $r2l def $r2d35; NOVEC-NEXT: sllg %r0, %r2, 4836; NOVEC-NEXT: ldgr %f0, %r037; NOVEC-NEXT: # kill: def $f0h killed $f0h killed $f0d38; NOVEC-NEXT: br %r1439;40; VECTOR-LABEL: f2:41; VECTOR: # %bb.0:42; VECTOR-NEXT: vlvgh %v0, %r2, 043; VECTOR-NEXT: br %r1444 %res = bitcast i16 %Arg to half45 ret half %res46}47 48define void @f3(half %val, ptr %ptr) {49; NOVEC-LABEL: f3:50; NOVEC: # %bb.0:51; NOVEC-NEXT: # kill: def $f0h killed $f0h def $f0d52; NOVEC-NEXT: lgdr %r0, %f053; NOVEC-NEXT: srlg %r0, %r0, 4854; NOVEC-NEXT: stc %r0, 0(%r2)55; NOVEC-NEXT: br %r1456;57; VECTOR-LABEL: f3:58; VECTOR: # %bb.0:59; VECTOR-NEXT: vlgvh %r0, %v0, 060; VECTOR-NEXT: stc %r0, 0(%r2)61; VECTOR-NEXT: br %r1462 %res = bitcast half %val to i1663 %trunc = trunc i16 %res to i864 store i8 %trunc, ptr %ptr65 ret void66}67 68define i16 @f4(half %Arg) {69; NOVEC-LABEL: f4:70; NOVEC: # %bb.0:71; NOVEC-NEXT: # kill: def $f0h killed $f0h def $f0d72; NOVEC-NEXT: lgdr %r0, %f073; NOVEC-NEXT: srlg %r2, %r0, 4874; NOVEC-NEXT: # kill: def $r2l killed $r2l killed $r2d75; NOVEC-NEXT: br %r1476;77; VECTOR-LABEL: f4:78; VECTOR: # %bb.0:79; VECTOR-NEXT: vlgvh %r2, %v0, 080; VECTOR-NEXT: br %r1481 %res = bitcast half %Arg to i1682 ret i16 %res83}84