brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · 8464ed3 Raw
165 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s3 4declare i8 @llvm.fshr.i8(i8, i8, i8)5declare i16 @llvm.fshr.i16(i16, i16, i16)6declare i32 @llvm.fshr.i32(i32, i32, i32)7declare i64 @llvm.fshr.i64(i64, i64, i64)8declare i128 @llvm.fshr.i128(i128, i128, i128)9 10;11; Variable Funnel Shift12;13 14define i8 @var_shift_i8(i8 %x, i8 %y, i8 %z) {15; CHECK-LABEL: var_shift_i8:16; CHECK:       # %bb.0:17; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d18; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d19; CHECK-NEXT:    sll %r2, 820; CHECK-NEXT:    rosbg %r2, %r3, 56, 63, 021; CHECK-NEXT:    nill %r4, 722; CHECK-NEXT:    srl %r2, 0(%r4)23; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d24; CHECK-NEXT:    br %r1425  %tmp = tail call i8 @llvm.fshr.i8(i8 %x, i8 %y, i8 %z)26  ret i8 %tmp27}28 29define i16 @var_shift_i16(i16 %x, i16 %y, i16 %z) {30; CHECK-LABEL: var_shift_i16:31; CHECK:       # %bb.0:32; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d33; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d34; CHECK-NEXT:    sll %r2, 1635; CHECK-NEXT:    rosbg %r2, %r3, 48, 63, 036; CHECK-NEXT:    nill %r4, 1537; CHECK-NEXT:    srl %r2, 0(%r4)38; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d39; CHECK-NEXT:    br %r1440  %tmp = tail call i16 @llvm.fshr.i16(i16 %x, i16 %y, i16 %z)41  ret i16 %tmp42}43 44define i32 @var_shift_i32(i32 %x, i32 %y, i32 %z) {45; CHECK-LABEL: var_shift_i32:46; CHECK:       # %bb.0:47; CHECK-NEXT:    lr %r1, %r448; CHECK-NEXT:    nill %r1, 3149; CHECK-NEXT:    srl %r3, 0(%r1)50; CHECK-NEXT:    sll %r2, 151; CHECK-NEXT:    xilf %r4, 429496729552; CHECK-NEXT:    nill %r4, 3153; CHECK-NEXT:    sll %r2, 0(%r4)54; CHECK-NEXT:    or %r2, %r355; CHECK-NEXT:    br %r1456  %tmp = tail call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 %z)57  ret i32 %tmp58}59 60define i64 @var_shift_i64(i64 %x, i64 %y, i64 %z) {61; CHECK-LABEL: var_shift_i64:62; CHECK:       # %bb.0:63; CHECK-NEXT:    srlg %r0, %r3, 0(%r4)64; CHECK-NEXT:    sllg %r1, %r2, 165; CHECK-NEXT:    xilf %r4, 429496729566; CHECK-NEXT:    sllg %r2, %r1, 0(%r4)67; CHECK-NEXT:    ogr %r2, %r068; CHECK-NEXT:    br %r1469  %tmp = tail call i64 @llvm.fshr.i64(i64 %x, i64 %y, i64 %z)70  ret i64 %tmp71}72 73define i128 @var_shift_i128(i128 %x, i128 %y, i128 %z) {74; CHECK-LABEL: var_shift_i128:75; CHECK:       # %bb.0:76; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)77; CHECK-NEXT:    .cfi_offset %r14, -4878; CHECK-NEXT:    .cfi_offset %r15, -4079; CHECK-NEXT:    lg %r1, 8(%r5)80; CHECK-NEXT:    lg %r5, 8(%r3)81; CHECK-NEXT:    lg %r0, 0(%r4)82; CHECK-NEXT:    tmll %r1, 6483; CHECK-NEXT:    jne .LBB4_284; CHECK-NEXT:  # %bb.1:85; CHECK-NEXT:    lg %r4, 8(%r4)86; CHECK-NEXT:    srlg %r14, %r0, 0(%r1)87; CHECK-NEXT:    jne .LBB4_388; CHECK-NEXT:    j .LBB4_489; CHECK-NEXT:  .LBB4_2:90; CHECK-NEXT:    lgr %r4, %r091; CHECK-NEXT:    lgr %r0, %r592; CHECK-NEXT:    srlg %r14, %r0, 0(%r1)93; CHECK-NEXT:    je .LBB4_494; CHECK-NEXT:  .LBB4_3:95; CHECK-NEXT:    lg %r5, 0(%r3)96; CHECK-NEXT:  .LBB4_4:97; CHECK-NEXT:    sllg %r3, %r5, 198; CHECK-NEXT:    srlg %r4, %r4, 0(%r1)99; CHECK-NEXT:    xilf %r1, 4294967295100; CHECK-NEXT:    sllg %r3, %r3, 0(%r1)101; CHECK-NEXT:    ogr %r3, %r14102; CHECK-NEXT:    sllg %r0, %r0, 1103; CHECK-NEXT:    sllg %r0, %r0, 0(%r1)104; CHECK-NEXT:    ogr %r0, %r4105; CHECK-NEXT:    stg %r0, 8(%r2)106; CHECK-NEXT:    stg %r3, 0(%r2)107; CHECK-NEXT:    lmg %r14, %r15, 112(%r15)108; CHECK-NEXT:    br %r14109  %tmp = tail call i128 @llvm.fshr.i128(i128 %x, i128 %y, i128 %z)110  ret i128 %tmp111}112 113;114; Const Funnel Shift115;116 117define i8 @const_shift_i8(i8 %x, i8 %y) {118; CHECK-LABEL: const_shift_i8:119; CHECK:       # %bb.0:120; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d121; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d122; CHECK-NEXT:    sll %r2, 1123; CHECK-NEXT:    rosbg %r2, %r3, 63, 63, 57124; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d125; CHECK-NEXT:    br %r14126  %tmp = tail call i8 @llvm.fshr.i8(i8 %x, i8 %y, i8 7)127  ret i8 %tmp128}129 130define i16 @const_shift_i16(i16 %x, i16 %y) {131; CHECK-LABEL: const_shift_i16:132; CHECK:       # %bb.0:133; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d134; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d135; CHECK-NEXT:    sll %r2, 9136; CHECK-NEXT:    rosbg %r2, %r3, 55, 63, 57137; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d138; CHECK-NEXT:    br %r14139  %tmp = tail call i16 @llvm.fshr.i16(i16 %x, i16 %y, i16 7)140  ret i16 %tmp141}142 143define i32 @const_shift_i32(i32 %x, i32 %y) {144; CHECK-LABEL: const_shift_i32:145; CHECK:       # %bb.0:146; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d147; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d148; CHECK-NEXT:    sll %r2, 25149; CHECK-NEXT:    rosbg %r2, %r3, 39, 63, 57150; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d151; CHECK-NEXT:    br %r14152  %tmp = tail call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 7)153  ret i32 %tmp154}155 156define i64 @const_shift_i64(i64 %x, i64 %y) {157; CHECK-LABEL: const_shift_i64:158; CHECK:       # %bb.0:159; CHECK-NEXT:    sllg %r2, %r2, 57160; CHECK-NEXT:    rosbg %r2, %r3, 7, 63, 57161; CHECK-NEXT:    br %r14162  %tmp = tail call i64 @llvm.fshr.i64(i64 %x, i64 %y, i64 7)163  ret i64 %tmp164}165