brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · 02d172f Raw
353 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 %s -check-prefix=NO_SCALAR_INC3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -sve-use-scalar-inc-vl=true < %s | FileCheck %s4; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s5 6; INCB7 8define i32 @incb(i32 %a) {9; NO_SCALAR_INC-LABEL: incb:10; NO_SCALAR_INC:       // %bb.0:11; NO_SCALAR_INC-NEXT:    cntb x8, vl512; NO_SCALAR_INC-NEXT:    add w0, w8, w013; NO_SCALAR_INC-NEXT:    ret14;15; CHECK-LABEL: incb:16; CHECK:       // %bb.0:17; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x018; CHECK-NEXT:    incb x0, vl519; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x020; CHECK-NEXT:    ret21  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 5)22  %conv = trunc i64 %cnt to i3223  %out = add i32 %conv, %a24  ret i32 %out25}26 27define i32 @incb_mul(i32 %a) {28; NO_SCALAR_INC-LABEL: incb_mul:29; NO_SCALAR_INC:       // %bb.0:30; NO_SCALAR_INC-NEXT:    cntb x8, vl831; NO_SCALAR_INC-NEXT:    add w0, w0, w8, lsl #232; NO_SCALAR_INC-NEXT:    ret33;34; CHECK-LABEL: incb_mul:35; CHECK:       // %bb.0:36; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x037; CHECK-NEXT:    incb x0, vl8, mul #438; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x039; CHECK-NEXT:    ret40  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 8)41  %conv = trunc i64 %cnt to i3242  %mul = mul i32 %conv, 443  %out = add i32 %mul, %a44  ret i32 %out45}46 47;48; DECB49;50 51define i32 @decb(i32 %a) {52; NO_SCALAR_INC-LABEL: decb:53; NO_SCALAR_INC:       // %bb.0:54; NO_SCALAR_INC-NEXT:    cntb x8, vl655; NO_SCALAR_INC-NEXT:    sub w0, w0, w856; NO_SCALAR_INC-NEXT:    ret57;58; CHECK-LABEL: decb:59; CHECK:       // %bb.0:60; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x061; CHECK-NEXT:    decb x0, vl662; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x063; CHECK-NEXT:    ret64  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 6)65  %conv = trunc i64 %cnt to i3266  %out = sub i32 %a, %conv67  ret i32 %out68}69 70define i32 @decb_mul(i32 %a) {71; NO_SCALAR_INC-LABEL: decb_mul:72; NO_SCALAR_INC:       // %bb.0:73; NO_SCALAR_INC-NEXT:    cntb x8, vl674; NO_SCALAR_INC-NEXT:    sub w0, w0, w8, lsl #375; NO_SCALAR_INC-NEXT:    ret76;77; CHECK-LABEL: decb_mul:78; CHECK:       // %bb.0:79; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x080; CHECK-NEXT:    decb x0, vl6, mul #881; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x082; CHECK-NEXT:    ret83  %cnt = call i64 @llvm.aarch64.sve.cntb(i32 6)84  %conv = trunc i64 %cnt to i3285  %mul = mul i32 %conv, 886  %out = sub i32 %a, %mul87  ret i32 %out88}89 90; INCH91 92define i32 @inch(i32 %a) {93; NO_SCALAR_INC-LABEL: inch:94; NO_SCALAR_INC:       // %bb.0:95; NO_SCALAR_INC-NEXT:    cnth x8, #1696; NO_SCALAR_INC-NEXT:    add w0, w8, w097; NO_SCALAR_INC-NEXT:    ret98;99; CHECK-LABEL: inch:100; CHECK:       // %bb.0:101; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0102; CHECK-NEXT:    inch x0, #16103; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0104; CHECK-NEXT:    ret105  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 16)106  %conv = trunc i64 %cnt to i32107  %out = add i32 %conv, %a108  ret i32 %out109}110 111define i32 @inch_mul(i32 %a) {112; NO_SCALAR_INC-LABEL: inch_mul:113; NO_SCALAR_INC:       // %bb.0:114; NO_SCALAR_INC-NEXT:    cnth x8, vl8115; NO_SCALAR_INC-NEXT:    mov w9, #5 // =0x5116; NO_SCALAR_INC-NEXT:    madd w0, w8, w9, w0117; NO_SCALAR_INC-NEXT:    ret118;119; CHECK-LABEL: inch_mul:120; CHECK:       // %bb.0:121; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0122; CHECK-NEXT:    inch x0, vl8, mul #5123; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0124; CHECK-NEXT:    ret125  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 8)126  %conv = trunc i64 %cnt to i32127  %mul = mul i32 %conv, 5128  %out = add i32 %mul, %a129  ret i32 %out130}131 132;133; DECH134;135 136define i32 @dech(i32 %a) {137; NO_SCALAR_INC-LABEL: dech:138; NO_SCALAR_INC:       // %bb.0:139; NO_SCALAR_INC-NEXT:    cnth x8, vl1140; NO_SCALAR_INC-NEXT:    sub w0, w0, w8141; NO_SCALAR_INC-NEXT:    ret142;143; CHECK-LABEL: dech:144; CHECK:       // %bb.0:145; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0146; CHECK-NEXT:    dech x0, vl1147; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0148; CHECK-NEXT:    ret149  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 1)150  %conv = trunc i64 %cnt to i32151  %out = sub i32 %a, %conv152  ret i32 %out153}154 155define i32 @dech_mul(i32 %a) {156; NO_SCALAR_INC-LABEL: dech_mul:157; NO_SCALAR_INC:       // %bb.0:158; NO_SCALAR_INC-NEXT:    cnth x8, vl16159; NO_SCALAR_INC-NEXT:    mov w9, #7 // =0x7160; NO_SCALAR_INC-NEXT:    msub w0, w8, w9, w0161; NO_SCALAR_INC-NEXT:    ret162;163; CHECK-LABEL: dech_mul:164; CHECK:       // %bb.0:165; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0166; CHECK-NEXT:    dech x0, vl16, mul #7167; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0168; CHECK-NEXT:    ret169  %cnt = call i64 @llvm.aarch64.sve.cnth(i32 9)170  %conv = trunc i64 %cnt to i32171  %mul = mul i32 %conv, 7172  %out = sub i32 %a, %mul173  ret i32 %out174}175 176;177; INCW178;179 180define i32 @incw(i32 %a) {181; NO_SCALAR_INC-LABEL: incw:182; NO_SCALAR_INC:       // %bb.0:183; NO_SCALAR_INC-NEXT:    cntw x8, #16184; NO_SCALAR_INC-NEXT:    add w0, w8, w0185; NO_SCALAR_INC-NEXT:    ret186;187; CHECK-LABEL: incw:188; CHECK:       // %bb.0:189; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0190; CHECK-NEXT:    incw x0, #16191; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0192; CHECK-NEXT:    ret193  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 16)194  %conv = trunc i64 %cnt to i32195  %out = add i32 %conv, %a196  ret i32 %out197}198 199define i32 @incw_mul(i32 %a) {200; NO_SCALAR_INC-LABEL: incw_mul:201; NO_SCALAR_INC:       // %bb.0:202; NO_SCALAR_INC-NEXT:    cntw x8, vl32203; NO_SCALAR_INC-NEXT:    mov w9, #12 // =0xc204; NO_SCALAR_INC-NEXT:    madd w0, w8, w9, w0205; NO_SCALAR_INC-NEXT:    ret206;207; CHECK-LABEL: incw_mul:208; CHECK:       // %bb.0:209; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0210; CHECK-NEXT:    incw x0, vl32, mul #12211; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0212; CHECK-NEXT:    ret213  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 10)214  %conv = trunc i64 %cnt to i32215  %mul = mul i32 %conv, 12216  %out = add i32 %mul, %a217  ret i32 %out218}219 220;221; DECW222;223 224define i32 @decw(i32 %a) {225; NO_SCALAR_INC-LABEL: decw:226; NO_SCALAR_INC:       // %bb.0:227; NO_SCALAR_INC-NEXT:    cntw x8, vl64228; NO_SCALAR_INC-NEXT:    sub w0, w0, w8229; NO_SCALAR_INC-NEXT:    ret230;231; CHECK-LABEL: decw:232; CHECK:       // %bb.0:233; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0234; CHECK-NEXT:    decw x0, vl64235; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0236; CHECK-NEXT:    ret237  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 11)238  %conv = trunc i64 %cnt to i32239  %out = sub i32 %a, %conv240  ret i32 %out241}242 243define i32 @decw_mul(i32 %a) {244; NO_SCALAR_INC-LABEL: decw_mul:245; NO_SCALAR_INC:       // %bb.0:246; NO_SCALAR_INC-NEXT:    cntw x8, vl128247; NO_SCALAR_INC-NEXT:    sub w0, w0, w8, lsl #4248; NO_SCALAR_INC-NEXT:    ret249;250; CHECK-LABEL: decw_mul:251; CHECK:       // %bb.0:252; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0253; CHECK-NEXT:    decw x0, vl128, mul #16254; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0255; CHECK-NEXT:    ret256  %cnt = call i64 @llvm.aarch64.sve.cntw(i32 12)257  %conv = trunc i64 %cnt to i32258  %mul = mul i32 %conv, 16259  %out = sub i32 %a, %mul260  ret i32 %out261}262 263; INCD264 265define i32 @incd(i32 %base) {266; NO_SCALAR_INC-LABEL: incd:267; NO_SCALAR_INC:       // %bb.0:268; NO_SCALAR_INC-NEXT:    cntd x8, vl64269; NO_SCALAR_INC-NEXT:    add w0, w0, w8270; NO_SCALAR_INC-NEXT:    ret271;272; CHECK-LABEL: incd:273; CHECK:       // %bb.0:274; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0275; CHECK-NEXT:    incd x0, vl64276; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0277; CHECK-NEXT:    ret278  %cnt = tail call i64 @llvm.aarch64.sve.cntd(i32 11)279  %conv = trunc i64 %cnt to i32280  %add = add i32 %base, %conv281  ret i32 %add282}283 284define i32 @incd_mul(i32 %base) {285; NO_SCALAR_INC-LABEL: incd_mul:286; NO_SCALAR_INC:       // %bb.0:287; NO_SCALAR_INC-NEXT:    cntd x8, vl64288; NO_SCALAR_INC-NEXT:    mov w9, #15 // =0xf289; NO_SCALAR_INC-NEXT:    madd w0, w8, w9, w0290; NO_SCALAR_INC-NEXT:    ret291;292; CHECK-LABEL: incd_mul:293; CHECK:       // %bb.0:294; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0295; CHECK-NEXT:    incd x0, vl64, mul #15296; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0297; CHECK-NEXT:    ret298  %cnt = tail call i64 @llvm.aarch64.sve.cntd(i32 11)299  %conv = trunc i64 %cnt to i32300  %mul = mul i32 %conv, 15301  %add = add i32 %base, %mul302  ret i32 %add303}304 305;306; DECD307;308 309define i32 @decd(i32 %a) {310; NO_SCALAR_INC-LABEL: decd:311; NO_SCALAR_INC:       // %bb.0:312; NO_SCALAR_INC-NEXT:    cntd x8, #16313; NO_SCALAR_INC-NEXT:    sub w0, w0, w8314; NO_SCALAR_INC-NEXT:    ret315;316; CHECK-LABEL: decd:317; CHECK:       // %bb.0:318; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0319; CHECK-NEXT:    decd x0, #16320; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0321; CHECK-NEXT:    ret322  %cnt = call i64 @llvm.aarch64.sve.cntd(i32 16)323  %conv = trunc i64 %cnt to i32324  %out = sub i32 %a, %conv325  ret i32 %out326}327 328define i32 @decd_mul(i32 %a) {329; NO_SCALAR_INC-LABEL: decd_mul:330; NO_SCALAR_INC:       // %bb.0:331; NO_SCALAR_INC-NEXT:    cntd x8, vl2332; NO_SCALAR_INC-NEXT:    mov w9, #9 // =0x9333; NO_SCALAR_INC-NEXT:    msub w0, w8, w9, w0334; NO_SCALAR_INC-NEXT:    ret335;336; CHECK-LABEL: decd_mul:337; CHECK:       // %bb.0:338; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0339; CHECK-NEXT:    decd x0, vl2, mul #9340; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0341; CHECK-NEXT:    ret342  %cnt = call i64 @llvm.aarch64.sve.cntd(i32 2)343  %conv = trunc i64 %cnt to i32344  %mul = mul i32 %conv, 9345  %out = sub i32 %a, %mul346  ret i32 %out347}348 349declare i64 @llvm.aarch64.sve.cntb(i32 %pattern)350declare i64 @llvm.aarch64.sve.cnth(i32 %pattern)351declare i64 @llvm.aarch64.sve.cntw(i32 %pattern)352declare i64 @llvm.aarch64.sve.cntd(i32 %pattern)353