126 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=powerpc64le-linux-gnu -mcpu=pwr8 < %s | FileCheck %s --check-prefix CHECK-LE3; RUN: llc -mtriple=powerpc64-linux-gnu -mcpu=pwr8 < %s | FileCheck %s --check-prefix CHECK-BE4 5@as = dso_local local_unnamed_addr global i16 0, align 26@bs = dso_local local_unnamed_addr global i16 0, align 27@ai = dso_local local_unnamed_addr global i32 0, align 48@bi = dso_local local_unnamed_addr global i32 0, align 49 10define dso_local void @bswapStorei64Toi32() {11; CHECK-LABEL: bswapStorei64Toi32:12; CHECK: # %bb.0: # %entry13; CHECK-NEXT: addis 3, 2, ai@toc@ha14; CHECK-NEXT: addis 4, 2, bi@toc@ha15; CHECK-NEXT: lwa 3, ai@toc@l(3)16; CHECK-NEXT: addi 4, 4, bi@toc@l17; CHECK-NEXT: rldicl 3, 3, 32, 3218; CHECK-NEXT: stwbrx 3, 0, 419; CHECK-NEXT: blr20; CHECK-LE-LABEL: bswapStorei64Toi32:21; CHECK-LE: # %bb.0: # %entry22; CHECK-LE-NEXT: addis 3, 2, ai@toc@ha23; CHECK-LE-NEXT: addis 4, 2, bi@toc@ha24; CHECK-LE-NEXT: lwa 3, ai@toc@l(3)25; CHECK-LE-NEXT: addi 4, 4, bi@toc@l26; CHECK-LE-NEXT: rldicl 3, 3, 32, 3227; CHECK-LE-NEXT: stwbrx 3, 0, 428; CHECK-LE-NEXT: blr29;30; CHECK-BE-LABEL: bswapStorei64Toi32:31; CHECK-BE: # %bb.0: # %entry32; CHECK-BE-NEXT: addis 3, 2, ai@toc@ha33; CHECK-BE-NEXT: addis 4, 2, bi@toc@ha34; CHECK-BE-NEXT: lwa 3, ai@toc@l(3)35; CHECK-BE-NEXT: addi 4, 4, bi@toc@l36; CHECK-BE-NEXT: rldicl 3, 3, 32, 3237; CHECK-BE-NEXT: stwbrx 3, 0, 438; CHECK-BE-NEXT: blr39entry:40 %0 = load i32, ptr @ai, align 441 %conv.i = sext i32 %0 to i6442 %or26.i = tail call i64 @llvm.bswap.i64(i64 %conv.i)43 %conv = trunc i64 %or26.i to i3244 store i32 %conv, ptr @bi, align 445 ret void46}47 48define dso_local void @bswapStorei32Toi16() {49; CHECK-LABEL: bswapStorei32Toi16:50; CHECK: # %bb.0: # %entry51; CHECK-NEXT: addis 3, 2, as@toc@ha52; CHECK-NEXT: addis 4, 2, bs@toc@ha53; CHECK-NEXT: lha 3, as@toc@l(3)54; CHECK-NEXT: addi 4, 4, bs@toc@l55; CHECK-NEXT: srwi 3, 3, 1656; CHECK-NEXT: sthbrx 3, 0, 457; CHECK-NEXT: blr58; CHECK-LE-LABEL: bswapStorei32Toi16:59; CHECK-LE: # %bb.0: # %entry60; CHECK-LE-NEXT: addis 3, 2, as@toc@ha61; CHECK-LE-NEXT: addis 4, 2, bs@toc@ha62; CHECK-LE-NEXT: lha 3, as@toc@l(3)63; CHECK-LE-NEXT: addi 4, 4, bs@toc@l64; CHECK-LE-NEXT: srwi 3, 3, 1665; CHECK-LE-NEXT: sthbrx 3, 0, 466; CHECK-LE-NEXT: blr67;68; CHECK-BE-LABEL: bswapStorei32Toi16:69; CHECK-BE: # %bb.0: # %entry70; CHECK-BE-NEXT: addis 3, 2, as@toc@ha71; CHECK-BE-NEXT: addis 4, 2, bs@toc@ha72; CHECK-BE-NEXT: lha 3, as@toc@l(3)73; CHECK-BE-NEXT: addi 4, 4, bs@toc@l74; CHECK-BE-NEXT: srwi 3, 3, 1675; CHECK-BE-NEXT: sthbrx 3, 0, 476; CHECK-BE-NEXT: blr77entry:78 %0 = load i16, ptr @as, align 279 %conv.i = sext i16 %0 to i3280 %or26.i = tail call i32 @llvm.bswap.i32(i32 %conv.i)81 %conv = trunc i32 %or26.i to i1682 store i16 %conv, ptr @bs, align 283 ret void84}85 86define dso_local void @bswapStorei64Toi16() {87; CHECK-LABEL: bswapStorei64Toi16:88; CHECK: # %bb.0: # %entry89; CHECK-NEXT: addis 3, 2, as@toc@ha90; CHECK-NEXT: addis 4, 2, bs@toc@ha91; CHECK-NEXT: lha 3, as@toc@l(3)92; CHECK-NEXT: addi 4, 4, bs@toc@l93; CHECK-NEXT: rldicl 3, 3, 16, 4894; CHECK-NEXT: sthbrx 3, 0, 495; CHECK-NEXT: blr96; CHECK-LE-LABEL: bswapStorei64Toi16:97; CHECK-LE: # %bb.0: # %entry98; CHECK-LE-NEXT: addis 3, 2, as@toc@ha99; CHECK-LE-NEXT: addis 4, 2, bs@toc@ha100; CHECK-LE-NEXT: lha 3, as@toc@l(3)101; CHECK-LE-NEXT: addi 4, 4, bs@toc@l102; CHECK-LE-NEXT: rldicl 3, 3, 16, 48103; CHECK-LE-NEXT: sthbrx 3, 0, 4104; CHECK-LE-NEXT: blr105;106; CHECK-BE-LABEL: bswapStorei64Toi16:107; CHECK-BE: # %bb.0: # %entry108; CHECK-BE-NEXT: addis 3, 2, as@toc@ha109; CHECK-BE-NEXT: addis 4, 2, bs@toc@ha110; CHECK-BE-NEXT: lha 3, as@toc@l(3)111; CHECK-BE-NEXT: addi 4, 4, bs@toc@l112; CHECK-BE-NEXT: rldicl 3, 3, 16, 48113; CHECK-BE-NEXT: sthbrx 3, 0, 4114; CHECK-BE-NEXT: blr115entry:116 %0 = load i16, ptr @as, align 2117 %conv.i = sext i16 %0 to i64118 %or26.i = tail call i64 @llvm.bswap.i64(i64 %conv.i)119 %conv = trunc i64 %or26.i to i16120 store i16 %conv, ptr @bs, align 2121 ret void122}123 124declare i32 @llvm.bswap.i32(i32)125declare i64 @llvm.bswap.i64(i64)126