431 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -csky-no-aliases -mattr=+e2 -mattr=+2e3 < %s -mtriple=csky | FileCheck %s3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky | FileCheck %s --check-prefix=GENERIC4 5; i32/i16/i8/i1 --> i646define i64 @zextR_i64_0(i32 %x) {7; CHECK-LABEL: zextR_i64_0:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: movi16 a1, 010; CHECK-NEXT: rts1611;12; GENERIC-LABEL: zextR_i64_0:13; GENERIC: # %bb.0: # %entry14; GENERIC-NEXT: .cfi_def_cfa_offset 015; GENERIC-NEXT: subi16 sp, sp, 416; GENERIC-NEXT: .cfi_def_cfa_offset 417; GENERIC-NEXT: movi16 a1, 018; GENERIC-NEXT: addi16 sp, sp, 419; GENERIC-NEXT: rts1620entry:21 %zext = zext i32 %x to i6422 ret i64 %zext23}24 25define i64 @zextR_i64_1(i16 %x) {26; CHECK-LABEL: zextR_i64_1:27; CHECK: # %bb.0: # %entry28; CHECK-NEXT: zexth16 a0, a029; CHECK-NEXT: movi16 a1, 030; CHECK-NEXT: rts1631;32; GENERIC-LABEL: zextR_i64_1:33; GENERIC: # %bb.0: # %entry34; GENERIC-NEXT: .cfi_def_cfa_offset 035; GENERIC-NEXT: subi16 sp, sp, 436; GENERIC-NEXT: .cfi_def_cfa_offset 437; GENERIC-NEXT: movi16 a1, 038; GENERIC-NEXT: lsli16 a2, a1, 2439; GENERIC-NEXT: lsli16 a1, a1, 1640; GENERIC-NEXT: or16 a1, a241; GENERIC-NEXT: movi16 a2, 25542; GENERIC-NEXT: lsli16 a3, a2, 843; GENERIC-NEXT: or16 a3, a144; GENERIC-NEXT: or16 a3, a245; GENERIC-NEXT: and16 a0, a346; GENERIC-NEXT: movi16 a1, 047; GENERIC-NEXT: addi16 sp, sp, 448; GENERIC-NEXT: rts1649entry:50 %zext = zext i16 %x to i6451 ret i64 %zext52}53 54define i64 @zextR_i64_2(i8 %x) {55; CHECK-LABEL: zextR_i64_2:56; CHECK: # %bb.0: # %entry57; CHECK-NEXT: zextb16 a0, a058; CHECK-NEXT: movi16 a1, 059; CHECK-NEXT: rts1660;61; GENERIC-LABEL: zextR_i64_2:62; GENERIC: # %bb.0: # %entry63; GENERIC-NEXT: .cfi_def_cfa_offset 064; GENERIC-NEXT: subi16 sp, sp, 465; GENERIC-NEXT: .cfi_def_cfa_offset 466; GENERIC-NEXT: movi16 a1, 25567; GENERIC-NEXT: and16 a0, a168; GENERIC-NEXT: movi16 a1, 069; GENERIC-NEXT: addi16 sp, sp, 470; GENERIC-NEXT: rts1671entry:72 %zext = zext i8 %x to i6473 ret i64 %zext74}75 76define i64 @zextR_i64_3(i1 %x) {77; CHECK-LABEL: zextR_i64_3:78; CHECK: # %bb.0: # %entry79; CHECK-NEXT: andi32 a0, a0, 180; CHECK-NEXT: movi16 a1, 081; CHECK-NEXT: rts1682;83; GENERIC-LABEL: zextR_i64_3:84; GENERIC: # %bb.0: # %entry85; GENERIC-NEXT: .cfi_def_cfa_offset 086; GENERIC-NEXT: subi16 sp, sp, 487; GENERIC-NEXT: .cfi_def_cfa_offset 488; GENERIC-NEXT: movi16 a1, 189; GENERIC-NEXT: and16 a0, a190; GENERIC-NEXT: movi16 a1, 091; GENERIC-NEXT: addi16 sp, sp, 492; GENERIC-NEXT: rts1693entry:94 %zext = zext i1 %x to i6495 ret i64 %zext96}97 98; i16/i8/i1 --> i3299define i32 @zextR_i32_1(i16 %x) {100; CHECK-LABEL: zextR_i32_1:101; CHECK: # %bb.0: # %entry102; CHECK-NEXT: zexth16 a0, a0103; CHECK-NEXT: rts16104;105; GENERIC-LABEL: zextR_i32_1:106; GENERIC: # %bb.0: # %entry107; GENERIC-NEXT: .cfi_def_cfa_offset 0108; GENERIC-NEXT: subi16 sp, sp, 4109; GENERIC-NEXT: .cfi_def_cfa_offset 4110; GENERIC-NEXT: movi16 a1, 0111; GENERIC-NEXT: lsli16 a2, a1, 24112; GENERIC-NEXT: lsli16 a1, a1, 16113; GENERIC-NEXT: or16 a1, a2114; GENERIC-NEXT: movi16 a2, 255115; GENERIC-NEXT: lsli16 a3, a2, 8116; GENERIC-NEXT: or16 a3, a1117; GENERIC-NEXT: or16 a3, a2118; GENERIC-NEXT: and16 a0, a3119; GENERIC-NEXT: addi16 sp, sp, 4120; GENERIC-NEXT: rts16121entry:122 %zext = zext i16 %x to i32123 ret i32 %zext124}125 126define i32 @zextR_i32_2(i8 %x) {127; CHECK-LABEL: zextR_i32_2:128; CHECK: # %bb.0: # %entry129; CHECK-NEXT: zextb16 a0, a0130; CHECK-NEXT: rts16131;132; GENERIC-LABEL: zextR_i32_2:133; GENERIC: # %bb.0: # %entry134; GENERIC-NEXT: .cfi_def_cfa_offset 0135; GENERIC-NEXT: subi16 sp, sp, 4136; GENERIC-NEXT: .cfi_def_cfa_offset 4137; GENERIC-NEXT: movi16 a1, 255138; GENERIC-NEXT: and16 a0, a1139; GENERIC-NEXT: addi16 sp, sp, 4140; GENERIC-NEXT: rts16141entry:142 %zext = zext i8 %x to i32143 ret i32 %zext144}145 146define i32 @zextR_i32_3(i1 %x) {147; CHECK-LABEL: zextR_i32_3:148; CHECK: # %bb.0: # %entry149; CHECK-NEXT: andi32 a0, a0, 1150; CHECK-NEXT: rts16151;152; GENERIC-LABEL: zextR_i32_3:153; GENERIC: # %bb.0: # %entry154; GENERIC-NEXT: .cfi_def_cfa_offset 0155; GENERIC-NEXT: subi16 sp, sp, 4156; GENERIC-NEXT: .cfi_def_cfa_offset 4157; GENERIC-NEXT: movi16 a1, 1158; GENERIC-NEXT: and16 a0, a1159; GENERIC-NEXT: addi16 sp, sp, 4160; GENERIC-NEXT: rts16161entry:162 %zext = zext i1 %x to i32163 ret i32 %zext164}165 166; i8/i1 --> i16167define i16 @zextR_i16_2(i8 %x) {168; CHECK-LABEL: zextR_i16_2:169; CHECK: # %bb.0: # %entry170; CHECK-NEXT: zextb16 a0, a0171; CHECK-NEXT: rts16172;173; GENERIC-LABEL: zextR_i16_2:174; GENERIC: # %bb.0: # %entry175; GENERIC-NEXT: .cfi_def_cfa_offset 0176; GENERIC-NEXT: subi16 sp, sp, 4177; GENERIC-NEXT: .cfi_def_cfa_offset 4178; GENERIC-NEXT: movi16 a1, 255179; GENERIC-NEXT: and16 a0, a1180; GENERIC-NEXT: addi16 sp, sp, 4181; GENERIC-NEXT: rts16182entry:183 %zext = zext i8 %x to i16184 ret i16 %zext185}186 187define i16 @zextR_i16_3(i1 %x) {188; CHECK-LABEL: zextR_i16_3:189; CHECK: # %bb.0: # %entry190; CHECK-NEXT: andi32 a0, a0, 1191; CHECK-NEXT: rts16192;193; GENERIC-LABEL: zextR_i16_3:194; GENERIC: # %bb.0: # %entry195; GENERIC-NEXT: .cfi_def_cfa_offset 0196; GENERIC-NEXT: subi16 sp, sp, 4197; GENERIC-NEXT: .cfi_def_cfa_offset 4198; GENERIC-NEXT: movi16 a1, 1199; GENERIC-NEXT: and16 a0, a1200; GENERIC-NEXT: addi16 sp, sp, 4201; GENERIC-NEXT: rts16202entry:203 %zext = zext i1 %x to i16204 ret i16 %zext205}206 207;i1 --> i8208define i8 @zextR_i8_3(i1 %x) {209; CHECK-LABEL: zextR_i8_3:210; CHECK: # %bb.0: # %entry211; CHECK-NEXT: andi32 a0, a0, 1212; CHECK-NEXT: rts16213;214; GENERIC-LABEL: zextR_i8_3:215; GENERIC: # %bb.0: # %entry216; GENERIC-NEXT: .cfi_def_cfa_offset 0217; GENERIC-NEXT: subi16 sp, sp, 4218; GENERIC-NEXT: .cfi_def_cfa_offset 4219; GENERIC-NEXT: movi16 a1, 1220; GENERIC-NEXT: and16 a0, a1221; GENERIC-NEXT: addi16 sp, sp, 4222; GENERIC-NEXT: rts16223entry:224 %zext = zext i1 %x to i8225 ret i8 %zext226}227 228; i32/i16/i8/i1 --> i64229define i64 @sextR_i64_0(i32 %x) {230; CHECK-LABEL: sextR_i64_0:231; CHECK: # %bb.0: # %entry232; CHECK-NEXT: asri16 a1, a0, 31233; CHECK-NEXT: rts16234;235; GENERIC-LABEL: sextR_i64_0:236; GENERIC: # %bb.0: # %entry237; GENERIC-NEXT: .cfi_def_cfa_offset 0238; GENERIC-NEXT: subi16 sp, sp, 4239; GENERIC-NEXT: .cfi_def_cfa_offset 4240; GENERIC-NEXT: asri16 a1, a0, 31241; GENERIC-NEXT: addi16 sp, sp, 4242; GENERIC-NEXT: rts16243entry:244 %sext = sext i32 %x to i64245 ret i64 %sext246}247 248define i64 @sextR_i64_1(i16 %x) {249; CHECK-LABEL: sextR_i64_1:250; CHECK: # %bb.0: # %entry251; CHECK-NEXT: sexth16 a0, a0252; CHECK-NEXT: asri16 a1, a0, 31253; CHECK-NEXT: rts16254;255; GENERIC-LABEL: sextR_i64_1:256; GENERIC: # %bb.0: # %entry257; GENERIC-NEXT: .cfi_def_cfa_offset 0258; GENERIC-NEXT: subi16 sp, sp, 4259; GENERIC-NEXT: .cfi_def_cfa_offset 4260; GENERIC-NEXT: sexth16 a0, a0261; GENERIC-NEXT: asri16 a1, a0, 31262; GENERIC-NEXT: addi16 sp, sp, 4263; GENERIC-NEXT: rts16264entry:265 %sext = sext i16 %x to i64266 ret i64 %sext267}268 269define i64 @sextR_i64_2(i8 %x) {270; CHECK-LABEL: sextR_i64_2:271; CHECK: # %bb.0: # %entry272; CHECK-NEXT: sextb16 a0, a0273; CHECK-NEXT: asri16 a1, a0, 31274; CHECK-NEXT: rts16275;276; GENERIC-LABEL: sextR_i64_2:277; GENERIC: # %bb.0: # %entry278; GENERIC-NEXT: .cfi_def_cfa_offset 0279; GENERIC-NEXT: subi16 sp, sp, 4280; GENERIC-NEXT: .cfi_def_cfa_offset 4281; GENERIC-NEXT: sextb16 a0, a0282; GENERIC-NEXT: asri16 a1, a0, 31283; GENERIC-NEXT: addi16 sp, sp, 4284; GENERIC-NEXT: rts16285entry:286 %sext = sext i8 %x to i64287 ret i64 %sext288}289 290define i64 @sextR_i64_3(i1 %x) {291; CHECK-LABEL: sextR_i64_3:292; CHECK: # %bb.0: # %entry293; CHECK-NEXT: sext32 a0, a0, 0, 0294; CHECK-NEXT: mov16 a1, a0295; CHECK-NEXT: rts16296;297; GENERIC-LABEL: sextR_i64_3:298; GENERIC: # %bb.0: # %entry299; GENERIC-NEXT: .cfi_def_cfa_offset 0300; GENERIC-NEXT: subi16 sp, sp, 4301; GENERIC-NEXT: .cfi_def_cfa_offset 4302; GENERIC-NEXT: lsli16 a0, a0, 7303; GENERIC-NEXT: asri16 a0, a0, 7304; GENERIC-NEXT: mov16 a1, a0305; GENERIC-NEXT: addi16 sp, sp, 4306; GENERIC-NEXT: rts16307entry:308 %sext = sext i1 %x to i64309 ret i64 %sext310}311 312; i16/i8/i1 --> i32313define i32 @sextR_i32_1(i16 %x) {314; CHECK-LABEL: sextR_i32_1:315; CHECK: # %bb.0: # %entry316; CHECK-NEXT: sexth16 a0, a0317; CHECK-NEXT: rts16318;319; GENERIC-LABEL: sextR_i32_1:320; GENERIC: # %bb.0: # %entry321; GENERIC-NEXT: .cfi_def_cfa_offset 0322; GENERIC-NEXT: subi16 sp, sp, 4323; GENERIC-NEXT: .cfi_def_cfa_offset 4324; GENERIC-NEXT: sexth16 a0, a0325; GENERIC-NEXT: addi16 sp, sp, 4326; GENERIC-NEXT: rts16327entry:328 %sext = sext i16 %x to i32329 ret i32 %sext330}331 332define i32 @sextR_i32_2(i8 %x) {333; CHECK-LABEL: sextR_i32_2:334; CHECK: # %bb.0: # %entry335; CHECK-NEXT: sextb16 a0, a0336; CHECK-NEXT: rts16337;338; GENERIC-LABEL: sextR_i32_2:339; GENERIC: # %bb.0: # %entry340; GENERIC-NEXT: .cfi_def_cfa_offset 0341; GENERIC-NEXT: subi16 sp, sp, 4342; GENERIC-NEXT: .cfi_def_cfa_offset 4343; GENERIC-NEXT: sextb16 a0, a0344; GENERIC-NEXT: addi16 sp, sp, 4345; GENERIC-NEXT: rts16346entry:347 %sext = sext i8 %x to i32348 ret i32 %sext349}350 351define i32 @sextR_i32_3(i1 %x) {352; CHECK-LABEL: sextR_i32_3:353; CHECK: # %bb.0: # %entry354; CHECK-NEXT: sext32 a0, a0, 0, 0355; CHECK-NEXT: rts16356;357; GENERIC-LABEL: sextR_i32_3:358; GENERIC: # %bb.0: # %entry359; GENERIC-NEXT: .cfi_def_cfa_offset 0360; GENERIC-NEXT: subi16 sp, sp, 4361; GENERIC-NEXT: .cfi_def_cfa_offset 4362; GENERIC-NEXT: lsli16 a0, a0, 7363; GENERIC-NEXT: asri16 a0, a0, 7364; GENERIC-NEXT: addi16 sp, sp, 4365; GENERIC-NEXT: rts16366entry:367 %sext = sext i1 %x to i32368 ret i32 %sext369}370 371; i8/i1 --> i16372define i16 @sextR_i16_2(i8 %x) {373; CHECK-LABEL: sextR_i16_2:374; CHECK: # %bb.0: # %entry375; CHECK-NEXT: sextb16 a0, a0376; CHECK-NEXT: rts16377;378; GENERIC-LABEL: sextR_i16_2:379; GENERIC: # %bb.0: # %entry380; GENERIC-NEXT: .cfi_def_cfa_offset 0381; GENERIC-NEXT: subi16 sp, sp, 4382; GENERIC-NEXT: .cfi_def_cfa_offset 4383; GENERIC-NEXT: sextb16 a0, a0384; GENERIC-NEXT: addi16 sp, sp, 4385; GENERIC-NEXT: rts16386entry:387 %sext = sext i8 %x to i16388 ret i16 %sext389}390 391define i16 @sextR_i16_3(i1 %x) {392; CHECK-LABEL: sextR_i16_3:393; CHECK: # %bb.0: # %entry394; CHECK-NEXT: sext32 a0, a0, 0, 0395; CHECK-NEXT: rts16396;397; GENERIC-LABEL: sextR_i16_3:398; GENERIC: # %bb.0: # %entry399; GENERIC-NEXT: .cfi_def_cfa_offset 0400; GENERIC-NEXT: subi16 sp, sp, 4401; GENERIC-NEXT: .cfi_def_cfa_offset 4402; GENERIC-NEXT: lsli16 a0, a0, 7403; GENERIC-NEXT: asri16 a0, a0, 7404; GENERIC-NEXT: addi16 sp, sp, 4405; GENERIC-NEXT: rts16406entry:407 %sext = sext i1 %x to i16408 ret i16 %sext409}410 411;i1 --> i8412define i8 @sextR_i8_3(i1 %x) {413; CHECK-LABEL: sextR_i8_3:414; CHECK: # %bb.0: # %entry415; CHECK-NEXT: sext32 a0, a0, 0, 0416; CHECK-NEXT: rts16417;418; GENERIC-LABEL: sextR_i8_3:419; GENERIC: # %bb.0: # %entry420; GENERIC-NEXT: .cfi_def_cfa_offset 0421; GENERIC-NEXT: subi16 sp, sp, 4422; GENERIC-NEXT: .cfi_def_cfa_offset 4423; GENERIC-NEXT: lsli16 a0, a0, 7424; GENERIC-NEXT: asri16 a0, a0, 7425; GENERIC-NEXT: addi16 sp, sp, 4426; GENERIC-NEXT: rts16427entry:428 %sext = sext i1 %x to i8429 ret i8 %sext430}431