blob: 3feb9bd9c9e194c2245443a2d3339665ac4a354a [file] [log] [blame]
Nemanja Ivanovic12e67d82017-03-06 07:32:13 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=powerpc64le-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
3; RUN: llc -mtriple=powerpc64-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
4
5@as = common local_unnamed_addr global i16 0, align 2
6@bs = common local_unnamed_addr global i16 0, align 2
7@ai = common local_unnamed_addr global i32 0, align 4
8@bi = common local_unnamed_addr global i32 0, align 4
9
10define void @bswapStorei64Toi32() {
11; CHECK-LABEL: bswapStorei64Toi32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000012; CHECK: # %bb.0: # %entry
Nemanja Ivanovic12e67d82017-03-06 07:32:13 +000013; CHECK: lwa 3, 0(3)
14; CHECK-NEXT: rldicl 3, 3, 32, 32
15; CHECK-NEXT: stwbrx 3, 0, 4
16; CHECK-NEXT: blr
17entry:
18 %0 = load i32, i32* @ai, align 4
19 %conv.i = sext i32 %0 to i64
20 %or26.i = tail call i64 @llvm.bswap.i64(i64 %conv.i)
21 %conv = trunc i64 %or26.i to i32
22 store i32 %conv, i32* @bi, align 4
23 ret void
24}
25
26define void @bswapStorei32Toi16() {
27; CHECK-LABEL: bswapStorei32Toi16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000028; CHECK: # %bb.0: # %entry
Nemanja Ivanovic12e67d82017-03-06 07:32:13 +000029; CHECK: lha 3, 0(3)
30; CHECK-NEXT: srwi 3, 3, 16
31; CHECK-NEXT: sthbrx 3, 0, 4
32; CHECK-NEXT: blr
33entry:
34 %0 = load i16, i16* @as, align 2
35 %conv.i = sext i16 %0 to i32
36 %or26.i = tail call i32 @llvm.bswap.i32(i32 %conv.i)
37 %conv = trunc i32 %or26.i to i16
38 store i16 %conv, i16* @bs, align 2
39 ret void
40}
41
42define void @bswapStorei64Toi16() {
43; CHECK-LABEL: bswapStorei64Toi16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000044; CHECK: # %bb.0: # %entry
Nemanja Ivanovic12e67d82017-03-06 07:32:13 +000045; CHECK: lha 3, 0(3)
46; CHECK-NEXT: rldicl 3, 3, 16, 48
47; CHECK-NEXT: sthbrx 3, 0, 4
48; CHECK-NEXT: blr
49entry:
50 %0 = load i16, i16* @as, align 2
51 %conv.i = sext i16 %0 to i64
52 %or26.i = tail call i64 @llvm.bswap.i64(i64 %conv.i)
53 %conv = trunc i64 %or26.i to i16
54 store i16 %conv, i16* @bs, align 2
55 ret void
56}
57
58declare i32 @llvm.bswap.i32(i32)
59declare i64 @llvm.bswap.i64(i64)