brintos

brintos / llvm-project-archived public Read only

0
0
Text · 64.2 KiB · 65e2014 Raw
2434 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 5define i32 @addRR(i32 %x, i32 %y) {6; CHECK-LABEL: addRR:7; CHECK:       # %bb.0: # %entry8; CHECK-NEXT:    addu16 a0, a19; CHECK-NEXT:    rts1610;11; GENERIC-LABEL: addRR:12; GENERIC:       # %bb.0: # %entry13; GENERIC-NEXT:    .cfi_def_cfa_offset 014; GENERIC-NEXT:    subi16 sp, sp, 415; GENERIC-NEXT:    .cfi_def_cfa_offset 416; GENERIC-NEXT:    addu16 a0, a1, a017; GENERIC-NEXT:    addi16 sp, sp, 418; GENERIC-NEXT:    rts1619entry:20  %add = add nsw i32 %y, %x21  ret i32 %add22}23 24define i32 @addRI(i32 %x) {25; CHECK-LABEL: addRI:26; CHECK:       # %bb.0: # %entry27; CHECK-NEXT:    addi16 a0, 1028; CHECK-NEXT:    rts1629;30; GENERIC-LABEL: addRI:31; GENERIC:       # %bb.0: # %entry32; GENERIC-NEXT:    .cfi_def_cfa_offset 033; GENERIC-NEXT:    subi16 sp, sp, 434; GENERIC-NEXT:    .cfi_def_cfa_offset 435; GENERIC-NEXT:    addi16 a0, 1036; GENERIC-NEXT:    addi16 sp, sp, 437; GENERIC-NEXT:    rts1638entry:39  %add = add nsw i32 %x, 1040  ret i32 %add41}42 43define i32 @addRI_256(i32 %x) {44; CHECK-LABEL: addRI_256:45; CHECK:       # %bb.0: # %entry46; CHECK-NEXT:    addi16 a0, 25647; CHECK-NEXT:    rts1648;49; GENERIC-LABEL: addRI_256:50; GENERIC:       # %bb.0: # %entry51; GENERIC-NEXT:    .cfi_def_cfa_offset 052; GENERIC-NEXT:    subi16 sp, sp, 453; GENERIC-NEXT:    .cfi_def_cfa_offset 454; GENERIC-NEXT:    addi16 a0, 25655; GENERIC-NEXT:    addi16 sp, sp, 456; GENERIC-NEXT:    rts1657entry:58  %add = add nsw i32 %x, 25659  ret i32 %add60}61 62define i32 @addRI_4096(i32 %x) {63; CHECK-LABEL: addRI_4096:64; CHECK:       # %bb.0: # %entry65; CHECK-NEXT:    addi32 a0, a0, 409666; CHECK-NEXT:    rts1667;68; GENERIC-LABEL: addRI_4096:69; GENERIC:       # %bb.0: # %entry70; GENERIC-NEXT:    .cfi_def_cfa_offset 071; GENERIC-NEXT:    subi16 sp, sp, 472; GENERIC-NEXT:    .cfi_def_cfa_offset 473; GENERIC-NEXT:    movi16 a1, 074; GENERIC-NEXT:    lsli16 a2, a1, 2475; GENERIC-NEXT:    lsli16 a3, a1, 1676; GENERIC-NEXT:    or16 a3, a277; GENERIC-NEXT:    movi16 a2, 1678; GENERIC-NEXT:    lsli16 a2, a2, 879; GENERIC-NEXT:    or16 a2, a380; GENERIC-NEXT:    or16 a2, a181; GENERIC-NEXT:    addu16 a0, a0, a282; GENERIC-NEXT:    addi16 sp, sp, 483; GENERIC-NEXT:    rts1684entry:85  %add = add nsw i32 %x, 409686  ret i32 %add87}88 89define i32 @addRI_X(i32 %x) {90; CHECK-LABEL: addRI_X:91; CHECK:       # %bb.0: # %entry92; CHECK-NEXT:    movi32 a1, 409793; CHECK-NEXT:    addu16 a0, a194; CHECK-NEXT:    rts1695;96; GENERIC-LABEL: addRI_X:97; GENERIC:       # %bb.0: # %entry98; GENERIC-NEXT:    .cfi_def_cfa_offset 099; GENERIC-NEXT:    subi16 sp, sp, 4100; GENERIC-NEXT:    .cfi_def_cfa_offset 4101; GENERIC-NEXT:    movi16 a1, 0102; GENERIC-NEXT:    lsli16 a2, a1, 24103; GENERIC-NEXT:    lsli16 a1, a1, 16104; GENERIC-NEXT:    or16 a1, a2105; GENERIC-NEXT:    movi16 a2, 16106; GENERIC-NEXT:    lsli16 a2, a2, 8107; GENERIC-NEXT:    or16 a2, a1108; GENERIC-NEXT:    movi16 a1, 1109; GENERIC-NEXT:    or16 a1, a2110; GENERIC-NEXT:    addu16 a0, a0, a1111; GENERIC-NEXT:    addi16 sp, sp, 4112; GENERIC-NEXT:    rts16113entry:114  %add = add nsw i32 %x, 4097115  ret i32 %add116}117 118define i64 @ADD_LONG(i64 %x, i64 %y) {119; CHECK-LABEL: ADD_LONG:120; CHECK:       # %bb.0: # %entry121; CHECK-NEXT:    clrc32122; CHECK-NEXT:    addc32 a0, a2, a0123; CHECK-NEXT:    addc32 a1, a3, a1124; CHECK-NEXT:    rts16125;126; GENERIC-LABEL: ADD_LONG:127; GENERIC:       # %bb.0: # %entry128; GENERIC-NEXT:    .cfi_def_cfa_offset 0129; GENERIC-NEXT:    subi16 sp, sp, 4130; GENERIC-NEXT:    .cfi_def_cfa_offset 4131; GENERIC-NEXT:    clrc16132; GENERIC-NEXT:    addc16 a0, a2133; GENERIC-NEXT:    addc16 a1, a3134; GENERIC-NEXT:    addi16 sp, sp, 4135; GENERIC-NEXT:    rts16136entry:137  %add = add nsw i64 %y, %x138  ret i64 %add139}140 141define i64 @ADD_LONG_I(i64 %x) {142; CHECK-LABEL: ADD_LONG_I:143; CHECK:       # %bb.0: # %entry144; CHECK-NEXT:    clrc32145; CHECK-NEXT:    movi16 a2, 1146; CHECK-NEXT:    addc16 a0, a2147; CHECK-NEXT:    movi16 a2, 0148; CHECK-NEXT:    addc16 a1, a2149; CHECK-NEXT:    rts16150;151; GENERIC-LABEL: ADD_LONG_I:152; GENERIC:       # %bb.0: # %entry153; GENERIC-NEXT:    .cfi_def_cfa_offset 0154; GENERIC-NEXT:    subi16 sp, sp, 4155; GENERIC-NEXT:    .cfi_def_cfa_offset 4156; GENERIC-NEXT:    clrc16157; GENERIC-NEXT:    movi16 a2, 1158; GENERIC-NEXT:    addc16 a0, a2159; GENERIC-NEXT:    movi16 a2, 0160; GENERIC-NEXT:    addc16 a1, a2161; GENERIC-NEXT:    addi16 sp, sp, 4162; GENERIC-NEXT:    rts16163entry:164  %add = add nsw i64 %x, 1165  ret i64 %add166}167 168define i16 @ADD_SHORT(i16 %x, i16 %y) {169; CHECK-LABEL: ADD_SHORT:170; CHECK:       # %bb.0: # %entry171; CHECK-NEXT:    addu16 a0, a1172; CHECK-NEXT:    rts16173;174; GENERIC-LABEL: ADD_SHORT:175; GENERIC:       # %bb.0: # %entry176; GENERIC-NEXT:    .cfi_def_cfa_offset 0177; GENERIC-NEXT:    subi16 sp, sp, 4178; GENERIC-NEXT:    .cfi_def_cfa_offset 4179; GENERIC-NEXT:    addu16 a0, a1, a0180; GENERIC-NEXT:    addi16 sp, sp, 4181; GENERIC-NEXT:    rts16182entry:183  %add = add nsw i16 %y, %x184  ret i16 %add185}186 187define i16 @ADD_SHORT_I(i16 %x) {188; CHECK-LABEL: ADD_SHORT_I:189; CHECK:       # %bb.0: # %entry190; CHECK-NEXT:    addi16 a0, a0, 1191; CHECK-NEXT:    rts16192;193; GENERIC-LABEL: ADD_SHORT_I: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:    addi16 a0, 1199; GENERIC-NEXT:    addi16 sp, sp, 4200; GENERIC-NEXT:    rts16201entry:202  %add = add nsw i16 %x, 1203  ret i16 %add204}205 206define i8 @ADD_CHAR(i8 %x, i8 %y) {207; CHECK-LABEL: ADD_CHAR:208; CHECK:       # %bb.0: # %entry209; CHECK-NEXT:    addu16 a0, a1210; CHECK-NEXT:    rts16211;212; GENERIC-LABEL: ADD_CHAR:213; GENERIC:       # %bb.0: # %entry214; GENERIC-NEXT:    .cfi_def_cfa_offset 0215; GENERIC-NEXT:    subi16 sp, sp, 4216; GENERIC-NEXT:    .cfi_def_cfa_offset 4217; GENERIC-NEXT:    addu16 a0, a1, a0218; GENERIC-NEXT:    addi16 sp, sp, 4219; GENERIC-NEXT:    rts16220entry:221  %add = add nsw i8 %y, %x222  ret i8 %add223}224 225define i8 @ADD_CHAR_I(i8 %x) {226; CHECK-LABEL: ADD_CHAR_I:227; CHECK:       # %bb.0: # %entry228; CHECK-NEXT:    addi16 a0, a0, 1229; CHECK-NEXT:    rts16230;231; GENERIC-LABEL: ADD_CHAR_I:232; GENERIC:       # %bb.0: # %entry233; GENERIC-NEXT:    .cfi_def_cfa_offset 0234; GENERIC-NEXT:    subi16 sp, sp, 4235; GENERIC-NEXT:    .cfi_def_cfa_offset 4236; GENERIC-NEXT:    addi16 a0, 1237; GENERIC-NEXT:    addi16 sp, sp, 4238; GENERIC-NEXT:    rts16239entry:240  %add = add nsw i8 %x, 1241  ret i8 %add242}243 244 245define i32 @subRR(i32 %x, i32 %y) {246; CHECK-LABEL: subRR:247; CHECK:       # %bb.0: # %entry248; CHECK-NEXT:    subu16 a0, a1, a0249; CHECK-NEXT:    rts16250;251; GENERIC-LABEL: subRR:252; GENERIC:       # %bb.0: # %entry253; GENERIC-NEXT:    .cfi_def_cfa_offset 0254; GENERIC-NEXT:    subi16 sp, sp, 4255; GENERIC-NEXT:    .cfi_def_cfa_offset 4256; GENERIC-NEXT:    subu16 a0, a1, a0257; GENERIC-NEXT:    addi16 sp, sp, 4258; GENERIC-NEXT:    rts16259entry:260  %sub = sub nsw i32 %y, %x261  ret i32 %sub262}263 264define i32 @subRI(i32 %x) {265; CHECK-LABEL: subRI:266; CHECK:       # %bb.0: # %entry267; CHECK-NEXT:    subi16 a0, 10268; CHECK-NEXT:    rts16269;270; GENERIC-LABEL: subRI:271; GENERIC:       # %bb.0: # %entry272; GENERIC-NEXT:    .cfi_def_cfa_offset 0273; GENERIC-NEXT:    subi16 sp, sp, 4274; GENERIC-NEXT:    .cfi_def_cfa_offset 4275; GENERIC-NEXT:    subi16 a0, 10276; GENERIC-NEXT:    addi16 sp, sp, 4277; GENERIC-NEXT:    rts16278entry:279  %sub = sub nsw i32 %x, 10280  ret i32 %sub281}282 283define i32 @subRI_256(i32 %x) {284; CHECK-LABEL: subRI_256:285; CHECK:       # %bb.0: # %entry286; CHECK-NEXT:    subi16 a0, 256287; CHECK-NEXT:    rts16288;289; GENERIC-LABEL: subRI_256:290; GENERIC:       # %bb.0: # %entry291; GENERIC-NEXT:    .cfi_def_cfa_offset 0292; GENERIC-NEXT:    subi16 sp, sp, 4293; GENERIC-NEXT:    .cfi_def_cfa_offset 4294; GENERIC-NEXT:    subi16 a0, 256295; GENERIC-NEXT:    addi16 sp, sp, 4296; GENERIC-NEXT:    rts16297entry:298  %sub = sub nsw i32 %x, 256299  ret i32 %sub300}301 302define i32 @subRI_4096(i32 %x) {303; CHECK-LABEL: subRI_4096:304; CHECK:       # %bb.0: # %entry305; CHECK-NEXT:    subi32 a0, a0, 4096306; CHECK-NEXT:    rts16307;308; GENERIC-LABEL: subRI_4096:309; GENERIC:       # %bb.0: # %entry310; GENERIC-NEXT:    .cfi_def_cfa_offset 0311; GENERIC-NEXT:    subi16 sp, sp, 4312; GENERIC-NEXT:    .cfi_def_cfa_offset 4313; GENERIC-NEXT:    movi16 a1, 255314; GENERIC-NEXT:    lsli16 a2, a1, 24315; GENERIC-NEXT:    lsli16 a1, a1, 16316; GENERIC-NEXT:    or16 a1, a2317; GENERIC-NEXT:    movi16 a2, 240318; GENERIC-NEXT:    lsli16 a2, a2, 8319; GENERIC-NEXT:    or16 a2, a1320; GENERIC-NEXT:    movi16 a1, 0321; GENERIC-NEXT:    or16 a1, a2322; GENERIC-NEXT:    addu16 a0, a0, a1323; GENERIC-NEXT:    addi16 sp, sp, 4324; GENERIC-NEXT:    rts16325entry:326  %sub = sub nsw i32 %x, 4096327  ret i32 %sub328}329 330define i32 @subRI_X(i32 %x) {331; CHECK-LABEL: subRI_X:332; CHECK:       # %bb.0: # %entry333; CHECK-NEXT:    movih32 a1, 65535334; CHECK-NEXT:    ori32 a1, a1, 61439335; CHECK-NEXT:    addu16 a0, a1336; CHECK-NEXT:    rts16337;338; GENERIC-LABEL: subRI_X: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:    movi16 a1, 255344; GENERIC-NEXT:    lsli16 a2, a1, 24345; GENERIC-NEXT:    lsli16 a3, a1, 16346; GENERIC-NEXT:    or16 a3, a2347; GENERIC-NEXT:    movi16 a2, 239348; GENERIC-NEXT:    lsli16 a2, a2, 8349; GENERIC-NEXT:    or16 a2, a3350; GENERIC-NEXT:    or16 a2, a1351; GENERIC-NEXT:    addu16 a0, a0, a2352; GENERIC-NEXT:    addi16 sp, sp, 4353; GENERIC-NEXT:    rts16354entry:355  %sub = sub nsw i32 %x, 4097356  ret i32 %sub357}358 359define i64 @SUB_LONG(i64 %x, i64 %y) {360; CHECK-LABEL: SUB_LONG:361; CHECK:       # %bb.0: # %entry362; CHECK-NEXT:    setc32363; CHECK-NEXT:    subc32 a0, a2, a0364; CHECK-NEXT:    mvcv16 a2365; CHECK-NEXT:    btsti16 a2, 0366; CHECK-NEXT:    mvcv16 a2367; CHECK-NEXT:    btsti16 a2, 0368; CHECK-NEXT:    subc32 a1, a3, a1369; CHECK-NEXT:    rts16370;371; GENERIC-LABEL: SUB_LONG:372; GENERIC:       # %bb.0: # %entry373; GENERIC-NEXT:    .cfi_def_cfa_offset 0374; GENERIC-NEXT:    subi16 sp, sp, 4375; GENERIC-NEXT:    .cfi_def_cfa_offset 4376; GENERIC-NEXT:    setc16377; GENERIC-NEXT:    subc16 a2, a0378; GENERIC-NEXT:    mvcv16 a0379; GENERIC-NEXT:    btsti16 a0, 0380; GENERIC-NEXT:    mvcv16 a0381; GENERIC-NEXT:    btsti16 a0, 0382; GENERIC-NEXT:    subc16 a3, a1383; GENERIC-NEXT:    mov16 a0, a2384; GENERIC-NEXT:    mov16 a1, a3385; GENERIC-NEXT:    addi16 sp, sp, 4386; GENERIC-NEXT:    rts16387entry:388  %sub = sub nsw i64 %y, %x389  ret i64 %sub390}391 392define i64 @SUB_LONG_I(i64 %x) {393; CHECK-LABEL: SUB_LONG_I:394; CHECK:       # %bb.0: # %entry395; CHECK-NEXT:    clrc32396; CHECK-NEXT:    movih32 a2, 65535397; CHECK-NEXT:    ori32 a2, a2, 65535398; CHECK-NEXT:    addc16 a0, a2399; CHECK-NEXT:    addc16 a1, a2400; CHECK-NEXT:    rts16401;402; GENERIC-LABEL: SUB_LONG_I:403; GENERIC:       # %bb.0: # %entry404; GENERIC-NEXT:    subi16 sp, sp, 4405; GENERIC-NEXT:    .cfi_def_cfa_offset 4406; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill407; GENERIC-NEXT:    .cfi_offset l0, -4408; GENERIC-NEXT:    subi16 sp, sp, 4409; GENERIC-NEXT:    .cfi_def_cfa_offset 8410; GENERIC-NEXT:    clrc16411; GENERIC-NEXT:    movi16 a2, 255412; GENERIC-NEXT:    lsli16 a3, a2, 24413; GENERIC-NEXT:    lsli16 l0, a2, 16414; GENERIC-NEXT:    or16 l0, a3415; GENERIC-NEXT:    lsli16 a3, a2, 8416; GENERIC-NEXT:    or16 a3, l0417; GENERIC-NEXT:    or16 a3, a2418; GENERIC-NEXT:    addc16 a0, a3419; GENERIC-NEXT:    addc16 a1, a3420; GENERIC-NEXT:    addi16 sp, sp, 4421; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload422; GENERIC-NEXT:    addi16 sp, sp, 4423; GENERIC-NEXT:    rts16424entry:425  %sub = sub nsw i64 %x, 1426  ret i64 %sub427}428 429define i16 @SUB_SHORT(i16 %x, i16 %y) {430; CHECK-LABEL: SUB_SHORT:431; CHECK:       # %bb.0: # %entry432; CHECK-NEXT:    subu16 a0, a1, a0433; CHECK-NEXT:    rts16434;435; GENERIC-LABEL: SUB_SHORT:436; GENERIC:       # %bb.0: # %entry437; GENERIC-NEXT:    .cfi_def_cfa_offset 0438; GENERIC-NEXT:    subi16 sp, sp, 4439; GENERIC-NEXT:    .cfi_def_cfa_offset 4440; GENERIC-NEXT:    subu16 a0, a1, a0441; GENERIC-NEXT:    addi16 sp, sp, 4442; GENERIC-NEXT:    rts16443entry:444  %sub = sub nsw i16 %y, %x445  ret i16 %sub446}447 448define i16 @SUB_SHORT_I(i16 %x) {449; CHECK-LABEL: SUB_SHORT_I:450; CHECK:       # %bb.0: # %entry451; CHECK-NEXT:    subi16 a0, a0, 1452; CHECK-NEXT:    rts16453;454; GENERIC-LABEL: SUB_SHORT_I:455; GENERIC:       # %bb.0: # %entry456; GENERIC-NEXT:    .cfi_def_cfa_offset 0457; GENERIC-NEXT:    subi16 sp, sp, 4458; GENERIC-NEXT:    .cfi_def_cfa_offset 4459; GENERIC-NEXT:    subi16 a0, 1460; GENERIC-NEXT:    addi16 sp, sp, 4461; GENERIC-NEXT:    rts16462entry:463  %sub = sub nsw i16 %x, 1464  ret i16 %sub465}466 467define i8 @SUB_CHAR(i8 %x, i8 %y) {468; CHECK-LABEL: SUB_CHAR:469; CHECK:       # %bb.0: # %entry470; CHECK-NEXT:    subu16 a0, a1, a0471; CHECK-NEXT:    rts16472;473; GENERIC-LABEL: SUB_CHAR:474; GENERIC:       # %bb.0: # %entry475; GENERIC-NEXT:    .cfi_def_cfa_offset 0476; GENERIC-NEXT:    subi16 sp, sp, 4477; GENERIC-NEXT:    .cfi_def_cfa_offset 4478; GENERIC-NEXT:    subu16 a0, a1, a0479; GENERIC-NEXT:    addi16 sp, sp, 4480; GENERIC-NEXT:    rts16481entry:482  %sub = sub nsw i8 %y, %x483  ret i8 %sub484}485 486define i8 @SUB_CHAR_I(i8 %x) {487; CHECK-LABEL: SUB_CHAR_I:488; CHECK:       # %bb.0: # %entry489; CHECK-NEXT:    subi16 a0, a0, 1490; CHECK-NEXT:    rts16491;492; GENERIC-LABEL: SUB_CHAR_I:493; GENERIC:       # %bb.0: # %entry494; GENERIC-NEXT:    .cfi_def_cfa_offset 0495; GENERIC-NEXT:    subi16 sp, sp, 4496; GENERIC-NEXT:    .cfi_def_cfa_offset 4497; GENERIC-NEXT:    subi16 a0, 1498; GENERIC-NEXT:    addi16 sp, sp, 4499; GENERIC-NEXT:    rts16500entry:501  %sub = sub nsw i8 %x, 1502  ret i8 %sub503}504 505define i32 @mulRR(i32 %x, i32 %y) {506; CHECK-LABEL: mulRR:507; CHECK:       # %bb.0: # %entry508; CHECK-NEXT:    mult16 a0, a1509; CHECK-NEXT:    rts16510;511; GENERIC-LABEL: mulRR:512; GENERIC:       # %bb.0: # %entry513; GENERIC-NEXT:    .cfi_def_cfa_offset 0514; GENERIC-NEXT:    subi16 sp, sp, 4515; GENERIC-NEXT:    .cfi_def_cfa_offset 4516; GENERIC-NEXT:    mult16 a0, a1517; GENERIC-NEXT:    addi16 sp, sp, 4518; GENERIC-NEXT:    rts16519entry:520  %mul = mul nsw i32 %y, %x521  ret i32 %mul522}523 524define i32 @mulRI(i32 %x) {525; CHECK-LABEL: mulRI:526; CHECK:       # %bb.0: # %entry527; CHECK-NEXT:    movi16 a1, 10528; CHECK-NEXT:    mult16 a0, a1529; CHECK-NEXT:    rts16530;531; GENERIC-LABEL: mulRI:532; GENERIC:       # %bb.0: # %entry533; GENERIC-NEXT:    .cfi_def_cfa_offset 0534; GENERIC-NEXT:    subi16 sp, sp, 4535; GENERIC-NEXT:    .cfi_def_cfa_offset 4536; GENERIC-NEXT:    movi16 a1, 10537; GENERIC-NEXT:    mult16 a0, a1538; GENERIC-NEXT:    addi16 sp, sp, 4539; GENERIC-NEXT:    rts16540entry:541  %mul = mul nsw i32 %x, 10542  ret i32 %mul543}544 545define i32 @mulRI_X(i32 %x) {546; CHECK-LABEL: mulRI_X:547; CHECK:       # %bb.0: # %entry548; CHECK-NEXT:    lsli16 a1, a0, 12549; CHECK-NEXT:    addu16 a0, a1550; CHECK-NEXT:    rts16551;552; GENERIC-LABEL: mulRI_X:553; GENERIC:       # %bb.0: # %entry554; GENERIC-NEXT:    .cfi_def_cfa_offset 0555; GENERIC-NEXT:    subi16 sp, sp, 4556; GENERIC-NEXT:    .cfi_def_cfa_offset 4557; GENERIC-NEXT:    lsli16 a1, a0, 12558; GENERIC-NEXT:    addu16 a0, a1, a0559; GENERIC-NEXT:    addi16 sp, sp, 4560; GENERIC-NEXT:    rts16561entry:562  %mul = mul nsw i32 %x, 4097563  ret i32 %mul564}565 566define i16 @MUL_SHORT(i16 %x, i16 %y) {567; CHECK-LABEL: MUL_SHORT:568; CHECK:       # %bb.0: # %entry569; CHECK-NEXT:    mult16 a0, a1570; CHECK-NEXT:    rts16571;572; GENERIC-LABEL: MUL_SHORT:573; GENERIC:       # %bb.0: # %entry574; GENERIC-NEXT:    .cfi_def_cfa_offset 0575; GENERIC-NEXT:    subi16 sp, sp, 4576; GENERIC-NEXT:    .cfi_def_cfa_offset 4577; GENERIC-NEXT:    mult16 a0, a1578; GENERIC-NEXT:    addi16 sp, sp, 4579; GENERIC-NEXT:    rts16580entry:581  %mul = mul nsw i16 %y, %x582  ret i16 %mul583}584 585define i16 @MUL_SHORT_I(i16 %x) {586; CHECK-LABEL: MUL_SHORT_I:587; CHECK:       # %bb.0: # %entry588; CHECK-NEXT:    ixh32 a0, a0, a0589; CHECK-NEXT:    rts16590;591; GENERIC-LABEL: MUL_SHORT_I:592; GENERIC:       # %bb.0: # %entry593; GENERIC-NEXT:    .cfi_def_cfa_offset 0594; GENERIC-NEXT:    subi16 sp, sp, 4595; GENERIC-NEXT:    .cfi_def_cfa_offset 4596; GENERIC-NEXT:    lsli16 a1, a0, 1597; GENERIC-NEXT:    addu16 a0, a1, a0598; GENERIC-NEXT:    addi16 sp, sp, 4599; GENERIC-NEXT:    rts16600entry:601  %mul = mul nsw i16 %x, 3602  ret i16 %mul603}604 605define i8 @MUL_CHAR(i8 %x, i8 %y) {606; CHECK-LABEL: MUL_CHAR:607; CHECK:       # %bb.0: # %entry608; CHECK-NEXT:    mult16 a0, a1609; CHECK-NEXT:    rts16610;611; GENERIC-LABEL: MUL_CHAR:612; GENERIC:       # %bb.0: # %entry613; GENERIC-NEXT:    .cfi_def_cfa_offset 0614; GENERIC-NEXT:    subi16 sp, sp, 4615; GENERIC-NEXT:    .cfi_def_cfa_offset 4616; GENERIC-NEXT:    mult16 a0, a1617; GENERIC-NEXT:    addi16 sp, sp, 4618; GENERIC-NEXT:    rts16619entry:620  %mul = mul nsw i8 %y, %x621  ret i8 %mul622}623 624define i8 @MUL_CHAR_I(i8 %x) {625; CHECK-LABEL: MUL_CHAR_I:626; CHECK:       # %bb.0: # %entry627; CHECK-NEXT:    ixh32 a0, a0, a0628; CHECK-NEXT:    movi16 a1, 0629; CHECK-NEXT:    subu16 a0, a1, a0630; CHECK-NEXT:    rts16631;632; GENERIC-LABEL: MUL_CHAR_I:633; GENERIC:       # %bb.0: # %entry634; GENERIC-NEXT:    .cfi_def_cfa_offset 0635; GENERIC-NEXT:    subi16 sp, sp, 4636; GENERIC-NEXT:    .cfi_def_cfa_offset 4637; GENERIC-NEXT:    lsli16 a1, a0, 1638; GENERIC-NEXT:    addu16 a0, a1, a0639; GENERIC-NEXT:    movi16 a1, 0640; GENERIC-NEXT:    subu16 a0, a1, a0641; GENERIC-NEXT:    addi16 sp, sp, 4642; GENERIC-NEXT:    rts16643entry:644  %mul = mul nsw i8 %x, -3645  ret i8 %mul646}647 648define i32 @udivRR(i32 %x, i32 %y) {649; CHECK-LABEL: udivRR:650; CHECK:       # %bb.0: # %entry651; CHECK-NEXT:    divu32 a0, a1, a0652; CHECK-NEXT:    rts16653;654; GENERIC-LABEL: udivRR:655; GENERIC:       # %bb.0: # %entry656; GENERIC-NEXT:    subi16 sp, sp, 4657; GENERIC-NEXT:    .cfi_def_cfa_offset 4658; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill659; GENERIC-NEXT:    .cfi_offset lr, -4660; GENERIC-NEXT:    subi16 sp, sp, 4661; GENERIC-NEXT:    .cfi_def_cfa_offset 8662; GENERIC-NEXT:    mov16 a2, a0663; GENERIC-NEXT:    lrw32 a3, [.LCPI29_0]664; GENERIC-NEXT:    mov16 a0, a1665; GENERIC-NEXT:    mov16 a1, a2666; GENERIC-NEXT:    jsr16 a3667; GENERIC-NEXT:    addi16 sp, sp, 4668; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload669; GENERIC-NEXT:    addi16 sp, sp, 4670; GENERIC-NEXT:    rts16671; GENERIC-NEXT:    .p2align 1672; GENERIC-NEXT:  # %bb.1:673; GENERIC-NEXT:    .p2align 2, 0x0674; GENERIC-NEXT:  .LCPI29_0:675; GENERIC-NEXT:    .long __udivsi3676entry:677  %udiv = udiv  i32 %y, %x678  ret i32 %udiv679}680 681define i32 @udivRI(i32 %x) {682; CHECK-LABEL: udivRI:683; CHECK:       # %bb.0: # %entry684; CHECK-NEXT:    movi16 a1, 10685; CHECK-NEXT:    divu32 a0, a0, a1686; CHECK-NEXT:    rts16687;688; GENERIC-LABEL: udivRI:689; GENERIC:       # %bb.0: # %entry690; GENERIC-NEXT:    subi16 sp, sp, 4691; GENERIC-NEXT:    .cfi_def_cfa_offset 4692; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill693; GENERIC-NEXT:    .cfi_offset lr, -4694; GENERIC-NEXT:    subi16 sp, sp, 4695; GENERIC-NEXT:    .cfi_def_cfa_offset 8696; GENERIC-NEXT:    lrw32 a2, [.LCPI30_0]697; GENERIC-NEXT:    movi16 a1, 10698; GENERIC-NEXT:    jsr16 a2699; GENERIC-NEXT:    addi16 sp, sp, 4700; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload701; GENERIC-NEXT:    addi16 sp, sp, 4702; GENERIC-NEXT:    rts16703; GENERIC-NEXT:    .p2align 1704; GENERIC-NEXT:  # %bb.1:705; GENERIC-NEXT:    .p2align 2, 0x0706; GENERIC-NEXT:  .LCPI30_0:707; GENERIC-NEXT:    .long __udivsi3708entry:709  %udiv = udiv  i32 %x, 10710  ret i32 %udiv711}712 713define i32 @udivRI_X(i32 %x) {714; CHECK-LABEL: udivRI_X:715; CHECK:       # %bb.0: # %entry716; CHECK-NEXT:    movi32 a1, 4097717; CHECK-NEXT:    divu32 a0, a0, a1718; CHECK-NEXT:    rts16719;720; GENERIC-LABEL: udivRI_X:721; GENERIC:       # %bb.0: # %entry722; GENERIC-NEXT:    subi16 sp, sp, 4723; GENERIC-NEXT:    .cfi_def_cfa_offset 4724; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill725; GENERIC-NEXT:    .cfi_offset lr, -4726; GENERIC-NEXT:    subi16 sp, sp, 4727; GENERIC-NEXT:    .cfi_def_cfa_offset 8728; GENERIC-NEXT:    movi16 a1, 0729; GENERIC-NEXT:    lsli16 a2, a1, 24730; GENERIC-NEXT:    lsli16 a1, a1, 16731; GENERIC-NEXT:    or16 a1, a2732; GENERIC-NEXT:    movi16 a2, 16733; GENERIC-NEXT:    lsli16 a2, a2, 8734; GENERIC-NEXT:    or16 a2, a1735; GENERIC-NEXT:    movi16 a1, 1736; GENERIC-NEXT:    or16 a1, a2737; GENERIC-NEXT:    lrw32 a2, [.LCPI31_0]738; GENERIC-NEXT:    jsr16 a2739; GENERIC-NEXT:    addi16 sp, sp, 4740; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload741; GENERIC-NEXT:    addi16 sp, sp, 4742; GENERIC-NEXT:    rts16743; GENERIC-NEXT:    .p2align 1744; GENERIC-NEXT:  # %bb.1:745; GENERIC-NEXT:    .p2align 2, 0x0746; GENERIC-NEXT:  .LCPI31_0:747; GENERIC-NEXT:    .long __udivsi3748entry:749  %udiv = udiv  i32 %x, 4097750  ret i32 %udiv751}752 753define i16 @UDIV_SHORT(i16 %x, i16 %y) {754; CHECK-LABEL: UDIV_SHORT:755; CHECK:       # %bb.0: # %entry756; CHECK-NEXT:    zexth16 a0, a0757; CHECK-NEXT:    zexth16 a1, a1758; CHECK-NEXT:    divu32 a0, a1, a0759; CHECK-NEXT:    rts16760;761; GENERIC-LABEL: UDIV_SHORT:762; GENERIC:       # %bb.0: # %entry763; GENERIC-NEXT:    subi16 sp, sp, 8764; GENERIC-NEXT:    .cfi_def_cfa_offset 8765; GENERIC-NEXT:    st16.w l0, (sp, 4) # 4-byte Folded Spill766; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill767; GENERIC-NEXT:    .cfi_offset l0, -4768; GENERIC-NEXT:    .cfi_offset lr, -8769; GENERIC-NEXT:    subi16 sp, sp, 4770; GENERIC-NEXT:    .cfi_def_cfa_offset 12771; GENERIC-NEXT:    mov16 a2, a1772; GENERIC-NEXT:    movi16 a1, 0773; GENERIC-NEXT:    lsli16 a3, a1, 24774; GENERIC-NEXT:    lsli16 l0, a1, 16775; GENERIC-NEXT:    or16 l0, a3776; GENERIC-NEXT:    movi16 a3, 255777; GENERIC-NEXT:    lsli16 a1, a3, 8778; GENERIC-NEXT:    or16 a1, l0779; GENERIC-NEXT:    or16 a1, a3780; GENERIC-NEXT:    and16 a2, a1781; GENERIC-NEXT:    and16 a1, a0782; GENERIC-NEXT:    lrw32 a3, [.LCPI32_0]783; GENERIC-NEXT:    mov16 a0, a2784; GENERIC-NEXT:    jsr16 a3785; GENERIC-NEXT:    addi16 sp, sp, 4786; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload787; GENERIC-NEXT:    ld16.w l0, (sp, 4) # 4-byte Folded Reload788; GENERIC-NEXT:    addi16 sp, sp, 8789; GENERIC-NEXT:    rts16790; GENERIC-NEXT:    .p2align 1791; GENERIC-NEXT:  # %bb.1:792; GENERIC-NEXT:    .p2align 2, 0x0793; GENERIC-NEXT:  .LCPI32_0:794; GENERIC-NEXT:    .long __udivsi3795entry:796  %udiv = udiv  i16 %y, %x797  ret i16 %udiv798}799 800define i16 @UDIV_SHORT_I(i16 %x) {801; CHECK-LABEL: UDIV_SHORT_I:802; CHECK:       # %bb.0: # %entry803; CHECK-NEXT:    zexth16 a0, a0804; CHECK-NEXT:    movi32 a1, 43691805; CHECK-NEXT:    mult16 a0, a1806; CHECK-NEXT:    lsri16 a0, a0, 17807; CHECK-NEXT:    rts16808;809; GENERIC-LABEL: UDIV_SHORT_I:810; GENERIC:       # %bb.0: # %entry811; GENERIC-NEXT:    .cfi_def_cfa_offset 0812; GENERIC-NEXT:    subi16 sp, sp, 4813; GENERIC-NEXT:    .cfi_def_cfa_offset 4814; GENERIC-NEXT:    movi16 a1, 0815; GENERIC-NEXT:    lsli16 a2, a1, 24816; GENERIC-NEXT:    lsli16 a1, a1, 16817; GENERIC-NEXT:    or16 a1, a2818; GENERIC-NEXT:    movi16 a2, 255819; GENERIC-NEXT:    lsli16 a3, a2, 8820; GENERIC-NEXT:    or16 a3, a1821; GENERIC-NEXT:    or16 a3, a2822; GENERIC-NEXT:    and16 a3, a0823; GENERIC-NEXT:    movi16 a0, 170824; GENERIC-NEXT:    lsli16 a0, a0, 8825; GENERIC-NEXT:    or16 a0, a1826; GENERIC-NEXT:    movi16 a1, 171827; GENERIC-NEXT:    or16 a1, a0828; GENERIC-NEXT:    mult16 a1, a3829; GENERIC-NEXT:    lsri16 a0, a1, 17830; GENERIC-NEXT:    addi16 sp, sp, 4831; GENERIC-NEXT:    rts16832entry:833  %udiv = udiv  i16 %x, 3834  ret i16 %udiv835}836 837define i8 @UDIV_CHAR(i8 %x, i8 %y) {838; CHECK-LABEL: UDIV_CHAR:839; CHECK:       # %bb.0: # %entry840; CHECK-NEXT:    zextb16 a0, a0841; CHECK-NEXT:    zextb16 a1, a1842; CHECK-NEXT:    divu32 a0, a1, a0843; CHECK-NEXT:    rts16844;845; GENERIC-LABEL: UDIV_CHAR:846; GENERIC:       # %bb.0: # %entry847; GENERIC-NEXT:    subi16 sp, sp, 4848; GENERIC-NEXT:    .cfi_def_cfa_offset 4849; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill850; GENERIC-NEXT:    .cfi_offset lr, -4851; GENERIC-NEXT:    subi16 sp, sp, 4852; GENERIC-NEXT:    .cfi_def_cfa_offset 8853; GENERIC-NEXT:    mov16 a2, a1854; GENERIC-NEXT:    movi16 a1, 255855; GENERIC-NEXT:    and16 a2, a1856; GENERIC-NEXT:    and16 a1, a0857; GENERIC-NEXT:    lrw32 a3, [.LCPI34_0]858; GENERIC-NEXT:    mov16 a0, a2859; GENERIC-NEXT:    jsr16 a3860; GENERIC-NEXT:    addi16 sp, sp, 4861; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload862; GENERIC-NEXT:    addi16 sp, sp, 4863; GENERIC-NEXT:    rts16864; GENERIC-NEXT:    .p2align 1865; GENERIC-NEXT:  # %bb.1:866; GENERIC-NEXT:    .p2align 2, 0x0867; GENERIC-NEXT:  .LCPI34_0:868; GENERIC-NEXT:    .long __udivsi3869entry:870  %udiv = udiv  i8 %y, %x871  ret i8 %udiv872}873 874define i8 @UDIV_CHAR_I(i8 %x) {875; CHECK-LABEL: UDIV_CHAR_I:876; CHECK:       # %bb.0: # %entry877; CHECK-NEXT:    zextb16 a0, a0878; CHECK-NEXT:    movi16 a1, 171879; CHECK-NEXT:    mult16 a0, a1880; CHECK-NEXT:    lsri16 a0, a0, 9881; CHECK-NEXT:    rts16882;883; GENERIC-LABEL: UDIV_CHAR_I:884; GENERIC:       # %bb.0: # %entry885; GENERIC-NEXT:    .cfi_def_cfa_offset 0886; GENERIC-NEXT:    subi16 sp, sp, 4887; GENERIC-NEXT:    .cfi_def_cfa_offset 4888; GENERIC-NEXT:    movi16 a1, 255889; GENERIC-NEXT:    and16 a1, a0890; GENERIC-NEXT:    movi16 a0, 171891; GENERIC-NEXT:    mult16 a0, a1892; GENERIC-NEXT:    lsri16 a0, a0, 9893; GENERIC-NEXT:    addi16 sp, sp, 4894; GENERIC-NEXT:    rts16895entry:896  %udiv = udiv  i8 %x, 3897  ret i8 %udiv898}899 900define i32 @sdivRR(i32 %x, i32 %y) {901; CHECK-LABEL: sdivRR:902; CHECK:       # %bb.0: # %entry903; CHECK-NEXT:    divs32 a0, a1, a0904; CHECK-NEXT:    rts16905;906; GENERIC-LABEL: sdivRR:907; GENERIC:       # %bb.0: # %entry908; GENERIC-NEXT:    subi16 sp, sp, 4909; GENERIC-NEXT:    .cfi_def_cfa_offset 4910; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill911; GENERIC-NEXT:    .cfi_offset lr, -4912; GENERIC-NEXT:    subi16 sp, sp, 4913; GENERIC-NEXT:    .cfi_def_cfa_offset 8914; GENERIC-NEXT:    mov16 a2, a0915; GENERIC-NEXT:    lrw32 a3, [.LCPI36_0]916; GENERIC-NEXT:    mov16 a0, a1917; GENERIC-NEXT:    mov16 a1, a2918; GENERIC-NEXT:    jsr16 a3919; GENERIC-NEXT:    addi16 sp, sp, 4920; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload921; GENERIC-NEXT:    addi16 sp, sp, 4922; GENERIC-NEXT:    rts16923; GENERIC-NEXT:    .p2align 1924; GENERIC-NEXT:  # %bb.1:925; GENERIC-NEXT:    .p2align 2, 0x0926; GENERIC-NEXT:  .LCPI36_0:927; GENERIC-NEXT:    .long __divsi3928entry:929  %sdiv = sdiv  i32 %y, %x930  ret i32 %sdiv931}932 933define i32 @sdivRI(i32 %x) {934; CHECK-LABEL: sdivRI:935; CHECK:       # %bb.0: # %entry936; CHECK-NEXT:    movi16 a1, 10937; CHECK-NEXT:    divs32 a0, a0, a1938; CHECK-NEXT:    rts16939;940; GENERIC-LABEL: sdivRI:941; GENERIC:       # %bb.0: # %entry942; GENERIC-NEXT:    subi16 sp, sp, 4943; GENERIC-NEXT:    .cfi_def_cfa_offset 4944; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill945; GENERIC-NEXT:    .cfi_offset lr, -4946; GENERIC-NEXT:    subi16 sp, sp, 4947; GENERIC-NEXT:    .cfi_def_cfa_offset 8948; GENERIC-NEXT:    lrw32 a2, [.LCPI37_0]949; GENERIC-NEXT:    movi16 a1, 10950; GENERIC-NEXT:    jsr16 a2951; GENERIC-NEXT:    addi16 sp, sp, 4952; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload953; GENERIC-NEXT:    addi16 sp, sp, 4954; GENERIC-NEXT:    rts16955; GENERIC-NEXT:    .p2align 1956; GENERIC-NEXT:  # %bb.1:957; GENERIC-NEXT:    .p2align 2, 0x0958; GENERIC-NEXT:  .LCPI37_0:959; GENERIC-NEXT:    .long __divsi3960entry:961  %sdiv = sdiv  i32 %x, 10962  ret i32 %sdiv963}964 965define i32 @sdivRI_X(i32 %x) {966; CHECK-LABEL: sdivRI_X:967; CHECK:       # %bb.0: # %entry968; CHECK-NEXT:    movi32 a1, 4097969; CHECK-NEXT:    divs32 a0, a0, a1970; CHECK-NEXT:    rts16971;972; GENERIC-LABEL: sdivRI_X:973; GENERIC:       # %bb.0: # %entry974; GENERIC-NEXT:    subi16 sp, sp, 4975; GENERIC-NEXT:    .cfi_def_cfa_offset 4976; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill977; GENERIC-NEXT:    .cfi_offset lr, -4978; GENERIC-NEXT:    subi16 sp, sp, 4979; GENERIC-NEXT:    .cfi_def_cfa_offset 8980; GENERIC-NEXT:    movi16 a1, 0981; GENERIC-NEXT:    lsli16 a2, a1, 24982; GENERIC-NEXT:    lsli16 a1, a1, 16983; GENERIC-NEXT:    or16 a1, a2984; GENERIC-NEXT:    movi16 a2, 16985; GENERIC-NEXT:    lsli16 a2, a2, 8986; GENERIC-NEXT:    or16 a2, a1987; GENERIC-NEXT:    movi16 a1, 1988; GENERIC-NEXT:    or16 a1, a2989; GENERIC-NEXT:    lrw32 a2, [.LCPI38_0]990; GENERIC-NEXT:    jsr16 a2991; GENERIC-NEXT:    addi16 sp, sp, 4992; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload993; GENERIC-NEXT:    addi16 sp, sp, 4994; GENERIC-NEXT:    rts16995; GENERIC-NEXT:    .p2align 1996; GENERIC-NEXT:  # %bb.1:997; GENERIC-NEXT:    .p2align 2, 0x0998; GENERIC-NEXT:  .LCPI38_0:999; GENERIC-NEXT:    .long __divsi31000entry:1001  %sdiv = sdiv  i32 %x, 40971002  ret i32 %sdiv1003}1004 1005define i16 @SDIV_SHORT(i16 %x, i16 %y) {1006; CHECK-LABEL: SDIV_SHORT:1007; CHECK:       # %bb.0: # %entry1008; CHECK-NEXT:    sexth16 a0, a01009; CHECK-NEXT:    sexth16 a1, a11010; CHECK-NEXT:    divs32 a0, a1, a01011; CHECK-NEXT:    rts161012;1013; GENERIC-LABEL: SDIV_SHORT:1014; GENERIC:       # %bb.0: # %entry1015; GENERIC-NEXT:    subi16 sp, sp, 41016; GENERIC-NEXT:    .cfi_def_cfa_offset 41017; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill1018; GENERIC-NEXT:    .cfi_offset lr, -41019; GENERIC-NEXT:    subi16 sp, sp, 41020; GENERIC-NEXT:    .cfi_def_cfa_offset 81021; GENERIC-NEXT:    sexth16 a2, a11022; GENERIC-NEXT:    sexth16 a1, a01023; GENERIC-NEXT:    lrw32 a3, [.LCPI39_0]1024; GENERIC-NEXT:    mov16 a0, a21025; GENERIC-NEXT:    jsr16 a31026; GENERIC-NEXT:    addi16 sp, sp, 41027; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload1028; GENERIC-NEXT:    addi16 sp, sp, 41029; GENERIC-NEXT:    rts161030; GENERIC-NEXT:    .p2align 11031; GENERIC-NEXT:  # %bb.1:1032; GENERIC-NEXT:    .p2align 2, 0x01033; GENERIC-NEXT:  .LCPI39_0:1034; GENERIC-NEXT:    .long __divsi31035entry:1036  %sdiv = sdiv  i16 %y, %x1037  ret i16 %sdiv1038}1039 1040define i16 @SDIV_SHORT_I(i16 %x) {1041; CHECK-LABEL: SDIV_SHORT_I:1042; CHECK:       # %bb.0: # %entry1043; CHECK-NEXT:    sexth16 a0, a01044; CHECK-NEXT:    movi32 a1, 218461045; CHECK-NEXT:    mult16 a0, a11046; CHECK-NEXT:    lsri16 a1, a0, 311047; CHECK-NEXT:    lsri16 a0, a0, 161048; CHECK-NEXT:    addu16 a0, a11049; CHECK-NEXT:    rts161050;1051; GENERIC-LABEL: SDIV_SHORT_I:1052; GENERIC:       # %bb.0: # %entry1053; GENERIC-NEXT:    .cfi_def_cfa_offset 01054; GENERIC-NEXT:    subi16 sp, sp, 41055; GENERIC-NEXT:    .cfi_def_cfa_offset 41056; GENERIC-NEXT:    sexth16 a0, a01057; GENERIC-NEXT:    movi16 a1, 01058; GENERIC-NEXT:    lsli16 a2, a1, 241059; GENERIC-NEXT:    lsli16 a1, a1, 161060; GENERIC-NEXT:    or16 a1, a21061; GENERIC-NEXT:    movi16 a2, 851062; GENERIC-NEXT:    lsli16 a2, a2, 81063; GENERIC-NEXT:    or16 a2, a11064; GENERIC-NEXT:    movi16 a1, 861065; GENERIC-NEXT:    or16 a1, a21066; GENERIC-NEXT:    mult16 a1, a01067; GENERIC-NEXT:    lsri16 a0, a1, 311068; GENERIC-NEXT:    lsri16 a1, a1, 161069; GENERIC-NEXT:    addu16 a0, a1, a01070; GENERIC-NEXT:    addi16 sp, sp, 41071; GENERIC-NEXT:    rts161072entry:1073  %sdiv = sdiv  i16 %x, 31074  ret i16 %sdiv1075}1076 1077define i8 @SDIV_CHAR(i8 %x, i8 %y) {1078; CHECK-LABEL: SDIV_CHAR:1079; CHECK:       # %bb.0: # %entry1080; CHECK-NEXT:    sextb16 a0, a01081; CHECK-NEXT:    sextb16 a1, a11082; CHECK-NEXT:    divs32 a0, a1, a01083; CHECK-NEXT:    rts161084;1085; GENERIC-LABEL: SDIV_CHAR:1086; GENERIC:       # %bb.0: # %entry1087; GENERIC-NEXT:    subi16 sp, sp, 41088; GENERIC-NEXT:    .cfi_def_cfa_offset 41089; GENERIC-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill1090; GENERIC-NEXT:    .cfi_offset lr, -41091; GENERIC-NEXT:    subi16 sp, sp, 41092; GENERIC-NEXT:    .cfi_def_cfa_offset 81093; GENERIC-NEXT:    sextb16 a2, a11094; GENERIC-NEXT:    sextb16 a1, a01095; GENERIC-NEXT:    lrw32 a3, [.LCPI41_0]1096; GENERIC-NEXT:    mov16 a0, a21097; GENERIC-NEXT:    jsr16 a31098; GENERIC-NEXT:    addi16 sp, sp, 41099; GENERIC-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload1100; GENERIC-NEXT:    addi16 sp, sp, 41101; GENERIC-NEXT:    rts161102; GENERIC-NEXT:    .p2align 11103; GENERIC-NEXT:  # %bb.1:1104; GENERIC-NEXT:    .p2align 2, 0x01105; GENERIC-NEXT:  .LCPI41_0:1106; GENERIC-NEXT:    .long __divsi31107entry:1108  %sdiv = sdiv  i8 %y, %x1109  ret i8 %sdiv1110}1111 1112define i8 @SDIV_CHAR_I(i8 %x) {1113; CHECK-LABEL: SDIV_CHAR_I:1114; CHECK:       # %bb.0: # %entry1115; CHECK-NEXT:    sextb16 a1, a01116; CHECK-NEXT:    movi16 a2, 851117; CHECK-NEXT:    mult16 a1, a21118; CHECK-NEXT:    lsri16 a1, a1, 81119; CHECK-NEXT:    subu16 a0, a1, a01120; CHECK-NEXT:    andi32 a1, a0, 1281121; CHECK-NEXT:    lsri16 a1, a1, 71122; CHECK-NEXT:    sextb16 a0, a01123; CHECK-NEXT:    asri16 a0, a0, 11124; CHECK-NEXT:    addu16 a0, a11125; CHECK-NEXT:    rts161126;1127; GENERIC-LABEL: SDIV_CHAR_I:1128; GENERIC:       # %bb.0: # %entry1129; GENERIC-NEXT:    .cfi_def_cfa_offset 01130; GENERIC-NEXT:    subi16 sp, sp, 41131; GENERIC-NEXT:    .cfi_def_cfa_offset 41132; GENERIC-NEXT:    sextb16 a1, a01133; GENERIC-NEXT:    movi16 a2, 851134; GENERIC-NEXT:    mult16 a2, a11135; GENERIC-NEXT:    lsri16 a1, a2, 81136; GENERIC-NEXT:    subu16 a0, a1, a01137; GENERIC-NEXT:    movi16 a1, 1281138; GENERIC-NEXT:    and16 a1, a01139; GENERIC-NEXT:    lsri16 a1, a1, 71140; GENERIC-NEXT:    sextb16 a0, a01141; GENERIC-NEXT:    asri16 a0, a0, 11142; GENERIC-NEXT:    addu16 a0, a0, a11143; GENERIC-NEXT:    addi16 sp, sp, 41144; GENERIC-NEXT:    rts161145entry:1146  %sdiv = sdiv  i8 %x, -31147  ret i8 %sdiv1148}1149 1150define i32 @shlRR(i32 %x, i32 %y) {1151; CHECK-LABEL: shlRR:1152; CHECK:       # %bb.0: # %entry1153; CHECK-NEXT:    lsl32 a0, a1, a01154; CHECK-NEXT:    rts161155;1156; GENERIC-LABEL: shlRR:1157; GENERIC:       # %bb.0: # %entry1158; GENERIC-NEXT:    .cfi_def_cfa_offset 01159; GENERIC-NEXT:    subi16 sp, sp, 41160; GENERIC-NEXT:    .cfi_def_cfa_offset 41161; GENERIC-NEXT:    lsl16 a1, a01162; GENERIC-NEXT:    mov16 a0, a11163; GENERIC-NEXT:    addi16 sp, sp, 41164; GENERIC-NEXT:    rts161165entry:1166  %shl = shl nsw i32 %y, %x1167  ret i32 %shl1168}1169 1170define i32 @shlRI(i32 %x) {1171; CHECK-LABEL: shlRI:1172; CHECK:       # %bb.0: # %entry1173; CHECK-NEXT:    lsli16 a0, a0, 101174; CHECK-NEXT:    rts161175;1176; GENERIC-LABEL: shlRI:1177; GENERIC:       # %bb.0: # %entry1178; GENERIC-NEXT:    .cfi_def_cfa_offset 01179; GENERIC-NEXT:    subi16 sp, sp, 41180; GENERIC-NEXT:    .cfi_def_cfa_offset 41181; GENERIC-NEXT:    lsli16 a0, a0, 101182; GENERIC-NEXT:    addi16 sp, sp, 41183; GENERIC-NEXT:    rts161184entry:1185  %shl = shl nsw i32 %x, 101186  ret i32 %shl1187}1188 1189 1190define i64 @SHL_LONG_I(i64 %x) {1191; CHECK-LABEL: SHL_LONG_I:1192; CHECK:       # %bb.0: # %entry1193; CHECK-NEXT:    lsri16 a2, a0, 251194; CHECK-NEXT:    lsli16 a1, a1, 71195; CHECK-NEXT:    or16 a1, a21196; CHECK-NEXT:    lsli16 a0, a0, 71197; CHECK-NEXT:    rts161198;1199; GENERIC-LABEL: SHL_LONG_I:1200; GENERIC:       # %bb.0: # %entry1201; GENERIC-NEXT:    .cfi_def_cfa_offset 01202; GENERIC-NEXT:    subi16 sp, sp, 41203; GENERIC-NEXT:    .cfi_def_cfa_offset 41204; GENERIC-NEXT:    lsri16 a2, a0, 251205; GENERIC-NEXT:    lsli16 a1, a1, 71206; GENERIC-NEXT:    or16 a1, a21207; GENERIC-NEXT:    lsli16 a0, a0, 71208; GENERIC-NEXT:    addi16 sp, sp, 41209; GENERIC-NEXT:    rts161210entry:1211  %shl = shl nsw i64 %x, 71212  ret i64 %shl1213}1214 1215define i16 @SHL_SHORT(i16 %x, i16 %y) {1216; CHECK-LABEL: SHL_SHORT:1217; CHECK:       # %bb.0: # %entry1218; CHECK-NEXT:    zexth16 a0, a01219; CHECK-NEXT:    lsl32 a0, a1, a01220; CHECK-NEXT:    rts161221;1222; GENERIC-LABEL: SHL_SHORT:1223; GENERIC:       # %bb.0: # %entry1224; GENERIC-NEXT:    subi16 sp, sp, 41225; GENERIC-NEXT:    .cfi_def_cfa_offset 41226; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill1227; GENERIC-NEXT:    .cfi_offset l0, -41228; GENERIC-NEXT:    subi16 sp, sp, 41229; GENERIC-NEXT:    .cfi_def_cfa_offset 81230; GENERIC-NEXT:    movi16 a2, 01231; GENERIC-NEXT:    lsli16 a3, a2, 241232; GENERIC-NEXT:    lsli16 a2, a2, 161233; GENERIC-NEXT:    or16 a2, a31234; GENERIC-NEXT:    movi16 a3, 2551235; GENERIC-NEXT:    lsli16 l0, a3, 81236; GENERIC-NEXT:    or16 l0, a21237; GENERIC-NEXT:    or16 l0, a31238; GENERIC-NEXT:    and16 l0, a01239; GENERIC-NEXT:    lsl16 a1, l01240; GENERIC-NEXT:    mov16 a0, a11241; GENERIC-NEXT:    addi16 sp, sp, 41242; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload1243; GENERIC-NEXT:    addi16 sp, sp, 41244; GENERIC-NEXT:    rts161245entry:1246  %shl = shl nsw i16 %y, %x1247  ret i16 %shl1248}1249 1250define i16 @SHL_SHORT_I(i16 %x) {1251; CHECK-LABEL: SHL_SHORT_I:1252; CHECK:       # %bb.0: # %entry1253; CHECK-NEXT:    lsli16 a0, a0, 11254; CHECK-NEXT:    rts161255;1256; GENERIC-LABEL: SHL_SHORT_I:1257; GENERIC:       # %bb.0: # %entry1258; GENERIC-NEXT:    .cfi_def_cfa_offset 01259; GENERIC-NEXT:    subi16 sp, sp, 41260; GENERIC-NEXT:    .cfi_def_cfa_offset 41261; GENERIC-NEXT:    lsli16 a0, a0, 11262; GENERIC-NEXT:    addi16 sp, sp, 41263; GENERIC-NEXT:    rts161264entry:1265  %shl = shl nsw i16 %x, 11266  ret i16 %shl1267}1268 1269define i8 @SHL_CHAR(i8 %x, i8 %y) {1270; CHECK-LABEL: SHL_CHAR:1271; CHECK:       # %bb.0: # %entry1272; CHECK-NEXT:    zextb16 a0, a01273; CHECK-NEXT:    lsl32 a0, a1, a01274; CHECK-NEXT:    rts161275;1276; GENERIC-LABEL: SHL_CHAR:1277; GENERIC:       # %bb.0: # %entry1278; GENERIC-NEXT:    .cfi_def_cfa_offset 01279; GENERIC-NEXT:    subi16 sp, sp, 41280; GENERIC-NEXT:    .cfi_def_cfa_offset 41281; GENERIC-NEXT:    movi16 a2, 2551282; GENERIC-NEXT:    and16 a2, a01283; GENERIC-NEXT:    lsl16 a1, a21284; GENERIC-NEXT:    mov16 a0, a11285; GENERIC-NEXT:    addi16 sp, sp, 41286; GENERIC-NEXT:    rts161287entry:1288  %shl = shl nsw i8 %y, %x1289  ret i8 %shl1290}1291 1292define i8 @SHL_CHAR_I(i8 %x) {1293; CHECK-LABEL: SHL_CHAR_I:1294; CHECK:       # %bb.0: # %entry1295; CHECK-NEXT:    lsli16 a0, a0, 11296; CHECK-NEXT:    rts161297;1298; GENERIC-LABEL: SHL_CHAR_I:1299; GENERIC:       # %bb.0: # %entry1300; GENERIC-NEXT:    .cfi_def_cfa_offset 01301; GENERIC-NEXT:    subi16 sp, sp, 41302; GENERIC-NEXT:    .cfi_def_cfa_offset 41303; GENERIC-NEXT:    lsli16 a0, a0, 11304; GENERIC-NEXT:    addi16 sp, sp, 41305; GENERIC-NEXT:    rts161306entry:1307  %shl = shl nsw i8 %x, 11308  ret i8 %shl1309}1310 1311define i32 @andRR(i32 %x, i32 %y) {1312; CHECK-LABEL: andRR:1313; CHECK:       # %bb.0: # %entry1314; CHECK-NEXT:    and16 a0, a11315; CHECK-NEXT:    rts161316;1317; GENERIC-LABEL: andRR:1318; GENERIC:       # %bb.0: # %entry1319; GENERIC-NEXT:    .cfi_def_cfa_offset 01320; GENERIC-NEXT:    subi16 sp, sp, 41321; GENERIC-NEXT:    .cfi_def_cfa_offset 41322; GENERIC-NEXT:    and16 a0, a11323; GENERIC-NEXT:    addi16 sp, sp, 41324; GENERIC-NEXT:    rts161325entry:1326  %and = and  i32 %y, %x1327  ret i32 %and1328}1329 1330define i32 @andRI(i32 %x) {1331; CHECK-LABEL: andRI:1332; CHECK:       # %bb.0: # %entry1333; CHECK-NEXT:    andi32 a0, a0, 101334; CHECK-NEXT:    rts161335;1336; GENERIC-LABEL: andRI:1337; GENERIC:       # %bb.0: # %entry1338; GENERIC-NEXT:    .cfi_def_cfa_offset 01339; GENERIC-NEXT:    subi16 sp, sp, 41340; GENERIC-NEXT:    .cfi_def_cfa_offset 41341; GENERIC-NEXT:    movi16 a1, 101342; GENERIC-NEXT:    and16 a0, a11343; GENERIC-NEXT:    addi16 sp, sp, 41344; GENERIC-NEXT:    rts161345entry:1346  %and = and  i32 %x, 101347  ret i32 %and1348}1349 1350define i32 @andRI_X(i32 %x) {1351; CHECK-LABEL: andRI_X:1352; CHECK:       # %bb.0: # %entry1353; CHECK-NEXT:    movi32 a1, 40971354; CHECK-NEXT:    and16 a0, a11355; CHECK-NEXT:    rts161356;1357; GENERIC-LABEL: andRI_X:1358; GENERIC:       # %bb.0: # %entry1359; GENERIC-NEXT:    .cfi_def_cfa_offset 01360; GENERIC-NEXT:    subi16 sp, sp, 41361; GENERIC-NEXT:    .cfi_def_cfa_offset 41362; GENERIC-NEXT:    movi16 a1, 01363; GENERIC-NEXT:    lsli16 a2, a1, 241364; GENERIC-NEXT:    lsli16 a1, a1, 161365; GENERIC-NEXT:    or16 a1, a21366; GENERIC-NEXT:    movi16 a2, 161367; GENERIC-NEXT:    lsli16 a2, a2, 81368; GENERIC-NEXT:    or16 a2, a11369; GENERIC-NEXT:    movi16 a1, 11370; GENERIC-NEXT:    or16 a1, a21371; GENERIC-NEXT:    and16 a0, a11372; GENERIC-NEXT:    addi16 sp, sp, 41373; GENERIC-NEXT:    rts161374entry:1375  %and = and  i32 %x, 40971376  ret i32 %and1377}1378 1379define i64 @AND_LONG(i64 %x, i64 %y) {1380; CHECK-LABEL: AND_LONG:1381; CHECK:       # %bb.0: # %entry1382; CHECK-NEXT:    and16 a0, a21383; CHECK-NEXT:    and16 a1, a31384; CHECK-NEXT:    rts161385;1386; GENERIC-LABEL: AND_LONG:1387; GENERIC:       # %bb.0: # %entry1388; GENERIC-NEXT:    .cfi_def_cfa_offset 01389; GENERIC-NEXT:    subi16 sp, sp, 41390; GENERIC-NEXT:    .cfi_def_cfa_offset 41391; GENERIC-NEXT:    and16 a0, a21392; GENERIC-NEXT:    and16 a1, a31393; GENERIC-NEXT:    addi16 sp, sp, 41394; GENERIC-NEXT:    rts161395entry:1396  %and = and  i64 %y, %x1397  ret i64 %and1398}1399 1400define i64 @AND_LONG_I(i64 %x) {1401; CHECK-LABEL: AND_LONG_I:1402; CHECK:       # %bb.0: # %entry1403; CHECK-NEXT:    andi32 a0, a0, 11404; CHECK-NEXT:    movi16 a1, 01405; CHECK-NEXT:    rts161406;1407; GENERIC-LABEL: AND_LONG_I:1408; GENERIC:       # %bb.0: # %entry1409; GENERIC-NEXT:    .cfi_def_cfa_offset 01410; GENERIC-NEXT:    subi16 sp, sp, 41411; GENERIC-NEXT:    .cfi_def_cfa_offset 41412; GENERIC-NEXT:    movi16 a1, 11413; GENERIC-NEXT:    and16 a0, a11414; GENERIC-NEXT:    movi16 a1, 01415; GENERIC-NEXT:    addi16 sp, sp, 41416; GENERIC-NEXT:    rts161417entry:1418  %and = and  i64 %x, 11419  ret i64 %and1420}1421 1422define i16 @AND_SHORT(i16 %x, i16 %y) {1423; CHECK-LABEL: AND_SHORT:1424; CHECK:       # %bb.0: # %entry1425; CHECK-NEXT:    and16 a0, a11426; CHECK-NEXT:    rts161427;1428; GENERIC-LABEL: AND_SHORT:1429; GENERIC:       # %bb.0: # %entry1430; GENERIC-NEXT:    .cfi_def_cfa_offset 01431; GENERIC-NEXT:    subi16 sp, sp, 41432; GENERIC-NEXT:    .cfi_def_cfa_offset 41433; GENERIC-NEXT:    and16 a0, a11434; GENERIC-NEXT:    addi16 sp, sp, 41435; GENERIC-NEXT:    rts161436entry:1437  %and = and  i16 %y, %x1438  ret i16 %and1439}1440 1441define i16 @AND_SHORT_I(i16 %x) {1442; CHECK-LABEL: AND_SHORT_I:1443; CHECK:       # %bb.0: # %entry1444; CHECK-NEXT:    andi32 a0, a0, 11445; CHECK-NEXT:    rts161446;1447; GENERIC-LABEL: AND_SHORT_I:1448; GENERIC:       # %bb.0: # %entry1449; GENERIC-NEXT:    .cfi_def_cfa_offset 01450; GENERIC-NEXT:    subi16 sp, sp, 41451; GENERIC-NEXT:    .cfi_def_cfa_offset 41452; GENERIC-NEXT:    movi16 a1, 11453; GENERIC-NEXT:    and16 a0, a11454; GENERIC-NEXT:    addi16 sp, sp, 41455; GENERIC-NEXT:    rts161456entry:1457  %and = and  i16 %x, 11458  ret i16 %and1459}1460 1461define i8 @AND_CHAR(i8 %x, i8 %y) {1462; CHECK-LABEL: AND_CHAR:1463; CHECK:       # %bb.0: # %entry1464; CHECK-NEXT:    and16 a0, a11465; CHECK-NEXT:    rts161466;1467; GENERIC-LABEL: AND_CHAR:1468; GENERIC:       # %bb.0: # %entry1469; GENERIC-NEXT:    .cfi_def_cfa_offset 01470; GENERIC-NEXT:    subi16 sp, sp, 41471; GENERIC-NEXT:    .cfi_def_cfa_offset 41472; GENERIC-NEXT:    and16 a0, a11473; GENERIC-NEXT:    addi16 sp, sp, 41474; GENERIC-NEXT:    rts161475entry:1476  %and = and  i8 %y, %x1477  ret i8 %and1478}1479 1480define i8 @AND_CHAR_I(i8 %x) {1481; CHECK-LABEL: AND_CHAR_I:1482; CHECK:       # %bb.0: # %entry1483; CHECK-NEXT:    andi32 a0, a0, 11484; CHECK-NEXT:    rts161485;1486; GENERIC-LABEL: AND_CHAR_I:1487; GENERIC:       # %bb.0: # %entry1488; GENERIC-NEXT:    .cfi_def_cfa_offset 01489; GENERIC-NEXT:    subi16 sp, sp, 41490; GENERIC-NEXT:    .cfi_def_cfa_offset 41491; GENERIC-NEXT:    movi16 a1, 11492; GENERIC-NEXT:    and16 a0, a11493; GENERIC-NEXT:    addi16 sp, sp, 41494; GENERIC-NEXT:    rts161495entry:1496  %and = and  i8 %x, 11497  ret i8 %and1498}1499 1500define i32 @ashrRR(i32 %x, i32 %y) {1501; CHECK-LABEL: ashrRR:1502; CHECK:       # %bb.0: # %entry1503; CHECK-NEXT:    asr32 a0, a1, a01504; CHECK-NEXT:    rts161505;1506; GENERIC-LABEL: ashrRR:1507; GENERIC:       # %bb.0: # %entry1508; GENERIC-NEXT:    .cfi_def_cfa_offset 01509; GENERIC-NEXT:    subi16 sp, sp, 41510; GENERIC-NEXT:    .cfi_def_cfa_offset 41511; GENERIC-NEXT:    asr16 a1, a01512; GENERIC-NEXT:    mov16 a0, a11513; GENERIC-NEXT:    addi16 sp, sp, 41514; GENERIC-NEXT:    rts161515entry:1516  %ashr = ashr  i32 %y, %x1517  ret i32 %ashr1518}1519 1520define i32 @ashrRI(i32 %x) {1521; CHECK-LABEL: ashrRI:1522; CHECK:       # %bb.0: # %entry1523; CHECK-NEXT:    asri16 a0, a0, 101524; CHECK-NEXT:    rts161525;1526; GENERIC-LABEL: ashrRI:1527; GENERIC:       # %bb.0: # %entry1528; GENERIC-NEXT:    .cfi_def_cfa_offset 01529; GENERIC-NEXT:    subi16 sp, sp, 41530; GENERIC-NEXT:    .cfi_def_cfa_offset 41531; GENERIC-NEXT:    asri16 a0, a0, 101532; GENERIC-NEXT:    addi16 sp, sp, 41533; GENERIC-NEXT:    rts161534entry:1535  %ashr = ashr  i32 %x, 101536  ret i32 %ashr1537}1538 1539 1540define i64 @ASHR_LONG_I(i64 %x) {1541; CHECK-LABEL: ASHR_LONG_I:1542; CHECK:       # %bb.0: # %entry1543; CHECK-NEXT:    lsli16 a2, a1, 251544; CHECK-NEXT:    lsri16 a0, a0, 71545; CHECK-NEXT:    or16 a0, a21546; CHECK-NEXT:    asri16 a1, a1, 71547; CHECK-NEXT:    rts161548;1549; GENERIC-LABEL: ASHR_LONG_I:1550; GENERIC:       # %bb.0: # %entry1551; GENERIC-NEXT:    .cfi_def_cfa_offset 01552; GENERIC-NEXT:    subi16 sp, sp, 41553; GENERIC-NEXT:    .cfi_def_cfa_offset 41554; GENERIC-NEXT:    lsli16 a2, a1, 251555; GENERIC-NEXT:    lsri16 a0, a0, 71556; GENERIC-NEXT:    or16 a0, a21557; GENERIC-NEXT:    asri16 a1, a1, 71558; GENERIC-NEXT:    addi16 sp, sp, 41559; GENERIC-NEXT:    rts161560entry:1561  %ashr = ashr  i64 %x, 71562  ret i64 %ashr1563}1564 1565define i16 @ASHR_SHORT(i16 %x, i16 %y) {1566; CHECK-LABEL: ASHR_SHORT:1567; CHECK:       # %bb.0: # %entry1568; CHECK-NEXT:    sexth16 a1, a11569; CHECK-NEXT:    zexth16 a0, a01570; CHECK-NEXT:    asr32 a0, a1, a01571; CHECK-NEXT:    rts161572;1573; GENERIC-LABEL: ASHR_SHORT:1574; GENERIC:       # %bb.0: # %entry1575; GENERIC-NEXT:    subi16 sp, sp, 41576; GENERIC-NEXT:    .cfi_def_cfa_offset 41577; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill1578; GENERIC-NEXT:    .cfi_offset l0, -41579; GENERIC-NEXT:    subi16 sp, sp, 41580; GENERIC-NEXT:    .cfi_def_cfa_offset 81581; GENERIC-NEXT:    sexth16 a1, a11582; GENERIC-NEXT:    movi16 a2, 01583; GENERIC-NEXT:    lsli16 a3, a2, 241584; GENERIC-NEXT:    lsli16 a2, a2, 161585; GENERIC-NEXT:    or16 a2, a31586; GENERIC-NEXT:    movi16 a3, 2551587; GENERIC-NEXT:    lsli16 l0, a3, 81588; GENERIC-NEXT:    or16 l0, a21589; GENERIC-NEXT:    or16 l0, a31590; GENERIC-NEXT:    and16 l0, a01591; GENERIC-NEXT:    asr16 a1, l01592; GENERIC-NEXT:    mov16 a0, a11593; GENERIC-NEXT:    addi16 sp, sp, 41594; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload1595; GENERIC-NEXT:    addi16 sp, sp, 41596; GENERIC-NEXT:    rts161597entry:1598  %ashr = ashr  i16 %y, %x1599  ret i16 %ashr1600}1601 1602define i16 @ASHR_SHORT_I(i16 %x) {1603; CHECK-LABEL: ASHR_SHORT_I:1604; CHECK:       # %bb.0: # %entry1605; CHECK-NEXT:    sexth16 a0, a01606; CHECK-NEXT:    asri16 a0, a0, 11607; CHECK-NEXT:    rts161608;1609; GENERIC-LABEL: ASHR_SHORT_I:1610; GENERIC:       # %bb.0: # %entry1611; GENERIC-NEXT:    .cfi_def_cfa_offset 01612; GENERIC-NEXT:    subi16 sp, sp, 41613; GENERIC-NEXT:    .cfi_def_cfa_offset 41614; GENERIC-NEXT:    sexth16 a0, a01615; GENERIC-NEXT:    asri16 a0, a0, 11616; GENERIC-NEXT:    addi16 sp, sp, 41617; GENERIC-NEXT:    rts161618entry:1619  %ashr = ashr  i16 %x, 11620  ret i16 %ashr1621}1622 1623define i8 @ASHR_CHAR(i8 %x, i8 %y) {1624; CHECK-LABEL: ASHR_CHAR:1625; CHECK:       # %bb.0: # %entry1626; CHECK-NEXT:    sextb16 a1, a11627; CHECK-NEXT:    zextb16 a0, a01628; CHECK-NEXT:    asr32 a0, a1, a01629; CHECK-NEXT:    rts161630;1631; GENERIC-LABEL: ASHR_CHAR:1632; GENERIC:       # %bb.0: # %entry1633; GENERIC-NEXT:    .cfi_def_cfa_offset 01634; GENERIC-NEXT:    subi16 sp, sp, 41635; GENERIC-NEXT:    .cfi_def_cfa_offset 41636; GENERIC-NEXT:    sextb16 a1, a11637; GENERIC-NEXT:    movi16 a2, 2551638; GENERIC-NEXT:    and16 a2, a01639; GENERIC-NEXT:    asr16 a1, a21640; GENERIC-NEXT:    mov16 a0, a11641; GENERIC-NEXT:    addi16 sp, sp, 41642; GENERIC-NEXT:    rts161643entry:1644  %ashr = ashr  i8 %y, %x1645  ret i8 %ashr1646}1647 1648define i8 @ASHR_CHAR_I(i8 %x) {1649; CHECK-LABEL: ASHR_CHAR_I:1650; CHECK:       # %bb.0: # %entry1651; CHECK-NEXT:    sextb16 a0, a01652; CHECK-NEXT:    asri16 a0, a0, 11653; CHECK-NEXT:    rts161654;1655; GENERIC-LABEL: ASHR_CHAR_I:1656; GENERIC:       # %bb.0: # %entry1657; GENERIC-NEXT:    .cfi_def_cfa_offset 01658; GENERIC-NEXT:    subi16 sp, sp, 41659; GENERIC-NEXT:    .cfi_def_cfa_offset 41660; GENERIC-NEXT:    sextb16 a0, a01661; GENERIC-NEXT:    asri16 a0, a0, 11662; GENERIC-NEXT:    addi16 sp, sp, 41663; GENERIC-NEXT:    rts161664entry:1665  %ashr = ashr  i8 %x, 11666  ret i8 %ashr1667}1668 1669 1670define i32 @lshrRR(i32 %x, i32 %y) {1671; CHECK-LABEL: lshrRR:1672; CHECK:       # %bb.0: # %entry1673; CHECK-NEXT:    lsr32 a0, a1, a01674; CHECK-NEXT:    rts161675;1676; GENERIC-LABEL: lshrRR:1677; GENERIC:       # %bb.0: # %entry1678; GENERIC-NEXT:    .cfi_def_cfa_offset 01679; GENERIC-NEXT:    subi16 sp, sp, 41680; GENERIC-NEXT:    .cfi_def_cfa_offset 41681; GENERIC-NEXT:    lsr16 a1, a01682; GENERIC-NEXT:    mov16 a0, a11683; GENERIC-NEXT:    addi16 sp, sp, 41684; GENERIC-NEXT:    rts161685entry:1686  %lshr = lshr  i32 %y, %x1687  ret i32 %lshr1688}1689 1690define i32 @lshrRI(i32 %x) {1691; CHECK-LABEL: lshrRI:1692; CHECK:       # %bb.0: # %entry1693; CHECK-NEXT:    lsri16 a0, a0, 101694; CHECK-NEXT:    rts161695;1696; GENERIC-LABEL: lshrRI:1697; GENERIC:       # %bb.0: # %entry1698; GENERIC-NEXT:    .cfi_def_cfa_offset 01699; GENERIC-NEXT:    subi16 sp, sp, 41700; GENERIC-NEXT:    .cfi_def_cfa_offset 41701; GENERIC-NEXT:    lsri16 a0, a0, 101702; GENERIC-NEXT:    addi16 sp, sp, 41703; GENERIC-NEXT:    rts161704entry:1705  %lshr = lshr  i32 %x, 101706  ret i32 %lshr1707}1708 1709define i64 @LSHR_LONG_I(i64 %x) {1710; CHECK-LABEL: LSHR_LONG_I:1711; CHECK:       # %bb.0: # %entry1712; CHECK-NEXT:    lsli16 a2, a1, 251713; CHECK-NEXT:    lsri16 a0, a0, 71714; CHECK-NEXT:    or16 a0, a21715; CHECK-NEXT:    lsri16 a1, a1, 71716; CHECK-NEXT:    rts161717;1718; GENERIC-LABEL: LSHR_LONG_I:1719; GENERIC:       # %bb.0: # %entry1720; GENERIC-NEXT:    .cfi_def_cfa_offset 01721; GENERIC-NEXT:    subi16 sp, sp, 41722; GENERIC-NEXT:    .cfi_def_cfa_offset 41723; GENERIC-NEXT:    lsli16 a2, a1, 251724; GENERIC-NEXT:    lsri16 a0, a0, 71725; GENERIC-NEXT:    or16 a0, a21726; GENERIC-NEXT:    lsri16 a1, a1, 71727; GENERIC-NEXT:    addi16 sp, sp, 41728; GENERIC-NEXT:    rts161729entry:1730  %lshr = lshr  i64 %x, 71731  ret i64 %lshr1732}1733 1734define i16 @LSHR_SHORT(i16 %x, i16 %y) {1735; CHECK-LABEL: LSHR_SHORT:1736; CHECK:       # %bb.0: # %entry1737; CHECK-NEXT:    zexth16 a1, a11738; CHECK-NEXT:    zexth16 a0, a01739; CHECK-NEXT:    lsr32 a0, a1, a01740; CHECK-NEXT:    rts161741;1742; GENERIC-LABEL: LSHR_SHORT:1743; GENERIC:       # %bb.0: # %entry1744; GENERIC-NEXT:    subi16 sp, sp, 41745; GENERIC-NEXT:    .cfi_def_cfa_offset 41746; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill1747; GENERIC-NEXT:    .cfi_offset l0, -41748; GENERIC-NEXT:    subi16 sp, sp, 41749; GENERIC-NEXT:    .cfi_def_cfa_offset 81750; GENERIC-NEXT:    movi16 a2, 01751; GENERIC-NEXT:    lsli16 a3, a2, 241752; GENERIC-NEXT:    lsli16 a2, a2, 161753; GENERIC-NEXT:    or16 a2, a31754; GENERIC-NEXT:    movi16 a3, 2551755; GENERIC-NEXT:    lsli16 l0, a3, 81756; GENERIC-NEXT:    or16 l0, a21757; GENERIC-NEXT:    or16 l0, a31758; GENERIC-NEXT:    and16 a1, l01759; GENERIC-NEXT:    and16 l0, a01760; GENERIC-NEXT:    lsr16 a1, l01761; GENERIC-NEXT:    mov16 a0, a11762; GENERIC-NEXT:    addi16 sp, sp, 41763; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload1764; GENERIC-NEXT:    addi16 sp, sp, 41765; GENERIC-NEXT:    rts161766entry:1767  %lshr = lshr  i16 %y, %x1768  ret i16 %lshr1769}1770 1771define i16 @LSHR_SHORT_I(i16 %x) {1772; CHECK-LABEL: LSHR_SHORT_I:1773; CHECK:       # %bb.0: # %entry1774; CHECK-NEXT:    movi32 a1, 655341775; CHECK-NEXT:    and16 a0, a11776; CHECK-NEXT:    lsri16 a0, a0, 11777; CHECK-NEXT:    rts161778;1779; GENERIC-LABEL: LSHR_SHORT_I:1780; GENERIC:       # %bb.0: # %entry1781; GENERIC-NEXT:    .cfi_def_cfa_offset 01782; GENERIC-NEXT:    subi16 sp, sp, 41783; GENERIC-NEXT:    .cfi_def_cfa_offset 41784; GENERIC-NEXT:    movi16 a1, 01785; GENERIC-NEXT:    lsli16 a2, a1, 241786; GENERIC-NEXT:    lsli16 a1, a1, 161787; GENERIC-NEXT:    or16 a1, a21788; GENERIC-NEXT:    movi16 a2, 2551789; GENERIC-NEXT:    lsli16 a2, a2, 81790; GENERIC-NEXT:    or16 a2, a11791; GENERIC-NEXT:    movi16 a1, 2541792; GENERIC-NEXT:    or16 a1, a21793; GENERIC-NEXT:    and16 a1, a01794; GENERIC-NEXT:    lsri16 a0, a1, 11795; GENERIC-NEXT:    addi16 sp, sp, 41796; GENERIC-NEXT:    rts161797entry:1798  %lshr = lshr  i16 %x, 11799  ret i16 %lshr1800}1801 1802define i8 @LSHR_CHAR(i8 %x, i8 %y) {1803; CHECK-LABEL: LSHR_CHAR:1804; CHECK:       # %bb.0: # %entry1805; CHECK-NEXT:    zextb16 a1, a11806; CHECK-NEXT:    zextb16 a0, a01807; CHECK-NEXT:    lsr32 a0, a1, a01808; CHECK-NEXT:    rts161809;1810; GENERIC-LABEL: LSHR_CHAR:1811; GENERIC:       # %bb.0: # %entry1812; GENERIC-NEXT:    .cfi_def_cfa_offset 01813; GENERIC-NEXT:    subi16 sp, sp, 41814; GENERIC-NEXT:    .cfi_def_cfa_offset 41815; GENERIC-NEXT:    movi16 a2, 2551816; GENERIC-NEXT:    and16 a1, a21817; GENERIC-NEXT:    and16 a0, a21818; GENERIC-NEXT:    lsr16 a1, a01819; GENERIC-NEXT:    mov16 a0, a11820; GENERIC-NEXT:    addi16 sp, sp, 41821; GENERIC-NEXT:    rts161822entry:1823  %lshr = lshr  i8 %y, %x1824  ret i8 %lshr1825}1826 1827define i8 @LSHR_CHAR_I(i8 %x) {1828; CHECK-LABEL: LSHR_CHAR_I:1829; CHECK:       # %bb.0: # %entry1830; CHECK-NEXT:    andi32 a0, a0, 2541831; CHECK-NEXT:    lsri16 a0, a0, 11832; CHECK-NEXT:    rts161833;1834; GENERIC-LABEL: LSHR_CHAR_I:1835; GENERIC:       # %bb.0: # %entry1836; GENERIC-NEXT:    .cfi_def_cfa_offset 01837; GENERIC-NEXT:    subi16 sp, sp, 41838; GENERIC-NEXT:    .cfi_def_cfa_offset 41839; GENERIC-NEXT:    movi16 a1, 2541840; GENERIC-NEXT:    and16 a1, a01841; GENERIC-NEXT:    lsri16 a0, a1, 11842; GENERIC-NEXT:    addi16 sp, sp, 41843; GENERIC-NEXT:    rts161844entry:1845  %lshr = lshr  i8 %x, 11846  ret i8 %lshr1847}1848 1849define i1 @LSHR_BIT(i1 %x, i1 %y) {1850; CHECK-LABEL: LSHR_BIT:1851; CHECK:       # %bb.0: # %entry1852; CHECK-NEXT:    mov16 a0, a11853; CHECK-NEXT:    rts161854;1855; GENERIC-LABEL: LSHR_BIT:1856; GENERIC:       # %bb.0: # %entry1857; GENERIC-NEXT:    .cfi_def_cfa_offset 01858; GENERIC-NEXT:    subi16 sp, sp, 41859; GENERIC-NEXT:    .cfi_def_cfa_offset 41860; GENERIC-NEXT:    mov16 a0, a11861; GENERIC-NEXT:    addi16 sp, sp, 41862; GENERIC-NEXT:    rts161863entry:1864  %lshr = lshr  i1 %y, %x1865  ret i1 %lshr1866}1867 1868define i1 @LSHR_BIT_I(i1 %x) {1869; CHECK-LABEL: LSHR_BIT_I:1870; CHECK:       # %bb.0: # %entry1871; CHECK-NEXT:    rts161872;1873; GENERIC-LABEL: LSHR_BIT_I:1874; GENERIC:       # %bb.0: # %entry1875; GENERIC-NEXT:    .cfi_def_cfa_offset 01876; GENERIC-NEXT:    subi16 sp, sp, 41877; GENERIC-NEXT:    .cfi_def_cfa_offset 41878; GENERIC-NEXT:    addi16 sp, sp, 41879; GENERIC-NEXT:    rts161880entry:1881  %lshr = lshr  i1 %x, 11882  ret i1 %lshr1883}1884 1885define i32 @orRR(i32 %x, i32 %y) {1886; CHECK-LABEL: orRR:1887; CHECK:       # %bb.0: # %entry1888; CHECK-NEXT:    or16 a0, a11889; CHECK-NEXT:    rts161890;1891; GENERIC-LABEL: orRR:1892; GENERIC:       # %bb.0: # %entry1893; GENERIC-NEXT:    .cfi_def_cfa_offset 01894; GENERIC-NEXT:    subi16 sp, sp, 41895; GENERIC-NEXT:    .cfi_def_cfa_offset 41896; GENERIC-NEXT:    or16 a0, a11897; GENERIC-NEXT:    addi16 sp, sp, 41898; GENERIC-NEXT:    rts161899entry:1900  %or = or  i32 %y, %x1901  ret i32 %or1902}1903 1904define i32 @orRI(i32 %x) {1905; CHECK-LABEL: orRI:1906; CHECK:       # %bb.0: # %entry1907; CHECK-NEXT:    ori32 a0, a0, 101908; CHECK-NEXT:    rts161909;1910; GENERIC-LABEL: orRI:1911; GENERIC:       # %bb.0: # %entry1912; GENERIC-NEXT:    .cfi_def_cfa_offset 01913; GENERIC-NEXT:    subi16 sp, sp, 41914; GENERIC-NEXT:    .cfi_def_cfa_offset 41915; GENERIC-NEXT:    movi16 a1, 101916; GENERIC-NEXT:    or16 a0, a11917; GENERIC-NEXT:    addi16 sp, sp, 41918; GENERIC-NEXT:    rts161919entry:1920  %or = or  i32 %x, 101921  ret i32 %or1922}1923 1924define i32 @orRI_X(i32 %x) {1925; CHECK-LABEL: orRI_X:1926; CHECK:       # %bb.0: # %entry1927; CHECK-NEXT:    ori32 a0, a0, 40971928; CHECK-NEXT:    rts161929;1930; GENERIC-LABEL: orRI_X:1931; GENERIC:       # %bb.0: # %entry1932; GENERIC-NEXT:    .cfi_def_cfa_offset 01933; GENERIC-NEXT:    subi16 sp, sp, 41934; GENERIC-NEXT:    .cfi_def_cfa_offset 41935; GENERIC-NEXT:    movi16 a1, 01936; GENERIC-NEXT:    lsli16 a2, a1, 241937; GENERIC-NEXT:    lsli16 a1, a1, 161938; GENERIC-NEXT:    or16 a1, a21939; GENERIC-NEXT:    movi16 a2, 161940; GENERIC-NEXT:    lsli16 a2, a2, 81941; GENERIC-NEXT:    or16 a2, a11942; GENERIC-NEXT:    movi16 a1, 11943; GENERIC-NEXT:    or16 a1, a21944; GENERIC-NEXT:    or16 a0, a11945; GENERIC-NEXT:    addi16 sp, sp, 41946; GENERIC-NEXT:    rts161947entry:1948  %or = or  i32 %x, 40971949  ret i32 %or1950}1951 1952define i64 @OR_LONG(i64 %x, i64 %y) {1953; CHECK-LABEL: OR_LONG:1954; CHECK:       # %bb.0: # %entry1955; CHECK-NEXT:    or16 a0, a21956; CHECK-NEXT:    or16 a1, a31957; CHECK-NEXT:    rts161958;1959; GENERIC-LABEL: OR_LONG:1960; GENERIC:       # %bb.0: # %entry1961; GENERIC-NEXT:    .cfi_def_cfa_offset 01962; GENERIC-NEXT:    subi16 sp, sp, 41963; GENERIC-NEXT:    .cfi_def_cfa_offset 41964; GENERIC-NEXT:    or16 a0, a21965; GENERIC-NEXT:    or16 a1, a31966; GENERIC-NEXT:    addi16 sp, sp, 41967; GENERIC-NEXT:    rts161968entry:1969  %or = or  i64 %y, %x1970  ret i64 %or1971}1972 1973define i64 @OR_LONG_I(i64 %x) {1974; CHECK-LABEL: OR_LONG_I:1975; CHECK:       # %bb.0: # %entry1976; CHECK-NEXT:    ori32 a0, a0, 11977; CHECK-NEXT:    rts161978;1979; GENERIC-LABEL: OR_LONG_I:1980; GENERIC:       # %bb.0: # %entry1981; GENERIC-NEXT:    .cfi_def_cfa_offset 01982; GENERIC-NEXT:    subi16 sp, sp, 41983; GENERIC-NEXT:    .cfi_def_cfa_offset 41984; GENERIC-NEXT:    movi16 a2, 11985; GENERIC-NEXT:    or16 a0, a21986; GENERIC-NEXT:    addi16 sp, sp, 41987; GENERIC-NEXT:    rts161988entry:1989  %or = or  i64 %x, 11990  ret i64 %or1991}1992 1993define i16 @OR_SHORT(i16 %x, i16 %y) {1994; CHECK-LABEL: OR_SHORT:1995; CHECK:       # %bb.0: # %entry1996; CHECK-NEXT:    or16 a0, a11997; CHECK-NEXT:    rts161998;1999; GENERIC-LABEL: OR_SHORT:2000; GENERIC:       # %bb.0: # %entry2001; GENERIC-NEXT:    .cfi_def_cfa_offset 02002; GENERIC-NEXT:    subi16 sp, sp, 42003; GENERIC-NEXT:    .cfi_def_cfa_offset 42004; GENERIC-NEXT:    or16 a0, a12005; GENERIC-NEXT:    addi16 sp, sp, 42006; GENERIC-NEXT:    rts162007entry:2008  %or = or  i16 %y, %x2009  ret i16 %or2010}2011 2012define i16 @OR_SHORT_I(i16 %x) {2013; CHECK-LABEL: OR_SHORT_I:2014; CHECK:       # %bb.0: # %entry2015; CHECK-NEXT:    ori32 a0, a0, 12016; CHECK-NEXT:    rts162017;2018; GENERIC-LABEL: OR_SHORT_I:2019; GENERIC:       # %bb.0: # %entry2020; GENERIC-NEXT:    .cfi_def_cfa_offset 02021; GENERIC-NEXT:    subi16 sp, sp, 42022; GENERIC-NEXT:    .cfi_def_cfa_offset 42023; GENERIC-NEXT:    movi16 a1, 12024; GENERIC-NEXT:    or16 a0, a12025; GENERIC-NEXT:    addi16 sp, sp, 42026; GENERIC-NEXT:    rts162027entry:2028  %or = or  i16 %x, 12029  ret i16 %or2030}2031 2032define i8 @OR_CHAR(i8 %x, i8 %y) {2033; CHECK-LABEL: OR_CHAR:2034; CHECK:       # %bb.0: # %entry2035; CHECK-NEXT:    or16 a0, a12036; CHECK-NEXT:    rts162037;2038; GENERIC-LABEL: OR_CHAR:2039; GENERIC:       # %bb.0: # %entry2040; GENERIC-NEXT:    .cfi_def_cfa_offset 02041; GENERIC-NEXT:    subi16 sp, sp, 42042; GENERIC-NEXT:    .cfi_def_cfa_offset 42043; GENERIC-NEXT:    or16 a0, a12044; GENERIC-NEXT:    addi16 sp, sp, 42045; GENERIC-NEXT:    rts162046entry:2047  %or = or  i8 %y, %x2048  ret i8 %or2049}2050 2051define i8 @OR_CHAR_I(i8 %x) {2052; CHECK-LABEL: OR_CHAR_I:2053; CHECK:       # %bb.0: # %entry2054; CHECK-NEXT:    ori32 a0, a0, 12055; CHECK-NEXT:    rts162056;2057; GENERIC-LABEL: OR_CHAR_I:2058; GENERIC:       # %bb.0: # %entry2059; GENERIC-NEXT:    .cfi_def_cfa_offset 02060; GENERIC-NEXT:    subi16 sp, sp, 42061; GENERIC-NEXT:    .cfi_def_cfa_offset 42062; GENERIC-NEXT:    movi16 a1, 12063; GENERIC-NEXT:    or16 a0, a12064; GENERIC-NEXT:    addi16 sp, sp, 42065; GENERIC-NEXT:    rts162066entry:2067  %or = or  i8 %x, 12068  ret i8 %or2069}2070 2071 2072define i32 @xorRR(i32 %x, i32 %y) {2073; CHECK-LABEL: xorRR:2074; CHECK:       # %bb.0: # %entry2075; CHECK-NEXT:    xor16 a0, a12076; CHECK-NEXT:    rts162077;2078; GENERIC-LABEL: xorRR:2079; GENERIC:       # %bb.0: # %entry2080; GENERIC-NEXT:    .cfi_def_cfa_offset 02081; GENERIC-NEXT:    subi16 sp, sp, 42082; GENERIC-NEXT:    .cfi_def_cfa_offset 42083; GENERIC-NEXT:    xor16 a0, a12084; GENERIC-NEXT:    addi16 sp, sp, 42085; GENERIC-NEXT:    rts162086entry:2087  %xor = xor  i32 %y, %x2088  ret i32 %xor2089}2090 2091define i32 @xorRI(i32 %x) {2092; CHECK-LABEL: xorRI:2093; CHECK:       # %bb.0: # %entry2094; CHECK-NEXT:    xori32 a0, a0, 102095; CHECK-NEXT:    rts162096;2097; GENERIC-LABEL: xorRI:2098; GENERIC:       # %bb.0: # %entry2099; GENERIC-NEXT:    .cfi_def_cfa_offset 02100; GENERIC-NEXT:    subi16 sp, sp, 42101; GENERIC-NEXT:    .cfi_def_cfa_offset 42102; GENERIC-NEXT:    movi16 a1, 102103; GENERIC-NEXT:    xor16 a0, a12104; GENERIC-NEXT:    addi16 sp, sp, 42105; GENERIC-NEXT:    rts162106entry:2107  %xor = xor  i32 %x, 102108  ret i32 %xor2109}2110 2111define i32 @xorRI_X(i32 %x) {2112; CHECK-LABEL: xorRI_X:2113; CHECK:       # %bb.0: # %entry2114; CHECK-NEXT:    movi32 a1, 40972115; CHECK-NEXT:    xor16 a0, a12116; CHECK-NEXT:    rts162117;2118; GENERIC-LABEL: xorRI_X:2119; GENERIC:       # %bb.0: # %entry2120; GENERIC-NEXT:    .cfi_def_cfa_offset 02121; GENERIC-NEXT:    subi16 sp, sp, 42122; GENERIC-NEXT:    .cfi_def_cfa_offset 42123; GENERIC-NEXT:    movi16 a1, 02124; GENERIC-NEXT:    lsli16 a2, a1, 242125; GENERIC-NEXT:    lsli16 a1, a1, 162126; GENERIC-NEXT:    or16 a1, a22127; GENERIC-NEXT:    movi16 a2, 162128; GENERIC-NEXT:    lsli16 a2, a2, 82129; GENERIC-NEXT:    or16 a2, a12130; GENERIC-NEXT:    movi16 a1, 12131; GENERIC-NEXT:    or16 a1, a22132; GENERIC-NEXT:    xor16 a0, a12133; GENERIC-NEXT:    addi16 sp, sp, 42134; GENERIC-NEXT:    rts162135entry:2136  %xor = xor  i32 %x, 40972137  ret i32 %xor2138}2139 2140define i64 @XOR_LONG(i64 %x, i64 %y) {2141; CHECK-LABEL: XOR_LONG:2142; CHECK:       # %bb.0: # %entry2143; CHECK-NEXT:    xor16 a0, a22144; CHECK-NEXT:    xor16 a1, a32145; CHECK-NEXT:    rts162146;2147; GENERIC-LABEL: XOR_LONG:2148; GENERIC:       # %bb.0: # %entry2149; GENERIC-NEXT:    .cfi_def_cfa_offset 02150; GENERIC-NEXT:    subi16 sp, sp, 42151; GENERIC-NEXT:    .cfi_def_cfa_offset 42152; GENERIC-NEXT:    xor16 a0, a22153; GENERIC-NEXT:    xor16 a1, a32154; GENERIC-NEXT:    addi16 sp, sp, 42155; GENERIC-NEXT:    rts162156entry:2157  %xor = xor  i64 %y, %x2158  ret i64 %xor2159}2160 2161define i64 @XOR_LONG_I(i64 %x) {2162; CHECK-LABEL: XOR_LONG_I:2163; CHECK:       # %bb.0: # %entry2164; CHECK-NEXT:    xori32 a0, a0, 12165; CHECK-NEXT:    rts162166;2167; GENERIC-LABEL: XOR_LONG_I:2168; GENERIC:       # %bb.0: # %entry2169; GENERIC-NEXT:    .cfi_def_cfa_offset 02170; GENERIC-NEXT:    subi16 sp, sp, 42171; GENERIC-NEXT:    .cfi_def_cfa_offset 42172; GENERIC-NEXT:    movi16 a2, 12173; GENERIC-NEXT:    xor16 a0, a22174; GENERIC-NEXT:    addi16 sp, sp, 42175; GENERIC-NEXT:    rts162176entry:2177  %xor = xor  i64 %x, 12178  ret i64 %xor2179}2180 2181define i16 @XOR_SHORT(i16 %x, i16 %y) {2182; CHECK-LABEL: XOR_SHORT:2183; CHECK:       # %bb.0: # %entry2184; CHECK-NEXT:    xor16 a0, a12185; CHECK-NEXT:    rts162186;2187; GENERIC-LABEL: XOR_SHORT:2188; GENERIC:       # %bb.0: # %entry2189; GENERIC-NEXT:    .cfi_def_cfa_offset 02190; GENERIC-NEXT:    subi16 sp, sp, 42191; GENERIC-NEXT:    .cfi_def_cfa_offset 42192; GENERIC-NEXT:    xor16 a0, a12193; GENERIC-NEXT:    addi16 sp, sp, 42194; GENERIC-NEXT:    rts162195entry:2196  %xor = xor  i16 %y, %x2197  ret i16 %xor2198}2199 2200define i16 @XOR_SHORT_I(i16 %x) {2201; CHECK-LABEL: XOR_SHORT_I:2202; CHECK:       # %bb.0: # %entry2203; CHECK-NEXT:    xori32 a0, a0, 12204; CHECK-NEXT:    rts162205;2206; GENERIC-LABEL: XOR_SHORT_I:2207; GENERIC:       # %bb.0: # %entry2208; GENERIC-NEXT:    .cfi_def_cfa_offset 02209; GENERIC-NEXT:    subi16 sp, sp, 42210; GENERIC-NEXT:    .cfi_def_cfa_offset 42211; GENERIC-NEXT:    movi16 a1, 12212; GENERIC-NEXT:    xor16 a0, a12213; GENERIC-NEXT:    addi16 sp, sp, 42214; GENERIC-NEXT:    rts162215entry:2216  %xor = xor  i16 %x, 12217  ret i16 %xor2218}2219 2220define i8 @XOR_CHAR(i8 %x, i8 %y) {2221; CHECK-LABEL: XOR_CHAR:2222; CHECK:       # %bb.0: # %entry2223; CHECK-NEXT:    xor16 a0, a12224; CHECK-NEXT:    rts162225;2226; GENERIC-LABEL: XOR_CHAR:2227; GENERIC:       # %bb.0: # %entry2228; GENERIC-NEXT:    .cfi_def_cfa_offset 02229; GENERIC-NEXT:    subi16 sp, sp, 42230; GENERIC-NEXT:    .cfi_def_cfa_offset 42231; GENERIC-NEXT:    xor16 a0, a12232; GENERIC-NEXT:    addi16 sp, sp, 42233; GENERIC-NEXT:    rts162234entry:2235  %xor = xor  i8 %y, %x2236  ret i8 %xor2237}2238 2239define i8 @XOR_CHAR_I(i8 %x) {2240; CHECK-LABEL: XOR_CHAR_I:2241; CHECK:       # %bb.0: # %entry2242; CHECK-NEXT:    xori32 a0, a0, 12243; CHECK-NEXT:    rts162244;2245; GENERIC-LABEL: XOR_CHAR_I:2246; GENERIC:       # %bb.0: # %entry2247; GENERIC-NEXT:    .cfi_def_cfa_offset 02248; GENERIC-NEXT:    subi16 sp, sp, 42249; GENERIC-NEXT:    .cfi_def_cfa_offset 42250; GENERIC-NEXT:    movi16 a1, 12251; GENERIC-NEXT:    xor16 a0, a12252; GENERIC-NEXT:    addi16 sp, sp, 42253; GENERIC-NEXT:    rts162254entry:2255  %xor = xor  i8 %x, 12256  ret i8 %xor2257}2258 2259; i64 --> i32/i16/i8/i12260define i32 @truncR_i64_0(i64 %x) {2261; CHECK-LABEL: truncR_i64_0:2262; CHECK:       # %bb.0: # %entry2263; CHECK-NEXT:    rts162264;2265; GENERIC-LABEL: truncR_i64_0:2266; GENERIC:       # %bb.0: # %entry2267; GENERIC-NEXT:    .cfi_def_cfa_offset 02268; GENERIC-NEXT:    subi16 sp, sp, 42269; GENERIC-NEXT:    .cfi_def_cfa_offset 42270; GENERIC-NEXT:    addi16 sp, sp, 42271; GENERIC-NEXT:    rts162272entry:2273  %trunc = trunc i64 %x to i322274  ret i32 %trunc2275}2276 2277define i16 @truncR_i64_1(i64 %x) {2278; CHECK-LABEL: truncR_i64_1:2279; CHECK:       # %bb.0: # %entry2280; CHECK-NEXT:    rts162281;2282; GENERIC-LABEL: truncR_i64_1:2283; GENERIC:       # %bb.0: # %entry2284; GENERIC-NEXT:    .cfi_def_cfa_offset 02285; GENERIC-NEXT:    subi16 sp, sp, 42286; GENERIC-NEXT:    .cfi_def_cfa_offset 42287; GENERIC-NEXT:    addi16 sp, sp, 42288; GENERIC-NEXT:    rts162289entry:2290  %trunc = trunc i64 %x to i162291  ret i16 %trunc2292}2293 2294define i8 @truncR_i64_2(i64 %x) {2295; CHECK-LABEL: truncR_i64_2:2296; CHECK:       # %bb.0: # %entry2297; CHECK-NEXT:    rts162298;2299; GENERIC-LABEL: truncR_i64_2:2300; GENERIC:       # %bb.0: # %entry2301; GENERIC-NEXT:    .cfi_def_cfa_offset 02302; GENERIC-NEXT:    subi16 sp, sp, 42303; GENERIC-NEXT:    .cfi_def_cfa_offset 42304; GENERIC-NEXT:    addi16 sp, sp, 42305; GENERIC-NEXT:    rts162306entry:2307  %trunc = trunc i64 %x to i82308  ret i8 %trunc2309}2310 2311define i1 @truncR_i64_3(i64 %x) {2312; CHECK-LABEL: truncR_i64_3:2313; CHECK:       # %bb.0: # %entry2314; CHECK-NEXT:    rts162315;2316; GENERIC-LABEL: truncR_i64_3:2317; GENERIC:       # %bb.0: # %entry2318; GENERIC-NEXT:    .cfi_def_cfa_offset 02319; GENERIC-NEXT:    subi16 sp, sp, 42320; GENERIC-NEXT:    .cfi_def_cfa_offset 42321; GENERIC-NEXT:    addi16 sp, sp, 42322; GENERIC-NEXT:    rts162323entry:2324  %trunc = trunc i64 %x to i12325  ret i1 %trunc2326}2327 2328 2329; i32 --> i16/i8/i12330define i16 @truncR_i32_1(i32 %x) {2331; CHECK-LABEL: truncR_i32_1:2332; CHECK:       # %bb.0: # %entry2333; CHECK-NEXT:    rts162334;2335; GENERIC-LABEL: truncR_i32_1:2336; GENERIC:       # %bb.0: # %entry2337; GENERIC-NEXT:    .cfi_def_cfa_offset 02338; GENERIC-NEXT:    subi16 sp, sp, 42339; GENERIC-NEXT:    .cfi_def_cfa_offset 42340; GENERIC-NEXT:    addi16 sp, sp, 42341; GENERIC-NEXT:    rts162342entry:2343  %trunc = trunc i32 %x to i162344  ret i16 %trunc2345}2346 2347define i8 @truncR_i32_2(i32 %x) {2348; CHECK-LABEL: truncR_i32_2:2349; CHECK:       # %bb.0: # %entry2350; CHECK-NEXT:    rts162351;2352; GENERIC-LABEL: truncR_i32_2:2353; GENERIC:       # %bb.0: # %entry2354; GENERIC-NEXT:    .cfi_def_cfa_offset 02355; GENERIC-NEXT:    subi16 sp, sp, 42356; GENERIC-NEXT:    .cfi_def_cfa_offset 42357; GENERIC-NEXT:    addi16 sp, sp, 42358; GENERIC-NEXT:    rts162359entry:2360  %trunc = trunc i32 %x to i82361  ret i8 %trunc2362}2363 2364define i1 @truncR_i32_3(i32 %x) {2365; CHECK-LABEL: truncR_i32_3:2366; CHECK:       # %bb.0: # %entry2367; CHECK-NEXT:    rts162368;2369; GENERIC-LABEL: truncR_i32_3:2370; GENERIC:       # %bb.0: # %entry2371; GENERIC-NEXT:    .cfi_def_cfa_offset 02372; GENERIC-NEXT:    subi16 sp, sp, 42373; GENERIC-NEXT:    .cfi_def_cfa_offset 42374; GENERIC-NEXT:    addi16 sp, sp, 42375; GENERIC-NEXT:    rts162376entry:2377  %trunc = trunc i32 %x to i12378  ret i1 %trunc2379}2380 2381; i16 --> i8/i12382define i8 @truncR_i16_2(i16 %x) {2383; CHECK-LABEL: truncR_i16_2:2384; CHECK:       # %bb.0: # %entry2385; CHECK-NEXT:    rts162386;2387; GENERIC-LABEL: truncR_i16_2:2388; GENERIC:       # %bb.0: # %entry2389; GENERIC-NEXT:    .cfi_def_cfa_offset 02390; GENERIC-NEXT:    subi16 sp, sp, 42391; GENERIC-NEXT:    .cfi_def_cfa_offset 42392; GENERIC-NEXT:    addi16 sp, sp, 42393; GENERIC-NEXT:    rts162394entry:2395  %trunc = trunc i16 %x to i82396  ret i8 %trunc2397}2398 2399define i1 @truncR_i16_3(i16 %x) {2400; CHECK-LABEL: truncR_i16_3:2401; CHECK:       # %bb.0: # %entry2402; CHECK-NEXT:    rts162403;2404; GENERIC-LABEL: truncR_i16_3:2405; GENERIC:       # %bb.0: # %entry2406; GENERIC-NEXT:    .cfi_def_cfa_offset 02407; GENERIC-NEXT:    subi16 sp, sp, 42408; GENERIC-NEXT:    .cfi_def_cfa_offset 42409; GENERIC-NEXT:    addi16 sp, sp, 42410; GENERIC-NEXT:    rts162411entry:2412  %trunc = trunc i16 %x to i12413  ret i1 %trunc2414}2415 2416 2417;i8 --> i12418define i1 @truncR_i8_3(i8 %x) {2419; CHECK-LABEL: truncR_i8_3:2420; CHECK:       # %bb.0: # %entry2421; CHECK-NEXT:    rts162422;2423; GENERIC-LABEL: truncR_i8_3:2424; GENERIC:       # %bb.0: # %entry2425; GENERIC-NEXT:    .cfi_def_cfa_offset 02426; GENERIC-NEXT:    subi16 sp, sp, 42427; GENERIC-NEXT:    .cfi_def_cfa_offset 42428; GENERIC-NEXT:    addi16 sp, sp, 42429; GENERIC-NEXT:    rts162430entry:2431  %trunc = trunc i8 %x to i12432  ret i1 %trunc2433}2434