40 lines · plain
1; Test strlen using SRST, i64 version.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5declare i64 @strlen(ptr %src)6declare i64 @strnlen(ptr %src, i64 %len)7 8; Test strlen with its proper i64 prototype. It would also be valid for9; the uses of %r3 and REG after the LGR to be swapped.10define i64 @f1(i32 %dummy, ptr %src) {11; CHECK-LABEL: f1:12; CHECK-DAG: lhi %r0, 013; CHECK-DAG: lghi %r2, 014; CHECK-DAG: lgr [[REG:%r[145]]], %r315; CHECK: [[LABEL:\.[^:]*]]:16; CHECK-NEXT: srst %r2, [[REG]]17; CHECK-NEXT: jo [[LABEL]]18; CHECK-NEXT: %bb.{{[0-9]+}}19; CHECK-NEXT: sgr %r2, %r320; CHECK: br %r1421 %res = call i64 @strlen(ptr %src)22 ret i64 %res23}24 25; Test strnlen with its proper i64 prototype.26define i64 @f2(i64 %len, ptr %src) {27; CHECK-LABEL: f2:28; CHECK-DAG: agr %r2, %r329; CHECK-DAG: lhi %r0, 030; CHECK-DAG: lgr [[REG:%r[145]]], %r331; CHECK: [[LABEL:\.[^:]*]]:32; CHECK-NEXT: srst %r2, [[REG]]33; CHECK-NEXT: jo [[LABEL]]34; CHECK-NEXT: %bb.{{[0-9]+}}35; CHECK-NEXT: sgr %r2, %r336; CHECK: br %r1437 %res = call i64 @strnlen(ptr %src, i64 %len)38 ret i64 %res39}40