brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 5c36d55 Raw
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