297 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 | FileCheck %s3; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-ibm-aix -mcpu=pwr8 | FileCheck %s4 5define i64 @rldimi1(i64 %a) {6; CHECK-LABEL: rldimi1:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: rldimi 3, 3, 8, 09; CHECK-NEXT: blr10entry:11 %x0 = shl i64 %a, 812 %x1 = and i64 %a, 25513 %x2 = or i64 %x0, %x114 ret i64 %x215}16 17define i64 @rldimi2(i64 %a) {18; CHECK-LABEL: rldimi2:19; CHECK: # %bb.0: # %entry20; CHECK-NEXT: mr 4, 321; CHECK-NEXT: rlwimi 4, 3, 8, 16, 2322; CHECK-NEXT: rlwimi 4, 3, 16, 8, 1523; CHECK-NEXT: rldimi 4, 3, 24, 024; CHECK-NEXT: mr 3, 425; CHECK-NEXT: blr26entry:27 %x0 = shl i64 %a, 828 %x1 = and i64 %a, 25529 %x2 = or i64 %x0, %x130 %x3 = shl i64 %x2, 1631 %x4 = and i64 %x2, 6553532 %x5 = or i64 %x3, %x433 ret i64 %x534}35 36define i64 @rldimi3(i64 %a) {37; CHECK-LABEL: rldimi3:38; CHECK: # %bb.0: # %entry39; CHECK-NEXT: rotldi 4, 3, 3240; CHECK-NEXT: rlwimi 4, 3, 0, 24, 3141; CHECK-NEXT: rlwimi 4, 3, 8, 16, 2342; CHECK-NEXT: rlwimi 4, 3, 16, 8, 1543; CHECK-NEXT: rlwimi 4, 3, 24, 0, 744; CHECK-NEXT: rldimi 4, 3, 40, 1645; CHECK-NEXT: rldimi 4, 3, 48, 846; CHECK-NEXT: rldimi 4, 3, 56, 047; CHECK-NEXT: mr 3, 448; CHECK-NEXT: blr49entry:50 %0 = shl i64 %a, 851 %1 = and i64 %a, 25552 %2 = or i64 %0, %153 %3 = shl i64 %2, 1654 %4 = and i64 %2, 6553555 %5 = or i64 %3, %456 %6 = shl i64 %5, 3257 %7 = and i64 %5, 429496729558 %8 = or i64 %6, %759 ret i64 %860}61 62define i64 @rldimi4(i64 %a) {63; CHECK-LABEL: rldimi4:64; CHECK: # %bb.0:65; CHECK-NEXT: rldimi 3, 3, 8, 066; CHECK-NEXT: rldimi 3, 3, 16, 067; CHECK-NEXT: rldimi 3, 3, 32, 068; CHECK-NEXT: blr69 %r1 = call i64 @llvm.ppc.rldimi(i64 %a, i64 %a, i32 8, i64 -256)70 %r2 = call i64 @llvm.ppc.rldimi(i64 %r1, i64 %r1, i32 16, i64 -65536)71 %r3 = call i64 @llvm.ppc.rldimi(i64 %r2, i64 %r2, i32 32, i64 -4294967296)72 ret i64 %r373}74 75define i64 @rldimi5(i64 %a, i64 %b) {76; CHECK-LABEL: rldimi5:77; CHECK: # %bb.0:78; CHECK-NEXT: rldimi 4, 3, 8, 4079; CHECK-NEXT: mr 3, 480; CHECK-NEXT: blr81 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 8, i64 16776960) ; 0xffff << 882 ret i64 %r83}84 85define i64 @rldimi6(i64 %a, i64 %b) {86; CHECK-LABEL: rldimi6:87; CHECK: # %bb.0:88; CHECK-NEXT: rotldi 3, 3, 189; CHECK-NEXT: rldimi 4, 3, 7, 4190; CHECK-NEXT: mr 3, 491; CHECK-NEXT: blr92 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 8, i64 8388480) ; 0xffff << 793 ret i64 %r94}95 96define i64 @rldimi7(i64 %a, i64 %b) {97; CHECK-LABEL: rldimi7:98; CHECK: # %bb.0:99; CHECK-NEXT: rotldi 3, 3, 63100; CHECK-NEXT: rldimi 4, 3, 9, 39101; CHECK-NEXT: mr 3, 4102; CHECK-NEXT: blr103 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 8, i64 33553920) ; 0xffff << 9104 ret i64 %r105}106 107define i64 @rldimi8(i64 %a, i64 %b) {108; CHECK-LABEL: rldimi8:109; CHECK: # %bb.0:110; CHECK-NEXT: mr 3, 4111; CHECK-NEXT: blr112 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 0, i64 0)113 ret i64 %r114}115 116define i64 @rldimi9(i64 %a, i64 %b) {117; CHECK-LABEL: rldimi9:118; CHECK: # %bb.0:119; CHECK-NEXT: mr 3, 4120; CHECK-NEXT: blr121 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 63, i64 0)122 ret i64 %r123}124 125define i64 @rldimi10(i64 %a, i64 %b) {126; CHECK-LABEL: rldimi10:127; CHECK: # %bb.0:128; CHECK-NEXT: blr129 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 0, i64 -1)130 ret i64 %r131}132 133define i64 @rldimi11(i64 %a, i64 %b) {134; CHECK-LABEL: rldimi11:135; CHECK: # %bb.0:136; CHECK-NEXT: rotldi 3, 3, 8137; CHECK-NEXT: blr138 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 8, i64 -1)139 ret i64 %r140}141 142define i64 @rldimi12(i64 %a, i64 %b) {143; CHECK-LABEL: rldimi12:144; CHECK: # %bb.0:145; CHECK-NEXT: rotldi 3, 3, 20146; CHECK-NEXT: rldimi 4, 3, 44, 31147; CHECK-NEXT: mr 3, 4148; CHECK-NEXT: blr149 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 0, i64 18446726490113441791)150 ret i64 %r151}152 153define i64 @rldimi13(i64 %a, i64 %b) {154; CHECK-LABEL: rldimi13:155; CHECK: # %bb.0:156; CHECK-NEXT: rotldi 3, 3, 62157; CHECK-NEXT: rldimi 4, 3, 32, 2158; CHECK-NEXT: mr 3, 4159; CHECK-NEXT: blr160 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 30, i64 4611686014132420608)161 ret i64 %r162}163 164define i64 @rldimi14(i64 %a, i64 %b) {165; CHECK-LABEL: rldimi14:166; CHECK: # %bb.0:167; CHECK-NEXT: rotldi 3, 3, 23168; CHECK-NEXT: rldimi 4, 3, 53, 0169; CHECK-NEXT: mr 3, 4170; CHECK-NEXT: blr171 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18437736874454810624) ; mb=0, me=10172 ret i64 %r173}174 175define i64 @rldimi15(i64 %a, i64 %b) {176; CHECK-LABEL: rldimi15:177; CHECK: # %bb.0:178; CHECK-NEXT: rotldi 3, 3, 36179; CHECK-NEXT: rldimi 4, 3, 40, 10180; CHECK-NEXT: mr 3, 4181; CHECK-NEXT: blr182 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18013298997854208) ; mb=10, me=23183 ret i64 %r184}185 186define i64 @rldimi16(i64 %a, i64 %b) {187; CHECK-LABEL: rldimi16:188; CHECK: # %bb.0:189; CHECK-NEXT: rotldi 3, 3, 57190; CHECK-NEXT: rldimi 4, 3, 19, 10191; CHECK-NEXT: mr 3, 4192; CHECK-NEXT: blr193 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18014398508957696) ; mb=10, me=44194 ret i64 %r195}196 197define i64 @rldimi17(i64 %a, i64 %b) {198; CHECK-LABEL: rldimi17:199; CHECK: # %bb.0:200; CHECK-NEXT: rotldi 3, 3, 43201; CHECK-NEXT: rldimi 4, 3, 33, 25202; CHECK-NEXT: mr 3, 4203; CHECK-NEXT: blr204 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 541165879296) ; mb=25, me=30205 ret i64 %r206}207 208define i64 @rldimi18(i64 %a, i64 %b) {209; CHECK-LABEL: rldimi18:210; CHECK: # %bb.0:211; CHECK-NEXT: rotldi 3, 3, 57212; CHECK-NEXT: rldimi 4, 3, 19, 25213; CHECK-NEXT: mr 3, 4214; CHECK-NEXT: blr215 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 549755289600) ; mb=25, me=44216 ret i64 %r217}218 219define i64 @rldimi19(i64 %a, i64 %b) {220; CHECK-LABEL: rldimi19:221; CHECK: # %bb.0:222; CHECK-NEXT: rotldi 3, 3, 57223; CHECK-NEXT: rldimi 4, 3, 19, 33224; CHECK-NEXT: mr 3, 4225; CHECK-NEXT: blr226 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 2146959360) ; mb=33, me=44227 ret i64 %r228}229 230define i64 @rldimi20(i64 %a, i64 %b) {231; CHECK-LABEL: rldimi20:232; CHECK: # %bb.0:233; CHECK-NEXT: rotldi 3, 3, 23234; CHECK-NEXT: rldimi 4, 3, 53, 15235; CHECK-NEXT: mr 3, 4236; CHECK-NEXT: blr237 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18438299824408231935) ; mb=15, me=10238 ret i64 %r239}240 241define i64 @rldimi21(i64 %a, i64 %b) {242; CHECK-LABEL: rldimi21:243; CHECK: # %bb.0:244; CHECK-NEXT: rotldi 3, 3, 23245; CHECK-NEXT: rldimi 4, 3, 53, 25246; CHECK-NEXT: mr 3, 4247; CHECK-NEXT: blr248 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18437737424210624511) ; mb=25, me=10249 ret i64 %r250}251 252define i64 @rldimi22(i64 %a, i64 %b) {253; CHECK-LABEL: rldimi22:254; CHECK: # %bb.0:255; CHECK-NEXT: rotldi 3, 3, 34256; CHECK-NEXT: rldimi 4, 3, 42, 25257; CHECK-NEXT: mr 3, 4258; CHECK-NEXT: blr259 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18446740225418854399) ; mb=25, me=21260 ret i64 %r261}262 263define i64 @rldimi23(i64 %a, i64 %b) {264; CHECK-LABEL: rldimi23:265; CHECK: # %bb.0:266; CHECK-NEXT: rotldi 3, 3, 23267; CHECK-NEXT: rldimi 4, 3, 53, 44268; CHECK-NEXT: mr 3, 4269; CHECK-NEXT: blr270 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18437736874455859199) ; mb=44, me=10271 ret i64 %r272}273 274define i64 @rldimi24(i64 %a, i64 %b) {275; CHECK-LABEL: rldimi24:276; CHECK: # %bb.0:277; CHECK-NEXT: rotldi 3, 3, 38278; CHECK-NEXT: rldimi 4, 3, 38, 44279; CHECK-NEXT: mr 3, 4280; CHECK-NEXT: blr281 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18446743798832693247) ; mb=44, me=25282 ret i64 %r283}284 285define i64 @rldimi25(i64 %a, i64 %b) {286; CHECK-LABEL: rldimi25:287; CHECK: # %bb.0:288; CHECK-NEXT: rotldi 3, 3, 48289; CHECK-NEXT: rldimi 4, 3, 28, 44290; CHECK-NEXT: mr 3, 4291; CHECK-NEXT: blr292 %r = call i64 @llvm.ppc.rldimi(i64 %a, i64 %b, i32 12, i64 18446744073442164735) ; mb=44, me=35293 ret i64 %r294}295 296declare i64 @llvm.ppc.rldimi(i64, i64, i32 immarg, i64 immarg)297