197 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \3; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names \4; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \6; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names \7; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-P98 9define dso_local i64 @test_invalid(<16 x i8> %a) local_unnamed_addr #0 {10; CHECK-LABEL: test_invalid:11; CHECK: # %bb.0: # %entry12; CHECK-NEXT: bcdsub. v2, v2, v2, 013; CHECK-NEXT: setbc r3, 4*cr6+un14; CHECK-NEXT: blr15;16; CHECK-P9-LABEL: test_invalid:17; CHECK-P9: # %bb.0: # %entry18; CHECK-P9-NEXT: bcdsub. v2, v2, v2, 019; CHECK-P9-NEXT: mfocrf r3, 220; CHECK-P9-NEXT: rlwinm r3, r3, 28, 31, 3121; CHECK-P9-NEXT: blr22entry:23 %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 6, <16 x i8> %a, <16 x i8> %a) #224 %conv.i = sext i32 %0 to i6425 ret i64 %conv.i26}27 28define dso_local <16 x i8> @test_add(<16 x i8> %a, <16 x i8> %b, i64 %ps) local_unnamed_addr #0 {29; CHECK-LABEL: test_add:30; CHECK: # %bb.0: # %entry31; CHECK-NEXT: bcdadd. v2, v2, v3, 132; CHECK-NEXT: blr33;34; CHECK-P9-LABEL: test_add:35; CHECK-P9: # %bb.0: # %entry36; CHECK-P9-NEXT: bcdadd. v2, v2, v3, 137; CHECK-P9-NEXT: blr38entry:39 %0 = tail call <16 x i8> @llvm.ppc.bcdadd(<16 x i8> %a, <16 x i8> %b, i32 1)40 ret <16 x i8> %041}42 43define dso_local i64 @test_add_ofl(<16 x i8> %a, <16 x i8> %b, i64 %ps) local_unnamed_addr #0 {44; CHECK-LABEL: test_add_ofl:45; CHECK: # %bb.0: # %entry46; CHECK-NEXT: bcdadd. v2, v2, v3, 047; CHECK-NEXT: setbc r3, 4*cr6+un48; CHECK-NEXT: blr49;50; CHECK-P9-LABEL: test_add_ofl:51; CHECK-P9: # %bb.0: # %entry52; CHECK-P9-NEXT: bcdadd. v2, v2, v3, 053; CHECK-P9-NEXT: mfocrf r3, 254; CHECK-P9-NEXT: rlwinm r3, r3, 28, 31, 3155; CHECK-P9-NEXT: blr56entry:57 %0 = tail call i32 @llvm.ppc.bcdadd.p(i32 6, <16 x i8> %a, <16 x i8> %b) #258 %conv.i = sext i32 %0 to i6459 ret i64 %conv.i60}61 62define dso_local <16 x i8> @test_sub(<16 x i8> %a, <16 x i8> %b, i64 %ps) local_unnamed_addr #0 {63; CHECK-LABEL: test_sub:64; CHECK: # %bb.0: # %entry65; CHECK-NEXT: bcdsub. v2, v2, v3, 066; CHECK-NEXT: blr67;68; CHECK-P9-LABEL: test_sub:69; CHECK-P9: # %bb.0: # %entry70; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 071; CHECK-P9-NEXT: blr72entry:73 %0 = tail call <16 x i8> @llvm.ppc.bcdsub(<16 x i8> %a, <16 x i8> %b, i32 0)74 ret <16 x i8> %075}76 77define dso_local i64 @test_sub_ofl(<16 x i8> %a, <16 x i8> %b, i64 %ps) local_unnamed_addr #0 {78; CHECK-LABEL: test_sub_ofl:79; CHECK: # %bb.0: # %entry80; CHECK-NEXT: bcdsub. v2, v2, v3, 081; CHECK-NEXT: setbc r3, 4*cr6+un82; CHECK-NEXT: blr83;84; CHECK-P9-LABEL: test_sub_ofl:85; CHECK-P9: # %bb.0: # %entry86; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 087; CHECK-P9-NEXT: mfocrf r3, 288; CHECK-P9-NEXT: rlwinm r3, r3, 28, 31, 3189; CHECK-P9-NEXT: blr90entry:91 %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 6, <16 x i8> %a, <16 x i8> %b) #292 %conv.i = sext i32 %0 to i6493 ret i64 %conv.i94}95 96define dso_local i64 @test_cmplt(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {97; CHECK-LABEL: test_cmplt:98; CHECK: # %bb.0: # %entry99; CHECK-NEXT: bcdsub. v2, v2, v3, 0100; CHECK-NEXT: setbc r3, 4*cr6+lt101; CHECK-NEXT: blr102;103; CHECK-P9-LABEL: test_cmplt:104; CHECK-P9: # %bb.0: # %entry105; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0106; CHECK-P9-NEXT: mfocrf r3, 2107; CHECK-P9-NEXT: rlwinm r3, r3, 25, 31, 31108; CHECK-P9-NEXT: blr109entry:110 %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 2, <16 x i8> %a, <16 x i8> %b) #2111 %conv.i = sext i32 %0 to i64112 ret i64 %conv.i113}114 115define dso_local i64 @test_cmpgt(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {116; CHECK-LABEL: test_cmpgt:117; CHECK: # %bb.0: # %entry118; CHECK-NEXT: bcdsub. v2, v2, v3, 0119; CHECK-NEXT: setbc r3, 4*cr6+gt120; CHECK-NEXT: blr121;122; CHECK-P9-LABEL: test_cmpgt:123; CHECK-P9: # %bb.0: # %entry124; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0125; CHECK-P9-NEXT: mfocrf r3, 2126; CHECK-P9-NEXT: rlwinm r3, r3, 26, 31, 31127; CHECK-P9-NEXT: blr128entry:129 %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 4, <16 x i8> %a, <16 x i8> %b) #2130 %conv.i = sext i32 %0 to i64131 ret i64 %conv.i132}133 134define dso_local i64 @test_cmpeq(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {135; CHECK-LABEL: test_cmpeq:136; CHECK: # %bb.0: # %entry137; CHECK-NEXT: bcdsub. v2, v2, v3, 0138; CHECK-NEXT: setbc r3, 4*cr6+eq139; CHECK-NEXT: blr140;141; CHECK-P9-LABEL: test_cmpeq:142; CHECK-P9: # %bb.0: # %entry143; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0144; CHECK-P9-NEXT: mfocrf r3, 2145; CHECK-P9-NEXT: rlwinm r3, r3, 27, 31, 31146; CHECK-P9-NEXT: blr147entry:148 %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 0, <16 x i8> %a, <16 x i8> %b) #2149 %conv.i = sext i32 %0 to i64150 ret i64 %conv.i151}152 153define dso_local i64 @test_cmpge(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {154; CHECK-LABEL: test_cmpge:155; CHECK: # %bb.0: # %entry156; CHECK-NEXT: bcdsub. v2, v2, v3, 0157; CHECK-NEXT: setbcr r3, 4*cr6+lt158; CHECK-NEXT: blr159;160; CHECK-P9-LABEL: test_cmpge:161; CHECK-P9: # %bb.0: # %entry162; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0163; CHECK-P9-NEXT: mfocrf r3, 2164; CHECK-P9-NEXT: rlwinm r3, r3, 25, 31, 31165; CHECK-P9-NEXT: xori r3, r3, 1166; CHECK-P9-NEXT: blr167entry:168 %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 3, <16 x i8> %a, <16 x i8> %b) #2169 %conv.i = sext i32 %0 to i64170 ret i64 %conv.i171}172 173define dso_local i64 @test_cmple(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {174; CHECK-LABEL: test_cmple:175; CHECK: # %bb.0: # %entry176; CHECK-NEXT: bcdsub. v2, v2, v3, 0177; CHECK-NEXT: setbcr r3, 4*cr6+gt178; CHECK-NEXT: blr179;180; CHECK-P9-LABEL: test_cmple:181; CHECK-P9: # %bb.0: # %entry182; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0183; CHECK-P9-NEXT: mfocrf r3, 2184; CHECK-P9-NEXT: rlwinm r3, r3, 26, 31, 31185; CHECK-P9-NEXT: xori r3, r3, 1186; CHECK-P9-NEXT: blr187entry:188 %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 5, <16 x i8> %a, <16 x i8> %b) #2189 %conv.i = sext i32 %0 to i64190 ret i64 %conv.i191}192 193declare i32 @llvm.ppc.bcdsub.p(i32 immarg, <16 x i8>, <16 x i8>) #1194declare i32 @llvm.ppc.bcdadd.p(i32 immarg, <16 x i8>, <16 x i8>) #1195declare <16 x i8> @llvm.ppc.bcdadd(<16 x i8>, <16 x i8>, i32 immarg) #1196declare <16 x i8> @llvm.ppc.bcdsub(<16 x i8>, <16 x i8>, i32 immarg) #1197