103 lines · plain
1; Test moves of integers to 8-byte memory locations.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; Check moves of zero.6define void @f1(ptr %a) {7; CHECK-LABEL: f1:8; CHECK: mvghi 0(%r2), 09; CHECK: br %r1410 store i64 0, ptr %a11 ret void12}13 14; Check the high end of the signed 16-bit range.15define void @f2(ptr %a) {16; CHECK-LABEL: f2:17; CHECK: mvghi 0(%r2), 3276718; CHECK: br %r1419 store i64 32767, ptr %a20 ret void21}22 23; Check the next value up, which can't use MVGHI.24define void @f3(ptr %a) {25; CHECK-LABEL: f3:26; CHECK-NOT: mvghi27; CHECK: br %r1428 store i64 32768, ptr %a29 ret void30}31 32; Check moves of -1.33define void @f4(ptr %a) {34; CHECK-LABEL: f4:35; CHECK: mvghi 0(%r2), -136; CHECK: br %r1437 store i64 -1, ptr %a38 ret void39}40 41; Check the low end of the MVGHI range.42define void @f5(ptr %a) {43; CHECK-LABEL: f5:44; CHECK: mvghi 0(%r2), -3276845; CHECK: br %r1446 store i64 -32768, ptr %a47 ret void48}49 50; Check the next value down, which can't use MVGHI.51define void @f6(ptr %a) {52; CHECK-LABEL: f6:53; CHECK-NOT: mvghi54; CHECK: br %r1455 store i64 -32769, ptr %a56 ret void57}58 59; Check the high end of the MVGHI range.60define void @f7(ptr %a) {61; CHECK-LABEL: f7:62; CHECK: mvghi 4088(%r2), 4263; CHECK: br %r1464 %ptr = getelementptr i64, ptr %a, i64 51165 store i64 42, ptr %ptr66 ret void67}68 69; Check the next doubleword up, which is out of range. We prefer STG70; in that case.71define void @f8(ptr %a) {72; CHECK-LABEL: f8:73; CHECK: lghi [[TMP:%r[0-5]]], 4274; CHECK: stg [[TMP]], 4096(%r2)75; CHECK: br %r1476 %ptr = getelementptr i64, ptr %a, i64 51277 store i64 42, ptr %ptr78 ret void79}80 81; Check negative displacements, for which we again prefer STG.82define void @f9(ptr %a) {83; CHECK-LABEL: f9:84; CHECK: lghi [[TMP:%r[0-5]]], 4285; CHECK: stg [[TMP]], -8(%r2)86; CHECK: br %r1487 %ptr = getelementptr i64, ptr %a, i64 -188 store i64 42, ptr %ptr89 ret void90}91 92; Check that MVGHI does not allow an index.93define void @f10(i64 %src, i64 %index) {94; CHECK-LABEL: f10:95; CHECK: lghi [[TMP:%r[0-5]]], 4296; CHECK: stg [[TMP]], 0({{%r2,%r3|%r3,%r2}})97; CHECK: br %r1498 %add = add i64 %src, %index99 %ptr = inttoptr i64 %add to ptr100 store i64 42, ptr %ptr101 ret void102}103