101 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; Test use of LOAD INDEXED ADDRESS word instructions.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z17 | FileCheck %s5 6; LXAF with base and index.7define dso_local ptr @f0(ptr %ptr, i32 %idx) {8; CHECK-LABEL: f0:9; CHECK: # %bb.0:10; CHECK-NEXT: lxaf %r2, 0(%r3,%r2)11; CHECK-NEXT: br %r1412 %idxprom = sext i32 %idx to i6413 %arrayidx = getelementptr inbounds i32, ptr %ptr, i64 %idxprom14 ret ptr %arrayidx15}16 17; LXAF with base and index (implied extension).18define dso_local ptr @f1(ptr %ptr, i32 signext %idx) {19; CHECK-LABEL: f1:20; CHECK: # %bb.0:21; CHECK-NEXT: lxaf %r2, 0(%r3,%r2)22; CHECK-NEXT: br %r1423 %idxprom = sext i32 %idx to i6424 %arrayidx = getelementptr inbounds i32, ptr %ptr, i64 %idxprom25 ret ptr %arrayidx26}27 28; LXAF with base and index and max displacement.29define dso_local ptr @f2(ptr %ptr, i32 %idx) {30; CHECK-LABEL: f2:31; CHECK: # %bb.0:32; CHECK-NEXT: lxaf %r2, 524287(%r3,%r2)33; CHECK-NEXT: br %r1434 %idxoff = add i32 %idx, 52428735 %idxprom = sext i32 %idxoff to i6436 %arrayidx = getelementptr inbounds i32, ptr %ptr, i64 %idxprom37 ret ptr %arrayidx38}39 40; LXAF with base and index and min displacement.41define dso_local ptr @f3(ptr %ptr, i32 %idx) {42; CHECK-LABEL: f3:43; CHECK: # %bb.0:44; CHECK-NEXT: lxaf %r2, -524288(%r3,%r2)45; CHECK-NEXT: br %r1446 %idxoff = add i32 %idx, -52428847 %idxprom = sext i32 %idxoff to i6448 %arrayidx = getelementptr inbounds i32, ptr %ptr, i64 %idxprom49 ret ptr %arrayidx50}51 52; LXAF with base and index and max displacement overflow.53define dso_local ptr @f4(ptr %ptr, i32 %idx) {54; CHECK-LABEL: f4:55; CHECK: # %bb.0:56; CHECK-NEXT: afi %r3, 52428857; CHECK-NEXT: lxaf %r2, 0(%r3,%r2)58; CHECK-NEXT: br %r1459 %idxoff = add i32 %idx, 52428860 %idxprom = sext i32 %idxoff to i6461 %arrayidx = getelementptr inbounds i32, ptr %ptr, i64 %idxprom62 ret ptr %arrayidx63}64 65; LXAF with base and index and min displacement overflow.66define dso_local ptr @f5(ptr %ptr, i32 %idx) {67; CHECK-LABEL: f5:68; CHECK: # %bb.0:69; CHECK-NEXT: afi %r3, -52428970; CHECK-NEXT: lxaf %r2, 0(%r3,%r2)71; CHECK-NEXT: br %r1472 %idxoff = add i32 %idx, -52428973 %idxprom = sext i32 %idxoff to i6474 %arrayidx = getelementptr inbounds i32, ptr %ptr, i64 %idxprom75 ret ptr %arrayidx76}77 78; LXAF with index.79define dso_local i64 @f6(i32 %idx) {80; CHECK-LABEL: f6:81; CHECK: # %bb.0:82; CHECK-NEXT: lxaf %r2, 0(%r2,0)83; CHECK-NEXT: br %r1484 %idxprom = sext i32 %idx to i6485 %idxshift = shl i64 %idxprom, 286 ret i64 %idxshift87}88 89; LXAF with index and displacement.90define dso_local i64 @f7(i32 %idx) {91; CHECK-LABEL: f7:92; CHECK: # %bb.0:93; CHECK-NEXT: lxaf %r2, 1(%r2,0)94; CHECK-NEXT: br %r1495 %idxoff = add i32 %idx, 196 %idxprom = sext i32 %idxoff to i6497 %idxshift = shl i64 %idxprom, 298 ret i64 %idxshift99}100 101