250 lines · plain
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s2 3define signext i8 @func8s(i8 signext %0, i8 signext %1) {4; CHECK-LABEL: func8s:5; CHECK: # %bb.0:6; CHECK-NEXT: adds.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 %3 = add i8 %1, %011 ret i8 %312}13 14define signext i16 @func16s(i16 signext %0, i16 signext %1) {15; CHECK-LABEL: func16s:16; CHECK: # %bb.0:17; CHECK-NEXT: adds.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 %3 = add i16 %1, %022 ret i16 %323}24 25define signext i32 @func32s(i32 signext %0, i32 signext %1) {26; CHECK-LABEL: func32s:27; CHECK: # %bb.0:28; CHECK-NEXT: adds.w.sx %s0, %s1, %s029; CHECK-NEXT: adds.w.sx %s0, %s0, (0)130; CHECK-NEXT: b.l.t (, %s10)31 %3 = add nsw i32 %1, %032 ret i32 %333}34 35define i64 @func64s(i64 %0, i64 %1) {36; CHECK-LABEL: func64s:37; CHECK: # %bb.0:38; CHECK-NEXT: adds.l %s0, %s1, %s039; CHECK-NEXT: b.l.t (, %s10)40 %3 = add nsw i64 %1, %041 ret i64 %342}43 44define i128 @func128s(i128 %0, i128 %1) {45; CHECK-LABEL: func128s:46; CHECK: # %bb.0:47; CHECK-NEXT: adds.l %s1, %s3, %s148; CHECK-NEXT: adds.l %s0, %s2, %s049; CHECK-NEXT: cmpu.l %s2, %s0, %s250; CHECK-NEXT: or %s3, 0, (0)151; CHECK-NEXT: cmov.l.lt %s3, (63)0, %s252; CHECK-NEXT: adds.w.zx %s2, %s3, (0)153; CHECK-NEXT: adds.l %s1, %s1, %s254; CHECK-NEXT: b.l.t (, %s10)55 %3 = add nsw i128 %1, %056 ret i128 %357}58 59define zeroext i8 @func8z(i8 zeroext %0, i8 zeroext %1) {60; CHECK-LABEL: func8z:61; CHECK: # %bb.0:62; CHECK-NEXT: adds.w.sx %s0, %s1, %s063; CHECK-NEXT: and %s0, %s0, (56)064; CHECK-NEXT: b.l.t (, %s10)65 %3 = add i8 %1, %066 ret i8 %367}68 69define zeroext i16 @func16z(i16 zeroext %0, i16 zeroext %1) {70; CHECK-LABEL: func16z:71; CHECK: # %bb.0:72; CHECK-NEXT: adds.w.sx %s0, %s1, %s073; CHECK-NEXT: and %s0, %s0, (48)074; CHECK-NEXT: b.l.t (, %s10)75 %3 = add i16 %1, %076 ret i16 %377}78 79define zeroext i32 @func32z(i32 zeroext %0, i32 zeroext %1) {80; CHECK-LABEL: func32z:81; CHECK: # %bb.0:82; CHECK-NEXT: adds.w.sx %s0, %s1, %s083; CHECK-NEXT: adds.w.zx %s0, %s0, (0)184; CHECK-NEXT: b.l.t (, %s10)85 %3 = add i32 %1, %086 ret i32 %387}88 89define i64 @func64z(i64 %0, i64 %1) {90; CHECK-LABEL: func64z:91; CHECK: # %bb.0:92; CHECK-NEXT: adds.l %s0, %s1, %s093; CHECK-NEXT: b.l.t (, %s10)94 %3 = add i64 %1, %095 ret i64 %396}97 98define i128 @func128z(i128 %0, i128 %1) {99; CHECK-LABEL: func128z:100; CHECK: # %bb.0:101; CHECK-NEXT: adds.l %s1, %s3, %s1102; CHECK-NEXT: adds.l %s0, %s2, %s0103; CHECK-NEXT: cmpu.l %s2, %s0, %s2104; CHECK-NEXT: or %s3, 0, (0)1105; CHECK-NEXT: cmov.l.lt %s3, (63)0, %s2106; CHECK-NEXT: adds.w.zx %s2, %s3, (0)1107; CHECK-NEXT: adds.l %s1, %s1, %s2108; CHECK-NEXT: b.l.t (, %s10)109 %3 = add i128 %1, %0110 ret i128 %3111}112 113define signext i8 @funci8s(i8 signext %0) {114; CHECK-LABEL: funci8s:115; CHECK: # %bb.0:116; CHECK-NEXT: adds.w.sx %s0, 5, %s0117; CHECK-NEXT: sll %s0, %s0, 56118; CHECK-NEXT: sra.l %s0, %s0, 56119; CHECK-NEXT: b.l.t (, %s10)120 %2 = add i8 %0, 5121 ret i8 %2122}123 124define signext i16 @funci16s(i16 signext %0) {125; CHECK-LABEL: funci16s:126; CHECK: # %bb.0:127; CHECK-NEXT: adds.w.sx %s0, 5, %s0128; CHECK-NEXT: sll %s0, %s0, 48129; CHECK-NEXT: sra.l %s0, %s0, 48130; CHECK-NEXT: b.l.t (, %s10)131 %2 = add i16 %0, 5132 ret i16 %2133}134 135define signext i32 @funci32s(i32 signext %0) {136; CHECK-LABEL: funci32s:137; CHECK: # %bb.0:138; CHECK-NEXT: adds.w.sx %s0, 5, %s0139; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1140; CHECK-NEXT: b.l.t (, %s10)141 %2 = add nsw i32 %0, 5142 ret i32 %2143}144 145define i64 @funci64s(i64 %0) {146; CHECK-LABEL: funci64s:147; CHECK: # %bb.0:148; CHECK-NEXT: lea %s0, 5(, %s0)149; CHECK-NEXT: b.l.t (, %s10)150 %2 = add nsw i64 %0, 5151 ret i64 %2152}153 154define i128 @funci128s(i128 %0) {155; CHECK-LABEL: funci128s:156; CHECK: # %bb.0:157; CHECK-NEXT: lea %s2, 5(, %s0)158; CHECK-NEXT: cmpu.l %s0, %s2, %s0159; CHECK-NEXT: or %s3, 0, (0)1160; CHECK-NEXT: cmov.l.lt %s3, (63)0, %s0161; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1162; CHECK-NEXT: adds.l %s1, %s1, %s0163; CHECK-NEXT: or %s0, 0, %s2164; CHECK-NEXT: b.l.t (, %s10)165 %2 = add nsw i128 %0, 5166 ret i128 %2167}168 169define zeroext i8 @funci8z(i8 zeroext %0) {170; CHECK-LABEL: funci8z:171; CHECK: # %bb.0:172; CHECK-NEXT: adds.w.sx %s0, 5, %s0173; CHECK-NEXT: and %s0, %s0, (56)0174; CHECK-NEXT: b.l.t (, %s10)175 %2 = add i8 %0, 5176 ret i8 %2177}178 179define zeroext i16 @funci16z(i16 zeroext %0) {180; CHECK-LABEL: funci16z:181; CHECK: # %bb.0:182; CHECK-NEXT: adds.w.sx %s0, 5, %s0183; CHECK-NEXT: and %s0, %s0, (48)0184; CHECK-NEXT: b.l.t (, %s10)185 %2 = add i16 %0, 5186 ret i16 %2187}188 189define zeroext i32 @funci32z(i32 zeroext %0) {190; CHECK-LABEL: funci32z:191; CHECK: # %bb.0:192; CHECK-NEXT: adds.w.sx %s0, 5, %s0193; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1194; CHECK-NEXT: b.l.t (, %s10)195 %2 = add i32 %0, 5196 ret i32 %2197}198 199define i64 @funci64z(i64 %0) {200; CHECK-LABEL: funci64z:201; CHECK: # %bb.0:202; CHECK-NEXT: lea %s0, 5(, %s0)203; CHECK-NEXT: b.l.t (, %s10)204 %2 = add i64 %0, 5205 ret i64 %2206}207 208define i128 @funci128z(i128 %0) {209; CHECK-LABEL: funci128z:210; CHECK: # %bb.0:211; CHECK-NEXT: lea %s2, 5(, %s0)212; CHECK-NEXT: cmpu.l %s0, %s2, %s0213; CHECK-NEXT: or %s3, 0, (0)1214; CHECK-NEXT: cmov.l.lt %s3, (63)0, %s0215; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1216; CHECK-NEXT: adds.l %s1, %s1, %s0217; CHECK-NEXT: or %s0, 0, %s2218; CHECK-NEXT: b.l.t (, %s10)219 %2 = add i128 %0, 5220 ret i128 %2221}222 223define i64 @funci64_2(i64 %0) {224; CHECK-LABEL: funci64_2:225; CHECK: # %bb.0:226; CHECK-NEXT: lea %s1, -2147483648227; CHECK-NEXT: and %s1, %s1, (32)0228; CHECK-NEXT: adds.l %s0, %s0, %s1229; CHECK-NEXT: b.l.t (, %s10)230 %2 = add nsw i64 %0, 2147483648231 ret i64 %2232}233 234define i128 @funci128_2(i128 %0) {235; CHECK-LABEL: funci128_2:236; CHECK: # %bb.0:237; CHECK-NEXT: lea %s2, -2147483648238; CHECK-NEXT: and %s2, %s2, (32)0239; CHECK-NEXT: adds.l %s2, %s0, %s2240; CHECK-NEXT: cmpu.l %s0, %s2, %s0241; CHECK-NEXT: or %s3, 0, (0)1242; CHECK-NEXT: cmov.l.lt %s3, (63)0, %s0243; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1244; CHECK-NEXT: adds.l %s1, %s1, %s0245; CHECK-NEXT: or %s0, 0, %s2246; CHECK-NEXT: b.l.t (, %s10)247 %2 = add nsw i128 %0, 2147483648248 ret i128 %2249}250