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