1*c933c2ebSNemanja Ivanovic; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*c933c2ebSNemanja Ivanovic; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 3*c933c2ebSNemanja Ivanovic; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names \ 4*c933c2ebSNemanja Ivanovic; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s 5*c933c2ebSNemanja Ivanovic; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 6*c933c2ebSNemanja Ivanovic; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names \ 7*c933c2ebSNemanja Ivanovic; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-P9 8*c933c2ebSNemanja Ivanovic 9*c933c2ebSNemanja Ivanovicdefine dso_local i64 @test_invalid(<16 x i8> %a) local_unnamed_addr #0 { 10*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_invalid: 11*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 12*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdsub. v2, v2, v2, 0 13*c933c2ebSNemanja Ivanovic; CHECK-NEXT: setbc r3, 4*cr6+un 14*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 15*c933c2ebSNemanja Ivanovic; 16*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_invalid: 17*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 18*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdsub. v2, v2, v2, 0 19*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: mfocrf r3, 2 20*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: rlwinm r3, r3, 28, 31, 31 21*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 22*c933c2ebSNemanja Ivanovicentry: 23*c933c2ebSNemanja Ivanovic %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 6, <16 x i8> %a, <16 x i8> %a) #2 24*c933c2ebSNemanja Ivanovic %conv.i = sext i32 %0 to i64 25*c933c2ebSNemanja Ivanovic ret i64 %conv.i 26*c933c2ebSNemanja Ivanovic} 27*c933c2ebSNemanja Ivanovic 28*c933c2ebSNemanja Ivanovicdefine dso_local <16 x i8> @test_add(<16 x i8> %a, <16 x i8> %b, i64 %ps) local_unnamed_addr #0 { 29*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_add: 30*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 31*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdadd. v2, v2, v3, 1 32*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 33*c933c2ebSNemanja Ivanovic; 34*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_add: 35*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 36*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdadd. v2, v2, v3, 1 37*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 38*c933c2ebSNemanja Ivanovicentry: 39*c933c2ebSNemanja Ivanovic %0 = tail call <16 x i8> @llvm.ppc.bcdadd(<16 x i8> %a, <16 x i8> %b, i32 1) 40*c933c2ebSNemanja Ivanovic ret <16 x i8> %0 41*c933c2ebSNemanja Ivanovic} 42*c933c2ebSNemanja Ivanovic 43*c933c2ebSNemanja Ivanovicdefine dso_local i64 @test_add_ofl(<16 x i8> %a, <16 x i8> %b, i64 %ps) local_unnamed_addr #0 { 44*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_add_ofl: 45*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 46*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdadd. v2, v2, v3, 0 47*c933c2ebSNemanja Ivanovic; CHECK-NEXT: setbc r3, 4*cr6+un 48*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 49*c933c2ebSNemanja Ivanovic; 50*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_add_ofl: 51*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 52*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdadd. v2, v2, v3, 0 53*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: mfocrf r3, 2 54*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: rlwinm r3, r3, 28, 31, 31 55*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 56*c933c2ebSNemanja Ivanovicentry: 57*c933c2ebSNemanja Ivanovic %0 = tail call i32 @llvm.ppc.bcdadd.p(i32 6, <16 x i8> %a, <16 x i8> %b) #2 58*c933c2ebSNemanja Ivanovic %conv.i = sext i32 %0 to i64 59*c933c2ebSNemanja Ivanovic ret i64 %conv.i 60*c933c2ebSNemanja Ivanovic} 61*c933c2ebSNemanja Ivanovic 62*c933c2ebSNemanja Ivanovicdefine dso_local <16 x i8> @test_sub(<16 x i8> %a, <16 x i8> %b, i64 %ps) local_unnamed_addr #0 { 63*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_sub: 64*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 65*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdsub. v2, v2, v3, 0 66*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 67*c933c2ebSNemanja Ivanovic; 68*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_sub: 69*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 70*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0 71*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 72*c933c2ebSNemanja Ivanovicentry: 73*c933c2ebSNemanja Ivanovic %0 = tail call <16 x i8> @llvm.ppc.bcdsub(<16 x i8> %a, <16 x i8> %b, i32 0) 74*c933c2ebSNemanja Ivanovic ret <16 x i8> %0 75*c933c2ebSNemanja Ivanovic} 76*c933c2ebSNemanja Ivanovic 77*c933c2ebSNemanja Ivanovicdefine dso_local i64 @test_sub_ofl(<16 x i8> %a, <16 x i8> %b, i64 %ps) local_unnamed_addr #0 { 78*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_sub_ofl: 79*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 80*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdsub. v2, v2, v3, 0 81*c933c2ebSNemanja Ivanovic; CHECK-NEXT: setbc r3, 4*cr6+un 82*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 83*c933c2ebSNemanja Ivanovic; 84*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_sub_ofl: 85*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 86*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0 87*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: mfocrf r3, 2 88*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: rlwinm r3, r3, 28, 31, 31 89*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 90*c933c2ebSNemanja Ivanovicentry: 91*c933c2ebSNemanja Ivanovic %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 6, <16 x i8> %a, <16 x i8> %b) #2 92*c933c2ebSNemanja Ivanovic %conv.i = sext i32 %0 to i64 93*c933c2ebSNemanja Ivanovic ret i64 %conv.i 94*c933c2ebSNemanja Ivanovic} 95*c933c2ebSNemanja Ivanovic 96*c933c2ebSNemanja Ivanovicdefine dso_local i64 @test_cmplt(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 { 97*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_cmplt: 98*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 99*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdsub. v2, v2, v3, 0 100*c933c2ebSNemanja Ivanovic; CHECK-NEXT: setbc r3, 4*cr6+lt 101*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 102*c933c2ebSNemanja Ivanovic; 103*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_cmplt: 104*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 105*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0 106*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: mfocrf r3, 2 107*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: rlwinm r3, r3, 25, 31, 31 108*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 109*c933c2ebSNemanja Ivanovicentry: 110*c933c2ebSNemanja Ivanovic %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 2, <16 x i8> %a, <16 x i8> %b) #2 111*c933c2ebSNemanja Ivanovic %conv.i = sext i32 %0 to i64 112*c933c2ebSNemanja Ivanovic ret i64 %conv.i 113*c933c2ebSNemanja Ivanovic} 114*c933c2ebSNemanja Ivanovic 115*c933c2ebSNemanja Ivanovicdefine dso_local i64 @test_cmpgt(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 { 116*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_cmpgt: 117*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 118*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdsub. v2, v2, v3, 0 119*c933c2ebSNemanja Ivanovic; CHECK-NEXT: setbc r3, 4*cr6+gt 120*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 121*c933c2ebSNemanja Ivanovic; 122*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_cmpgt: 123*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 124*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0 125*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: mfocrf r3, 2 126*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: rlwinm r3, r3, 26, 31, 31 127*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 128*c933c2ebSNemanja Ivanovicentry: 129*c933c2ebSNemanja Ivanovic %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 4, <16 x i8> %a, <16 x i8> %b) #2 130*c933c2ebSNemanja Ivanovic %conv.i = sext i32 %0 to i64 131*c933c2ebSNemanja Ivanovic ret i64 %conv.i 132*c933c2ebSNemanja Ivanovic} 133*c933c2ebSNemanja Ivanovic 134*c933c2ebSNemanja Ivanovicdefine dso_local i64 @test_cmpeq(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 { 135*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_cmpeq: 136*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 137*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdsub. v2, v2, v3, 0 138*c933c2ebSNemanja Ivanovic; CHECK-NEXT: setbc r3, 4*cr6+eq 139*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 140*c933c2ebSNemanja Ivanovic; 141*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_cmpeq: 142*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 143*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0 144*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: mfocrf r3, 2 145*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: rlwinm r3, r3, 27, 31, 31 146*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 147*c933c2ebSNemanja Ivanovicentry: 148*c933c2ebSNemanja Ivanovic %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 0, <16 x i8> %a, <16 x i8> %b) #2 149*c933c2ebSNemanja Ivanovic %conv.i = sext i32 %0 to i64 150*c933c2ebSNemanja Ivanovic ret i64 %conv.i 151*c933c2ebSNemanja Ivanovic} 152*c933c2ebSNemanja Ivanovic 153*c933c2ebSNemanja Ivanovicdefine dso_local i64 @test_cmpge(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 { 154*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_cmpge: 155*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 156*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdsub. v2, v2, v3, 0 157*c933c2ebSNemanja Ivanovic; CHECK-NEXT: setbcr r3, 4*cr6+lt 158*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 159*c933c2ebSNemanja Ivanovic; 160*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_cmpge: 161*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 162*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0 163*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: mfocrf r3, 2 164*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: rlwinm r3, r3, 25, 31, 31 165*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: xori r3, r3, 1 166*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 167*c933c2ebSNemanja Ivanovicentry: 168*c933c2ebSNemanja Ivanovic %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 3, <16 x i8> %a, <16 x i8> %b) #2 169*c933c2ebSNemanja Ivanovic %conv.i = sext i32 %0 to i64 170*c933c2ebSNemanja Ivanovic ret i64 %conv.i 171*c933c2ebSNemanja Ivanovic} 172*c933c2ebSNemanja Ivanovic 173*c933c2ebSNemanja Ivanovicdefine dso_local i64 @test_cmple(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 { 174*c933c2ebSNemanja Ivanovic; CHECK-LABEL: test_cmple: 175*c933c2ebSNemanja Ivanovic; CHECK: # %bb.0: # %entry 176*c933c2ebSNemanja Ivanovic; CHECK-NEXT: bcdsub. v2, v2, v3, 0 177*c933c2ebSNemanja Ivanovic; CHECK-NEXT: setbcr r3, 4*cr6+gt 178*c933c2ebSNemanja Ivanovic; CHECK-NEXT: blr 179*c933c2ebSNemanja Ivanovic; 180*c933c2ebSNemanja Ivanovic; CHECK-P9-LABEL: test_cmple: 181*c933c2ebSNemanja Ivanovic; CHECK-P9: # %bb.0: # %entry 182*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: bcdsub. v2, v2, v3, 0 183*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: mfocrf r3, 2 184*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: rlwinm r3, r3, 26, 31, 31 185*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: xori r3, r3, 1 186*c933c2ebSNemanja Ivanovic; CHECK-P9-NEXT: blr 187*c933c2ebSNemanja Ivanovicentry: 188*c933c2ebSNemanja Ivanovic %0 = tail call i32 @llvm.ppc.bcdsub.p(i32 5, <16 x i8> %a, <16 x i8> %b) #2 189*c933c2ebSNemanja Ivanovic %conv.i = sext i32 %0 to i64 190*c933c2ebSNemanja Ivanovic ret i64 %conv.i 191*c933c2ebSNemanja Ivanovic} 192*c933c2ebSNemanja Ivanovic 193*c933c2ebSNemanja Ivanovicdeclare i32 @llvm.ppc.bcdsub.p(i32 immarg, <16 x i8>, <16 x i8>) #1 194*c933c2ebSNemanja Ivanovicdeclare i32 @llvm.ppc.bcdadd.p(i32 immarg, <16 x i8>, <16 x i8>) #1 195*c933c2ebSNemanja Ivanovicdeclare <16 x i8> @llvm.ppc.bcdadd(<16 x i8>, <16 x i8>, i32 immarg) #1 196*c933c2ebSNemanja Ivanovicdeclare <16 x i8> @llvm.ppc.bcdsub(<16 x i8>, <16 x i8>, i32 immarg) #1 197