191 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \3; RUN: -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s \4; RUN: --check-prefix=CHECK-P95 6define i32 @t(i32 %n, i32 %delta, i32 %a) {7; CHECK-P9-LABEL: t:8; CHECK-P9: # %bb.0: # %entry9; CHECK-P9-NEXT: lis r7, 010; CHECK-P9-NEXT: li r6, 011; CHECK-P9-NEXT: li r8, 012; CHECK-P9-NEXT: li r9, 013; CHECK-P9-NEXT: ori r7, r7, 6553514; CHECK-P9-NEXT: .p2align 515; CHECK-P9-NEXT: .LBB0_1: # %header16; CHECK-P9-NEXT: #17; CHECK-P9-NEXT: addi r9, r9, 118; CHECK-P9-NEXT: cmpw r9, r319; CHECK-P9-NEXT: blt cr0, .LBB0_420; CHECK-P9-NEXT: # %bb.2: # %cont21; CHECK-P9-NEXT: #22; CHECK-P9-NEXT: add r8, r8, r423; CHECK-P9-NEXT: cmpw r8, r724; CHECK-P9-NEXT: bgt cr0, .LBB0_125; CHECK-P9-NEXT: # %bb.3: # %cont.126; CHECK-P9-NEXT: addi r6, r5, 102427; CHECK-P9-NEXT: .LBB0_4: # %return28; CHECK-P9-NEXT: addi r3, r5, 102429; CHECK-P9-NEXT: mullw r3, r6, r330; CHECK-P9-NEXT: blr31entry:32 br label %header33 34header:35 %sum = phi i32 [ 0, %entry ], [ %sum.1, %cont ]36 %i = phi i32 [ 0, %entry ], [ %i.1, %cont ]37 %i.1 = add nsw i32 %i, 138 %lt = icmp slt i32 %i.1, %n39 br i1 %lt, label %return, label %cont40 41cont:42 %sum.1 = add nsw i32 %sum, %delta43 %lt.1 = icmp slt i32 %sum.1, 6553644 br i1 %lt.1, label %cont.1, label %header45 46cont.1:47 %delta.1 = add nsw i32 %a, 102448 br label %return49 50return:51 %delta.2 = phi i32 [ %delta.1, %cont.1 ], [ 0, %header ]52 %delta.3 = add nsw i32 %a, 102453 %ret = mul i32 %delta.2, %delta.354 ret i32 %ret55}56 57define dso_local signext i32 @foo(i32 signext %x, i32 signext %y) nounwind {58; CHECK-P9-LABEL: foo:59; CHECK-P9: # %bb.0: # %entry60; CHECK-P9-NEXT: mflr r061; CHECK-P9-NEXT: std r27, -40(r1) # 8-byte Folded Spill62; CHECK-P9-NEXT: std r28, -32(r1) # 8-byte Folded Spill63; CHECK-P9-NEXT: std r29, -24(r1) # 8-byte Folded Spill64; CHECK-P9-NEXT: std r30, -16(r1) # 8-byte Folded Spill65; CHECK-P9-NEXT: stdu r1, -80(r1)66; CHECK-P9-NEXT: mr r30, r467; CHECK-P9-NEXT: mr r29, r368; CHECK-P9-NEXT: lis r3, 2184569; CHECK-P9-NEXT: std r0, 96(r1)70; CHECK-P9-NEXT: add r28, r30, r2971; CHECK-P9-NEXT: ori r27, r3, 2184672; CHECK-P9-NEXT: b .LBB1_473; CHECK-P9-NEXT: .p2align 474; CHECK-P9-NEXT: .LBB1_1: # %sw.bb375; CHECK-P9-NEXT: #76; CHECK-P9-NEXT: mulli r3, r30, 2377; CHECK-P9-NEXT: .LBB1_2: # %sw.epilog78; CHECK-P9-NEXT: #79; CHECK-P9-NEXT: add r28, r3, r2880; CHECK-P9-NEXT: .LBB1_3: # %sw.epilog81; CHECK-P9-NEXT: #82; CHECK-P9-NEXT: cmpwi r28, 102583; CHECK-P9-NEXT: bge cr0, .LBB1_784; CHECK-P9-NEXT: .LBB1_4: # %while.cond85; CHECK-P9-NEXT: #86; CHECK-P9-NEXT: mr r3, r2987; CHECK-P9-NEXT: bl bar88; CHECK-P9-NEXT: nop89; CHECK-P9-NEXT: mr r29, r390; CHECK-P9-NEXT: mr r3, r3091; CHECK-P9-NEXT: bl bar92; CHECK-P9-NEXT: nop93; CHECK-P9-NEXT: mr r30, r394; CHECK-P9-NEXT: mulhw r3, r28, r2795; CHECK-P9-NEXT: srwi r4, r3, 3196; CHECK-P9-NEXT: add r3, r3, r497; CHECK-P9-NEXT: slwi r4, r3, 198; CHECK-P9-NEXT: add r3, r3, r499; CHECK-P9-NEXT: sub r3, r28, r3100; CHECK-P9-NEXT: cmplwi r3, 1101; CHECK-P9-NEXT: beq cr0, .LBB1_1102; CHECK-P9-NEXT: # %bb.5: # %while.cond103; CHECK-P9-NEXT: #104; CHECK-P9-NEXT: cmplwi r3, 0105; CHECK-P9-NEXT: bne cr0, .LBB1_3106; CHECK-P9-NEXT: # %bb.6: # %sw.bb107; CHECK-P9-NEXT: #108; CHECK-P9-NEXT: mulli r3, r29, 13109; CHECK-P9-NEXT: b .LBB1_2110; CHECK-P9-NEXT: .LBB1_7: # %while.end111; CHECK-P9-NEXT: lis r3, -13108112; CHECK-P9-NEXT: lis r4, 13107113; CHECK-P9-NEXT: ori r3, r3, 52429114; CHECK-P9-NEXT: ori r4, r4, 13108115; CHECK-P9-NEXT: mullw r3, r28, r3116; CHECK-P9-NEXT: cmplw r3, r4117; CHECK-P9-NEXT: blt cr0, .LBB1_9118; CHECK-P9-NEXT: # %bb.8: # %if.then8119; CHECK-P9-NEXT: mulli r3, r29, 13120; CHECK-P9-NEXT: mulli r5, r30, 23121; CHECK-P9-NEXT: extsw r4, r28122; CHECK-P9-NEXT: extsw r3, r3123; CHECK-P9-NEXT: extsw r5, r5124; CHECK-P9-NEXT: sub r3, r4, r3125; CHECK-P9-NEXT: sub r4, r5, r4126; CHECK-P9-NEXT: rldicl r3, r3, 1, 63127; CHECK-P9-NEXT: rldicl r4, r4, 1, 63128; CHECK-P9-NEXT: or r3, r3, r4129; CHECK-P9-NEXT: b .LBB1_10130; CHECK-P9-NEXT: .LBB1_9: # %cleanup20131; CHECK-P9-NEXT: li r3, 0132; CHECK-P9-NEXT: .LBB1_10: # %cleanup20133; CHECK-P9-NEXT: addi r1, r1, 80134; CHECK-P9-NEXT: ld r0, 16(r1)135; CHECK-P9-NEXT: ld r30, -16(r1) # 8-byte Folded Reload136; CHECK-P9-NEXT: ld r29, -24(r1) # 8-byte Folded Reload137; CHECK-P9-NEXT: ld r28, -32(r1) # 8-byte Folded Reload138; CHECK-P9-NEXT: mtlr r0139; CHECK-P9-NEXT: ld r27, -40(r1) # 8-byte Folded Reload140; CHECK-P9-NEXT: blr141entry:142 %add = add nsw i32 %y, %x143 br label %while.cond144 145while.cond: ; preds = %sw.epilog, %entry146 %sum.0 = phi i32 [ %add, %entry ], [ %sum.1, %sw.epilog ]147 %y.addr.0 = phi i32 [ %y, %entry ], [ %call1, %sw.epilog ]148 %x.addr.0 = phi i32 [ %x, %entry ], [ %call, %sw.epilog ]149 %call = tail call signext i32 @bar(i32 signext %x.addr.0) #2150 %call1 = tail call signext i32 @bar(i32 signext %y.addr.0) #2151 %rem = srem i32 %sum.0, 3152 switch i32 %rem, label %sw.epilog [153 i32 0, label %sw.bb154 i32 1, label %sw.bb3155 ]156 157sw.bb: ; preds = %while.cond158 %mul = mul nsw i32 %call, 13159 %add2 = add nsw i32 %mul, %sum.0160 br label %sw.epilog161 162sw.bb3: ; preds = %while.cond163 %mul4 = mul nsw i32 %call1, 23164 %add5 = add nsw i32 %mul4, %sum.0165 br label %sw.epilog166 167sw.epilog: ; preds = %while.cond, %sw.bb3, %sw.bb168 %sum.1 = phi i32 [ %sum.0, %while.cond ], [ %add5, %sw.bb3 ], [ %add2, %sw.bb ]169 %cmp = icmp slt i32 %sum.1, 1025170 br i1 %cmp, label %while.cond, label %while.end171 172while.end: ; preds = %sw.epilog173 %rem739 = urem i32 %sum.1, 5174 %tobool = icmp eq i32 %rem739, 0175 br i1 %tobool, label %cleanup20, label %if.then8176 177if.then8: ; preds = %while.end178 %mul9 = mul nsw i32 %call, 13179 %cmp11 = icmp slt i32 %sum.1, %mul9180 %mul10 = mul nsw i32 %call1, 23181 %cmp12 = icmp sgt i32 %sum.1, %mul10182 %or.cond = or i1 %cmp11, %cmp12183 %spec.select = zext i1 %or.cond to i32184 ret i32 %spec.select185 186cleanup20: ; preds = %while.end187 ret i32 0188}189 190declare signext i32 @bar(i32 signext) local_unnamed_addr #1191