brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 0f62270 Raw
102 lines · plain
1; Test moves of integers to 4-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: mvhi 0(%r2), 09; CHECK: br %r1410  store i32 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: mvhi 0(%r2), 3276718; CHECK: br %r1419  store i32 32767, ptr %a20  ret void21}22 23; Check the next value up, which can't use MVHI.24define void @f3(ptr %a) {25; CHECK-LABEL: f3:26; CHECK-NOT: mvhi27; CHECK: br %r1428  store i32 32768, ptr %a29  ret void30}31 32; Check moves of -1.33define void @f4(ptr %a) {34; CHECK-LABEL: f4:35; CHECK: mvhi 0(%r2), -136; CHECK: br %r1437  store i32 -1, ptr %a38  ret void39}40 41; Check the low end of the MVHI range.42define void @f5(ptr %a) {43; CHECK-LABEL: f5:44; CHECK: mvhi 0(%r2), -3276845; CHECK: br %r1446  store i32 -32768, ptr %a47  ret void48}49 50; Check the next value down, which can't use MVHI.51define void @f6(ptr %a) {52; CHECK-LABEL: f6:53; CHECK-NOT: mvhi54; CHECK: br %r1455  store i32 -32769, ptr %a56  ret void57}58 59; Check the high end of the MVHI range.60define void @f7(ptr %a) {61; CHECK-LABEL: f7:62; CHECK: mvhi 4092(%r2), 4263; CHECK: br %r1464  %ptr = getelementptr i32, ptr %a, i64 102365  store i32 42, ptr %ptr66  ret void67}68 69; Check the next word up, which is out of range.  We prefer STY in that case.70define void @f8(ptr %a) {71; CHECK-LABEL: f8:72; CHECK: lhi [[TMP:%r[0-5]]], 4273; CHECK: sty [[TMP]], 4096(%r2)74; CHECK: br %r1475  %ptr = getelementptr i32, ptr %a, i64 102476  store i32 42, ptr %ptr77  ret void78}79 80; Check negative displacements, for which we again prefer STY.81define void @f9(ptr %a) {82; CHECK-LABEL: f9:83; CHECK: lhi [[TMP:%r[0-5]]], 4284; CHECK: sty [[TMP]], -4(%r2)85; CHECK: br %r1486  %ptr = getelementptr i32, ptr %a, i64 -187  store i32 42, ptr %ptr88  ret void89}90 91; Check that MVHI does not allow an index.92define void @f10(i64 %src, i64 %index) {93; CHECK-LABEL: f10:94; CHECK: lhi [[TMP:%r[0-5]]], 4295; CHECK: st [[TMP]], 0({{%r2,%r3|%r3,%r2}})96; CHECK: br %r1497  %add = add i64 %src, %index98  %ptr = inttoptr i64 %add to ptr99  store i32 42, ptr %ptr100  ret void101}102