brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 5a4947b Raw
301 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv7m -mattr=+dsp %s -o - | FileCheck %s --check-prefix=DSP3; RUN: llc -mtriple=armv7a %s -o - | FileCheck %s --check-prefix=ARM74; RUN: llc -mtriple=thumbv7m -mattr=-dsp %s -o - | FileCheck %s --check-prefix=NODSP5 6define hidden i32 @SMMULR_SMMLAR(i32 %a, i32 %b0, i32 %b1, i32 %Xn, i32 %Xn1) local_unnamed_addr {7; DSP-LABEL: SMMULR_SMMLAR:8; DSP:       @ %bb.0: @ %entry9; DSP-NEXT:    ldr r0, [sp]10; DSP-NEXT:    smmulr r0, r0, r211; DSP-NEXT:    smmlar r0, r3, r1, r012; DSP-NEXT:    bx lr13;14; ARM7-LABEL: SMMULR_SMMLAR:15; ARM7:       @ %bb.0: @ %entry16; ARM7-NEXT:    ldr r0, [sp]17; ARM7-NEXT:    smmulr r0, r0, r218; ARM7-NEXT:    smmlar r0, r3, r1, r019; ARM7-NEXT:    bx lr20;21; NODSP-LABEL: SMMULR_SMMLAR:22; NODSP:       @ %bb.0: @ %entry23; NODSP-NEXT:    push {r4, lr}24; NODSP-NEXT:    ldr.w lr, [sp, #8]25; NODSP-NEXT:    movs r0, #026; NODSP-NEXT:    mov.w r4, #-214748364827; NODSP-NEXT:    mov.w r12, #-214748364828; NODSP-NEXT:    smlal r4, r0, lr, r229; NODSP-NEXT:    smlal r12, r0, r3, r130; NODSP-NEXT:    pop {r4, pc}31entry:32  %conv = sext i32 %b1 to i6433  %conv1 = sext i32 %Xn1 to i6434  %mul = mul nsw i64 %conv1, %conv35  %add = add nsw i64 %mul, 214748364836  %0 = and i64 %add, -429496729637  %conv4 = sext i32 %b0 to i6438  %conv5 = sext i32 %Xn to i6439  %mul6 = mul nsw i64 %conv5, %conv440  %add7 = add i64 %mul6, 214748364841  %add8 = add i64 %add7, %042  %1 = lshr i64 %add8, 3243  %conv10 = trunc i64 %1 to i3244  ret i32 %conv1045}46 47define hidden i32 @SMMULR(i32 %a, i32 %b) local_unnamed_addr {48; DSP-LABEL: SMMULR:49; DSP:       @ %bb.0: @ %entry50; DSP-NEXT:    smmulr r0, r1, r051; DSP-NEXT:    bx lr52;53; ARM7-LABEL: SMMULR:54; ARM7:       @ %bb.0: @ %entry55; ARM7-NEXT:    smmulr r0, r1, r056; ARM7-NEXT:    bx lr57;58; NODSP-LABEL: SMMULR:59; NODSP:       @ %bb.0: @ %entry60; NODSP-NEXT:    movs r2, #061; NODSP-NEXT:    mov.w r3, #-214748364862; NODSP-NEXT:    smlal r3, r2, r1, r063; NODSP-NEXT:    mov r0, r264; NODSP-NEXT:    bx lr65entry:66  %conv = sext i32 %a to i6467  %conv1 = sext i32 %b to i6468  %mul = mul nsw i64 %conv1, %conv69  %add = add nsw i64 %mul, 214748364870  %0 = lshr i64 %add, 3271  %conv2 = trunc i64 %0 to i3272  ret i32 %conv273}74 75define hidden i32 @SMMUL(i32 %a, i32 %b) local_unnamed_addr {76; DSP-LABEL: SMMUL:77; DSP:       @ %bb.0: @ %entry78; DSP-NEXT:    smmul r0, r1, r079; DSP-NEXT:    bx lr80;81; ARM7-LABEL: SMMUL:82; ARM7:       @ %bb.0: @ %entry83; ARM7-NEXT:    smmul r0, r1, r084; ARM7-NEXT:    bx lr85;86; NODSP-LABEL: SMMUL:87; NODSP:       @ %bb.0: @ %entry88; NODSP-NEXT:    smull r1, r0, r1, r089; NODSP-NEXT:    bx lr90entry:91  %conv = sext i32 %a to i6492  %conv1 = sext i32 %b to i6493  %mul = mul nsw i64 %conv1, %conv94  %0 = lshr i64 %mul, 3295  %conv2 = trunc i64 %0 to i3296  ret i32 %conv297}98 99define hidden i32 @SMMLSR(i32 %a, i32 %b, i32 %c) local_unnamed_addr {100; DSP-LABEL: SMMLSR:101; DSP:       @ %bb.0: @ %entry102; DSP-NEXT:    smmlsr r0, r2, r1, r0103; DSP-NEXT:    bx lr104;105; ARM7-LABEL: SMMLSR:106; ARM7:       @ %bb.0: @ %entry107; ARM7-NEXT:    smmlsr r0, r2, r1, r0108; ARM7-NEXT:    bx lr109;110; NODSP-LABEL: SMMLSR:111; NODSP:       @ %bb.0: @ %entry112; NODSP-NEXT:    smull r1, r2, r2, r1113; NODSP-NEXT:    rsbs.w r1, r1, #-2147483648114; NODSP-NEXT:    sbcs r0, r2115; NODSP-NEXT:    bx lr116entry:117  %conv6 = zext i32 %a to i64118  %shl = shl nuw i64 %conv6, 32119  %conv1 = sext i32 %b to i64120  %conv2 = sext i32 %c to i64121  %mul = mul nsw i64 %conv2, %conv1122  %sub = or i64 %shl, 2147483648123  %add = sub i64 %sub, %mul124  %0 = lshr i64 %add, 32125  %conv3 = trunc i64 %0 to i32126  ret i32 %conv3127}128 129define hidden i32 @NOT_SMMLSR(i32 %a, i32 %b, i32 %c) local_unnamed_addr {130; DSP-LABEL: NOT_SMMLSR:131; DSP:       @ %bb.0: @ %entry132; DSP-NEXT:    smmulr r1, r2, r1133; DSP-NEXT:    subs r0, r0, r1134; DSP-NEXT:    bx lr135;136; ARM7-LABEL: NOT_SMMLSR:137; ARM7:       @ %bb.0: @ %entry138; ARM7-NEXT:    smmulr r1, r2, r1139; ARM7-NEXT:    sub r0, r0, r1140; ARM7-NEXT:    bx lr141;142; NODSP-LABEL: NOT_SMMLSR:143; NODSP:       @ %bb.0: @ %entry144; NODSP-NEXT:    mov.w r12, #0145; NODSP-NEXT:    mov.w r3, #-2147483648146; NODSP-NEXT:    smlal r3, r12, r2, r1147; NODSP-NEXT:    sub.w r0, r0, r12148; NODSP-NEXT:    bx lr149entry:150  %conv = sext i32 %b to i64151  %conv1 = sext i32 %c to i64152  %mul = mul nsw i64 %conv1, %conv153  %add = add nsw i64 %mul, 2147483648154  %0 = lshr i64 %add, 32155  %conv2 = trunc i64 %0 to i32156  %sub = sub nsw i32 %a, %conv2157  ret i32 %sub158}159 160define hidden i32 @SMMLS(i32 %a, i32 %b, i32 %c) local_unnamed_addr {161; DSP-LABEL: SMMLS:162; DSP:       @ %bb.0: @ %entry163; DSP-NEXT:    smmls r0, r2, r1, r0164; DSP-NEXT:    bx lr165;166; ARM7-LABEL: SMMLS:167; ARM7:       @ %bb.0: @ %entry168; ARM7-NEXT:    smmls r0, r2, r1, r0169; ARM7-NEXT:    bx lr170;171; NODSP-LABEL: SMMLS:172; NODSP:       @ %bb.0: @ %entry173; NODSP-NEXT:    smull r1, r2, r2, r1174; NODSP-NEXT:    rsbs r1, r1, #0175; NODSP-NEXT:    sbcs r0, r2176; NODSP-NEXT:    bx lr177entry:178  %conv5 = zext i32 %a to i64179  %shl = shl nuw i64 %conv5, 32180  %conv1 = sext i32 %b to i64181  %conv2 = sext i32 %c to i64182  %mul = mul nsw i64 %conv2, %conv1183  %sub = sub nsw i64 %shl, %mul184  %0 = lshr i64 %sub, 32185  %conv3 = trunc i64 %0 to i32186  ret i32 %conv3187}188 189define hidden i32 @NOT_SMMLS(i32 %a, i32 %b, i32 %c) local_unnamed_addr {190; DSP-LABEL: NOT_SMMLS:191; DSP:       @ %bb.0: @ %entry192; DSP-NEXT:    smmul r1, r2, r1193; DSP-NEXT:    subs r0, r0, r1194; DSP-NEXT:    bx lr195;196; ARM7-LABEL: NOT_SMMLS:197; ARM7:       @ %bb.0: @ %entry198; ARM7-NEXT:    smmul r1, r2, r1199; ARM7-NEXT:    sub r0, r0, r1200; ARM7-NEXT:    bx lr201;202; NODSP-LABEL: NOT_SMMLS:203; NODSP:       @ %bb.0: @ %entry204; NODSP-NEXT:    smull r1, r2, r2, r1205; NODSP-NEXT:    subs r0, r0, r2206; NODSP-NEXT:    bx lr207entry:208  %conv = sext i32 %b to i64209  %conv1 = sext i32 %c to i64210  %mul = mul nsw i64 %conv1, %conv211  %0 = lshr i64 %mul, 32212  %conv2 = trunc i64 %0 to i32213  %sub = sub nsw i32 %a, %conv2214  ret i32 %sub215}216 217define hidden i32 @SMMLA(i32 %a, i32 %b, i32 %c) local_unnamed_addr {218; DSP-LABEL: SMMLA:219; DSP:       @ %bb.0: @ %entry220; DSP-NEXT:    smmla r0, r1, r2, r0221; DSP-NEXT:    bx lr222;223; ARM7-LABEL: SMMLA:224; ARM7:       @ %bb.0: @ %entry225; ARM7-NEXT:    smmla r0, r2, r1, r0226; ARM7-NEXT:    bx lr227;228; NODSP-LABEL: SMMLA:229; NODSP:       @ %bb.0: @ %entry230; NODSP-NEXT:    smull r1, r2, r2, r1231; NODSP-NEXT:    add r0, r2232; NODSP-NEXT:    bx lr233entry:234  %conv = sext i32 %b to i64235  %conv1 = sext i32 %c to i64236  %mul = mul nsw i64 %conv1, %conv237  %0 = lshr i64 %mul, 32238  %conv2 = trunc i64 %0 to i32239  %add = add nsw i32 %conv2, %a240  ret i32 %add241}242 243define hidden i32 @SMMLAR(i32 %a, i32 %b, i32 %c) local_unnamed_addr {244; DSP-LABEL: SMMLAR:245; DSP:       @ %bb.0: @ %entry246; DSP-NEXT:    smmlar r0, r2, r1, r0247; DSP-NEXT:    bx lr248;249; ARM7-LABEL: SMMLAR:250; ARM7:       @ %bb.0: @ %entry251; ARM7-NEXT:    smmlar r0, r2, r1, r0252; ARM7-NEXT:    bx lr253;254; NODSP-LABEL: SMMLAR:255; NODSP:       @ %bb.0: @ %entry256; NODSP-NEXT:    mov.w r3, #-2147483648257; NODSP-NEXT:    smlal r3, r0, r2, r1258; NODSP-NEXT:    bx lr259entry:260  %conv7 = zext i32 %a to i64261  %shl = shl nuw i64 %conv7, 32262  %conv1 = sext i32 %b to i64263  %conv2 = sext i32 %c to i64264  %mul = mul nsw i64 %conv2, %conv1265  %add = or i64 %shl, 2147483648266  %add3 = add i64 %add, %mul267  %0 = lshr i64 %add3, 32268  %conv4 = trunc i64 %0 to i32269  ret i32 %conv4270}271 272define hidden i32 @NOT_SMMLA(i32 %a, i32 %b, i32 %c) local_unnamed_addr {273; DSP-LABEL: NOT_SMMLA:274; DSP:       @ %bb.0: @ %entry275; DSP-NEXT:    smmla r0, r1, r2, r0276; DSP-NEXT:    add.w r0, r0, #-2147483648277; DSP-NEXT:    bx lr278;279; ARM7-LABEL: NOT_SMMLA:280; ARM7:       @ %bb.0: @ %entry281; ARM7-NEXT:    smmla r0, r2, r1, r0282; ARM7-NEXT:    add r0, r0, #-2147483648283; ARM7-NEXT:    bx lr284;285; NODSP-LABEL: NOT_SMMLA:286; NODSP:       @ %bb.0: @ %entry287; NODSP-NEXT:    smull r1, r2, r2, r1288; NODSP-NEXT:    add r0, r2289; NODSP-NEXT:    add.w r0, r0, #-2147483648290; NODSP-NEXT:    bx lr291entry:292  %conv = sext i32 %b to i64293  %conv1 = sext i32 %c to i64294  %mul = mul nsw i64 %conv1, %conv295  %0 = lshr i64 %mul, 32296  %conv2 = trunc i64 %0 to i32297  %add = xor i32 %conv2, -2147483648298  %add3 = add i32 %add, %a299  ret i32 %add3300}301