brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.0 KiB · 0a9f494 Raw
557 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_SCALAR_INC3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -sve-use-scalar-inc-vl=true -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,disable-fast-inc-vl -sve-use-scalar-inc-vl=true -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_FAST_INC5; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 -verify-machineinstrs < %s | FileCheck %s6; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 -sve-use-scalar-inc-vl=false -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_SCALAR_INC7; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2,disable-fast-inc-vl -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_FAST_INC8 9define <vscale x 8 x i16> @inch_vec(<vscale x 8 x i16> %a) {10; NO_SCALAR_INC-LABEL: inch_vec:11; NO_SCALAR_INC:       // %bb.0:12; NO_SCALAR_INC-NEXT:    inch z0.h13; NO_SCALAR_INC-NEXT:    ret14;15; CHECK-LABEL: inch_vec:16; CHECK:       // %bb.0:17; CHECK-NEXT:    inch z0.h18; CHECK-NEXT:    ret19;20; NO_FAST_INC-LABEL: inch_vec:21; NO_FAST_INC:       // %bb.0:22; NO_FAST_INC-NEXT:    inch z0.h23; NO_FAST_INC-NEXT:    ret24  %vscale = call i16 @llvm.vscale.i16()25  %mul = mul i16 %vscale, 826  %vl = insertelement <vscale x 8 x i16> poison, i16 %mul, i32 027  %vl.splat = shufflevector <vscale x 8 x i16> %vl, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer28  %res = add <vscale x 8 x i16> %a, %vl.splat29  ret <vscale x 8 x i16> %res30}31 32define <vscale x 4 x i32> @incw_vec(<vscale x 4 x i32> %a) {33; NO_SCALAR_INC-LABEL: incw_vec:34; NO_SCALAR_INC:       // %bb.0:35; NO_SCALAR_INC-NEXT:    incw z0.s36; NO_SCALAR_INC-NEXT:    ret37;38; CHECK-LABEL: incw_vec:39; CHECK:       // %bb.0:40; CHECK-NEXT:    incw z0.s41; CHECK-NEXT:    ret42;43; NO_FAST_INC-LABEL: incw_vec:44; NO_FAST_INC:       // %bb.0:45; NO_FAST_INC-NEXT:    incw z0.s46; NO_FAST_INC-NEXT:    ret47  %vscale = call i32 @llvm.vscale.i32()48  %mul = mul i32 %vscale, 449  %vl = insertelement <vscale x 4 x i32> poison, i32 %mul, i32 050  %vl.splat = shufflevector <vscale x 4 x i32> %vl, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer51  %res = add <vscale x 4 x i32> %a, %vl.splat52  ret <vscale x 4 x i32> %res53}54 55define <vscale x 2 x i64> @incd_vec(<vscale x 2 x i64> %a) {56; NO_SCALAR_INC-LABEL: incd_vec:57; NO_SCALAR_INC:       // %bb.0:58; NO_SCALAR_INC-NEXT:    incd z0.d59; NO_SCALAR_INC-NEXT:    ret60;61; CHECK-LABEL: incd_vec:62; CHECK:       // %bb.0:63; CHECK-NEXT:    incd z0.d64; CHECK-NEXT:    ret65;66; NO_FAST_INC-LABEL: incd_vec:67; NO_FAST_INC:       // %bb.0:68; NO_FAST_INC-NEXT:    incd z0.d69; NO_FAST_INC-NEXT:    ret70  %vscale = call i64 @llvm.vscale.i64()71  %mul = mul i64 %vscale, 272  %vl = insertelement <vscale x 2 x i64> poison, i64 %mul, i32 073  %vl.splat = shufflevector <vscale x 2 x i64> %vl, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer74  %res = add <vscale x 2 x i64> %a, %vl.splat75  ret <vscale x 2 x i64> %res76}77 78define <vscale x 8 x i16> @dech_vec(<vscale x 8 x i16> %a) {79; NO_SCALAR_INC-LABEL: dech_vec:80; NO_SCALAR_INC:       // %bb.0:81; NO_SCALAR_INC-NEXT:    dech z0.h, all, mul #282; NO_SCALAR_INC-NEXT:    ret83;84; CHECK-LABEL: dech_vec:85; CHECK:       // %bb.0:86; CHECK-NEXT:    dech z0.h, all, mul #287; CHECK-NEXT:    ret88;89; NO_FAST_INC-LABEL: dech_vec:90; NO_FAST_INC:       // %bb.0:91; NO_FAST_INC-NEXT:    dech z0.h, all, mul #292; NO_FAST_INC-NEXT:    ret93  %vscale = call i16 @llvm.vscale.i16()94  %mul = mul i16 %vscale, 1695  %vl = insertelement <vscale x 8 x i16> poison, i16 %mul, i32 096  %vl.splat = shufflevector <vscale x 8 x i16> %vl, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer97  %res = sub <vscale x 8 x i16> %a, %vl.splat98  ret <vscale x 8 x i16> %res99}100 101define <vscale x 4 x i32> @decw_vec(<vscale x 4 x i32> %a) {102; NO_SCALAR_INC-LABEL: decw_vec:103; NO_SCALAR_INC:       // %bb.0:104; NO_SCALAR_INC-NEXT:    decw z0.s, all, mul #4105; NO_SCALAR_INC-NEXT:    ret106;107; CHECK-LABEL: decw_vec:108; CHECK:       // %bb.0:109; CHECK-NEXT:    decw z0.s, all, mul #4110; CHECK-NEXT:    ret111;112; NO_FAST_INC-LABEL: decw_vec:113; NO_FAST_INC:       // %bb.0:114; NO_FAST_INC-NEXT:    decw z0.s, all, mul #4115; NO_FAST_INC-NEXT:    ret116  %vscale = call i32 @llvm.vscale.i32()117  %mul = mul i32 %vscale, 16118  %vl = insertelement <vscale x 4 x i32> poison, i32 %mul, i32 0119  %vl.splat = shufflevector <vscale x 4 x i32> %vl, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer120  %res = sub <vscale x 4 x i32> %a, %vl.splat121  ret <vscale x 4 x i32> %res122}123 124define <vscale x 2 x i64> @decd_vec(<vscale x 2 x i64> %a) {125; NO_SCALAR_INC-LABEL: decd_vec:126; NO_SCALAR_INC:       // %bb.0:127; NO_SCALAR_INC-NEXT:    decd z0.d, all, mul #8128; NO_SCALAR_INC-NEXT:    ret129;130; CHECK-LABEL: decd_vec:131; CHECK:       // %bb.0:132; CHECK-NEXT:    decd z0.d, all, mul #8133; CHECK-NEXT:    ret134;135; NO_FAST_INC-LABEL: decd_vec:136; NO_FAST_INC:       // %bb.0:137; NO_FAST_INC-NEXT:    decd z0.d, all, mul #8138; NO_FAST_INC-NEXT:    ret139  %vscale = call i64 @llvm.vscale.i64()140  %mul = mul i64 %vscale, 16141  %vl = insertelement <vscale x 2 x i64> poison, i64 %mul, i32 0142  %vl.splat = shufflevector <vscale x 2 x i64> %vl, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer143  %res = sub <vscale x 2 x i64> %a, %vl.splat144  ret <vscale x 2 x i64> %res145}146 147; NOTE: As there is no need for the predicate pattern we148; fall back to using ADDVL with its larger immediate range.149define i64 @incb_scalar_i64(i64 %a) {150; NO_SCALAR_INC-LABEL: incb_scalar_i64:151; NO_SCALAR_INC:       // %bb.0:152; NO_SCALAR_INC-NEXT:    rdvl x8, #1153; NO_SCALAR_INC-NEXT:    add x0, x0, x8154; NO_SCALAR_INC-NEXT:    ret155;156; CHECK-LABEL: incb_scalar_i64:157; CHECK:       // %bb.0:158; CHECK-NEXT:    incb x0159; CHECK-NEXT:    ret160;161; NO_FAST_INC-LABEL: incb_scalar_i64:162; NO_FAST_INC:       // %bb.0:163; NO_FAST_INC-NEXT:    addvl x0, x0, #1164; NO_FAST_INC-NEXT:    ret165  %vscale = call i64 @llvm.vscale.i64()166  %mul = mul i64 %vscale, 16167  %add = add i64 %a, %mul168  ret i64 %add169}170 171define i64 @inch_scalar_i64(i64 %a) {172; NO_SCALAR_INC-LABEL: inch_scalar_i64:173; NO_SCALAR_INC:       // %bb.0:174; NO_SCALAR_INC-NEXT:    cnth x8175; NO_SCALAR_INC-NEXT:    add x0, x0, x8176; NO_SCALAR_INC-NEXT:    ret177;178; CHECK-LABEL: inch_scalar_i64:179; CHECK:       // %bb.0:180; CHECK-NEXT:    inch x0181; CHECK-NEXT:    ret182;183; NO_FAST_INC-LABEL: inch_scalar_i64:184; NO_FAST_INC:       // %bb.0:185; NO_FAST_INC-NEXT:    inch x0186; NO_FAST_INC-NEXT:    ret187  %vscale = call i64 @llvm.vscale.i64()188  %mul = mul i64 %vscale, 8189  %add = add i64 %a, %mul190  ret i64 %add191}192 193define i64 @incw_scalar_i64(i64 %a) {194; NO_SCALAR_INC-LABEL: incw_scalar_i64:195; NO_SCALAR_INC:       // %bb.0:196; NO_SCALAR_INC-NEXT:    cntw x8197; NO_SCALAR_INC-NEXT:    add x0, x0, x8198; NO_SCALAR_INC-NEXT:    ret199;200; CHECK-LABEL: incw_scalar_i64:201; CHECK:       // %bb.0:202; CHECK-NEXT:    incw x0203; CHECK-NEXT:    ret204;205; NO_FAST_INC-LABEL: incw_scalar_i64:206; NO_FAST_INC:       // %bb.0:207; NO_FAST_INC-NEXT:    incw x0208; NO_FAST_INC-NEXT:    ret209  %vscale = call i64 @llvm.vscale.i64()210  %mul = mul i64 %vscale, 4211  %add = add i64 %a, %mul212  ret i64 %add213}214 215define i64 @incd_scalar_i64(i64 %a) {216; NO_SCALAR_INC-LABEL: incd_scalar_i64:217; NO_SCALAR_INC:       // %bb.0:218; NO_SCALAR_INC-NEXT:    cntd x8219; NO_SCALAR_INC-NEXT:    add x0, x0, x8220; NO_SCALAR_INC-NEXT:    ret221;222; CHECK-LABEL: incd_scalar_i64:223; CHECK:       // %bb.0:224; CHECK-NEXT:    incd x0225; CHECK-NEXT:    ret226;227; NO_FAST_INC-LABEL: incd_scalar_i64:228; NO_FAST_INC:       // %bb.0:229; NO_FAST_INC-NEXT:    incd x0230; NO_FAST_INC-NEXT:    ret231  %vscale = call i64 @llvm.vscale.i64()232  %mul = mul i64 %vscale, 2233  %add = add i64 %a, %mul234  ret i64 %add235}236 237; NOTE: As there is no need for the predicate pattern we238; fall back to using ADDVL with its larger immediate range.239define i64 @decb_scalar_i64(i64 %a) {240; NO_SCALAR_INC-LABEL: decb_scalar_i64:241; NO_SCALAR_INC:       // %bb.0:242; NO_SCALAR_INC-NEXT:    cnth x8, all, mul #4243; NO_SCALAR_INC-NEXT:    sub x0, x0, x8244; NO_SCALAR_INC-NEXT:    ret245;246; CHECK-LABEL: decb_scalar_i64:247; CHECK:       // %bb.0:248; CHECK-NEXT:    decb x0, all, mul #2249; CHECK-NEXT:    ret250;251; NO_FAST_INC-LABEL: decb_scalar_i64:252; NO_FAST_INC:       // %bb.0:253; NO_FAST_INC-NEXT:    addvl x0, x0, #-2254; NO_FAST_INC-NEXT:    ret255  %vscale = call i64 @llvm.vscale.i64()256  %mul = mul i64 %vscale, 32257  %sub = sub i64 %a, %mul258  ret i64 %sub259}260 261define i64 @dech_scalar_i64(i64 %a) {262; NO_SCALAR_INC-LABEL: dech_scalar_i64:263; NO_SCALAR_INC:       // %bb.0:264; NO_SCALAR_INC-NEXT:    cnth x8, all, mul #3265; NO_SCALAR_INC-NEXT:    sub x0, x0, x8266; NO_SCALAR_INC-NEXT:    ret267;268; CHECK-LABEL: dech_scalar_i64:269; CHECK:       // %bb.0:270; CHECK-NEXT:    dech x0, all, mul #3271; CHECK-NEXT:    ret272;273; NO_FAST_INC-LABEL: dech_scalar_i64:274; NO_FAST_INC:       // %bb.0:275; NO_FAST_INC-NEXT:    dech x0, all, mul #3276; NO_FAST_INC-NEXT:    ret277  %vscale = call i64 @llvm.vscale.i64()278  %mul = mul i64 %vscale, 24279  %sub = sub i64 %a, %mul280  ret i64 %sub281}282 283define i64 @decw_scalar_i64(i64 %a) {284; NO_SCALAR_INC-LABEL: decw_scalar_i64:285; NO_SCALAR_INC:       // %bb.0:286; NO_SCALAR_INC-NEXT:    cntw x8, all, mul #3287; NO_SCALAR_INC-NEXT:    sub x0, x0, x8288; NO_SCALAR_INC-NEXT:    ret289;290; CHECK-LABEL: decw_scalar_i64:291; CHECK:       // %bb.0:292; CHECK-NEXT:    decw x0, all, mul #3293; CHECK-NEXT:    ret294;295; NO_FAST_INC-LABEL: decw_scalar_i64:296; NO_FAST_INC:       // %bb.0:297; NO_FAST_INC-NEXT:    decw x0, all, mul #3298; NO_FAST_INC-NEXT:    ret299  %vscale = call i64 @llvm.vscale.i64()300  %mul = mul i64 %vscale, 12301  %sub = sub i64 %a, %mul302  ret i64 %sub303}304 305define i64 @decd_scalar_i64(i64 %a) {306; NO_SCALAR_INC-LABEL: decd_scalar_i64:307; NO_SCALAR_INC:       // %bb.0:308; NO_SCALAR_INC-NEXT:    cntd x8, all, mul #3309; NO_SCALAR_INC-NEXT:    sub x0, x0, x8310; NO_SCALAR_INC-NEXT:    ret311;312; CHECK-LABEL: decd_scalar_i64:313; CHECK:       // %bb.0:314; CHECK-NEXT:    decd x0, all, mul #3315; CHECK-NEXT:    ret316;317; NO_FAST_INC-LABEL: decd_scalar_i64:318; NO_FAST_INC:       // %bb.0:319; NO_FAST_INC-NEXT:    decd x0, all, mul #3320; NO_FAST_INC-NEXT:    ret321  %vscale = call i64 @llvm.vscale.i64()322  %mul = mul i64 %vscale, 6323  %sub = sub i64 %a, %mul324  ret i64 %sub325}326 327; NOTE: As there is no need for the predicate pattern we328; fall back to using ADDVL with its larger immediate range.329define i32 @incb_scalar_i32(i32 %a) {330; NO_SCALAR_INC-LABEL: incb_scalar_i32:331; NO_SCALAR_INC:       // %bb.0:332; NO_SCALAR_INC-NEXT:    rdvl x8, #3333; NO_SCALAR_INC-NEXT:    add w0, w0, w8334; NO_SCALAR_INC-NEXT:    ret335;336; CHECK-LABEL: incb_scalar_i32:337; CHECK:       // %bb.0:338; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0339; CHECK-NEXT:    addvl x0, x0, #3340; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0341; CHECK-NEXT:    ret342;343; NO_FAST_INC-LABEL: incb_scalar_i32:344; NO_FAST_INC:       // %bb.0:345; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 def $x0346; NO_FAST_INC-NEXT:    addvl x0, x0, #3347; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 killed $x0348; NO_FAST_INC-NEXT:    ret349 350  %vscale = call i64 @llvm.vscale.i64()351  %mul = mul i64 %vscale, 48352  %vl = trunc i64 %mul to i32353  %add = add i32 %a, %vl354  ret i32 %add355}356 357define i32 @inch_scalar_i32(i32 %a) {358; NO_SCALAR_INC-LABEL: inch_scalar_i32:359; NO_SCALAR_INC:       // %bb.0:360; NO_SCALAR_INC-NEXT:    cnth x8, all, mul #7361; NO_SCALAR_INC-NEXT:    add w0, w0, w8362; NO_SCALAR_INC-NEXT:    ret363;364; CHECK-LABEL: inch_scalar_i32:365; CHECK:       // %bb.0:366; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0367; CHECK-NEXT:    inch x0, all, mul #7368; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0369; CHECK-NEXT:    ret370;371; NO_FAST_INC-LABEL: inch_scalar_i32:372; NO_FAST_INC:       // %bb.0:373; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 def $x0374; NO_FAST_INC-NEXT:    inch x0, all, mul #7375; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 killed $x0376; NO_FAST_INC-NEXT:    ret377 378  %vscale = call i64 @llvm.vscale.i64()379  %mul = mul i64 %vscale, 56380  %vl = trunc i64 %mul to i32381  %add = add i32 %a, %vl382  ret i32 %add383}384 385define i32 @incw_scalar_i32(i32 %a) {386; NO_SCALAR_INC-LABEL: incw_scalar_i32:387; NO_SCALAR_INC:       // %bb.0:388; NO_SCALAR_INC-NEXT:    cntw x8, all, mul #7389; NO_SCALAR_INC-NEXT:    add w0, w0, w8390; NO_SCALAR_INC-NEXT:    ret391;392; CHECK-LABEL: incw_scalar_i32:393; CHECK:       // %bb.0:394; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0395; CHECK-NEXT:    incw x0, all, mul #7396; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0397; CHECK-NEXT:    ret398;399; NO_FAST_INC-LABEL: incw_scalar_i32:400; NO_FAST_INC:       // %bb.0:401; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 def $x0402; NO_FAST_INC-NEXT:    incw x0, all, mul #7403; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 killed $x0404; NO_FAST_INC-NEXT:    ret405 406  %vscale = call i64 @llvm.vscale.i64()407  %mul = mul i64 %vscale, 28408  %vl = trunc i64 %mul to i32409  %add = add i32 %a, %vl410  ret i32 %add411}412 413define i32 @incd_scalar_i32(i32 %a) {414; NO_SCALAR_INC-LABEL: incd_scalar_i32:415; NO_SCALAR_INC:       // %bb.0:416; NO_SCALAR_INC-NEXT:    cntd x8, all, mul #7417; NO_SCALAR_INC-NEXT:    add w0, w0, w8418; NO_SCALAR_INC-NEXT:    ret419;420; CHECK-LABEL: incd_scalar_i32:421; CHECK:       // %bb.0:422; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0423; CHECK-NEXT:    incd x0, all, mul #7424; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0425; CHECK-NEXT:    ret426;427; NO_FAST_INC-LABEL: incd_scalar_i32:428; NO_FAST_INC:       // %bb.0:429; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 def $x0430; NO_FAST_INC-NEXT:    incd x0, all, mul #7431; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 killed $x0432; NO_FAST_INC-NEXT:    ret433 434  %vscale = call i64 @llvm.vscale.i64()435  %mul = mul i64 %vscale, 14436  %vl = trunc i64 %mul to i32437  %add = add i32 %a, %vl438  ret i32 %add439}440 441; NOTE: As there is no need for the predicate pattern we442; fall back to using ADDVL with its larger immediate range.443define i32 @decb_scalar_i32(i32 %a) {444; NO_SCALAR_INC-LABEL: decb_scalar_i32:445; NO_SCALAR_INC:       // %bb.0:446; NO_SCALAR_INC-NEXT:    cnth x8, all, mul #8447; NO_SCALAR_INC-NEXT:    sub w0, w0, w8448; NO_SCALAR_INC-NEXT:    ret449;450; CHECK-LABEL: decb_scalar_i32:451; CHECK:       // %bb.0:452; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0453; CHECK-NEXT:    decb x0, all, mul #4454; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0455; CHECK-NEXT:    ret456;457; NO_FAST_INC-LABEL: decb_scalar_i32:458; NO_FAST_INC:       // %bb.0:459; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 def $x0460; NO_FAST_INC-NEXT:    addvl x0, x0, #-4461; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 killed $x0462; NO_FAST_INC-NEXT:    ret463 464  %vscale = call i64 @llvm.vscale.i64()465  %mul = mul i64 %vscale, 64466  %vl = trunc i64 %mul to i32467  %sub = sub i32 %a, %vl468  ret i32 %sub469}470 471define i32 @dech_scalar_i32(i32 %a) {472; NO_SCALAR_INC-LABEL: dech_scalar_i32:473; NO_SCALAR_INC:       // %bb.0:474; NO_SCALAR_INC-NEXT:    cnth x8475; NO_SCALAR_INC-NEXT:    sub w0, w0, w8476; NO_SCALAR_INC-NEXT:    ret477;478; CHECK-LABEL: dech_scalar_i32:479; CHECK:       // %bb.0:480; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0481; CHECK-NEXT:    dech x0482; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0483; CHECK-NEXT:    ret484;485; NO_FAST_INC-LABEL: dech_scalar_i32:486; NO_FAST_INC:       // %bb.0:487; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 def $x0488; NO_FAST_INC-NEXT:    dech x0489; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 killed $x0490; NO_FAST_INC-NEXT:    ret491 492  %vscale = call i64 @llvm.vscale.i64()493  %mul = mul i64 %vscale, 8494  %vl = trunc i64 %mul to i32495  %sub = sub i32 %a, %vl496  ret i32 %sub497}498 499define i32 @decw_scalar_i32(i32 %a) {500; NO_SCALAR_INC-LABEL: decw_scalar_i32:501; NO_SCALAR_INC:       // %bb.0:502; NO_SCALAR_INC-NEXT:    cntw x8503; NO_SCALAR_INC-NEXT:    sub w0, w0, w8504; NO_SCALAR_INC-NEXT:    ret505;506; CHECK-LABEL: decw_scalar_i32:507; CHECK:       // %bb.0:508; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0509; CHECK-NEXT:    decw x0510; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0511; CHECK-NEXT:    ret512;513; NO_FAST_INC-LABEL: decw_scalar_i32:514; NO_FAST_INC:       // %bb.0:515; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 def $x0516; NO_FAST_INC-NEXT:    decw x0517; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 killed $x0518; NO_FAST_INC-NEXT:    ret519 520  %vscale = call i64 @llvm.vscale.i64()521  %mul = mul i64 %vscale, 4522  %vl = trunc i64 %mul to i32523  %sub = sub i32 %a, %vl524  ret i32 %sub525}526 527define i32 @decd_scalar_i32(i32 %a) {528; NO_SCALAR_INC-LABEL: decd_scalar_i32:529; NO_SCALAR_INC:       // %bb.0:530; NO_SCALAR_INC-NEXT:    cntd x8531; NO_SCALAR_INC-NEXT:    sub w0, w0, w8532; NO_SCALAR_INC-NEXT:    ret533;534; CHECK-LABEL: decd_scalar_i32:535; CHECK:       // %bb.0:536; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0537; CHECK-NEXT:    decd x0538; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0539; CHECK-NEXT:    ret540;541; NO_FAST_INC-LABEL: decd_scalar_i32:542; NO_FAST_INC:       // %bb.0:543; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 def $x0544; NO_FAST_INC-NEXT:    decd x0545; NO_FAST_INC-NEXT:    // kill: def $w0 killed $w0 killed $x0546; NO_FAST_INC-NEXT:    ret547  %vscale = call i64 @llvm.vscale.i64()548  %mul = mul i64 %vscale, 2549  %vl = trunc i64 %mul to i32550  %sub = sub i32 %a, %vl551  ret i32 %sub552}553 554declare i16 @llvm.vscale.i16()555declare i32 @llvm.vscale.i32()556declare i64 @llvm.vscale.i64()557