84 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=thumbv7m-none-eabi -mattr=v7 | FileCheck %s --check-prefixes=CHECK3 4declare i32 @llvm.bswap.i32(i32) readnone5declare i64 @llvm.bswap.i64(i64) readnone6declare i32 @llvm.bitreverse.i32(i32) readnone7 8define i32 @bs_and_lhs_bs32(i32 %a, i32 %b) #0 {9; CHECK-LABEL: bs_and_lhs_bs32:10; CHECK: @ %bb.0:11; CHECK-NEXT: rev r1, r112; CHECK-NEXT: ands r0, r113; CHECK-NEXT: bx lr14 %1 = tail call i32 @llvm.bswap.i32(i32 %a)15 %2 = and i32 %1, %b16 %3 = tail call i32 @llvm.bswap.i32(i32 %2)17 ret i32 %318}19 20define i64 @bs_or_rhs_bs64(i64 %a, i64 %b) #0 {21; CHECK-LABEL: bs_or_rhs_bs64:22; CHECK: @ %bb.0:23; CHECK-NEXT: rev r1, r124; CHECK-NEXT: rev r0, r025; CHECK-NEXT: orrs r2, r126; CHECK-NEXT: orr.w r1, r3, r027; CHECK-NEXT: mov r0, r228; CHECK-NEXT: bx lr29 %1 = tail call i64 @llvm.bswap.i64(i64 %b)30 %2 = or i64 %a, %131 %3 = tail call i64 @llvm.bswap.i64(i64 %2)32 ret i64 %333}34 35define i32 @bs_and_all_operand_multiuse(i32 %a, i32 %b) #0 {36; CHECK-LABEL: bs_and_all_operand_multiuse:37; CHECK: @ %bb.0:38; CHECK-NEXT: and.w r2, r0, r139; CHECK-NEXT: rev r0, r040; CHECK-NEXT: rev r1, r141; CHECK-NEXT: muls r0, r2, r042; CHECK-NEXT: muls r0, r1, r043; CHECK-NEXT: bx lr44 %1 = tail call i32 @llvm.bswap.i32(i32 %a)45 %2 = tail call i32 @llvm.bswap.i32(i32 %b)46 %3 = and i32 %1, %247 %4 = tail call i32 @llvm.bswap.i32(i32 %3)48 %5 = mul i32 %1, %4 ;increase use of left bswap49 %6 = mul i32 %2, %5 ;increase use of right bswap50 51 ret i32 %652}53 54; negative test55define i32 @bs_and_rhs_bs32_multiuse1(i32 %a, i32 %b) #0 {56; CHECK-LABEL: bs_and_rhs_bs32_multiuse1:57; CHECK: @ %bb.0:58; CHECK-NEXT: rev r1, r159; CHECK-NEXT: ands r0, r160; CHECK-NEXT: rev r1, r061; CHECK-NEXT: muls r0, r1, r062; CHECK-NEXT: bx lr63 %1 = tail call i32 @llvm.bswap.i32(i32 %b)64 %2 = and i32 %1, %a65 %3 = tail call i32 @llvm.bswap.i32(i32 %2)66 %4 = mul i32 %2, %3 ;increase use of logical op67 ret i32 %468}69 70; negative test71define i32 @bs_xor_rhs_brev32(i32 %a, i32 %b) #0 {72; CHECK-LABEL: bs_xor_rhs_brev32:73; CHECK: @ %bb.0:74; CHECK-NEXT: rbit r1, r175; CHECK-NEXT: eors r0, r176; CHECK-NEXT: rev r0, r077; CHECK-NEXT: bx lr78 %1 = tail call i32 @llvm.bitreverse.i32(i32 %b)79 %2 = xor i32 %a, %180 %3 = tail call i32 @llvm.bswap.i32(i32 %2)81 ret i32 %382}83 84