brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · 14326a9 Raw
281 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve -verify-machineinstrs -o - %s | FileCheck %s3 4define i64 @test_asrl(i64 %value, i32 %shift) {5; CHECK-LABEL: test_asrl:6; CHECK:       @ %bb.0: @ %entry7; CHECK-NEXT:    asrl r0, r1, r28; CHECK-NEXT:    bx lr9entry:10  %0 = lshr i64 %value, 3211  %1 = trunc i64 %0 to i3212  %2 = trunc i64 %value to i3213  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 %shift)14  %4 = extractvalue { i32, i32 } %3, 115  %5 = zext i32 %4 to i6416  %6 = shl i64 %5, 3217  %7 = extractvalue { i32, i32 } %3, 018  %8 = zext i32 %7 to i6419  %9 = or i64 %6, %820  ret i64 %921}22 23declare { i32, i32 } @llvm.arm.mve.asrl(i32, i32, i32)24 25define i64 @test_lsll(i64 %value, i32 %shift) {26; CHECK-LABEL: test_lsll:27; CHECK:       @ %bb.0: @ %entry28; CHECK-NEXT:    lsll r0, r1, r229; CHECK-NEXT:    bx lr30entry:31  %0 = lshr i64 %value, 3232  %1 = trunc i64 %0 to i3233  %2 = trunc i64 %value to i3234  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 %shift)35  %4 = extractvalue { i32, i32 } %3, 136  %5 = zext i32 %4 to i6437  %6 = shl i64 %5, 3238  %7 = extractvalue { i32, i32 } %3, 039  %8 = zext i32 %7 to i6440  %9 = or i64 %6, %841  ret i64 %942}43 44declare { i32, i32 } @llvm.arm.mve.lsll(i32, i32, i32)45 46define i32 @test_sqrshr(i32 %value, i32 %shift) {47; CHECK-LABEL: test_sqrshr:48; CHECK:       @ %bb.0: @ %entry49; CHECK-NEXT:    sqrshr r0, r150; CHECK-NEXT:    bx lr51entry:52  %0 = call i32 @llvm.arm.mve.sqrshr(i32 %value, i32 %shift)53  ret i32 %054}55 56declare i32 @llvm.arm.mve.sqrshr(i32, i32)57 58define i64 @test_sqrshrl(i64 %value, i32 %shift) {59; CHECK-LABEL: test_sqrshrl:60; CHECK:       @ %bb.0: @ %entry61; CHECK-NEXT:    sqrshrl r0, r1, #64, r262; CHECK-NEXT:    bx lr63entry:64  %0 = lshr i64 %value, 3265  %1 = trunc i64 %0 to i3266  %2 = trunc i64 %value to i3267  %3 = call { i32, i32 } @llvm.arm.mve.sqrshrl(i32 %2, i32 %1, i32 %shift, i32 64)68  %4 = extractvalue { i32, i32 } %3, 169  %5 = zext i32 %4 to i6470  %6 = shl i64 %5, 3271  %7 = extractvalue { i32, i32 } %3, 072  %8 = zext i32 %7 to i6473  %9 = or i64 %6, %874  ret i64 %975}76 77declare { i32, i32 } @llvm.arm.mve.sqrshrl(i32, i32, i32, i32)78 79define i64 @test_sqrshrl_sat48(i64 %value, i32 %shift) {80; CHECK-LABEL: test_sqrshrl_sat48:81; CHECK:       @ %bb.0: @ %entry82; CHECK-NEXT:    sqrshrl r0, r1, #48, r283; CHECK-NEXT:    bx lr84entry:85  %0 = lshr i64 %value, 3286  %1 = trunc i64 %0 to i3287  %2 = trunc i64 %value to i3288  %3 = call { i32, i32 } @llvm.arm.mve.sqrshrl(i32 %2, i32 %1, i32 %shift, i32 48)89  %4 = extractvalue { i32, i32 } %3, 190  %5 = zext i32 %4 to i6491  %6 = shl i64 %5, 3292  %7 = extractvalue { i32, i32 } %3, 093  %8 = zext i32 %7 to i6494  %9 = or i64 %6, %895  ret i64 %996}97 98define i32 @test_sqshl(i32 %value) {99; CHECK-LABEL: test_sqshl:100; CHECK:       @ %bb.0: @ %entry101; CHECK-NEXT:    sqshl r0, #2102; CHECK-NEXT:    bx lr103entry:104  %0 = call i32 @llvm.arm.mve.sqshl(i32 %value, i32 2)105  ret i32 %0106}107 108declare i32 @llvm.arm.mve.sqshl(i32, i32)109 110define i64 @test_sqshll(i64 %value) {111; CHECK-LABEL: test_sqshll:112; CHECK:       @ %bb.0: @ %entry113; CHECK-NEXT:    sqshll r0, r1, #17114; CHECK-NEXT:    bx lr115entry:116  %0 = lshr i64 %value, 32117  %1 = trunc i64 %0 to i32118  %2 = trunc i64 %value to i32119  %3 = call { i32, i32 } @llvm.arm.mve.sqshll(i32 %2, i32 %1, i32 17)120  %4 = extractvalue { i32, i32 } %3, 1121  %5 = zext i32 %4 to i64122  %6 = shl i64 %5, 32123  %7 = extractvalue { i32, i32 } %3, 0124  %8 = zext i32 %7 to i64125  %9 = or i64 %6, %8126  ret i64 %9127}128 129declare { i32, i32 } @llvm.arm.mve.sqshll(i32, i32, i32)130 131define i32 @test_srshr(i32 %value) {132; CHECK-LABEL: test_srshr:133; CHECK:       @ %bb.0: @ %entry134; CHECK-NEXT:    srshr r0, #6135; CHECK-NEXT:    bx lr136entry:137  %0 = call i32 @llvm.arm.mve.srshr(i32 %value, i32 6)138  ret i32 %0139}140 141declare i32 @llvm.arm.mve.srshr(i32, i32)142 143define i64 @test_srshrl(i64 %value) {144; CHECK-LABEL: test_srshrl:145; CHECK:       @ %bb.0: @ %entry146; CHECK-NEXT:    srshrl r0, r1, #26147; CHECK-NEXT:    bx lr148entry:149  %0 = lshr i64 %value, 32150  %1 = trunc i64 %0 to i32151  %2 = trunc i64 %value to i32152  %3 = call { i32, i32 } @llvm.arm.mve.srshrl(i32 %2, i32 %1, i32 26)153  %4 = extractvalue { i32, i32 } %3, 1154  %5 = zext i32 %4 to i64155  %6 = shl i64 %5, 32156  %7 = extractvalue { i32, i32 } %3, 0157  %8 = zext i32 %7 to i64158  %9 = or i64 %6, %8159  ret i64 %9160}161 162declare { i32, i32 } @llvm.arm.mve.srshrl(i32, i32, i32)163 164define i32 @test_uqrshl(i32 %value, i32 %shift) {165; CHECK-LABEL: test_uqrshl:166; CHECK:       @ %bb.0: @ %entry167; CHECK-NEXT:    uqrshl r0, r1168; CHECK-NEXT:    bx lr169entry:170  %0 = call i32 @llvm.arm.mve.uqrshl(i32 %value, i32 %shift)171  ret i32 %0172}173 174declare i32 @llvm.arm.mve.uqrshl(i32, i32)175 176define i64 @test_uqrshll(i64 %value, i32 %shift) {177; CHECK-LABEL: test_uqrshll:178; CHECK:       @ %bb.0: @ %entry179; CHECK-NEXT:    uqrshll r0, r1, #64, r2180; CHECK-NEXT:    bx lr181entry:182  %0 = lshr i64 %value, 32183  %1 = trunc i64 %0 to i32184  %2 = trunc i64 %value to i32185  %3 = call { i32, i32 } @llvm.arm.mve.uqrshll(i32 %2, i32 %1, i32 %shift, i32 64)186  %4 = extractvalue { i32, i32 } %3, 1187  %5 = zext i32 %4 to i64188  %6 = shl i64 %5, 32189  %7 = extractvalue { i32, i32 } %3, 0190  %8 = zext i32 %7 to i64191  %9 = or i64 %6, %8192  ret i64 %9193}194 195declare { i32, i32 } @llvm.arm.mve.uqrshll(i32, i32, i32, i32)196 197define i64 @test_uqrshll_sat48(i64 %value, i32 %shift) {198; CHECK-LABEL: test_uqrshll_sat48:199; CHECK:       @ %bb.0: @ %entry200; CHECK-NEXT:    uqrshll r0, r1, #48, r2201; CHECK-NEXT:    bx lr202entry:203  %0 = lshr i64 %value, 32204  %1 = trunc i64 %0 to i32205  %2 = trunc i64 %value to i32206  %3 = call { i32, i32 } @llvm.arm.mve.uqrshll(i32 %2, i32 %1, i32 %shift, i32 48)207  %4 = extractvalue { i32, i32 } %3, 1208  %5 = zext i32 %4 to i64209  %6 = shl i64 %5, 32210  %7 = extractvalue { i32, i32 } %3, 0211  %8 = zext i32 %7 to i64212  %9 = or i64 %6, %8213  ret i64 %9214}215 216define i32 @test_uqshl(i32 %value) {217; CHECK-LABEL: test_uqshl:218; CHECK:       @ %bb.0: @ %entry219; CHECK-NEXT:    uqshl r0, #21220; CHECK-NEXT:    bx lr221entry:222  %0 = call i32 @llvm.arm.mve.uqshl(i32 %value, i32 21)223  ret i32 %0224}225 226declare i32 @llvm.arm.mve.uqshl(i32, i32)227 228define i64 @test_uqshll(i64 %value) {229; CHECK-LABEL: test_uqshll:230; CHECK:       @ %bb.0: @ %entry231; CHECK-NEXT:    uqshll r0, r1, #16232; CHECK-NEXT:    bx lr233entry:234  %0 = lshr i64 %value, 32235  %1 = trunc i64 %0 to i32236  %2 = trunc i64 %value to i32237  %3 = call { i32, i32 } @llvm.arm.mve.uqshll(i32 %2, i32 %1, i32 16)238  %4 = extractvalue { i32, i32 } %3, 1239  %5 = zext i32 %4 to i64240  %6 = shl i64 %5, 32241  %7 = extractvalue { i32, i32 } %3, 0242  %8 = zext i32 %7 to i64243  %9 = or i64 %6, %8244  ret i64 %9245}246 247declare { i32, i32 } @llvm.arm.mve.uqshll(i32, i32, i32)248 249define i32 @test_urshr(i32 %value) {250; CHECK-LABEL: test_urshr:251; CHECK:       @ %bb.0: @ %entry252; CHECK-NEXT:    urshr r0, #22253; CHECK-NEXT:    bx lr254entry:255  %0 = call i32 @llvm.arm.mve.urshr(i32 %value, i32 22)256  ret i32 %0257}258 259declare i32 @llvm.arm.mve.urshr(i32, i32)260 261define i64 @test_urshrl(i64 %value) {262; CHECK-LABEL: test_urshrl:263; CHECK:       @ %bb.0: @ %entry264; CHECK-NEXT:    urshrl r0, r1, #6265; CHECK-NEXT:    bx lr266entry:267  %0 = lshr i64 %value, 32268  %1 = trunc i64 %0 to i32269  %2 = trunc i64 %value to i32270  %3 = call { i32, i32 } @llvm.arm.mve.urshrl(i32 %2, i32 %1, i32 6)271  %4 = extractvalue { i32, i32 } %3, 1272  %5 = zext i32 %4 to i64273  %6 = shl i64 %5, 32274  %7 = extractvalue { i32, i32 } %3, 0275  %8 = zext i32 %7 to i64276  %9 = or i64 %6, %8277  ret i64 %9278}279 280declare { i32, i32 } @llvm.arm.mve.urshrl(i32, i32, i32)281