brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.5 KiB · ef59bd0 Raw
411 lines · plain
1; RUN: llc -mtriple=arm-eabi -mcpu=generic %s -o - | FileCheck %s --check-prefix=DISABLED2; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 %s -o - | FileCheck %s3; RUN: llc -mtriple=thumb--none-eabi -mcpu=cortex-a8 %s -o - | FileCheck %s4; RUN: llc -mtriple=thumbv6t2-none-eabi %s -o - | FileCheck %s5; RUN: llc -mtriple=thumbv6-none-eabi %s -o - | FileCheck %s -check-prefix=DISABLED6 7define i32 @f1(i16 %x, i32 %y) {8; CHECK-LABEL: f1:9; CHECK-NOT: sxth10; CHECK: {{smulbt r0, r0, r1|smultb r0, r1, r0}}11; DISABLED-NOT: {{smulbt|smultb}}12        %tmp1 = sext i16 %x to i3213        %tmp2 = ashr i32 %y, 1614        %tmp3 = mul i32 %tmp2, %tmp115        ret i32 %tmp316}17 18define i32 @f2(i32 %x, i32 %y) {19; CHECK-LABEL: f2:20; CHECK: smultt21; DISABLED-NOT: smultt22        %tmp1 = ashr i32 %x, 1623        %tmp3 = ashr i32 %y, 1624        %tmp4 = mul i32 %tmp3, %tmp125        ret i32 %tmp426}27 28define i32 @f3(i32 %a, i16 %x, i32 %y) {29; CHECK-LABEL: f3:30; CHECK-NOT: sxth31; CHECK: {{smlabt r0, r1, r2, r0|smlatb r0, r2, r1, r0}}32; DISABLED-NOT: {{smlabt|smlatb}}33        %tmp = sext i16 %x to i3234        %tmp2 = ashr i32 %y, 1635        %tmp3 = mul i32 %tmp2, %tmp36        %tmp5 = add i32 %tmp3, %a37        ret i32 %tmp538}39 40define i32 @f4(i32 %a, i32 %x, i32 %y) {41; CHECK-LABEL: f4:42; CHECK: smlatt43; DISABLED-NOT: smlatt44        %tmp1 = ashr i32 %x, 1645        %tmp3 = ashr i32 %y, 1646        %tmp4 = mul i32 %tmp3, %tmp147        %tmp5 = add i32 %tmp4, %a48        ret i32 %tmp549}50 51define i32 @f5(i32 %a, i16 %x, i16 %y) {52; CHECK-LABEL: f5:53; CHECK-NOT: sxth54; CHECK: smlabb55; DISABLED-NOT: smlabb56        %tmp1 = sext i16 %x to i3257        %tmp3 = sext i16 %y to i3258        %tmp4 = mul i32 %tmp3, %tmp159        %tmp5 = add i32 %tmp4, %a60        ret i32 %tmp561}62 63define i32 @f6(i32 %a, i32 %x, i16 %y) {64; CHECK-LABEL: f6:65; CHECK-NOT: sxth66; CHECK: {{smlatb r0, r1, r2, r0|smlabt r0, r2, r1, r0}}67; DISABLED-NOT: {{smlatb|smlabt}}68        %tmp1 = sext i16 %y to i3269        %tmp2 = ashr i32 %x, 1670        %tmp3 = mul i32 %tmp2, %tmp171        %tmp5 = add i32 %tmp3, %a72        ret i32 %tmp573}74 75define i32 @f7(i32 %a, i32 %b, i32 %c) {76; CHECK-LABEL: f7:77; CHECK: smlawb r0, r0, r1, r278; DISABLED-NOT: smlawb79        %shl = shl i32 %b, 1680        %shr = ashr exact i32 %shl, 1681        %conv = sext i32 %a to i6482        %conv2 = sext i32 %shr to i6483        %mul = mul nsw i64 %conv2, %conv84        %shr49 = lshr i64 %mul, 1685        %conv5 = trunc i64 %shr49 to i3286        %add = add nsw i32 %conv5, %c87        ret i32 %add88}89 90define i32 @f8(i32 %a, i16 signext %b, i32 %c) {91; CHECK-LABEL: f8:92; CHECK-NOT: sxth93; CHECK: smlawb r0, r0, r1, r294; DISABLED-NOT: smlawb95        %conv = sext i32 %a to i6496        %conv1 = sext i16 %b to i6497        %mul = mul nsw i64 %conv1, %conv98        %shr5 = lshr i64 %mul, 1699        %conv2 = trunc i64 %shr5 to i32100        %add = add nsw i32 %conv2, %c101        ret i32 %add102}103 104define i32 @f9(i32 %a, i32 %b, i32 %c) {105; CHECK-LABEL: f9:106; CHECK: smlawt r0, r0, r1, r2107; DISABLED-NOT: smlawt108        %conv = sext i32 %a to i64109        %shr = ashr i32 %b, 16110        %conv1 = sext i32 %shr to i64111        %mul = mul nsw i64 %conv1, %conv112        %shr26 = lshr i64 %mul, 16113        %conv3 = trunc i64 %shr26 to i32114        %add = add nsw i32 %conv3, %c115        ret i32 %add116}117 118define i32 @f10(i32 %a, i32 %b) {119; CHECK-LABEL: f10:120; CHECK: smulwb r0, r0, r1121; DISABLED-NOT: smulwb122        %shl = shl i32 %b, 16123        %shr = ashr exact i32 %shl, 16124        %conv = sext i32 %a to i64125        %conv2 = sext i32 %shr to i64126        %mul = mul nsw i64 %conv2, %conv127        %shr37 = lshr i64 %mul, 16128        %conv4 = trunc i64 %shr37 to i32129        ret i32 %conv4130}131 132define i32 @f11(i32 %a, i16 signext %b) {133; CHECK-LABEL: f11:134; CHECK-NOT: sxth135; CHECK: smulwb r0, r0, r1136; DISABLED-NOT: smulwb137        %conv = sext i32 %a to i64138        %conv1 = sext i16 %b to i64139        %mul = mul nsw i64 %conv1, %conv140        %shr4 = lshr i64 %mul, 16141        %conv2 = trunc i64 %shr4 to i32142        ret i32 %conv2143}144 145define i32 @f12(i32 %a, i32 %b) {146; CHECK-LABEL: f12:147; CHECK: smulwt r0, r0, r1148; DISABLED-NOT: smulwt149        %conv = sext i32 %a to i64150        %shr = ashr i32 %b, 16151        %conv1 = sext i32 %shr to i64152        %mul = mul nsw i64 %conv1, %conv153        %shr25 = lshr i64 %mul, 16154        %conv3 = trunc i64 %shr25 to i32155        ret i32 %conv3156}157 158define i32 @f13(i32 %x, i16 %y) {159; CHECK-LABEL: f13:160; CHECK-NOT: sxth161; CHECK: {{smultb r0, r0, r1|smulbt r0, r1, r0}}162; DISABLED-NOT: {{smultb|smulbt}}163        %tmp1 = sext i16 %y to i32164        %tmp2 = ashr i32 %x, 16165        %tmp3 = mul i32 %tmp2, %tmp1166        ret i32 %tmp3167}168 169define i32 @f14(i32 %x, i32 %y) {170; CHECK-LABEL: f14:171; CHECK-NOT: sxth172; CHECK: {{smultb r0, r1, r0|smulbt r0, r0, r1}}173; DISABLED-NOT: {{smultb|smulbt}}174        %tmp1 = shl i32 %x, 16175        %tmp2 = ashr i32 %tmp1, 16176        %tmp3 = ashr i32 %y, 16177        %tmp4 = mul i32 %tmp3, %tmp2178        ret i32 %tmp4179}180 181define i32 @f15(i32 %x, i32 %y) {182; CHECK-LABEL: f15:183; CHECK-NOT: sxth184; CHECK: {{smulbt r0, r0, r1|smultb r0, r1, r0}}185; DISABLED-NOT: {{smulbt|smultb}}186        %tmp1 = shl i32 %x, 16187        %tmp2 = ashr i32 %tmp1, 16188        %tmp3 = ashr i32 %y, 16189        %tmp4 = mul i32 %tmp2, %tmp3190        ret i32 %tmp4191}192 193define i32 @f16(i16 %x, i16 %y) {194; CHECK-LABEL: f16:195; CHECK-NOT: sxth196; CHECK: smulbb197; DISABLED-NOT: smulbb198        %tmp1 = sext i16 %x to i32199        %tmp2 = sext i16 %x to i32200        %tmp3 = mul i32 %tmp1, %tmp2201        ret i32 %tmp3202}203 204define i32 @f17(i32 %x, i32 %y) {205; CHECK-LABEL: f17:206; CHECK-NOT: sxth207; CHECK: smulbb208; DISABLED-NOT: smulbb209        %tmp1 = shl i32 %x, 16210        %tmp2 = shl i32 %y, 16211        %tmp3 = ashr i32 %tmp1, 16212        %tmp4 = ashr i32 %tmp2, 16213        %tmp5 = mul i32 %tmp3, %tmp4214        ret i32 %tmp5215}216 217define i32 @f18(i32 %a, i32 %x, i32 %y) {218; CHECK-LABEL: f18:219; CHECK-NOT: sxth220; CHECK: {{smlabt r0, r1, r2, r0|smlatb r0, r2, r1, r0}}221; DISABLED-NOT: {{smlabt|smlatb}}222        %tmp0 = shl i32 %x, 16223        %tmp1 = ashr i32 %tmp0, 16224        %tmp2 = ashr i32 %y, 16225        %tmp3 = mul i32 %tmp2, %tmp1226        %tmp5 = add i32 %tmp3, %a227        ret i32 %tmp5228}229 230define i32 @f19(i32 %a, i32 %x, i32 %y) {231; CHECK-LABEL: f19:232; CHECK: {{smlatb r0, r2, r1, r0|smlabt r0, r1, r2, r0}}233; DISABLED-NOT: {{smlatb|smlabt}}234        %tmp0 = shl i32 %x, 16235        %tmp1 = ashr i32 %tmp0, 16236        %tmp2 = ashr i32 %y, 16237        %tmp3 = mul i32 %tmp1, %tmp2238        %tmp5 = add i32 %tmp3, %a239        ret i32 %tmp5240}241 242define i32 @f20(i32 %a, i32 %x, i32 %y) {243; CHECK-LABEL: f20:244; CHECK-NOT: sxth245; CHECK: smlabb246; DISABLED-NOT: smlabb247        %tmp1 = shl i32 %x, 16248        %tmp2 = ashr i32 %tmp1, 16249        %tmp3 = shl i32 %y, 16250        %tmp4 = ashr i32 %tmp3, 16251        %tmp5 = mul i32 %tmp2, %tmp4252        %tmp6 = add i32 %tmp5, %a253        ret i32 %tmp6254}255 256define i32 @f21(i32 %a, i32 %x, i16 %y) {257; CHECK-LABEL: f21258; CHECK-NOT: sxth259; CHECK: smlabb260; DISABLED-NOT: smlabb261        %tmp1 = shl i32 %x, 16262        %tmp2 = ashr i32 %tmp1, 16263        %tmp3 = sext i16 %y to i32264        %tmp4 = mul i32 %tmp2, %tmp3265        %tmp5 = add i32 %a, %tmp4266        ret i32 %tmp5267}268 269define i32 @f21_b(i32 %a, i32 %x, i16 %y) {270; CHECK-LABEL: f21_b271; CHECK-NOT: sxth272; CHECK: smlabb273; DISABLED-NOT: smlabb274        %tmp1 = shl i32 %x, 16275        %tmp2 = ashr i32 %tmp1, 16276        %tmp3 = sext i16 %y to i32277        %tmp4 = mul i32 %tmp3, %tmp2278        %tmp5 = add i32 %a, %tmp4279        ret i32 %tmp5280}281 282@global_b = external global i16, align 2283 284define i32 @f22(i32 %a) {285; CHECK-LABEL: f22:286; CHECK-NOT: sxth287; CHECK: smulwb r0, r0, r1288; DISABLED-NOT: smulwb289        %b = load i16, ptr @global_b, align 2290        %sext = sext i16 %b to i64291        %conv = sext i32 %a to i64292        %mul = mul nsw i64 %sext, %conv293        %shr37 = lshr i64 %mul, 16294        %conv4 = trunc i64 %shr37 to i32295        ret i32 %conv4296}297 298define i32 @f23(i32 %a, i32 %c) {299; CHECK-LABEL: f23:300; CHECK-NOT: sxth301; CHECK: smlawb r0, r0, r2, r1302; DISABLED-NOT: smlawb303        %b = load i16, ptr @global_b, align 2304        %sext = sext i16 %b to i64305        %conv = sext i32 %a to i64306        %mul = mul nsw i64 %sext, %conv307        %shr49 = lshr i64 %mul, 16308        %conv5 = trunc i64 %shr49 to i32309        %add = add nsw i32 %conv5, %c310        ret i32 %add311}312 313; CHECK-LABEL: f24314; CHECK-NOT: sxth315; CHECK: smulbb316define i32 @f24(ptr %a, ptr %b, ptr %c) {317  %ld.0 = load i16, ptr %a, align 2318  %ld.1 = load i32, ptr %b, align 4319  %conv.0 = sext i16 %ld.0 to i32320  %shift = shl i32 %ld.1, 16321  %conv.1 = ashr i32 %shift, 16322  %mul.0 = mul i32 %conv.0, %conv.1323  store i32 %ld.1, ptr %c324  ret i32 %mul.0325}326 327; CHECK-LABEL: f25328; CHECK-NOT: sxth329; CHECK: smulbb330define i32 @f25(ptr %a, i32 %b, ptr %c) {331  %ld.0 = load i16, ptr %a, align 2332  %conv.0 = sext i16 %ld.0 to i32333  %shift = shl i32 %b, 16334  %conv.1 = ashr i32 %shift, 16335  %mul.0 = mul i32 %conv.0, %conv.1336  store i32 %b, ptr %c337  ret i32 %mul.0338}339 340; CHECK-LABEL: f25_b341; CHECK-NOT: sxth342; CHECK: smulbb343define i32 @f25_b(ptr %a, i32 %b, ptr %c) {344  %ld.0 = load i16, ptr %a, align 2345  %conv.0 = sext i16 %ld.0 to i32346  %shift = shl i32 %b, 16347  %conv.1 = ashr i32 %shift, 16348  %mul.0 = mul i32 %conv.1, %conv.0349  store i32 %b, ptr %c350  ret i32 %mul.0351}352 353; CHECK-LABEL: f26354; CHECK-NOT: sxth355; CHECK: {{smulbt | smultb}}356define i32 @f26(ptr %a, i32 %b, ptr %c) {357  %ld.0 = load i16, ptr %a, align 2358  %conv.0 = sext i16 %ld.0 to i32359  %conv.1 = ashr i32 %b, 16360  %mul.0 = mul i32 %conv.0, %conv.1361  store i32 %b, ptr %c362  ret i32 %mul.0363}364 365; CHECK-LABEL: f26_b366; CHECK-NOT: sxth367; CHECK: {{smulbt | smultb}}368define i32 @f26_b(ptr %a, i32 %b, ptr %c) {369  %ld.0 = load i16, ptr %a, align 2370  %conv.0 = sext i16 %ld.0 to i32371  %conv.1 = ashr i32 %b, 16372  %mul.0 = mul i32 %conv.1, %conv.0373  store i32 %b, ptr %c374  ret i32 %mul.0375}376 377; CHECK-LABEL: f27378; CHECK-NOT: sxth379; CHECK: smulbb380; CHECK: {{smlabt | smlatb}}381define i32 @f27(ptr %a, ptr %b) {382  %ld.0 = load i16, ptr %a, align 2383  %ld.1 = load i32, ptr %b, align 4384  %conv.0 = sext i16 %ld.0 to i32385  %shift = shl i32 %ld.1, 16386  %conv.1 = ashr i32 %shift, 16387  %conv.2 = ashr i32 %ld.1, 16388  %mul.0 = mul i32 %conv.0, %conv.1389  %mul.1 = mul i32 %conv.0, %conv.2390  %add = add i32 %mul.0, %mul.1391  ret i32 %add392}393 394; CHECK-LABEL: f27_b395; CHECK-NOT: sxth396; CHECK: smulbb397; CHECK: {{smlabt | smlatb}}398define i32 @f27_b(ptr %a, ptr %b) {399  %ld.0 = load i16, ptr %a, align 2400  %ld.1 = load i32, ptr %b, align 4401  %conv.0 = sext i16 %ld.0 to i32402  %shift = shl i32 %ld.1, 16403  %conv.1 = ashr i32 %shift, 16404  %conv.2 = ashr i32 %ld.1, 16405  %mul.0 = mul i32 %conv.0, %conv.1406  %mul.1 = mul i32 %conv.2, %conv.0407  %add = add i32 %mul.0, %mul.1408  ret i32 %add409}410 411