246 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: subs.w.sx %s0, %s0, %s17; CHECK-NEXT: sll %s0, %s0, 568; CHECK-NEXT: sra.l %s0, %s0, 569; CHECK-NEXT: b.l.t (, %s10)10 %3 = sub i8 %0, %111 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: subs.w.sx %s0, %s0, %s118; CHECK-NEXT: sll %s0, %s0, 4819; CHECK-NEXT: sra.l %s0, %s0, 4820; CHECK-NEXT: b.l.t (, %s10)21 %3 = sub i16 %0, %122 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: subs.w.sx %s0, %s0, %s129; CHECK-NEXT: adds.w.sx %s0, %s0, (0)130; CHECK-NEXT: b.l.t (, %s10)31 %3 = sub nsw i32 %0, %132 ret i32 %333}34 35define i64 @func64s(i64 %0, i64 %1) {36; CHECK-LABEL: func64s:37; CHECK: # %bb.0:38; CHECK-NEXT: subs.l %s0, %s0, %s139; CHECK-NEXT: b.l.t (, %s10)40 %3 = sub nsw i64 %0, %141 ret i64 %342}43 44define i128 @func128s(i128 %0, i128 %1) {45; CHECK-LABEL: func128s:46; CHECK: # %bb.0:47; CHECK-NEXT: subs.l %s1, %s1, %s348; CHECK-NEXT: cmpu.l %s3, %s0, %s249; CHECK-NEXT: or %s4, 0, (0)150; CHECK-NEXT: cmov.l.lt %s4, (63)0, %s351; CHECK-NEXT: adds.w.zx %s3, %s4, (0)152; CHECK-NEXT: subs.l %s1, %s1, %s353; CHECK-NEXT: subs.l %s0, %s0, %s254; CHECK-NEXT: b.l.t (, %s10)55 %3 = sub nsw i128 %0, %156 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: subs.w.sx %s0, %s0, %s163; CHECK-NEXT: and %s0, %s0, (56)064; CHECK-NEXT: b.l.t (, %s10)65 %3 = sub i8 %0, %166 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: subs.w.sx %s0, %s0, %s173; CHECK-NEXT: and %s0, %s0, (48)074; CHECK-NEXT: b.l.t (, %s10)75 %3 = sub i16 %0, %176 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: subs.w.sx %s0, %s0, %s183; CHECK-NEXT: adds.w.zx %s0, %s0, (0)184; CHECK-NEXT: b.l.t (, %s10)85 %3 = sub i32 %0, %186 ret i32 %387}88 89define i64 @func64z(i64 %0, i64 %1) {90; CHECK-LABEL: func64z:91; CHECK: # %bb.0:92; CHECK-NEXT: subs.l %s0, %s0, %s193; CHECK-NEXT: b.l.t (, %s10)94 %3 = sub i64 %0, %195 ret i64 %396}97 98define i128 @func128z(i128 %0, i128 %1) {99; CHECK-LABEL: func128z:100; CHECK: # %bb.0:101; CHECK-NEXT: subs.l %s1, %s1, %s3102; CHECK-NEXT: cmpu.l %s3, %s0, %s2103; CHECK-NEXT: or %s4, 0, (0)1104; CHECK-NEXT: cmov.l.lt %s4, (63)0, %s3105; CHECK-NEXT: adds.w.zx %s3, %s4, (0)1106; CHECK-NEXT: subs.l %s1, %s1, %s3107; CHECK-NEXT: subs.l %s0, %s0, %s2108; CHECK-NEXT: b.l.t (, %s10)109 %3 = sub i128 %0, %1110 ret i128 %3111}112 113define signext i8 @funci8s(i8 signext %a) {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 %ret = add i8 %a, -5121 ret i8 %ret122}123 124define signext i16 @funci16s(i16 signext %a) {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 %ret = add i16 %a, -5132 ret i16 %ret133}134 135define signext i32 @funci32s(i32 signext %a) {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 %ret = add i32 %a, -5142 ret i32 %ret143}144 145define i64 @funci64s(i64 %a) {146; CHECK-LABEL: funci64s:147; CHECK: # %bb.0:148; CHECK-NEXT: lea %s0, -5(, %s0)149; CHECK-NEXT: b.l.t (, %s10)150 %ret = add nsw i64 %a, -5151 ret i64 %ret152}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: lea %s1, -1(%s0, %s1)163; 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 %a) {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 %ret = add i8 %a, -5176 ret i8 %ret177}178 179define zeroext i16 @funci16z(i16 zeroext %a) {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 %ret = add i16 %a, -5186 ret i16 %ret187}188 189define zeroext i32 @funci32z(i32 zeroext %a) {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 %ret = add i32 %a, -5196 ret i32 %ret197}198 199define i64 @funci64z(i64 %a) {200; CHECK-LABEL: funci64z:201; CHECK: # %bb.0:202; CHECK-NEXT: lea %s0, -5(, %s0)203; CHECK-NEXT: b.l.t (, %s10)204 %ret = add i64 %a, -5205 ret i64 %ret206}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: lea %s1, -1(%s0, %s1)217; 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 %a) {224; CHECK-LABEL: funci64_2:225; CHECK: # %bb.0:226; CHECK-NEXT: lea %s0, -2147483648(, %s0)227; CHECK-NEXT: b.l.t (, %s10)228 %ret = add nsw i64 %a, -2147483648229 ret i64 %ret230}231 232define i128 @funci128_2(i128 %0) {233; CHECK-LABEL: funci128_2:234; CHECK: # %bb.0:235; CHECK-NEXT: lea %s2, -2147483648(, %s0)236; CHECK-NEXT: cmpu.l %s0, %s2, %s0237; CHECK-NEXT: or %s3, 0, (0)1238; CHECK-NEXT: cmov.l.lt %s3, (63)0, %s0239; CHECK-NEXT: adds.w.zx %s0, %s3, (0)1240; CHECK-NEXT: lea %s1, -1(%s0, %s1)241; CHECK-NEXT: or %s0, 0, %s2242; CHECK-NEXT: b.l.t (, %s10)243 %2 = add nsw i128 %0, -2147483648244 ret i128 %2245}246