xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/bswap16.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm-darwin  -mattr=v6 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=thumb-darwin  -mattr=v6 < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine void @test1(i16* nocapture %data) {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %data, align 2
8*9880d681SAndroid Build Coastguard Worker  %1 = tail call i16 @llvm.bswap.i16(i16 %0)
9*9880d681SAndroid Build Coastguard Worker  store i16 %1, i16* %data, align 2
10*9880d681SAndroid Build Coastguard Worker  ret void
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test1:
13*9880d681SAndroid Build Coastguard Worker  ; CHECK: ldrh r[[R1:[0-9]+]], [r0]
14*9880d681SAndroid Build Coastguard Worker  ; CHECK: rev16 r[[R1]], r[[R1]]
15*9880d681SAndroid Build Coastguard Worker  ; CHECK: strh r[[R1]], [r0]
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine void @test2(i16* nocapture %data, i16 zeroext %in) {
20*9880d681SAndroid Build Coastguard Workerentry:
21*9880d681SAndroid Build Coastguard Worker  %0 = tail call i16 @llvm.bswap.i16(i16 %in)
22*9880d681SAndroid Build Coastguard Worker  store i16 %0, i16* %data, align 2
23*9880d681SAndroid Build Coastguard Worker  ret void
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test2:
26*9880d681SAndroid Build Coastguard Worker  ; CHECK: rev16 r[[R1:[0-9]+]], r1
27*9880d681SAndroid Build Coastguard Worker  ; CHECK: strh r[[R1]], [r0]
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdefine i16 @test3(i16* nocapture %data) {
32*9880d681SAndroid Build Coastguard Workerentry:
33*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %data, align 2
34*9880d681SAndroid Build Coastguard Worker  %1 = tail call i16 @llvm.bswap.i16(i16 %0)
35*9880d681SAndroid Build Coastguard Worker  ret i16 %1
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: test3:
38*9880d681SAndroid Build Coastguard Worker  ; CHECK: ldrh r[[R0:[0-9]+]], [r0]
39*9880d681SAndroid Build Coastguard Worker  ; CHECK: rev16 r[[R0]], r0
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerdeclare i16 @llvm.bswap.i16(i16)
43