237 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s --check-prefix=ARM3; RUN: llc -mtriple=thumbv6t2-eabi %s -o - | FileCheck %s --check-prefix=THUMB24; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s --check-prefix=THUMB5 6define i32 @t9(i32 %v) nounwind readnone {7; ARM-LABEL: t9:8; ARM: @ %bb.0: @ %entry9; ARM-NEXT: add r0, r0, r0, lsl #310; ARM-NEXT: mov pc, lr11;12; THUMB2-LABEL: t9:13; THUMB2: @ %bb.0: @ %entry14; THUMB2-NEXT: add.w r0, r0, r0, lsl #315; THUMB2-NEXT: bx lr16;17; THUMB-LABEL: t9:18; THUMB: @ %bb.0: @ %entry19; THUMB-NEXT: movs r1, #920; THUMB-NEXT: muls r0, r1, r021; THUMB-NEXT: bx lr22entry:23 %0 = mul i32 %v, 924 ret i32 %025}26 27define i32 @t7(i32 %v) nounwind readnone {28; ARM-LABEL: t7:29; ARM: @ %bb.0: @ %entry30; ARM-NEXT: rsb r0, r0, r0, lsl #331; ARM-NEXT: mov pc, lr32;33; THUMB2-LABEL: t7:34; THUMB2: @ %bb.0: @ %entry35; THUMB2-NEXT: rsb r0, r0, r0, lsl #336; THUMB2-NEXT: bx lr37;38; THUMB-LABEL: t7:39; THUMB: @ %bb.0: @ %entry40; THUMB-NEXT: movs r1, #741; THUMB-NEXT: muls r0, r1, r042; THUMB-NEXT: bx lr43entry:44 %0 = mul i32 %v, 745 ret i32 %046}47 48define i32 @t5(i32 %v) nounwind readnone {49; ARM-LABEL: t5:50; ARM: @ %bb.0: @ %entry51; ARM-NEXT: add r0, r0, r0, lsl #252; ARM-NEXT: mov pc, lr53;54; THUMB2-LABEL: t5:55; THUMB2: @ %bb.0: @ %entry56; THUMB2-NEXT: add.w r0, r0, r0, lsl #257; THUMB2-NEXT: bx lr58;59; THUMB-LABEL: t5:60; THUMB: @ %bb.0: @ %entry61; THUMB-NEXT: movs r1, #562; THUMB-NEXT: muls r0, r1, r063; THUMB-NEXT: bx lr64entry:65 %0 = mul i32 %v, 566 ret i32 %067}68 69define i32 @t3(i32 %v) nounwind readnone {70; ARM-LABEL: t3:71; ARM: @ %bb.0: @ %entry72; ARM-NEXT: add r0, r0, r0, lsl #173; ARM-NEXT: mov pc, lr74;75; THUMB2-LABEL: t3:76; THUMB2: @ %bb.0: @ %entry77; THUMB2-NEXT: add.w r0, r0, r0, lsl #178; THUMB2-NEXT: bx lr79;80; THUMB-LABEL: t3:81; THUMB: @ %bb.0: @ %entry82; THUMB-NEXT: movs r1, #383; THUMB-NEXT: muls r0, r1, r084; THUMB-NEXT: bx lr85entry:86 %0 = mul i32 %v, 387 ret i32 %088}89 90define i32 @t12288(i32 %v) nounwind readnone {91; ARM-LABEL: t12288:92; ARM: @ %bb.0: @ %entry93; ARM-NEXT: add r0, r0, r0, lsl #194; ARM-NEXT: lsl r0, r0, #1295; ARM-NEXT: mov pc, lr96;97; THUMB2-LABEL: t12288:98; THUMB2: @ %bb.0: @ %entry99; THUMB2-NEXT: add.w r0, r0, r0, lsl #1100; THUMB2-NEXT: lsls r0, r0, #12101; THUMB2-NEXT: bx lr102;103; THUMB-LABEL: t12288:104; THUMB: @ %bb.0: @ %entry105; THUMB-NEXT: movs r1, #3106; THUMB-NEXT: lsls r1, r1, #12107; THUMB-NEXT: muls r0, r1, r0108; THUMB-NEXT: bx lr109entry:110 %0 = mul i32 %v, 12288111 ret i32 %0112}113 114define i32 @tn9(i32 %v) nounwind readnone {115; ARM-LABEL: tn9:116; ARM: @ %bb.0: @ %entry117; ARM-NEXT: add r0, r0, r0, lsl #3118; ARM-NEXT: rsb r0, r0, #0119; ARM-NEXT: mov pc, lr120;121; THUMB2-LABEL: tn9:122; THUMB2: @ %bb.0: @ %entry123; THUMB2-NEXT: add.w r0, r0, r0, lsl #3124; THUMB2-NEXT: rsbs r0, r0, #0125; THUMB2-NEXT: bx lr126;127; THUMB-LABEL: tn9:128; THUMB: @ %bb.0: @ %entry129; THUMB-NEXT: movs r1, #8130; THUMB-NEXT: mvns r1, r1131; THUMB-NEXT: muls r0, r1, r0132; THUMB-NEXT: bx lr133entry:134 %0 = mul i32 %v, -9135 ret i32 %0136}137 138define i32 @tn7(i32 %v) nounwind readnone {139; ARM-LABEL: tn7:140; ARM: @ %bb.0: @ %entry141; ARM-NEXT: sub r0, r0, r0, lsl #3142; ARM-NEXT: mov pc, lr143;144; THUMB2-LABEL: tn7:145; THUMB2: @ %bb.0: @ %entry146; THUMB2-NEXT: sub.w r0, r0, r0, lsl #3147; THUMB2-NEXT: bx lr148;149; THUMB-LABEL: tn7:150; THUMB: @ %bb.0: @ %entry151; THUMB-NEXT: movs r1, #6152; THUMB-NEXT: mvns r1, r1153; THUMB-NEXT: muls r0, r1, r0154; THUMB-NEXT: bx lr155entry:156 %0 = mul i32 %v, -7157 ret i32 %0158}159 160define i32 @tn5(i32 %v) nounwind readnone {161; ARM-LABEL: tn5:162; ARM: @ %bb.0: @ %entry163; ARM-NEXT: add r0, r0, r0, lsl #2164; ARM-NEXT: rsb r0, r0, #0165; ARM-NEXT: mov pc, lr166;167; THUMB2-LABEL: tn5:168; THUMB2: @ %bb.0: @ %entry169; THUMB2-NEXT: add.w r0, r0, r0, lsl #2170; THUMB2-NEXT: rsbs r0, r0, #0171; THUMB2-NEXT: bx lr172;173; THUMB-LABEL: tn5:174; THUMB: @ %bb.0: @ %entry175; THUMB-NEXT: movs r1, #4176; THUMB-NEXT: mvns r1, r1177; THUMB-NEXT: muls r0, r1, r0178; THUMB-NEXT: bx lr179entry:180 %0 = mul i32 %v, -5181 ret i32 %0182}183 184define i32 @tn3(i32 %v) nounwind readnone {185; ARM-LABEL: tn3:186; ARM: @ %bb.0: @ %entry187; ARM-NEXT: sub r0, r0, r0, lsl #2188; ARM-NEXT: mov pc, lr189;190; THUMB2-LABEL: tn3:191; THUMB2: @ %bb.0: @ %entry192; THUMB2-NEXT: sub.w r0, r0, r0, lsl #2193; THUMB2-NEXT: bx lr194;195; THUMB-LABEL: tn3:196; THUMB: @ %bb.0: @ %entry197; THUMB-NEXT: movs r1, #2198; THUMB-NEXT: mvns r1, r1199; THUMB-NEXT: muls r0, r1, r0200; THUMB-NEXT: bx lr201entry:202; CHECK-LABEL: tn3:203; CHECK: sub r0, r0, r0, lsl #2204 %0 = mul i32 %v, -3205 ret i32 %0206}207 208define i32 @tn12288(i32 %v) nounwind readnone {209; ARM-LABEL: tn12288:210; ARM: @ %bb.0: @ %entry211; ARM-NEXT: sub r0, r0, r0, lsl #2212; ARM-NEXT: lsl r0, r0, #12213; ARM-NEXT: mov pc, lr214;215; THUMB2-LABEL: tn12288:216; THUMB2: @ %bb.0: @ %entry217; THUMB2-NEXT: sub.w r0, r0, r0, lsl #2218; THUMB2-NEXT: lsls r0, r0, #12219; THUMB2-NEXT: bx lr220;221; THUMB-LABEL: tn12288:222; THUMB: @ %bb.0: @ %entry223; THUMB-NEXT: ldr r1, .LCPI9_0224; THUMB-NEXT: muls r0, r1, r0225; THUMB-NEXT: bx lr226; THUMB-NEXT: .p2align 2227; THUMB-NEXT: @ %bb.1:228; THUMB-NEXT: .LCPI9_0:229; THUMB-NEXT: .long 4294955008 @ 0xffffd000230entry:231; CHECK-LABEL: tn12288:232; CHECK: sub r0, r0, r0, lsl #2233; CHECK: lsl{{.*}}#12234 %0 = mul i32 %v, -12288235 ret i32 %0236}237