brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 7519df8 Raw
167 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.fshl.i8(i8, i8, i8)5declare i16 @llvm.fshl.i16(i16, i16, i16)6declare i32 @llvm.fshl.i32(i32, i32, i32)7declare i64 @llvm.fshl.i64(i64, i64, i64)8declare i128 @llvm.fshl.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:    sll %r2, 0(%r4)23; CHECK-NEXT:    srl %r2, 824; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d25; CHECK-NEXT:    br %r1426  %tmp = tail call i8 @llvm.fshl.i8(i8 %x, i8 %y, i8 %z)27  ret i8 %tmp28}29 30define i16 @var_shift_i16(i16 %x, i16 %y, i16 %z) {31; CHECK-LABEL: var_shift_i16:32; CHECK:       # %bb.0:33; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d34; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d35; CHECK-NEXT:    sll %r2, 1636; CHECK-NEXT:    rosbg %r2, %r3, 48, 63, 037; CHECK-NEXT:    nill %r4, 1538; CHECK-NEXT:    sll %r2, 0(%r4)39; CHECK-NEXT:    srl %r2, 1640; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d41; CHECK-NEXT:    br %r1442  %tmp = tail call i16 @llvm.fshl.i16(i16 %x, i16 %y, i16 %z)43  ret i16 %tmp44}45 46define i32 @var_shift_i32(i32 %x, i32 %y, i32 %z) {47; CHECK-LABEL: var_shift_i32:48; CHECK:       # %bb.0:49; CHECK-NEXT:    lr %r1, %r450; CHECK-NEXT:    nill %r1, 3151; CHECK-NEXT:    sll %r2, 0(%r1)52; CHECK-NEXT:    srl %r3, 153; CHECK-NEXT:    xilf %r4, 429496729554; CHECK-NEXT:    nill %r4, 3155; CHECK-NEXT:    srl %r3, 0(%r4)56; CHECK-NEXT:    or %r2, %r357; CHECK-NEXT:    br %r1458  %tmp = tail call i32 @llvm.fshl.i32(i32 %x, i32 %y, i32 %z)59  ret i32 %tmp60}61 62define i64 @var_shift_i64(i64 %x, i64 %y, i64 %z) {63; CHECK-LABEL: var_shift_i64:64; CHECK:       # %bb.0:65; CHECK-NEXT:    sllg %r0, %r2, 0(%r4)66; CHECK-NEXT:    srlg %r1, %r3, 167; CHECK-NEXT:    xilf %r4, 429496729568; CHECK-NEXT:    srlg %r2, %r1, 0(%r4)69; CHECK-NEXT:    ogr %r2, %r070; CHECK-NEXT:    br %r1471  %tmp = tail call i64 @llvm.fshl.i64(i64 %x, i64 %y, i64 %z)72  ret i64 %tmp73}74 75define i128 @var_shift_i128(i128 %x, i128 %y, i128 %z) {76; CHECK-LABEL: var_shift_i128:77; CHECK:       # %bb.0:78; CHECK-NEXT:    stmg %r13, %r15, 104(%r15)79; CHECK-NEXT:    .cfi_offset %r13, -5680; CHECK-NEXT:    .cfi_offset %r14, -4881; CHECK-NEXT:    .cfi_offset %r15, -4082; CHECK-NEXT:    lg %r1, 8(%r5)83; CHECK-NEXT:    lg %r0, 0(%r4)84; CHECK-NEXT:    lg %r14, 8(%r3)85; CHECK-NEXT:    tmll %r1, 6486; CHECK-NEXT:    lgr %r13, %r087; CHECK-NEXT:    jne .LBB4_288; CHECK-NEXT:  # %bb.1:89; CHECK-NEXT:    lgr %r13, %r1490; CHECK-NEXT:  .LBB4_2:91; CHECK-NEXT:    sllg %r5, %r13, 0(%r1)92; CHECK-NEXT:    je .LBB4_493; CHECK-NEXT:  # %bb.3:94; CHECK-NEXT:    lg %r0, 8(%r4)95; CHECK-NEXT:    j .LBB4_596; CHECK-NEXT:  .LBB4_4:97; CHECK-NEXT:    lg %r14, 0(%r3)98; CHECK-NEXT:  .LBB4_5:99; CHECK-NEXT:    sllg %r3, %r14, 0(%r1)100; CHECK-NEXT:    srlg %r4, %r13, 1101; CHECK-NEXT:    xilf %r1, 4294967295102; CHECK-NEXT:    srlg %r4, %r4, 0(%r1)103; CHECK-NEXT:    ogr %r4, %r3104; CHECK-NEXT:    srlg %r0, %r0, 1105; CHECK-NEXT:    srlg %r0, %r0, 0(%r1)106; CHECK-NEXT:    ogr %r5, %r0107; CHECK-NEXT:    stg %r5, 8(%r2)108; CHECK-NEXT:    stg %r4, 0(%r2)109; CHECK-NEXT:    lmg %r13, %r15, 104(%r15)110; CHECK-NEXT:    br %r14111  %tmp = tail call i128 @llvm.fshl.i128(i128 %x, i128 %y, i128 %z)112  ret i128 %tmp113}114 115;116; Const Funnel Shift117;118 119define i8 @const_shift_i8(i8 %x, i8 %y) {120; CHECK-LABEL: const_shift_i8:121; CHECK:       # %bb.0:122; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d123; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d124; CHECK-NEXT:    sll %r2, 7125; CHECK-NEXT:    rosbg %r2, %r3, 57, 63, 63126; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d127; CHECK-NEXT:    br %r14128  %tmp = tail call i8 @llvm.fshl.i8(i8 %x, i8 %y, i8 7)129  ret i8 %tmp130}131 132define i16 @const_shift_i16(i16 %x, i16 %y) {133; CHECK-LABEL: const_shift_i16:134; CHECK:       # %bb.0:135; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d136; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d137; CHECK-NEXT:    sll %r2, 7138; CHECK-NEXT:    rosbg %r2, %r3, 57, 63, 55139; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d140; CHECK-NEXT:    br %r14141  %tmp = tail call i16 @llvm.fshl.i16(i16 %x, i16 %y, i16 7)142  ret i16 %tmp143}144 145define i32 @const_shift_i32(i32 %x, i32 %y) {146; CHECK-LABEL: const_shift_i32:147; CHECK:       # %bb.0:148; CHECK-NEXT:    # kill: def $r3l killed $r3l def $r3d149; CHECK-NEXT:    # kill: def $r2l killed $r2l def $r2d150; CHECK-NEXT:    sll %r2, 7151; CHECK-NEXT:    rosbg %r2, %r3, 57, 63, 39152; CHECK-NEXT:    # kill: def $r2l killed $r2l killed $r2d153; CHECK-NEXT:    br %r14154  %tmp = tail call i32 @llvm.fshl.i32(i32 %x, i32 %y, i32 7)155  ret i32 %tmp156}157 158define i64 @const_shift_i64(i64 %x, i64 %y) {159; CHECK-LABEL: const_shift_i64:160; CHECK:       # %bb.0:161; CHECK-NEXT:    sllg %r2, %r2, 7162; CHECK-NEXT:    rosbg %r2, %r3, 57, 63, 7163; CHECK-NEXT:    br %r14164  %tmp = tail call i64 @llvm.fshl.i64(i64 %x, i64 %y, i64 7)165  ret i64 %tmp166}167