75 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s4 5; Test 128-bit rotate by constant amount.6define i128 @f1(i128 %val) {7; CHECK-LABEL: f1:8; CHECK: # %bb.0:9; CHECK-NEXT: vl %v0, 0(%r3), 310; CHECK-NEXT: vrepib %v1, 10011; CHECK-NEXT: vsrlb %v2, %v0, %v112; CHECK-NEXT: vsrl %v1, %v2, %v113; CHECK-NEXT: vrepib %v2, 2814; CHECK-NEXT: vslb %v0, %v0, %v215; CHECK-NEXT: vsl %v0, %v0, %v216; CHECK-NEXT: vo %v0, %v0, %v117; CHECK-NEXT: vst %v0, 0(%r2), 318; CHECK-NEXT: br %r1419 20 %parta = shl i128 %val, 2821 %partb = lshr i128 %val, 10022 23 %rotl = or i128 %parta, %partb24 25 ret i128 %rotl26}27 28; Test 128-bit rotate by constant amount (full bytes).29define i128 @f2(i128 %val) {30; CHECK-LABEL: f2:31; CHECK: # %bb.0:32; CHECK-NEXT: vl %v0, 0(%r3), 333; CHECK-NEXT: vsldb %v0, %v0, %v0, 434; CHECK-NEXT: vst %v0, 0(%r2), 335; CHECK-NEXT: br %r1436 37 %parta = shl i128 %val, 3238 %partb = lshr i128 %val, 9639 40 %rotl = or i128 %parta, %partb41 42 ret i128 %rotl43}44 45; Test 128-bit rotate by variable amount.46define i128 @f3(i128 %val, i128 %amt) {47; CHECK-LABEL: f3:48; CHECK: # %bb.0:49; CHECK-NEXT: l %r0, 12(%r4)50; CHECK-NEXT: vlvgp %v1, %r0, %r051; CHECK-NEXT: vl %v0, 0(%r3), 352; CHECK-NEXT: vrepb %v1, %v1, 1553; CHECK-NEXT: vslb %v2, %v0, %v154; CHECK-NEXT: vsl %v1, %v2, %v155; CHECK-NEXT: vrepib %v2, 156; CHECK-NEXT: xilf %r0, 429496729557; CHECK-NEXT: vsrl %v0, %v0, %v258; CHECK-NEXT: vlvgp %v2, %r0, %r059; CHECK-NEXT: vrepb %v2, %v2, 1560; CHECK-NEXT: vsrlb %v0, %v0, %v261; CHECK-NEXT: vsrl %v0, %v0, %v262; CHECK-NEXT: vo %v0, %v1, %v063; CHECK-NEXT: vst %v0, 0(%r2), 364; CHECK-NEXT: br %r1465 66 %inv = sub i128 128, %amt67 %parta = shl i128 %val, %amt68 %partb = lshr i128 %val, %inv69 70 %rotl = or i128 %parta, %partb71 72 ret i128 %rotl73}74 75