brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.1 KiB · 1fbf4e6 Raw
397 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s3 4declare {i32, i32} @llvm.arm.mve.asrl(i32, i32, i32)5declare {i32, i32} @llvm.arm.mve.lsll(i32, i32, i32)6 7define i64 @asrl_0(i64 %X) {8; CHECK-LABEL: asrl_0:9; CHECK:       @ %bb.0: @ %entry10; CHECK-NEXT:    bx lr11entry:12  %0 = lshr i64 %X, 3213  %1 = trunc i64 %0 to i3214  %2 = trunc i64 %X to i3215  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 0)16  %4 = extractvalue { i32, i32 } %3, 117  %5 = zext i32 %4 to i6418  %6 = shl nuw i64 %5, 3219  %7 = extractvalue { i32, i32 } %3, 020  %8 = zext i32 %7 to i6421  %9 = or i64 %6, %822  ret i64 %923}24 25define i64 @asrl_23(i64 %X) {26; CHECK-LABEL: asrl_23:27; CHECK:       @ %bb.0: @ %entry28; CHECK-NEXT:    asrl r0, r1, #2329; CHECK-NEXT:    bx lr30entry:31  %0 = lshr i64 %X, 3232  %1 = trunc i64 %0 to i3233  %2 = trunc i64 %X to i3234  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 23)35  %4 = extractvalue { i32, i32 } %3, 136  %5 = zext i32 %4 to i6437  %6 = shl nuw i64 %5, 3238  %7 = extractvalue { i32, i32 } %3, 039  %8 = zext i32 %7 to i6440  %9 = or i64 %6, %841  ret i64 %942}43 44define i64 @asrl_32(i64 %X) {45; CHECK-LABEL: asrl_32:46; CHECK:       @ %bb.0: @ %entry47; CHECK-NEXT:    asrl r0, r1, #3248; CHECK-NEXT:    bx lr49entry:50  %0 = lshr i64 %X, 3251  %1 = trunc i64 %0 to i3252  %2 = trunc i64 %X to i3253  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 32)54  %4 = extractvalue { i32, i32 } %3, 155  %5 = zext i32 %4 to i6456  %6 = shl nuw i64 %5, 3257  %7 = extractvalue { i32, i32 } %3, 058  %8 = zext i32 %7 to i6459  %9 = or i64 %6, %860  ret i64 %961}62 63define i64 @asrl_33(i64 %X) {64; CHECK-LABEL: asrl_33:65; CHECK:       @ %bb.0: @ %entry66; CHECK-NEXT:    movs r2, #3367; CHECK-NEXT:    asrl r0, r1, r268; CHECK-NEXT:    bx lr69entry:70  %0 = lshr i64 %X, 3271  %1 = trunc i64 %0 to i3272  %2 = trunc i64 %X to i3273  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 33)74  %4 = extractvalue { i32, i32 } %3, 175  %5 = zext i32 %4 to i6476  %6 = shl nuw i64 %5, 3277  %7 = extractvalue { i32, i32 } %3, 078  %8 = zext i32 %7 to i6479  %9 = or i64 %6, %880  ret i64 %981}82 83define i64 @asrl_63(i64 %X) {84; CHECK-LABEL: asrl_63:85; CHECK:       @ %bb.0: @ %entry86; CHECK-NEXT:    movs r2, #6387; CHECK-NEXT:    asrl r0, r1, r288; CHECK-NEXT:    bx lr89entry:90  %0 = lshr i64 %X, 3291  %1 = trunc i64 %0 to i3292  %2 = trunc i64 %X to i3293  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 63)94  %4 = extractvalue { i32, i32 } %3, 195  %5 = zext i32 %4 to i6496  %6 = shl nuw i64 %5, 3297  %7 = extractvalue { i32, i32 } %3, 098  %8 = zext i32 %7 to i6499  %9 = or i64 %6, %8100  ret i64 %9101}102 103define i64 @asrl_64(i64 %X) {104; CHECK-LABEL: asrl_64:105; CHECK:       @ %bb.0: @ %entry106; CHECK-NEXT:    movs r2, #64107; CHECK-NEXT:    asrl r0, r1, r2108; CHECK-NEXT:    bx lr109entry:110  %0 = lshr i64 %X, 32111  %1 = trunc i64 %0 to i32112  %2 = trunc i64 %X to i32113  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 64)114  %4 = extractvalue { i32, i32 } %3, 1115  %5 = zext i32 %4 to i64116  %6 = shl nuw i64 %5, 32117  %7 = extractvalue { i32, i32 } %3, 0118  %8 = zext i32 %7 to i64119  %9 = or i64 %6, %8120  ret i64 %9121}122 123define i64 @asrl_m2(i64 %X) {124; CHECK-LABEL: asrl_m2:125; CHECK:       @ %bb.0: @ %entry126; CHECK-NEXT:    lsll r0, r1, #2127; CHECK-NEXT:    bx lr128entry:129  %0 = lshr i64 %X, 32130  %1 = trunc i64 %0 to i32131  %2 = trunc i64 %X to i32132  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 -2)133  %4 = extractvalue { i32, i32 } %3, 1134  %5 = zext i32 %4 to i64135  %6 = shl nuw i64 %5, 32136  %7 = extractvalue { i32, i32 } %3, 0137  %8 = zext i32 %7 to i64138  %9 = or i64 %6, %8139  ret i64 %9140}141 142define i64 @asrl_m32(i64 %X) {143; CHECK-LABEL: asrl_m32:144; CHECK:       @ %bb.0: @ %entry145; CHECK-NEXT:    lsll r0, r1, #32146; CHECK-NEXT:    bx lr147entry:148  %0 = lshr i64 %X, 32149  %1 = trunc i64 %0 to i32150  %2 = trunc i64 %X to i32151  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 -32)152  %4 = extractvalue { i32, i32 } %3, 1153  %5 = zext i32 %4 to i64154  %6 = shl nuw i64 %5, 32155  %7 = extractvalue { i32, i32 } %3, 0156  %8 = zext i32 %7 to i64157  %9 = or i64 %6, %8158  ret i64 %9159}160 161define i64 @asrl_m33(i64 %X) {162; CHECK-LABEL: asrl_m33:163; CHECK:       @ %bb.0: @ %entry164; CHECK-NEXT:    mvn r2, #32165; CHECK-NEXT:    asrl r0, r1, r2166; CHECK-NEXT:    bx lr167entry:168  %0 = lshr i64 %X, 32169  %1 = trunc i64 %0 to i32170  %2 = trunc i64 %X to i32171  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 -33)172  %4 = extractvalue { i32, i32 } %3, 1173  %5 = zext i32 %4 to i64174  %6 = shl nuw i64 %5, 32175  %7 = extractvalue { i32, i32 } %3, 0176  %8 = zext i32 %7 to i64177  %9 = or i64 %6, %8178  ret i64 %9179}180 181define i64 @asrl_m64(i64 %X) {182; CHECK-LABEL: asrl_m64:183; CHECK:       @ %bb.0: @ %entry184; CHECK-NEXT:    mvn r2, #63185; CHECK-NEXT:    asrl r0, r1, r2186; CHECK-NEXT:    bx lr187entry:188  %0 = lshr i64 %X, 32189  %1 = trunc i64 %0 to i32190  %2 = trunc i64 %X to i32191  %3 = call { i32, i32 } @llvm.arm.mve.asrl(i32 %2, i32 %1, i32 -64)192  %4 = extractvalue { i32, i32 } %3, 1193  %5 = zext i32 %4 to i64194  %6 = shl nuw i64 %5, 32195  %7 = extractvalue { i32, i32 } %3, 0196  %8 = zext i32 %7 to i64197  %9 = or i64 %6, %8198  ret i64 %9199}200 201 202 203 204define i64 @lsll_0(i64 %X) {205; CHECK-LABEL: lsll_0:206; CHECK:       @ %bb.0: @ %entry207; CHECK-NEXT:    bx lr208entry:209  %0 = lshr i64 %X, 32210  %1 = trunc i64 %0 to i32211  %2 = trunc i64 %X to i32212  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 0)213  %4 = extractvalue { i32, i32 } %3, 1214  %5 = zext i32 %4 to i64215  %6 = shl nuw i64 %5, 32216  %7 = extractvalue { i32, i32 } %3, 0217  %8 = zext i32 %7 to i64218  %9 = or i64 %6, %8219  ret i64 %9220}221 222define i64 @lsll_23(i64 %X) {223; CHECK-LABEL: lsll_23:224; CHECK:       @ %bb.0: @ %entry225; CHECK-NEXT:    lsll r0, r1, #23226; CHECK-NEXT:    bx lr227entry:228  %0 = lshr i64 %X, 32229  %1 = trunc i64 %0 to i32230  %2 = trunc i64 %X to i32231  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 23)232  %4 = extractvalue { i32, i32 } %3, 1233  %5 = zext i32 %4 to i64234  %6 = shl nuw i64 %5, 32235  %7 = extractvalue { i32, i32 } %3, 0236  %8 = zext i32 %7 to i64237  %9 = or i64 %6, %8238  ret i64 %9239}240 241define i64 @lsll_32(i64 %X) {242; CHECK-LABEL: lsll_32:243; CHECK:       @ %bb.0: @ %entry244; CHECK-NEXT:    lsll r0, r1, #32245; CHECK-NEXT:    bx lr246entry:247  %0 = lshr i64 %X, 32248  %1 = trunc i64 %0 to i32249  %2 = trunc i64 %X to i32250  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 32)251  %4 = extractvalue { i32, i32 } %3, 1252  %5 = zext i32 %4 to i64253  %6 = shl nuw i64 %5, 32254  %7 = extractvalue { i32, i32 } %3, 0255  %8 = zext i32 %7 to i64256  %9 = or i64 %6, %8257  ret i64 %9258}259 260define i64 @lsll_33(i64 %X) {261; CHECK-LABEL: lsll_33:262; CHECK:       @ %bb.0: @ %entry263; CHECK-NEXT:    movs r2, #33264; CHECK-NEXT:    lsll r0, r1, r2265; CHECK-NEXT:    bx lr266entry:267  %0 = lshr i64 %X, 32268  %1 = trunc i64 %0 to i32269  %2 = trunc i64 %X to i32270  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 33)271  %4 = extractvalue { i32, i32 } %3, 1272  %5 = zext i32 %4 to i64273  %6 = shl nuw i64 %5, 32274  %7 = extractvalue { i32, i32 } %3, 0275  %8 = zext i32 %7 to i64276  %9 = or i64 %6, %8277  ret i64 %9278}279 280define i64 @lsll_63(i64 %X) {281; CHECK-LABEL: lsll_63:282; CHECK:       @ %bb.0: @ %entry283; CHECK-NEXT:    movs r2, #63284; CHECK-NEXT:    lsll r0, r1, r2285; CHECK-NEXT:    bx lr286entry:287  %0 = lshr i64 %X, 32288  %1 = trunc i64 %0 to i32289  %2 = trunc i64 %X to i32290  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 63)291  %4 = extractvalue { i32, i32 } %3, 1292  %5 = zext i32 %4 to i64293  %6 = shl nuw i64 %5, 32294  %7 = extractvalue { i32, i32 } %3, 0295  %8 = zext i32 %7 to i64296  %9 = or i64 %6, %8297  ret i64 %9298}299 300define i64 @lsll_64(i64 %X) {301; CHECK-LABEL: lsll_64:302; CHECK:       @ %bb.0: @ %entry303; CHECK-NEXT:    movs r2, #64304; CHECK-NEXT:    lsll r0, r1, r2305; CHECK-NEXT:    bx lr306entry:307  %0 = lshr i64 %X, 32308  %1 = trunc i64 %0 to i32309  %2 = trunc i64 %X to i32310  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 64)311  %4 = extractvalue { i32, i32 } %3, 1312  %5 = zext i32 %4 to i64313  %6 = shl nuw i64 %5, 32314  %7 = extractvalue { i32, i32 } %3, 0315  %8 = zext i32 %7 to i64316  %9 = or i64 %6, %8317  ret i64 %9318}319 320define i64 @lsll_m2(i64 %X) {321; CHECK-LABEL: lsll_m2:322; CHECK:       @ %bb.0: @ %entry323; CHECK-NEXT:    lsrl r0, r1, #2324; CHECK-NEXT:    bx lr325entry:326  %0 = lshr i64 %X, 32327  %1 = trunc i64 %0 to i32328  %2 = trunc i64 %X to i32329  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 -2)330  %4 = extractvalue { i32, i32 } %3, 1331  %5 = zext i32 %4 to i64332  %6 = shl nuw i64 %5, 32333  %7 = extractvalue { i32, i32 } %3, 0334  %8 = zext i32 %7 to i64335  %9 = or i64 %6, %8336  ret i64 %9337}338 339define i64 @lsll_m32(i64 %X) {340; CHECK-LABEL: lsll_m32:341; CHECK:       @ %bb.0: @ %entry342; CHECK-NEXT:    lsrl r0, r1, #32343; CHECK-NEXT:    bx lr344entry:345  %0 = lshr i64 %X, 32346  %1 = trunc i64 %0 to i32347  %2 = trunc i64 %X to i32348  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 -32)349  %4 = extractvalue { i32, i32 } %3, 1350  %5 = zext i32 %4 to i64351  %6 = shl nuw i64 %5, 32352  %7 = extractvalue { i32, i32 } %3, 0353  %8 = zext i32 %7 to i64354  %9 = or i64 %6, %8355  ret i64 %9356}357 358define i64 @lsll_m33(i64 %X) {359; CHECK-LABEL: lsll_m33:360; CHECK:       @ %bb.0: @ %entry361; CHECK-NEXT:    mvn r2, #32362; CHECK-NEXT:    lsll r0, r1, r2363; CHECK-NEXT:    bx lr364entry:365  %0 = lshr i64 %X, 32366  %1 = trunc i64 %0 to i32367  %2 = trunc i64 %X to i32368  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 -33)369  %4 = extractvalue { i32, i32 } %3, 1370  %5 = zext i32 %4 to i64371  %6 = shl nuw i64 %5, 32372  %7 = extractvalue { i32, i32 } %3, 0373  %8 = zext i32 %7 to i64374  %9 = or i64 %6, %8375  ret i64 %9376}377 378define i64 @lsll_m64(i64 %X) {379; CHECK-LABEL: lsll_m64:380; CHECK:       @ %bb.0: @ %entry381; CHECK-NEXT:    mvn r2, #63382; CHECK-NEXT:    lsll r0, r1, r2383; CHECK-NEXT:    bx lr384entry:385  %0 = lshr i64 %X, 32386  %1 = trunc i64 %0 to i32387  %2 = trunc i64 %X to i32388  %3 = call { i32, i32 } @llvm.arm.mve.lsll(i32 %2, i32 %1, i32 -64)389  %4 = extractvalue { i32, i32 } %3, 1390  %5 = zext i32 %4 to i64391  %6 = shl nuw i64 %5, 32392  %7 = extractvalue { i32, i32 } %3, 0393  %8 = zext i32 %7 to i64394  %9 = or i64 %6, %8395  ret i64 %9396}397