brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 0446e35 Raw
257 lines · plain
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s2 3define signext i8 @func8s(i8 signext %a, i8 signext %b) {4; CHECK-LABEL: func8s:5; CHECK:       # %bb.0:6; CHECK-NEXT:    muls.w.sx %s0, %s1, %s07; CHECK-NEXT:    sll %s0, %s0, 568; CHECK-NEXT:    sra.l %s0, %s0, 569; CHECK-NEXT:    b.l.t (, %s10)10  %r = mul i8 %b, %a11  ret i8 %r12}13 14define signext i16 @func16s(i16 signext %a, i16 signext %b) {15; CHECK-LABEL: func16s:16; CHECK:       # %bb.0:17; CHECK-NEXT:    muls.w.sx %s0, %s1, %s018; CHECK-NEXT:    sll %s0, %s0, 4819; CHECK-NEXT:    sra.l %s0, %s0, 4820; CHECK-NEXT:    b.l.t (, %s10)21  %r = mul i16 %b, %a22  ret i16 %r23}24 25define signext i32 @func32s(i32 signext %a, i32 signext %b) {26; CHECK-LABEL: func32s:27; CHECK:       # %bb.0:28; CHECK-NEXT:    muls.w.sx %s0, %s1, %s029; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)130; CHECK-NEXT:    b.l.t (, %s10)31  %r = mul nsw i32 %b, %a32  ret i32 %r33}34 35define i64 @func64(i64 %a, i64 %b) {36; CHECK-LABEL: func64:37; CHECK:       # %bb.0:38; CHECK-NEXT:    muls.l %s0, %s1, %s039; CHECK-NEXT:    b.l.t (, %s10)40  %r = mul nsw i64 %b, %a41  ret i64 %r42}43 44define i128 @func128(i128 %a, i128 %b) {45; CHECK-LABEL: func128:46; CHECK:       .LBB{{[0-9]+}}_2:47; CHECK-NEXT:    or %s4, 0, %s148; CHECK-NEXT:    or %s5, 0, %s049; CHECK-NEXT:    lea %s0, __multi3@lo50; CHECK-NEXT:    and %s0, %s0, (32)051; CHECK-NEXT:    lea.sl %s12, __multi3@hi(, %s0)52; CHECK-NEXT:    or %s0, 0, %s253; CHECK-NEXT:    or %s1, 0, %s354; CHECK-NEXT:    or %s2, 0, %s555; CHECK-NEXT:    or %s3, 0, %s456; CHECK-NEXT:    bsic %s10, (, %s12)57; CHECK-NEXT:    or %s11, 0, %s958  %r = mul nsw i128 %b, %a59  ret i128 %r60}61 62define zeroext i8 @func8z(i8 zeroext %a, i8 zeroext %b) {63; CHECK-LABEL: func8z:64; CHECK:       # %bb.0:65; CHECK-NEXT:    muls.w.sx %s0, %s1, %s066; CHECK-NEXT:    and %s0, %s0, (56)067; CHECK-NEXT:    b.l.t (, %s10)68  %r = mul i8 %b, %a69  ret i8 %r70}71 72define zeroext i16 @func16z(i16 zeroext %a, i16 zeroext %b) {73; CHECK-LABEL: func16z:74; CHECK:       # %bb.0:75; CHECK-NEXT:    muls.w.sx %s0, %s1, %s076; CHECK-NEXT:    and %s0, %s0, (48)077; CHECK-NEXT:    b.l.t (, %s10)78  %r = mul i16 %b, %a79  ret i16 %r80}81 82define zeroext i32 @func32z(i32 zeroext %a, i32 zeroext %b) {83; CHECK-LABEL: func32z:84; CHECK:       # %bb.0:85; CHECK-NEXT:    muls.w.sx %s0, %s1, %s086; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)187; CHECK-NEXT:    b.l.t (, %s10)88  %r = mul i32 %b, %a89  ret i32 %r90}91 92define i64 @func64z(i64 %a, i64 %b) {93; CHECK-LABEL: func64z:94; CHECK:       # %bb.0:95; CHECK-NEXT:    muls.l %s0, %s1, %s096; CHECK-NEXT:    b.l.t (, %s10)97  %r = mul i64 %b, %a98  ret i64 %r99}100 101define i128 @func128z(i128 %a, i128 %b) {102; CHECK-LABEL: func128z:103; CHECK:       .LBB{{[0-9]+}}_2:104; CHECK-NEXT:    or %s4, 0, %s1105; CHECK-NEXT:    or %s5, 0, %s0106; CHECK-NEXT:    lea %s0, __multi3@lo107; CHECK-NEXT:    and %s0, %s0, (32)0108; CHECK-NEXT:    lea.sl %s12, __multi3@hi(, %s0)109; CHECK-NEXT:    or %s0, 0, %s2110; CHECK-NEXT:    or %s1, 0, %s3111; CHECK-NEXT:    or %s2, 0, %s5112; CHECK-NEXT:    or %s3, 0, %s4113; CHECK-NEXT:    bsic %s10, (, %s12)114; CHECK-NEXT:    or %s11, 0, %s9115  %r = mul i128 %b, %a116  ret i128 %r117}118 119define signext i8 @funci8s(i8 signext %a) {120; CHECK-LABEL: funci8s:121; CHECK:       # %bb.0:122; CHECK-NEXT:    muls.w.sx %s0, 5, %s0123; CHECK-NEXT:    sll %s0, %s0, 56124; CHECK-NEXT:    sra.l %s0, %s0, 56125; CHECK-NEXT:    b.l.t (, %s10)126  %r = mul i8 %a, 5127  ret i8 %r128}129 130define signext i16 @funci16s(i16 signext %a) {131; CHECK-LABEL: funci16s:132; CHECK:       # %bb.0:133; CHECK-NEXT:    muls.w.sx %s0, 5, %s0134; CHECK-NEXT:    sll %s0, %s0, 48135; CHECK-NEXT:    sra.l %s0, %s0, 48136; CHECK-NEXT:    b.l.t (, %s10)137  %r = mul i16 %a, 5138  ret i16 %r139}140 141define signext i32 @funci32s(i32 signext %a) {142; CHECK-LABEL: funci32s:143; CHECK:       # %bb.0:144; CHECK-NEXT:    muls.w.sx %s0, 5, %s0145; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1146; CHECK-NEXT:    b.l.t (, %s10)147  %r = mul nsw i32 %a, 5148  ret i32 %r149}150 151define i64 @funci64(i64 %a) {152; CHECK-LABEL: funci64:153; CHECK:       # %bb.0:154; CHECK-NEXT:    muls.l %s0, 5, %s0155; CHECK-NEXT:    b.l.t (, %s10)156  %r = mul nsw i64 %a, 5157  ret i64 %r158}159 160define i128 @funci128(i128 %a) {161; CHECK-LABEL: funci128:162; CHECK:       .LBB{{[0-9]+}}_2:163; CHECK-NEXT:    lea %s2, __multi3@lo164; CHECK-NEXT:    and %s2, %s2, (32)0165; CHECK-NEXT:    lea.sl %s12, __multi3@hi(, %s2)166; CHECK-NEXT:    or %s2, 5, (0)1167; CHECK-NEXT:    or %s3, 0, (0)1168; CHECK-NEXT:    bsic %s10, (, %s12)169; CHECK-NEXT:    or %s11, 0, %s9170  %r = mul nsw i128 %a, 5171  ret i128 %r172}173 174define zeroext i8 @funci8z(i8 zeroext %a) {175; CHECK-LABEL: funci8z:176; CHECK:       # %bb.0:177; CHECK-NEXT:    muls.w.sx %s0, 5, %s0178; CHECK-NEXT:    and %s0, %s0, (56)0179; CHECK-NEXT:    b.l.t (, %s10)180  %r = mul i8 %a, 5181  ret i8 %r182}183 184define zeroext i16 @funci16z(i16 zeroext %a) {185; CHECK-LABEL: funci16z:186; CHECK:       # %bb.0:187; CHECK-NEXT:    muls.w.sx %s0, 5, %s0188; CHECK-NEXT:    and %s0, %s0, (48)0189; CHECK-NEXT:    b.l.t (, %s10)190  %r = mul i16 %a, 5191  ret i16 %r192}193 194define zeroext i32 @funci32z(i32 zeroext %a) {195; CHECK-LABEL: funci32z:196; CHECK:       # %bb.0:197; CHECK-NEXT:    muls.w.sx %s0, 5, %s0198; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1199; CHECK-NEXT:    b.l.t (, %s10)200  %r = mul i32 %a, 5201  ret i32 %r202}203 204define i64 @funci64z(i64 %a) {205; CHECK-LABEL: funci64z:206; CHECK:       # %bb.0:207; CHECK-NEXT:    muls.l %s0, 5, %s0208; CHECK-NEXT:    b.l.t (, %s10)209  %r = mul i64 %a, 5210  ret i64 %r211}212 213define i128 @funci128z(i128 %a) {214; CHECK-LABEL: funci128z:215; CHECK:       .LBB{{[0-9]+}}_2:216; CHECK-NEXT:    lea %s2, __multi3@lo217; CHECK-NEXT:    and %s2, %s2, (32)0218; CHECK-NEXT:    lea.sl %s12, __multi3@hi(, %s2)219; CHECK-NEXT:    or %s2, 5, (0)1220; CHECK-NEXT:    or %s3, 0, (0)1221; CHECK-NEXT:    bsic %s10, (, %s12)222; CHECK-NEXT:    or %s11, 0, %s9223  %r = mul i128 %a, 5224  ret i128 %r225}226 227define zeroext i32 @funci32z_2(i32 zeroext %a) {228; CHECK-LABEL: funci32z_2:229; CHECK:       # %bb.0:230; CHECK-NEXT:    sla.w.sx %s0, %s0, 31231; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1232; CHECK-NEXT:    b.l.t (, %s10)233  %r = shl i32 %a, 31234  ret i32 %r235}236 237define i64 @funci64_2(i64 %a) {238; CHECK-LABEL: funci64_2:239; CHECK:       # %bb.0:240; CHECK-NEXT:    sll %s0, %s0, 31241; CHECK-NEXT:    b.l.t (, %s10)242  %r = shl nsw i64 %a, 31243  ret i64 %r244}245 246define i128 @funci128_2(i128 %a) {247; CHECK-LABEL: funci128_2:248; CHECK:       # %bb.0:249; CHECK-NEXT:    srl %s2, %s0, 33250; CHECK-NEXT:    sll %s1, %s1, 31251; CHECK-NEXT:    or %s1, %s1, %s2252; CHECK-NEXT:    sll %s0, %s0, 31253; CHECK-NEXT:    b.l.t (, %s10)254  %r = shl nsw i128 %a, 31255  ret i128 %r256}257