brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · e9436fa Raw
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