brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 29adcf6 Raw
100 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Test that the case of (64 - shift) used by a shift/rotate instruction is3; implemented with an lcr. This should also work for any multiple of 64.4;5; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s6 7define i64 @f1(i64 %in, i64 %sh) {8; CHECK-LABEL: f1:9; CHECK:       # %bb.0:10; CHECK-NEXT:    lcr %r1, %r311; CHECK-NEXT:    sllg %r2, %r2, 0(%r1)12; CHECK-NEXT:    br %r1413  %sub = sub i64 64, %sh14  %shl = shl i64 %in, %sub15  ret i64 %shl16}17 18define i64 @f2(i64 %in, i64 %sh) {19; CHECK-LABEL: f2:20; CHECK:       # %bb.0:21; CHECK-NEXT:    lcr %r1, %r322; CHECK-NEXT:    srag %r2, %r2, 0(%r1)23; CHECK-NEXT:    br %r1424  %sub = sub i64 64, %sh25  %shl = ashr i64 %in, %sub26  ret i64 %shl27}28 29define i64 @f3(i64 %in, i64 %sh) {30; CHECK-LABEL: f3:31; CHECK:       # %bb.0:32; CHECK-NEXT:    lcr %r1, %r333; CHECK-NEXT:    srlg %r2, %r2, 0(%r1)34; CHECK-NEXT:    br %r1435  %sub = sub i64 64, %sh36  %shl = lshr i64 %in, %sub37  ret i64 %shl38}39 40define i64 @f4(i64 %in, i64 %sh) {41; CHECK-LABEL: f4:42; CHECK:       # %bb.0:43; CHECK-NEXT:    lcr %r1, %r344; CHECK-NEXT:    rllg %r2, %r2, 0(%r1)45; CHECK-NEXT:    br %r1446  %shr = lshr i64 %in, %sh47  %sub = sub i64 64, %sh48  %shl = shl i64 %in, %sub49  %or = or i64 %shl, %shr50  ret i64 %or51}52 53define i64 @f5(i64 %in, i64 %sh) {54; CHECK-LABEL: f5:55; CHECK:       # %bb.0:56; CHECK-NEXT:    lcr %r1, %r357; CHECK-NEXT:    sllg %r2, %r2, 0(%r1)58; CHECK-NEXT:    br %r1459  %sub = sub i64 128, %sh60  %shl = shl i64 %in, %sub61  ret i64 %shl62}63 64define i64 @f6(i64 %in, i64 %sh) {65; CHECK-LABEL: f6:66; CHECK:       # %bb.0:67; CHECK-NEXT:    lcr %r1, %r368; CHECK-NEXT:    srag %r2, %r2, 0(%r1)69; CHECK-NEXT:    br %r1470  %sub = sub i64 256, %sh71  %shl = ashr i64 %in, %sub72  ret i64 %shl73}74 75define i64 @f7(i64 %in, i64 %sh) {76; CHECK-LABEL: f7:77; CHECK:       # %bb.0:78; CHECK-NEXT:    lcr %r1, %r379; CHECK-NEXT:    srlg %r2, %r2, 0(%r1)80; CHECK-NEXT:    br %r1481  %sub = sub i64 512, %sh82  %shl = lshr i64 %in, %sub83  ret i64 %shl84}85 86define i64 @f8(i64 %in, i64 %sh) {87; CHECK-LABEL: f8:88; CHECK:       # %bb.0:89; CHECK-NEXT:    lcr %r1, %r390; CHECK-NEXT:    srlg %r0, %r2, 0(%r3)91; CHECK-NEXT:    sllg %r2, %r2, 0(%r1)92; CHECK-NEXT:    ogr %r2, %r093; CHECK-NEXT:    br %r1494  %shr = lshr i64 %in, %sh95  %sub = sub i64 1024, %sh96  %shl = shl i64 %in, %sub97  %or = or i64 %shl, %shr98  ret i64 %or99}100