884 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=csky -verify-machineinstrs -csky-no-aliases -no-integrated-as -mattr=+e2 < %s \3; RUN: | FileCheck -check-prefix=CSKY %s4 5; These test that we can use both the architectural names (r*) and the ABI names6; (a*, l* etc) to refer to registers in inline asm constraint lists. In each7; case, the named register should be used for the source register of the `addi`.8;9; The inline assembly will, by default, contain the ABI names for the registers.10;11; Parenthesised registers in comments are the other aliases for this register.12 13; NOTE: This test uses `r0` (`a0`) as an input, so it should be saved.14define i32 @explicit_register_r0(i32 %a) nounwind {15; CSKY-LABEL: explicit_register_r0:16; CSKY: # %bb.0:17; CSKY-NEXT: #APP18; CSKY-NEXT: addi a0, a0, 119; CSKY-NEXT: #NO_APP20; CSKY-NEXT: rts1621 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r0}"(i32 %a)22 ret i32 %123}24 25; NOTE: This test uses `r0` (`a0`) as an input, so it should be saved.26define i32 @explicit_register_a0(i32 %a) nounwind {27; CSKY-LABEL: explicit_register_a0:28; CSKY: # %bb.0:29; CSKY-NEXT: #APP30; CSKY-NEXT: addi a0, a0, 131; CSKY-NEXT: #NO_APP32; CSKY-NEXT: rts1633 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{a0}"(i32 %a)34 ret i32 %135}36 37; NOTE: This test uses `r1` (`a1`) as an input, so it should be saved.38define i32 @explicit_register_r1(i32 %a) nounwind {39; CSKY-LABEL: explicit_register_r1:40; CSKY: # %bb.0:41; CSKY-NEXT: mov16 a1, a042; CSKY-NEXT: #APP43; CSKY-NEXT: addi a0, a1, 144; CSKY-NEXT: #NO_APP45; CSKY-NEXT: rts1646 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r1}"(i32 %a)47 ret i32 %148}49 50define i32 @explicit_register_a1(i32 %a) nounwind {51; CSKY-LABEL: explicit_register_a1:52; CSKY: # %bb.0:53; CSKY-NEXT: mov16 a1, a054; CSKY-NEXT: #APP55; CSKY-NEXT: addi a0, a1, 156; CSKY-NEXT: #NO_APP57; CSKY-NEXT: rts1658 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{a1}"(i32 %a)59 ret i32 %160}61 62; NOTE: This test uses `r2` (`a2`) as an input, so it should be saved.63define i32 @explicit_register_r2(i32 %a) nounwind {64; CSKY-LABEL: explicit_register_r2:65; CSKY: # %bb.0:66; CSKY-NEXT: mov16 a2, a067; CSKY-NEXT: #APP68; CSKY-NEXT: addi a0, a2, 169; CSKY-NEXT: #NO_APP70; CSKY-NEXT: rts1671 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r2}"(i32 %a)72 ret i32 %173}74 75define i32 @explicit_register_a2(i32 %a) nounwind {76; CSKY-LABEL: explicit_register_a2:77; CSKY: # %bb.0:78; CSKY-NEXT: mov16 a2, a079; CSKY-NEXT: #APP80; CSKY-NEXT: addi a0, a2, 181; CSKY-NEXT: #NO_APP82; CSKY-NEXT: rts1683 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{a2}"(i32 %a)84 ret i32 %185}86 87; NOTE: This test uses `r3` (`a3`) as an input, so it should be saved.88define i32 @explicit_register_r3(i32 %a) nounwind {89; CSKY-LABEL: explicit_register_r3:90; CSKY: # %bb.0:91; CSKY-NEXT: mov16 a3, a092; CSKY-NEXT: #APP93; CSKY-NEXT: addi a0, a3, 194; CSKY-NEXT: #NO_APP95; CSKY-NEXT: rts1696 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r3}"(i32 %a)97 ret i32 %198}99 100define i32 @explicit_register_a3(i32 %a) nounwind {101; CSKY-LABEL: explicit_register_a3:102; CSKY: # %bb.0:103; CSKY-NEXT: mov16 a3, a0104; CSKY-NEXT: #APP105; CSKY-NEXT: addi a0, a3, 1106; CSKY-NEXT: #NO_APP107; CSKY-NEXT: rts16108 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{a3}"(i32 %a)109 ret i32 %1110}111 112; NOTE: This test uses `r4` (`l0`) as an input, so it should be saved.113define i32 @explicit_register_r4(i32 %a) nounwind {114; CSKY-LABEL: explicit_register_r4:115; CSKY: # %bb.0:116; CSKY-NEXT: subi16 sp, sp, 4117; CSKY-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill118; CSKY-NEXT: mov16 l0, a0119; CSKY-NEXT: #APP120; CSKY-NEXT: addi a0, l0, 1121; CSKY-NEXT: #NO_APP122; CSKY-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload123; CSKY-NEXT: addi16 sp, sp, 4124; CSKY-NEXT: rts16125 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r4}"(i32 %a)126 ret i32 %1127}128 129define i32 @explicit_register_l0(i32 %a) nounwind {130; CSKY-LABEL: explicit_register_l0:131; CSKY: # %bb.0:132; CSKY-NEXT: subi16 sp, sp, 4133; CSKY-NEXT: st16.w l0, (sp, 0) # 4-byte Folded Spill134; CSKY-NEXT: mov16 l0, a0135; CSKY-NEXT: #APP136; CSKY-NEXT: addi a0, l0, 1137; CSKY-NEXT: #NO_APP138; CSKY-NEXT: ld16.w l0, (sp, 0) # 4-byte Folded Reload139; CSKY-NEXT: addi16 sp, sp, 4140; CSKY-NEXT: rts16141 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l0}"(i32 %a)142 ret i32 %1143}144 145; NOTE: This test uses `r5` (`l1`) as an input, so it should be saved.146define i32 @explicit_register_r5(i32 %a) nounwind {147; CSKY-LABEL: explicit_register_r5:148; CSKY: # %bb.0:149; CSKY-NEXT: subi16 sp, sp, 4150; CSKY-NEXT: st16.w l1, (sp, 0) # 4-byte Folded Spill151; CSKY-NEXT: mov16 l1, a0152; CSKY-NEXT: #APP153; CSKY-NEXT: addi a0, l1, 1154; CSKY-NEXT: #NO_APP155; CSKY-NEXT: ld16.w l1, (sp, 0) # 4-byte Folded Reload156; CSKY-NEXT: addi16 sp, sp, 4157; CSKY-NEXT: rts16158 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r5}"(i32 %a)159 ret i32 %1160}161 162define i32 @explicit_register_l1(i32 %a) nounwind {163; CSKY-LABEL: explicit_register_l1:164; CSKY: # %bb.0:165; CSKY-NEXT: subi16 sp, sp, 4166; CSKY-NEXT: st16.w l1, (sp, 0) # 4-byte Folded Spill167; CSKY-NEXT: mov16 l1, a0168; CSKY-NEXT: #APP169; CSKY-NEXT: addi a0, l1, 1170; CSKY-NEXT: #NO_APP171; CSKY-NEXT: ld16.w l1, (sp, 0) # 4-byte Folded Reload172; CSKY-NEXT: addi16 sp, sp, 4173; CSKY-NEXT: rts16174 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l1}"(i32 %a)175 ret i32 %1176}177 178; NOTE: This test uses `r6` (`l2`) as an input, so it should be saved.179define i32 @explicit_register_r6(i32 %a) nounwind {180; CSKY-LABEL: explicit_register_r6:181; CSKY: # %bb.0:182; CSKY-NEXT: subi16 sp, sp, 4183; CSKY-NEXT: st16.w l2, (sp, 0) # 4-byte Folded Spill184; CSKY-NEXT: mov16 l2, a0185; CSKY-NEXT: #APP186; CSKY-NEXT: addi a0, l2, 1187; CSKY-NEXT: #NO_APP188; CSKY-NEXT: ld16.w l2, (sp, 0) # 4-byte Folded Reload189; CSKY-NEXT: addi16 sp, sp, 4190; CSKY-NEXT: rts16191 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r6}"(i32 %a)192 ret i32 %1193}194 195define i32 @explicit_register_l2(i32 %a) nounwind {196; CSKY-LABEL: explicit_register_l2:197; CSKY: # %bb.0:198; CSKY-NEXT: subi16 sp, sp, 4199; CSKY-NEXT: st16.w l2, (sp, 0) # 4-byte Folded Spill200; CSKY-NEXT: mov16 l2, a0201; CSKY-NEXT: #APP202; CSKY-NEXT: addi a0, l2, 1203; CSKY-NEXT: #NO_APP204; CSKY-NEXT: ld16.w l2, (sp, 0) # 4-byte Folded Reload205; CSKY-NEXT: addi16 sp, sp, 4206; CSKY-NEXT: rts16207 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l2}"(i32 %a)208 ret i32 %1209}210 211; NOTE: This test uses `r7` (`l3`) as an input, so it should be saved.212define i32 @explicit_register_r7(i32 %a) nounwind {213; CSKY-LABEL: explicit_register_r7:214; CSKY: # %bb.0:215; CSKY-NEXT: subi16 sp, sp, 4216; CSKY-NEXT: st16.w l3, (sp, 0) # 4-byte Folded Spill217; CSKY-NEXT: mov16 l3, a0218; CSKY-NEXT: #APP219; CSKY-NEXT: addi a0, l3, 1220; CSKY-NEXT: #NO_APP221; CSKY-NEXT: ld16.w l3, (sp, 0) # 4-byte Folded Reload222; CSKY-NEXT: addi16 sp, sp, 4223; CSKY-NEXT: rts16224 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r7}"(i32 %a)225 ret i32 %1226}227 228define i32 @explicit_register_l3(i32 %a) nounwind {229; CSKY-LABEL: explicit_register_l3:230; CSKY: # %bb.0:231; CSKY-NEXT: subi16 sp, sp, 4232; CSKY-NEXT: st16.w l3, (sp, 0) # 4-byte Folded Spill233; CSKY-NEXT: mov16 l3, a0234; CSKY-NEXT: #APP235; CSKY-NEXT: addi a0, l3, 1236; CSKY-NEXT: #NO_APP237; CSKY-NEXT: ld16.w l3, (sp, 0) # 4-byte Folded Reload238; CSKY-NEXT: addi16 sp, sp, 4239; CSKY-NEXT: rts16240 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l3}"(i32 %a)241 ret i32 %1242}243 244; NOTE: This test uses `r8` (`l4`) as an input, so it should be saved.245define i32 @explicit_register_r8(i32 %a) nounwind {246; CSKY-LABEL: explicit_register_r8:247; CSKY: # %bb.0:248; CSKY-NEXT: subi16 sp, sp, 4249; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill250; CSKY-NEXT: mov16 l4, a0251; CSKY-NEXT: #APP252; CSKY-NEXT: addi a0, l4, 1253; CSKY-NEXT: #NO_APP254; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload255; CSKY-NEXT: addi16 sp, sp, 4256; CSKY-NEXT: rts16257 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r8}"(i32 %a)258 ret i32 %1259}260 261define i32 @explicit_register_l4(i32 %a) nounwind {262; CSKY-LABEL: explicit_register_l4:263; CSKY: # %bb.0:264; CSKY-NEXT: subi16 sp, sp, 4265; CSKY-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill266; CSKY-NEXT: mov16 l4, a0267; CSKY-NEXT: #APP268; CSKY-NEXT: addi a0, l4, 1269; CSKY-NEXT: #NO_APP270; CSKY-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload271; CSKY-NEXT: addi16 sp, sp, 4272; CSKY-NEXT: rts16273 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l4}"(i32 %a)274 ret i32 %1275}276 277; NOTE: This test uses `r9` (`l5`) as an input, so it should be saved.278define i32 @explicit_register_r9(i32 %a) nounwind {279; CSKY-LABEL: explicit_register_r9:280; CSKY: # %bb.0:281; CSKY-NEXT: subi16 sp, sp, 4282; CSKY-NEXT: st32.w l5, (sp, 0) # 4-byte Folded Spill283; CSKY-NEXT: mov16 l5, a0284; CSKY-NEXT: #APP285; CSKY-NEXT: addi a0, l5, 1286; CSKY-NEXT: #NO_APP287; CSKY-NEXT: ld32.w l5, (sp, 0) # 4-byte Folded Reload288; CSKY-NEXT: addi16 sp, sp, 4289; CSKY-NEXT: rts16290 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r9}"(i32 %a)291 ret i32 %1292}293 294define i32 @explicit_register_l5(i32 %a) nounwind {295; CSKY-LABEL: explicit_register_l5:296; CSKY: # %bb.0:297; CSKY-NEXT: subi16 sp, sp, 4298; CSKY-NEXT: st32.w l5, (sp, 0) # 4-byte Folded Spill299; CSKY-NEXT: mov16 l5, a0300; CSKY-NEXT: #APP301; CSKY-NEXT: addi a0, l5, 1302; CSKY-NEXT: #NO_APP303; CSKY-NEXT: ld32.w l5, (sp, 0) # 4-byte Folded Reload304; CSKY-NEXT: addi16 sp, sp, 4305; CSKY-NEXT: rts16306 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l5}"(i32 %a)307 ret i32 %1308}309 310; NOTE: This test uses `r10` (`l6`) as an input, so it should be saved.311define i32 @explicit_register_r10(i32 %a) nounwind {312; CSKY-LABEL: explicit_register_r10:313; CSKY: # %bb.0:314; CSKY-NEXT: subi16 sp, sp, 4315; CSKY-NEXT: st32.w l6, (sp, 0) # 4-byte Folded Spill316; CSKY-NEXT: mov16 l6, a0317; CSKY-NEXT: #APP318; CSKY-NEXT: addi a0, l6, 1319; CSKY-NEXT: #NO_APP320; CSKY-NEXT: ld32.w l6, (sp, 0) # 4-byte Folded Reload321; CSKY-NEXT: addi16 sp, sp, 4322; CSKY-NEXT: rts16323 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r10}"(i32 %a)324 ret i32 %1325}326 327define i32 @explicit_register_l6(i32 %a) nounwind {328; CSKY-LABEL: explicit_register_l6:329; CSKY: # %bb.0:330; CSKY-NEXT: subi16 sp, sp, 4331; CSKY-NEXT: st32.w l6, (sp, 0) # 4-byte Folded Spill332; CSKY-NEXT: mov16 l6, a0333; CSKY-NEXT: #APP334; CSKY-NEXT: addi a0, l6, 1335; CSKY-NEXT: #NO_APP336; CSKY-NEXT: ld32.w l6, (sp, 0) # 4-byte Folded Reload337; CSKY-NEXT: addi16 sp, sp, 4338; CSKY-NEXT: rts16339 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l6}"(i32 %a)340 ret i32 %1341}342 343; NOTE: This test uses `r11` (`l7`) as an input, so it should be saved.344define i32 @explicit_register_r11(i32 %a) nounwind {345; CSKY-LABEL: explicit_register_r11:346; CSKY: # %bb.0:347; CSKY-NEXT: subi16 sp, sp, 4348; CSKY-NEXT: st32.w l7, (sp, 0) # 4-byte Folded Spill349; CSKY-NEXT: mov16 l7, a0350; CSKY-NEXT: #APP351; CSKY-NEXT: addi a0, l7, 1352; CSKY-NEXT: #NO_APP353; CSKY-NEXT: ld32.w l7, (sp, 0) # 4-byte Folded Reload354; CSKY-NEXT: addi16 sp, sp, 4355; CSKY-NEXT: rts16356 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r11}"(i32 %a)357 ret i32 %1358}359 360define i32 @explicit_register_l7(i32 %a) nounwind {361; CSKY-LABEL: explicit_register_l7:362; CSKY: # %bb.0:363; CSKY-NEXT: subi16 sp, sp, 4364; CSKY-NEXT: st32.w l7, (sp, 0) # 4-byte Folded Spill365; CSKY-NEXT: mov16 l7, a0366; CSKY-NEXT: #APP367; CSKY-NEXT: addi a0, l7, 1368; CSKY-NEXT: #NO_APP369; CSKY-NEXT: ld32.w l7, (sp, 0) # 4-byte Folded Reload370; CSKY-NEXT: addi16 sp, sp, 4371; CSKY-NEXT: rts16372 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l7}"(i32 %a)373 ret i32 %1374}375 376; NOTE: This test uses `r12` (`t0`) as an input, so it should be saved.377define i32 @explicit_register_r12(i32 %a) nounwind {378; CSKY-LABEL: explicit_register_r12:379; CSKY: # %bb.0:380; CSKY-NEXT: mov16 t0, a0381; CSKY-NEXT: #APP382; CSKY-NEXT: addi a0, t0, 1383; CSKY-NEXT: #NO_APP384; CSKY-NEXT: rts16385 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r12}"(i32 %a)386 ret i32 %1387}388 389define i32 @explicit_register_t0(i32 %a) nounwind {390; CSKY-LABEL: explicit_register_t0:391; CSKY: # %bb.0:392; CSKY-NEXT: mov16 t0, a0393; CSKY-NEXT: #APP394; CSKY-NEXT: addi a0, t0, 1395; CSKY-NEXT: #NO_APP396; CSKY-NEXT: rts16397 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t0}"(i32 %a)398 ret i32 %1399}400 401; NOTE: This test uses `r13` (`t1`) as an input, so it should be saved.402define i32 @explicit_register_r13(i32 %a) nounwind {403; CSKY-LABEL: explicit_register_r13:404; CSKY: # %bb.0:405; CSKY-NEXT: mov16 t1, a0406; CSKY-NEXT: #APP407; CSKY-NEXT: addi a0, t1, 1408; CSKY-NEXT: #NO_APP409; CSKY-NEXT: rts16410 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r13}"(i32 %a)411 ret i32 %1412}413 414define i32 @explicit_register_t1(i32 %a) nounwind {415; CSKY-LABEL: explicit_register_t1:416; CSKY: # %bb.0:417; CSKY-NEXT: mov16 t1, a0418; CSKY-NEXT: #APP419; CSKY-NEXT: addi a0, t1, 1420; CSKY-NEXT: #NO_APP421; CSKY-NEXT: rts16422 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t1}"(i32 %a)423 ret i32 %1424}425 426; NOTE: This test uses `r14` (`sp`) as an input, so it should be saved.427define i32 @explicit_register_r14(i32 %a) nounwind {428; CSKY-LABEL: explicit_register_r14:429; CSKY: # %bb.0:430; CSKY-NEXT: mov16 sp, a0431; CSKY-NEXT: #APP432; CSKY-NEXT: addi a0, sp, 1433; CSKY-NEXT: #NO_APP434; CSKY-NEXT: rts16435 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r14}"(i32 %a)436 ret i32 %1437}438 439define i32 @explicit_register_sp(i32 %a) nounwind {440; CSKY-LABEL: explicit_register_sp:441; CSKY: # %bb.0:442; CSKY-NEXT: mov16 sp, a0443; CSKY-NEXT: #APP444; CSKY-NEXT: addi a0, sp, 1445; CSKY-NEXT: #NO_APP446; CSKY-NEXT: rts16447 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{sp}"(i32 %a)448 ret i32 %1449}450 451; NOTE: This test uses `r15` (`lr`) as an input, so it should be saved.452define i32 @explicit_register_r15(i32 %a) nounwind {453; CSKY-LABEL: explicit_register_r15:454; CSKY: # %bb.0:455; CSKY-NEXT: subi16 sp, sp, 4456; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill457; CSKY-NEXT: mov16 lr, a0458; CSKY-NEXT: #APP459; CSKY-NEXT: addi a0, lr, 1460; CSKY-NEXT: #NO_APP461; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload462; CSKY-NEXT: addi16 sp, sp, 4463; CSKY-NEXT: rts16464 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r15}"(i32 %a)465 ret i32 %1466}467 468define i32 @explicit_register_lr(i32 %a) nounwind {469; CSKY-LABEL: explicit_register_lr:470; CSKY: # %bb.0:471; CSKY-NEXT: subi16 sp, sp, 4472; CSKY-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill473; CSKY-NEXT: mov16 lr, a0474; CSKY-NEXT: #APP475; CSKY-NEXT: addi a0, lr, 1476; CSKY-NEXT: #NO_APP477; CSKY-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload478; CSKY-NEXT: addi16 sp, sp, 4479; CSKY-NEXT: rts16480 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{lr}"(i32 %a)481 ret i32 %1482}483 484; NOTE: This test uses `r16` (`l8`) as an input, so it should be saved.485define i32 @explicit_register_r16(i32 %a) nounwind {486; CSKY-LABEL: explicit_register_r16:487; CSKY: # %bb.0:488; CSKY-NEXT: subi16 sp, sp, 4489; CSKY-NEXT: st32.w l8, (sp, 0) # 4-byte Folded Spill490; CSKY-NEXT: mov32 l8, a0491; CSKY-NEXT: #APP492; CSKY-NEXT: addi a0, l8, 1493; CSKY-NEXT: #NO_APP494; CSKY-NEXT: ld32.w l8, (sp, 0) # 4-byte Folded Reload495; CSKY-NEXT: addi16 sp, sp, 4496; CSKY-NEXT: rts16497 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r16}"(i32 %a)498 ret i32 %1499}500 501define i32 @explicit_register_l8(i32 %a) nounwind {502; CSKY-LABEL: explicit_register_l8:503; CSKY: # %bb.0:504; CSKY-NEXT: subi16 sp, sp, 4505; CSKY-NEXT: st32.w l8, (sp, 0) # 4-byte Folded Spill506; CSKY-NEXT: mov32 l8, a0507; CSKY-NEXT: #APP508; CSKY-NEXT: addi a0, l8, 1509; CSKY-NEXT: #NO_APP510; CSKY-NEXT: ld32.w l8, (sp, 0) # 4-byte Folded Reload511; CSKY-NEXT: addi16 sp, sp, 4512; CSKY-NEXT: rts16513 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l8}"(i32 %a)514 ret i32 %1515}516 517; NOTE: This test uses `r17` (`l9`) as an input, so it should be saved.518define i32 @explicit_register_r17(i32 %a) nounwind {519; CSKY-LABEL: explicit_register_r17:520; CSKY: # %bb.0:521; CSKY-NEXT: subi16 sp, sp, 4522; CSKY-NEXT: st32.w l9, (sp, 0) # 4-byte Folded Spill523; CSKY-NEXT: mov32 l9, a0524; CSKY-NEXT: #APP525; CSKY-NEXT: addi a0, l9, 1526; CSKY-NEXT: #NO_APP527; CSKY-NEXT: ld32.w l9, (sp, 0) # 4-byte Folded Reload528; CSKY-NEXT: addi16 sp, sp, 4529; CSKY-NEXT: rts16530 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r17}"(i32 %a)531 ret i32 %1532}533 534define i32 @explicit_register_l9(i32 %a) nounwind {535; CSKY-LABEL: explicit_register_l9:536; CSKY: # %bb.0:537; CSKY-NEXT: subi16 sp, sp, 4538; CSKY-NEXT: st32.w l9, (sp, 0) # 4-byte Folded Spill539; CSKY-NEXT: mov32 l9, a0540; CSKY-NEXT: #APP541; CSKY-NEXT: addi a0, l9, 1542; CSKY-NEXT: #NO_APP543; CSKY-NEXT: ld32.w l9, (sp, 0) # 4-byte Folded Reload544; CSKY-NEXT: addi16 sp, sp, 4545; CSKY-NEXT: rts16546 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{l9}"(i32 %a)547 ret i32 %1548}549 550; NOTE: This test uses `r18` (`t2`) as an input, so it should be saved.551define i32 @explicit_register_r18(i32 %a) nounwind {552; CSKY-LABEL: explicit_register_r18:553; CSKY: # %bb.0:554; CSKY-NEXT: mov32 t2, a0555; CSKY-NEXT: #APP556; CSKY-NEXT: addi a0, t2, 1557; CSKY-NEXT: #NO_APP558; CSKY-NEXT: rts16559 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r18}"(i32 %a)560 ret i32 %1561}562 563define i32 @explicit_register_t2(i32 %a) nounwind {564; CSKY-LABEL: explicit_register_t2:565; CSKY: # %bb.0:566; CSKY-NEXT: mov32 t2, a0567; CSKY-NEXT: #APP568; CSKY-NEXT: addi a0, t2, 1569; CSKY-NEXT: #NO_APP570; CSKY-NEXT: rts16571 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t2}"(i32 %a)572 ret i32 %1573}574 575; NOTE: This test uses `r19` (`t3`) as an input, so it should be saved.576define i32 @explicit_register_r19(i32 %a) nounwind {577; CSKY-LABEL: explicit_register_r19:578; CSKY: # %bb.0:579; CSKY-NEXT: mov32 t3, a0580; CSKY-NEXT: #APP581; CSKY-NEXT: addi a0, t3, 1582; CSKY-NEXT: #NO_APP583; CSKY-NEXT: rts16584 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r19}"(i32 %a)585 ret i32 %1586}587 588define i32 @explicit_register_t3(i32 %a) nounwind {589; CSKY-LABEL: explicit_register_t3:590; CSKY: # %bb.0:591; CSKY-NEXT: mov32 t3, a0592; CSKY-NEXT: #APP593; CSKY-NEXT: addi a0, t3, 1594; CSKY-NEXT: #NO_APP595; CSKY-NEXT: rts16596 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t3}"(i32 %a)597 ret i32 %1598}599 600; NOTE: This test uses `r20` (`t4`) as an input, so it should be saved.601define i32 @explicit_register_r20(i32 %a) nounwind {602; CSKY-LABEL: explicit_register_r20:603; CSKY: # %bb.0:604; CSKY-NEXT: mov32 t4, a0605; CSKY-NEXT: #APP606; CSKY-NEXT: addi a0, t4, 1607; CSKY-NEXT: #NO_APP608; CSKY-NEXT: rts16609 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r20}"(i32 %a)610 ret i32 %1611}612 613define i32 @explicit_register_t4(i32 %a) nounwind {614; CSKY-LABEL: explicit_register_t4:615; CSKY: # %bb.0:616; CSKY-NEXT: mov32 t4, a0617; CSKY-NEXT: #APP618; CSKY-NEXT: addi a0, t4, 1619; CSKY-NEXT: #NO_APP620; CSKY-NEXT: rts16621 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t4}"(i32 %a)622 ret i32 %1623}624 625; NOTE: This test uses `r21` (`t5`) as an input, so it should be saved.626define i32 @explicit_register_r21(i32 %a) nounwind {627; CSKY-LABEL: explicit_register_r21:628; CSKY: # %bb.0:629; CSKY-NEXT: mov32 t5, a0630; CSKY-NEXT: #APP631; CSKY-NEXT: addi a0, t5, 1632; CSKY-NEXT: #NO_APP633; CSKY-NEXT: rts16634 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r21}"(i32 %a)635 ret i32 %1636}637 638define i32 @explicit_register_t5(i32 %a) nounwind {639; CSKY-LABEL: explicit_register_t5:640; CSKY: # %bb.0:641; CSKY-NEXT: mov32 t5, a0642; CSKY-NEXT: #APP643; CSKY-NEXT: addi a0, t5, 1644; CSKY-NEXT: #NO_APP645; CSKY-NEXT: rts16646 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t5}"(i32 %a)647 ret i32 %1648}649 650; NOTE: This test uses `r22` (`t6`) as an input, so it should be saved.651define i32 @explicit_register_r22(i32 %a) nounwind {652; CSKY-LABEL: explicit_register_r22:653; CSKY: # %bb.0:654; CSKY-NEXT: mov32 t6, a0655; CSKY-NEXT: #APP656; CSKY-NEXT: addi a0, t6, 1657; CSKY-NEXT: #NO_APP658; CSKY-NEXT: rts16659 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r22}"(i32 %a)660 ret i32 %1661}662 663define i32 @explicit_register_t6(i32 %a) nounwind {664; CSKY-LABEL: explicit_register_t6:665; CSKY: # %bb.0:666; CSKY-NEXT: mov32 t6, a0667; CSKY-NEXT: #APP668; CSKY-NEXT: addi a0, t6, 1669; CSKY-NEXT: #NO_APP670; CSKY-NEXT: rts16671 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t6}"(i32 %a)672 ret i32 %1673}674 675; NOTE: This test uses `r23` (`t7`) as an input, so it should be saved.676define i32 @explicit_register_r23(i32 %a) nounwind {677; CSKY-LABEL: explicit_register_r23:678; CSKY: # %bb.0:679; CSKY-NEXT: mov32 t7, a0680; CSKY-NEXT: #APP681; CSKY-NEXT: addi a0, t7, 1682; CSKY-NEXT: #NO_APP683; CSKY-NEXT: rts16684 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r23}"(i32 %a)685 ret i32 %1686}687 688define i32 @explicit_register_t7(i32 %a) nounwind {689; CSKY-LABEL: explicit_register_t7:690; CSKY: # %bb.0:691; CSKY-NEXT: mov32 t7, a0692; CSKY-NEXT: #APP693; CSKY-NEXT: addi a0, t7, 1694; CSKY-NEXT: #NO_APP695; CSKY-NEXT: rts16696 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t7}"(i32 %a)697 ret i32 %1698}699 700; NOTE: This test uses `r24` (`t8`) as an input, so it should be saved.701define i32 @explicit_register_r24(i32 %a) nounwind {702; CSKY-LABEL: explicit_register_r24:703; CSKY: # %bb.0:704; CSKY-NEXT: mov32 t8, a0705; CSKY-NEXT: #APP706; CSKY-NEXT: addi a0, t8, 1707; CSKY-NEXT: #NO_APP708; CSKY-NEXT: rts16709 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r24}"(i32 %a)710 ret i32 %1711}712 713define i32 @explicit_register_t8(i32 %a) nounwind {714; CSKY-LABEL: explicit_register_t8:715; CSKY: # %bb.0:716; CSKY-NEXT: mov32 t8, a0717; CSKY-NEXT: #APP718; CSKY-NEXT: addi a0, t8, 1719; CSKY-NEXT: #NO_APP720; CSKY-NEXT: rts16721 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t8}"(i32 %a)722 ret i32 %1723}724 725; NOTE: This test uses `r25` (`t9`) as an input, so it should be saved.726define i32 @explicit_register_r25(i32 %a) nounwind {727; CSKY-LABEL: explicit_register_r25:728; CSKY: # %bb.0:729; CSKY-NEXT: mov32 t9, a0730; CSKY-NEXT: #APP731; CSKY-NEXT: addi a0, t9, 1732; CSKY-NEXT: #NO_APP733; CSKY-NEXT: rts16734 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r25}"(i32 %a)735 ret i32 %1736}737 738define i32 @explicit_register_t9(i32 %a) nounwind {739; CSKY-LABEL: explicit_register_t9:740; CSKY: # %bb.0:741; CSKY-NEXT: mov32 t9, a0742; CSKY-NEXT: #APP743; CSKY-NEXT: addi a0, t9, 1744; CSKY-NEXT: #NO_APP745; CSKY-NEXT: rts16746 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{t9}"(i32 %a)747 ret i32 %1748}749 750; NOTE: This test uses `r26` (`r26`) as an input, so it should be saved.751define i32 @explicit_register_r26(i32 %a) nounwind {752; CSKY-LABEL: explicit_register_r26:753; CSKY: # %bb.0:754; CSKY-NEXT: mov32 r26, a0755; CSKY-NEXT: #APP756; CSKY-NEXT: addi a0, r26, 1757; CSKY-NEXT: #NO_APP758; CSKY-NEXT: rts16759 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r26}"(i32 %a)760 ret i32 %1761}762 763 764; NOTE: This test uses `r27` (`r27`) as an input, so it should be saved.765define i32 @explicit_register_r27(i32 %a) nounwind {766; CSKY-LABEL: explicit_register_r27:767; CSKY: # %bb.0:768; CSKY-NEXT: mov32 r27, a0769; CSKY-NEXT: #APP770; CSKY-NEXT: addi a0, r27, 1771; CSKY-NEXT: #NO_APP772; CSKY-NEXT: rts16773 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r27}"(i32 %a)774 ret i32 %1775}776 777; NOTE: This test uses `r28` (`rgb`) as an input, so it should be saved.778define i32 @explicit_register_r28(i32 %a) nounwind {779; CSKY-LABEL: explicit_register_r28:780; CSKY: # %bb.0:781; CSKY-NEXT: subi16 sp, sp, 4782; CSKY-NEXT: st32.w rgb, (sp, 0) # 4-byte Folded Spill783; CSKY-NEXT: mov32 rgb, a0784; CSKY-NEXT: #APP785; CSKY-NEXT: addi a0, rgb, 1786; CSKY-NEXT: #NO_APP787; CSKY-NEXT: ld32.w rgb, (sp, 0) # 4-byte Folded Reload788; CSKY-NEXT: addi16 sp, sp, 4789; CSKY-NEXT: rts16790 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r28}"(i32 %a)791 ret i32 %1792}793 794define i32 @explicit_register_rgb(i32 %a) nounwind {795; CSKY-LABEL: explicit_register_rgb:796; CSKY: # %bb.0:797; CSKY-NEXT: subi16 sp, sp, 4798; CSKY-NEXT: st32.w rgb, (sp, 0) # 4-byte Folded Spill799; CSKY-NEXT: mov32 rgb, a0800; CSKY-NEXT: #APP801; CSKY-NEXT: addi a0, rgb, 1802; CSKY-NEXT: #NO_APP803; CSKY-NEXT: ld32.w rgb, (sp, 0) # 4-byte Folded Reload804; CSKY-NEXT: addi16 sp, sp, 4805; CSKY-NEXT: rts16806 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{rgb}"(i32 %a)807 ret i32 %1808}809 810; NOTE: This test uses `r29` (`rtb`) as an input, so it should be saved.811define i32 @explicit_register_r29(i32 %a) nounwind {812; CSKY-LABEL: explicit_register_r29:813; CSKY: # %bb.0:814; CSKY-NEXT: mov32 rtb, a0815; CSKY-NEXT: #APP816; CSKY-NEXT: addi a0, rtb, 1817; CSKY-NEXT: #NO_APP818; CSKY-NEXT: rts16819 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r29}"(i32 %a)820 ret i32 %1821}822 823define i32 @explicit_register_rtb(i32 %a) nounwind {824; CSKY-LABEL: explicit_register_rtb:825; CSKY: # %bb.0:826; CSKY-NEXT: mov32 rtb, a0827; CSKY-NEXT: #APP828; CSKY-NEXT: addi a0, rtb, 1829; CSKY-NEXT: #NO_APP830; CSKY-NEXT: rts16831 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{rtb}"(i32 %a)832 ret i32 %1833}834 835; NOTE: This test uses `r30` (`svbr`) as an input, so it should be saved.836define i32 @explicit_register_r30(i32 %a) nounwind {837; CSKY-LABEL: explicit_register_r30:838; CSKY: # %bb.0:839; CSKY-NEXT: mov32 svbr, a0840; CSKY-NEXT: #APP841; CSKY-NEXT: addi a0, svbr, 1842; CSKY-NEXT: #NO_APP843; CSKY-NEXT: rts16844 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r30}"(i32 %a)845 ret i32 %1846}847 848define i32 @explicit_register_svbr(i32 %a) nounwind {849; CSKY-LABEL: explicit_register_svbr:850; CSKY: # %bb.0:851; CSKY-NEXT: mov32 svbr, a0852; CSKY-NEXT: #APP853; CSKY-NEXT: addi a0, svbr, 1854; CSKY-NEXT: #NO_APP855; CSKY-NEXT: rts16856 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{svbr}"(i32 %a)857 ret i32 %1858}859 860; NOTE: This test uses `r31` (`tls`) as an input, so it should be saved.861define i32 @explicit_register_r31(i32 %a) nounwind {862; CSKY-LABEL: explicit_register_r31:863; CSKY: # %bb.0:864; CSKY-NEXT: mov32 tls, a0865; CSKY-NEXT: #APP866; CSKY-NEXT: addi a0, tls, 1867; CSKY-NEXT: #NO_APP868; CSKY-NEXT: rts16869 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{r31}"(i32 %a)870 ret i32 %1871}872 873define i32 @explicit_register_tls(i32 %a) nounwind {874; CSKY-LABEL: explicit_register_tls:875; CSKY: # %bb.0:876; CSKY-NEXT: mov32 tls, a0877; CSKY-NEXT: #APP878; CSKY-NEXT: addi a0, tls, 1879; CSKY-NEXT: #NO_APP880; CSKY-NEXT: rts16881 %1 = tail call i32 asm "addi $0, $1, 1", "=r,{tls}"(i32 %a)882 ret i32 %1883}884