Index: llvm/test/CodeGen/ARM/addimm-mulimm.ll =================================================================== --- /dev/null +++ llvm/test/CodeGen/ARM/addimm-mulimm.ll @@ -0,0 +1,173 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=armv6-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-6 +; RUN: llc -mtriple=armv7a-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-7 + +define i32 @fold_addimm_mulimm_a(i32 %a) { +; CHECK-6-LABEL: fold_addimm_mulimm_a: +; CHECK-6: @ %bb.0: +; CHECK-6-NEXT: mov r1, #11 +; CHECK-6-NEXT: mul r0, r0, r1 +; CHECK-6-NEXT: add r0, r0, #209 +; CHECK-6-NEXT: bx lr +; +; CHECK-7-LABEL: fold_addimm_mulimm_a: +; CHECK-7: @ %bb.0: +; CHECK-7-NEXT: mov r1, #11 +; CHECK-7-NEXT: mul r0, r0, r1 +; CHECK-7-NEXT: add r0, r0, #209 +; CHECK-7-NEXT: bx lr + %b = add i32 %a, 19 + %c = mul i32 %b, 11 + ret i32 %c +} + +define i32 @fold_addimm_mulimm_b(i32 %a) { +; CHECK-6-LABEL: fold_addimm_mulimm_b: +; CHECK-6: @ %bb.0: +; CHECK-6-NEXT: mov r1, #11 +; CHECK-6-NEXT: mul r0, r0, r1 +; CHECK-6-NEXT: sub r0, r0, #209 +; CHECK-6-NEXT: bx lr +; +; CHECK-7-LABEL: fold_addimm_mulimm_b: +; CHECK-7: @ %bb.0: +; CHECK-7-NEXT: mov r1, #11 +; CHECK-7-NEXT: mul r0, r0, r1 +; CHECK-7-NEXT: sub r0, r0, #209 +; CHECK-7-NEXT: bx lr + %b = add i32 %a, -19 + %c = mul i32 %b, 11 + ret i32 %c +} + +define i32 @fold_addimm_mulimm_c(i32 %a) { +; CHECK-6-LABEL: fold_addimm_mulimm_c: +; CHECK-6: @ %bb.0: +; CHECK-6-NEXT: mov r1, #87 +; CHECK-6-NEXT: mov r2, #19 +; CHECK-6-NEXT: orr r1, r1, #5632 +; CHECK-6-NEXT: mla r0, r0, r2, r1 +; CHECK-6-NEXT: bx lr +; +; CHECK-7-LABEL: fold_addimm_mulimm_c: +; CHECK-7: @ %bb.0: +; CHECK-7-NEXT: movw r1, #5719 +; CHECK-7-NEXT: mov r2, #19 +; CHECK-7-NEXT: mla r0, r0, r2, r1 +; CHECK-7-NEXT: bx lr + %b = add i32 %a, 301 + %c = mul i32 %b, 19 + ret i32 %c +} + +define i32 @fold_addimm_mulimm_d(i32 %a) { +; CHECK-6-LABEL: fold_addimm_mulimm_d: +; CHECK-6: @ %bb.0: +; CHECK-6-NEXT: mvn r1, #86 +; CHECK-6-NEXT: mov r2, #19 +; CHECK-6-NEXT: sub r1, r1, #5632 +; CHECK-6-NEXT: mla r0, r0, r2, r1 +; CHECK-6-NEXT: bx lr +; +; CHECK-7-LABEL: fold_addimm_mulimm_d: +; CHECK-7: @ %bb.0: +; CHECK-7-NEXT: mov r1, #19 +; CHECK-7-NEXT: mul r0, r0, r1 +; CHECK-7-NEXT: movw r1, #5719 +; CHECK-7-NEXT: sub r0, r0, r1 +; CHECK-7-NEXT: bx lr + %b = add i32 %a, -301 + %c = mul i32 %b, 19 + ret i32 %c +} + +define i32 @fold_addimm_mulimm_g(i32 %a) { +; CHECK-6-LABEL: fold_addimm_mulimm_g: +; CHECK-6: @ %bb.0: +; CHECK-6-NEXT: mov r1, #15 +; CHECK-6-NEXT: mov r2, #253 +; CHECK-6-NEXT: orr r1, r1, #63488 +; CHECK-6-NEXT: mla r0, r0, r2, r1 +; CHECK-6-NEXT: bx lr +; +; CHECK-7-LABEL: fold_addimm_mulimm_g: +; CHECK-7: @ %bb.0: +; CHECK-7-NEXT: movw r1, #63503 +; CHECK-7-NEXT: mov r2, #253 +; CHECK-7-NEXT: mla r0, r0, r2, r1 +; CHECK-7-NEXT: bx lr + %b = add i32 %a, 251 + %c = mul i32 %b, 253 + ret i32 %c +} + +define i32 @fold_addimm_mulimm_h(i32 %a) { +; CHECK-6-LABEL: fold_addimm_mulimm_h: +; CHECK-6: @ %bb.0: +; CHECK-6-NEXT: mvn r1, #14 +; CHECK-6-NEXT: mov r2, #253 +; CHECK-6-NEXT: sub r1, r1, #63488 +; CHECK-6-NEXT: mla r0, r0, r2, r1 +; CHECK-6-NEXT: bx lr +; +; CHECK-7-LABEL: fold_addimm_mulimm_h: +; CHECK-7: @ %bb.0: +; CHECK-7-NEXT: mov r1, #253 +; CHECK-7-NEXT: mul r0, r0, r1 +; CHECK-7-NEXT: movw r1, #63503 +; CHECK-7-NEXT: sub r0, r0, r1 +; CHECK-7-NEXT: bx lr + %b = add i32 %a, -251 + %c = mul i32 %b, 253 + ret i32 %c +} + +define i32 @fold_addimm_mulimm_i(i32 %a) { +; CHECK-6-LABEL: fold_addimm_mulimm_i: +; CHECK-6: @ %bb.0: +; CHECK-6-NEXT: mov r2, #97 +; CHECK-6-NEXT: ldr r1, .LCPI6_0 +; CHECK-6-NEXT: orr r2, r2, #256 +; CHECK-6-NEXT: mla r0, r0, r2, r1 +; CHECK-6-NEXT: bx lr +; CHECK-6-NEXT: .p2align 2 +; CHECK-6-NEXT: @ %bb.1: +; CHECK-6-NEXT: .LCPI6_0: +; CHECK-6-NEXT: .long 88603 @ 0x15a1b +; +; CHECK-7-LABEL: fold_addimm_mulimm_i: +; CHECK-7: @ %bb.0: +; CHECK-7-NEXT: movw r1, #23067 +; CHECK-7-NEXT: movw r2, #353 +; CHECK-7-NEXT: movt r1, #1 +; CHECK-7-NEXT: mla r0, r0, r2, r1 +; CHECK-7-NEXT: bx lr + %b = add i32 %a, 251 + %c = mul i32 %b, 353 + ret i32 %c +} + +define i32 @fold_addimm_mulimm_j(i32 %a) { +; CHECK-6-LABEL: fold_addimm_mulimm_j: +; CHECK-6: @ %bb.0: +; CHECK-6-NEXT: mov r2, #97 +; CHECK-6-NEXT: ldr r1, .LCPI7_0 +; CHECK-6-NEXT: orr r2, r2, #256 +; CHECK-6-NEXT: mla r0, r0, r2, r1 +; CHECK-6-NEXT: bx lr +; CHECK-6-NEXT: .p2align 2 +; CHECK-6-NEXT: @ %bb.1: +; CHECK-6-NEXT: .LCPI7_0: +; CHECK-6-NEXT: .long 4294878693 @ 0xfffea5e5 +; +; CHECK-7-LABEL: fold_addimm_mulimm_j: +; CHECK-7: @ %bb.0: +; CHECK-7-NEXT: movw r1, #42469 +; CHECK-7-NEXT: movw r2, #353 +; CHECK-7-NEXT: movt r1, #65534 +; CHECK-7-NEXT: mla r0, r0, r2, r1 +; CHECK-7-NEXT: bx lr + %b = add i32 %a, -251 + %c = mul i32 %b, 353 + ret i32 %c +}