brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.8 KiB · 4e1ff4a Raw
566 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -sve-use-scalar-inc-vl=true < %s | FileCheck %s -check-prefix=USE_SCALAR_INC4; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s -check-prefix=USE_SCALAR_INC5; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -force-streaming < %s | FileCheck %s -check-prefix=USE_SCALAR_INC6; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 -sve-use-scalar-inc-vl=false < %s | FileCheck %s7; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -sve-use-scalar-inc-vl=false -force-streaming < %s | FileCheck %s8 9;10; CNTB11;12 13define i64 @cntb() {14; CHECK-LABEL: cntb:15; CHECK:       // %bb.0:16; CHECK-NEXT:    cntb x0, vl217; CHECK-NEXT:    ret18;19; USE_SCALAR_INC-LABEL: cntb:20; USE_SCALAR_INC:       // %bb.0:21; USE_SCALAR_INC-NEXT:    cntb x0, vl222; USE_SCALAR_INC-NEXT:    ret23  %out = call i64 @llvm.aarch64.sve.cntb(i32 2)24  ret i64 %out25}26 27define i64 @cntb_mul3() {28; CHECK-LABEL: cntb_mul3:29; CHECK:       // %bb.0:30; CHECK-NEXT:    cntb x0, vl6, mul #331; CHECK-NEXT:    ret32;33; USE_SCALAR_INC-LABEL: cntb_mul3:34; USE_SCALAR_INC:       // %bb.0:35; USE_SCALAR_INC-NEXT:    cntb x0, vl6, mul #336; USE_SCALAR_INC-NEXT:    ret37  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 6)38  %out = mul i64 %cnt, 339  ret i64 %out40}41 42define i64 @cntb_mul4() {43; CHECK-LABEL: cntb_mul4:44; CHECK:       // %bb.0:45; CHECK-NEXT:    cntb x0, vl8, mul #446; CHECK-NEXT:    ret47;48; USE_SCALAR_INC-LABEL: cntb_mul4:49; USE_SCALAR_INC:       // %bb.0:50; USE_SCALAR_INC-NEXT:    cntb x0, vl8, mul #451; USE_SCALAR_INC-NEXT:    ret52  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 8)53  %out = mul i64 %cnt, 454  ret i64 %out55}56 57;58; CNTH59;60 61define i64 @cnth() {62; CHECK-LABEL: cnth:63; CHECK:       // %bb.0:64; CHECK-NEXT:    cnth x0, vl365; CHECK-NEXT:    ret66;67; USE_SCALAR_INC-LABEL: cnth:68; USE_SCALAR_INC:       // %bb.0:69; USE_SCALAR_INC-NEXT:    cnth x0, vl370; USE_SCALAR_INC-NEXT:    ret71  %out = call i64 @llvm.aarch64.sve.cnth(i32 3)72  ret i64 %out73}74 75define i64 @cnth_mul5() {76; CHECK-LABEL: cnth_mul5:77; CHECK:       // %bb.0:78; CHECK-NEXT:    cnth x0, vl7, mul #579; CHECK-NEXT:    ret80;81; USE_SCALAR_INC-LABEL: cnth_mul5:82; USE_SCALAR_INC:       // %bb.0:83; USE_SCALAR_INC-NEXT:    cnth x0, vl7, mul #584; USE_SCALAR_INC-NEXT:    ret85  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 7)86  %out = mul i64 %cnt, 587  ret i64 %out88}89 90define i64 @cnth_mul8() {91; CHECK-LABEL: cnth_mul8:92; CHECK:       // %bb.0:93; CHECK-NEXT:    cnth x0, vl5, mul #894; CHECK-NEXT:    ret95;96; USE_SCALAR_INC-LABEL: cnth_mul8:97; USE_SCALAR_INC:       // %bb.0:98; USE_SCALAR_INC-NEXT:    cnth x0, vl5, mul #899; USE_SCALAR_INC-NEXT:    ret100  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 5)101  %out = mul i64 %cnt, 8102  ret i64 %out103}104 105;106; CNTW107;108 109define i64 @cntw() {110; CHECK-LABEL: cntw:111; CHECK:       // %bb.0:112; CHECK-NEXT:    cntw x0, vl4113; CHECK-NEXT:    ret114;115; USE_SCALAR_INC-LABEL: cntw:116; USE_SCALAR_INC:       // %bb.0:117; USE_SCALAR_INC-NEXT:    cntw x0, vl4118; USE_SCALAR_INC-NEXT:    ret119  %out = call i64 @llvm.aarch64.sve.cntw(i32 4)120  ret i64 %out121}122 123define i64 @cntw_mul11() {124; CHECK-LABEL: cntw_mul11:125; CHECK:       // %bb.0:126; CHECK-NEXT:    cntw x0, vl8, mul #11127; CHECK-NEXT:    ret128;129; USE_SCALAR_INC-LABEL: cntw_mul11:130; USE_SCALAR_INC:       // %bb.0:131; USE_SCALAR_INC-NEXT:    cntw x0, vl8, mul #11132; USE_SCALAR_INC-NEXT:    ret133  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 8)134  %out = mul i64 %cnt, 11135  ret i64 %out136}137 138define i64 @cntw_mul2() {139; CHECK-LABEL: cntw_mul2:140; CHECK:       // %bb.0:141; CHECK-NEXT:    cntw x0, vl6, mul #2142; CHECK-NEXT:    ret143;144; USE_SCALAR_INC-LABEL: cntw_mul2:145; USE_SCALAR_INC:       // %bb.0:146; USE_SCALAR_INC-NEXT:    cntw x0, vl6, mul #2147; USE_SCALAR_INC-NEXT:    ret148  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 6)149  %out = mul i64 %cnt, 2150  ret i64 %out151}152 153;154; CNTD155;156 157define i64 @cntd() {158; CHECK-LABEL: cntd:159; CHECK:       // %bb.0:160; CHECK-NEXT:    cntd x0, vl5161; CHECK-NEXT:    ret162;163; USE_SCALAR_INC-LABEL: cntd:164; USE_SCALAR_INC:       // %bb.0:165; USE_SCALAR_INC-NEXT:    cntd x0, vl5166; USE_SCALAR_INC-NEXT:    ret167  %out = call i64 @llvm.aarch64.sve.cntd(i32 5)168  ret i64 %out169}170 171define i64 @cntd_mul15() {172; CHECK-LABEL: cntd_mul15:173; CHECK:       // %bb.0:174; CHECK-NEXT:    cntd x0, vl16, mul #15175; CHECK-NEXT:    ret176;177; USE_SCALAR_INC-LABEL: cntd_mul15:178; USE_SCALAR_INC:       // %bb.0:179; USE_SCALAR_INC-NEXT:    cntd x0, vl16, mul #15180; USE_SCALAR_INC-NEXT:    ret181  %cnt = call i64 @llvm.aarch64.sve.cntd(i32 9)182  %out = mul i64 %cnt, 15183  ret i64 %out184}185 186define i64 @cntd_mul16() {187; CHECK-LABEL: cntd_mul16:188; CHECK:       // %bb.0:189; CHECK-NEXT:    cntd x0, vl32, mul #16190; CHECK-NEXT:    ret191;192; USE_SCALAR_INC-LABEL: cntd_mul16:193; USE_SCALAR_INC:       // %bb.0:194; USE_SCALAR_INC-NEXT:    cntd x0, vl32, mul #16195; USE_SCALAR_INC-NEXT:    ret196  %cnt = call i64 @llvm.aarch64.sve.cntd(i32 10)197  %out = mul i64 %cnt, 16198  ret i64 %out199}200 201;202; CNTP203;204 205define i64 @cntp_b8(<vscale x 16 x i1> %pg, <vscale x 16 x i1> %a) {206; CHECK-LABEL: cntp_b8:207; CHECK:       // %bb.0:208; CHECK-NEXT:    cntp x0, p0, p1.b209; CHECK-NEXT:    ret210;211; USE_SCALAR_INC-LABEL: cntp_b8:212; USE_SCALAR_INC:       // %bb.0:213; USE_SCALAR_INC-NEXT:    cntp x0, p0, p1.b214; USE_SCALAR_INC-NEXT:    ret215  %out = call i64 @llvm.aarch64.sve.cntp.nxv16i1(<vscale x 16 x i1> %pg,216                                                 <vscale x 16 x i1> %a)217  ret i64 %out218}219 220define i64 @cntp_b16(<vscale x 8 x i1> %pg, <vscale x 8 x i1> %a) {221; CHECK-LABEL: cntp_b16:222; CHECK:       // %bb.0:223; CHECK-NEXT:    cntp x0, p0, p1.h224; CHECK-NEXT:    ret225;226; USE_SCALAR_INC-LABEL: cntp_b16:227; USE_SCALAR_INC:       // %bb.0:228; USE_SCALAR_INC-NEXT:    cntp x0, p0, p1.h229; USE_SCALAR_INC-NEXT:    ret230  %out = call i64 @llvm.aarch64.sve.cntp.nxv8i1(<vscale x 8 x i1> %pg,231                                                <vscale x 8 x i1> %a)232  ret i64 %out233}234 235define i64 @cntp_b32(<vscale x 4 x i1> %pg, <vscale x 4 x i1> %a) {236; CHECK-LABEL: cntp_b32:237; CHECK:       // %bb.0:238; CHECK-NEXT:    cntp x0, p0, p1.s239; CHECK-NEXT:    ret240;241; USE_SCALAR_INC-LABEL: cntp_b32:242; USE_SCALAR_INC:       // %bb.0:243; USE_SCALAR_INC-NEXT:    cntp x0, p0, p1.s244; USE_SCALAR_INC-NEXT:    ret245  %out = call i64 @llvm.aarch64.sve.cntp.nxv4i1(<vscale x 4 x i1> %pg,246                                                <vscale x 4 x i1> %a)247  ret i64 %out248}249 250define i64 @cntp_b64(<vscale x 2 x i1> %pg, <vscale x 2 x i1> %a) {251; CHECK-LABEL: cntp_b64:252; CHECK:       // %bb.0:253; CHECK-NEXT:    cntp x0, p0, p1.d254; CHECK-NEXT:    ret255;256; USE_SCALAR_INC-LABEL: cntp_b64:257; USE_SCALAR_INC:       // %bb.0:258; USE_SCALAR_INC-NEXT:    cntp x0, p0, p1.d259; USE_SCALAR_INC-NEXT:    ret260  %out = call i64 @llvm.aarch64.sve.cntp.nxv2i1(<vscale x 2 x i1> %pg,261                                                <vscale x 2 x i1> %a)262  ret i64 %out263}264 265;266; INCB267;268 269define i64 @incb(i64 %a) {270; CHECK-LABEL: incb:271; CHECK:       // %bb.0:272; CHECK-NEXT:    cntb x8, vl5273; CHECK-NEXT:    add x0, x8, x0274; CHECK-NEXT:    ret275;276; USE_SCALAR_INC-LABEL: incb:277; USE_SCALAR_INC:       // %bb.0:278; USE_SCALAR_INC-NEXT:    incb x0, vl5279; USE_SCALAR_INC-NEXT:    ret280  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 5)281  %out = add i64 %cnt, %a282  ret i64 %out283}284 285define i64 @incb_mul(i64 %a) {286; CHECK-LABEL: incb_mul:287; CHECK:       // %bb.0:288; CHECK-NEXT:    cntb x8, vl4289; CHECK-NEXT:    add x0, x0, x8, lsl #2290; CHECK-NEXT:    ret291;292; USE_SCALAR_INC-LABEL: incb_mul:293; USE_SCALAR_INC:       // %bb.0:294; USE_SCALAR_INC-NEXT:    incb x0, vl4, mul #4295; USE_SCALAR_INC-NEXT:    ret296  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 4)297  %mul = mul i64 %cnt, 4298  %out = add i64 %mul, %a299  ret i64 %out300}301 302;303; DECB304;305 306define i64 @decb(i64 %a) {307; CHECK-LABEL: decb:308; CHECK:       // %bb.0:309; CHECK-NEXT:    cntb x8, vl6310; CHECK-NEXT:    sub x0, x0, x8311; CHECK-NEXT:    ret312;313; USE_SCALAR_INC-LABEL: decb:314; USE_SCALAR_INC:       // %bb.0:315; USE_SCALAR_INC-NEXT:    decb x0, vl6316; USE_SCALAR_INC-NEXT:    ret317  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 6)318  %out = sub i64 %a, %cnt319  ret i64 %out320}321 322define i64 @decb_mul(i64 %a) {323; CHECK-LABEL: decb_mul:324; CHECK:       // %bb.0:325; CHECK-NEXT:    cntb x8, vl7326; CHECK-NEXT:    sub x0, x0, x8, lsl #3327; CHECK-NEXT:    ret328;329; USE_SCALAR_INC-LABEL: decb_mul:330; USE_SCALAR_INC:       // %bb.0:331; USE_SCALAR_INC-NEXT:    decb x0, vl7, mul #8332; USE_SCALAR_INC-NEXT:    ret333  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 7)334  %mul = mul i64 %cnt, 8335  %out = sub i64 %a, %mul336  ret i64 %out337}338 339;340; INCH341;342 343define i64 @inch(i64 %a) {344; CHECK-LABEL: inch:345; CHECK:       // %bb.0:346; CHECK-NEXT:    cnth x8, vl4347; CHECK-NEXT:    add x0, x8, x0348; CHECK-NEXT:    ret349;350; USE_SCALAR_INC-LABEL: inch:351; USE_SCALAR_INC:       // %bb.0:352; USE_SCALAR_INC-NEXT:    inch x0, vl4353; USE_SCALAR_INC-NEXT:    ret354  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 4)355  %out = add i64 %cnt, %a356  ret i64 %out357}358 359define i64 @inch_mul(i64 %a) {360; CHECK-LABEL: inch_mul:361; CHECK:       // %bb.0:362; CHECK-NEXT:    cnth x8, vl8, mul #5363; CHECK-NEXT:    add x0, x8, x0364; CHECK-NEXT:    ret365;366; USE_SCALAR_INC-LABEL: inch_mul:367; USE_SCALAR_INC:       // %bb.0:368; USE_SCALAR_INC-NEXT:    inch x0, vl8, mul #5369; USE_SCALAR_INC-NEXT:    ret370  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 8)371  %mul = mul i64 %cnt, 5372  %out = add i64 %mul, %a373  ret i64 %out374}375 376;377; DECH378;379 380define i64 @dech(i64 %a) {381; CHECK-LABEL: dech:382; CHECK:       // %bb.0:383; CHECK-NEXT:    cnth x8, vl1384; CHECK-NEXT:    sub x0, x0, x8385; CHECK-NEXT:    ret386;387; USE_SCALAR_INC-LABEL: dech:388; USE_SCALAR_INC:       // %bb.0:389; USE_SCALAR_INC-NEXT:    dech x0, vl1390; USE_SCALAR_INC-NEXT:    ret391  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 1)392  %out = sub i64 %a, %cnt393  ret i64 %out394}395 396define i64 @dech_mul(i64 %a) {397; CHECK-LABEL: dech_mul:398; CHECK:       // %bb.0:399; CHECK-NEXT:    cnth x8, vl16, mul #7400; CHECK-NEXT:    sub x0, x0, x8401; CHECK-NEXT:    ret402;403; USE_SCALAR_INC-LABEL: dech_mul:404; USE_SCALAR_INC:       // %bb.0:405; USE_SCALAR_INC-NEXT:    dech x0, vl16, mul #7406; USE_SCALAR_INC-NEXT:    ret407  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 9)408  %mul = mul i64 %cnt, 7409  %out = sub i64 %a, %mul410  ret i64 %out411}412 413;414; INCW415;416 417define i64 @incw(i64 %a) {418; CHECK-LABEL: incw:419; CHECK:       // %bb.0:420; CHECK-NEXT:    cntw x8, #16421; CHECK-NEXT:    add x0, x8, x0422; CHECK-NEXT:    ret423;424; USE_SCALAR_INC-LABEL: incw:425; USE_SCALAR_INC:       // %bb.0:426; USE_SCALAR_INC-NEXT:    incw x0, #16427; USE_SCALAR_INC-NEXT:    ret428  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 16)429  %out = add i64 %cnt, %a430  ret i64 %out431}432 433define i64 @incw_mul(i64 %a) {434; CHECK-LABEL: incw_mul:435; CHECK:       // %bb.0:436; CHECK-NEXT:    cntw x8, vl32, mul #12437; CHECK-NEXT:    add x0, x8, x0438; CHECK-NEXT:    ret439;440; USE_SCALAR_INC-LABEL: incw_mul:441; USE_SCALAR_INC:       // %bb.0:442; USE_SCALAR_INC-NEXT:    incw x0, vl32, mul #12443; USE_SCALAR_INC-NEXT:    ret444  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 10)445  %mul = mul i64 %cnt, 12446  %out = add i64 %mul, %a447  ret i64 %out448}449 450;451; DECW452;453 454define i64 @decw(i64 %a) {455; CHECK-LABEL: decw:456; CHECK:       // %bb.0:457; CHECK-NEXT:    cntw x8458; CHECK-NEXT:    sub x0, x0, x8459; CHECK-NEXT:    ret460;461; USE_SCALAR_INC-LABEL: decw:462; USE_SCALAR_INC:       // %bb.0:463; USE_SCALAR_INC-NEXT:    decw x0464; USE_SCALAR_INC-NEXT:    ret465  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 31)466  %out = sub i64 %a, %cnt467  ret i64 %out468}469 470define i64 @decw_mul(i64 %a) {471; CHECK-LABEL: decw_mul:472; CHECK:       // %bb.0:473; CHECK-NEXT:    cntw x8, vl128474; CHECK-NEXT:    sub x0, x0, x8, lsl #4475; CHECK-NEXT:    ret476;477; USE_SCALAR_INC-LABEL: decw_mul:478; USE_SCALAR_INC:       // %bb.0:479; USE_SCALAR_INC-NEXT:    decw x0, vl128, mul #16480; USE_SCALAR_INC-NEXT:    ret481  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 12)482  %mul = mul i64 %cnt, 16483  %out = sub i64 %a, %mul484  ret i64 %out485}486 487define i64 @incd(i64 %a) {488; CHECK-LABEL: incd:489; CHECK:       // %bb.0:490; CHECK-NEXT:    cntd x8, vl8491; CHECK-NEXT:    add x0, x8, x0492; CHECK-NEXT:    ret493;494; USE_SCALAR_INC-LABEL: incd:495; USE_SCALAR_INC:       // %bb.0:496; USE_SCALAR_INC-NEXT:    incd x0, vl8497; USE_SCALAR_INC-NEXT:    ret498  %cnt = call i64 @llvm.aarch64.sve.cntd(i32 8)499  %out = add i64 %cnt, %a500  ret i64 %out501}502 503define i64 @incd_mul(i64 %a) {504; CHECK-LABEL: incd_mul:505; CHECK:       // %bb.0:506; CHECK-NEXT:    cntd x8, all, mul #15507; CHECK-NEXT:    add x0, x8, x0508; CHECK-NEXT:    ret509;510; USE_SCALAR_INC-LABEL: incd_mul:511; USE_SCALAR_INC:       // %bb.0:512; USE_SCALAR_INC-NEXT:    incd x0, all, mul #15513; USE_SCALAR_INC-NEXT:    ret514  %cnt = call i64 @llvm.aarch64.sve.cntd(i32 31)515  %mul = mul i64 %cnt, 15516  %out = add i64 %mul, %a517  ret i64 %out518}519 520;521; DECD522;523 524define i64 @decd(i64 %a) {525; CHECK-LABEL: decd:526; CHECK:       // %bb.0:527; CHECK-NEXT:    cntd x8, #16528; CHECK-NEXT:    sub x0, x0, x8529; CHECK-NEXT:    ret530;531; USE_SCALAR_INC-LABEL: decd:532; USE_SCALAR_INC:       // %bb.0:533; USE_SCALAR_INC-NEXT:    decd x0, #16534; USE_SCALAR_INC-NEXT:    ret535  %cnt = call i64 @llvm.aarch64.sve.cntd(i32 16)536  %out = sub i64 %a, %cnt537  ret i64 %out538}539 540define i64 @decd_mul(i64 %a) {541; CHECK-LABEL: decd_mul:542; CHECK:       // %bb.0:543; CHECK-NEXT:    cntd x8, vl2, mul #9544; CHECK-NEXT:    sub x0, x0, x8545; CHECK-NEXT:    ret546;547; USE_SCALAR_INC-LABEL: decd_mul:548; USE_SCALAR_INC:       // %bb.0:549; USE_SCALAR_INC-NEXT:    decd x0, vl2, mul #9550; USE_SCALAR_INC-NEXT:    ret551  %cnt = call i64 @llvm.aarch64.sve.cntd(i32 2)552  %mul = mul i64 %cnt, 9553  %out = sub i64 %a, %mul554  ret i64 %out555}556 557declare i64 @llvm.aarch64.sve.cntb(i32 %pattern)558declare i64 @llvm.aarch64.sve.cnth(i32 %pattern)559declare i64 @llvm.aarch64.sve.cntw(i32 %pattern)560declare i64 @llvm.aarch64.sve.cntd(i32 %pattern)561 562declare i64 @llvm.aarch64.sve.cntp.nxv16i1(<vscale x 16 x i1>, <vscale x 16 x i1>)563declare i64 @llvm.aarch64.sve.cntp.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>)564declare i64 @llvm.aarch64.sve.cntp.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>)565declare i64 @llvm.aarch64.sve.cntp.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>)566