1 ; Show that we know how to translate rev (used in bswap). 2 3 ; NOTE: We use -O2 to get rid of memory stores. 4 5 ; REQUIRES: allow_dump 6 7 ; Compile using standalone assembler. 8 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -O2 \ 9 ; RUN: | FileCheck %s --check-prefix=ASM 10 11 ; Show bytes in assembled standalone code. 12 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \ 13 ; RUN: --args -O2 | FileCheck %s --check-prefix=DIS 14 15 ; Compile using integrated assembler. 16 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -O2 \ 17 ; RUN: | FileCheck %s --check-prefix=IASM 18 19 ; Show bytes in assembled integrated code. 20 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \ 21 ; RUN: --args -O2 | FileCheck %s --check-prefix=DIS 22 23 declare i16 @llvm.bswap.i16(i16) 24 25 define internal i32 @testRev(i32 %a) { 26 ; ASM-LABEL:testRev: 27 ; DIS-LABEL:00000000 <testRev>: 28 ; IASM-LABEL:testRev: 29 30 entry: 31 ; ASM-NEXT:.LtestRev$entry: 32 ; IASM-NEXT:.LtestRev$entry: 33 34 %a.arg_trunc = trunc i32 %a to i16 35 %v = tail call i16 @llvm.bswap.i16(i16 %a.arg_trunc) 36 37 ; ***** Example of rev instruction. ***** 38 ; ASM-NEXT: rev r0, r0 39 ; DIS-NEXT: 0: e6bf0f30 40 ; IASM-NEXT: .byte 0x30 41 ; IASM-NEXT: .byte 0xf 42 ; IASM-NEXT: .byte 0xbf 43 ; IASM-NEXT: .byte 0xe6 44 45 ; ASM-NEXT: lsr r0, r0, #16 46 47 %.ret_ext = zext i16 %v to i32 48 ret i32 %.ret_ext 49 } 50