178 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=powerpc64-unknown-freebsd12.0 -verify-machineinstrs \3; RUN: -mcpu=ppc64 -ppc-asm-full-reg-names < %s | FileCheck %s4@a = local_unnamed_addr global ptr null, align 85 6; Function Attrs: nounwind7define void @d() local_unnamed_addr #0 {8; CHECK-LABEL: d:9; CHECK: # %bb.0: # %entry10; CHECK-NEXT: mflr r011; CHECK-NEXT: stdu r1, -208(r1)12; CHECK-NEXT: addis r3, r2, .LC0@toc@ha13; CHECK-NEXT: std r0, 224(r1)14; CHECK-NEXT: ld r3, .LC0@toc@l(r3)15; CHECK-NEXT: std r29, 184(r1) # 8-byte Folded Spill16; CHECK-NEXT: std r30, 192(r1) # 8-byte Folded Spill17; CHECK-NEXT: ld r29, 0(r3)18; CHECK-NEXT: bl c19; CHECK-NEXT: nop20; CHECK-NEXT: mr r30, r321; CHECK-NEXT: bl b22; CHECK-NEXT: nop23; CHECK-NEXT: cmpwi r30, 024; CHECK-NEXT: ble cr0, .LBB0_925; CHECK-NEXT: # %bb.1: # %for.body.preheader26; CHECK-NEXT: cmplwi r30, 427; CHECK-NEXT: clrldi r4, r30, 3228; CHECK-NEXT: li r5, 029; CHECK-NEXT: blt cr0, .LBB0_730; CHECK-NEXT: # %bb.2: # %vector.memcheck31; CHECK-NEXT: rldic r6, r30, 2, 3032; CHECK-NEXT: add r7, r3, r633; CHECK-NEXT: cmpld r29, r734; CHECK-NEXT: add r6, r29, r635; CHECK-NEXT: bc 4, lt, .LBB0_436; CHECK-NEXT: # %bb.3: # %vector.memcheck37; CHECK-NEXT: cmpld r3, r638; CHECK-NEXT: bc 12, lt, .LBB0_739; CHECK-NEXT: .LBB0_4: # %vector.ph40; CHECK-NEXT: rlwinm r5, r4, 0, 0, 2941; CHECK-NEXT: li r7, 1542; CHECK-NEXT: addi r6, r5, -443; CHECK-NEXT: addi r8, r1, 12844; CHECK-NEXT: rldicl r6, r6, 62, 245; CHECK-NEXT: addi r9, r1, 14446; CHECK-NEXT: addi r6, r6, 147; CHECK-NEXT: addi r10, r1, 16048; CHECK-NEXT: mtctr r649; CHECK-NEXT: li r6, 050; CHECK-NEXT: addi r11, r1, 11251; CHECK-NEXT: .LBB0_5: # %vector.body52; CHECK-NEXT: #53; CHECK-NEXT: add r12, r3, r654; CHECK-NEXT: lvx v3, r3, r655; CHECK-NEXT: lvx v5, r12, r756; CHECK-NEXT: add r12, r29, r657; CHECK-NEXT: lvsl v2, r3, r658; CHECK-NEXT: vperm v2, v3, v5, v259; CHECK-NEXT: lvx v3, r29, r660; CHECK-NEXT: lvx v5, r12, r761; CHECK-NEXT: lvsl v4, r29, r662; CHECK-NEXT: stvx v2, 0, r863; CHECK-NEXT: vperm v2, v3, v5, v464; CHECK-NEXT: stvx v2, 0, r965; CHECK-NEXT: lfs f0, 140(r1)66; CHECK-NEXT: lfs f1, 156(r1)67; CHECK-NEXT: fdivs f0, f1, f068; CHECK-NEXT: lfs f1, 152(r1)69; CHECK-NEXT: stfs f0, 172(r1)70; CHECK-NEXT: lfs f0, 136(r1)71; CHECK-NEXT: fdivs f0, f1, f072; CHECK-NEXT: lfs f1, 148(r1)73; CHECK-NEXT: stfs f0, 168(r1)74; CHECK-NEXT: lfs f0, 132(r1)75; CHECK-NEXT: fdivs f0, f1, f076; CHECK-NEXT: lfs f1, 144(r1)77; CHECK-NEXT: stfs f0, 164(r1)78; CHECK-NEXT: lfs f0, 128(r1)79; CHECK-NEXT: fdivs f0, f1, f080; CHECK-NEXT: stfs f0, 160(r1)81; CHECK-NEXT: lvx v2, 0, r1082; CHECK-NEXT: stvx v2, 0, r1183; CHECK-NEXT: ld r0, 112(r1)84; CHECK-NEXT: stdx r0, r29, r685; CHECK-NEXT: addi r6, r6, 1686; CHECK-NEXT: ld r0, 120(r1)87; CHECK-NEXT: std r0, 8(r12)88; CHECK-NEXT: bdnz .LBB0_589; CHECK-NEXT: # %bb.6: # %middle.block90; CHECK-NEXT: cmpld r5, r491; CHECK-NEXT: beq cr0, .LBB0_992; CHECK-NEXT: .LBB0_7: # %for.body.preheader1893; CHECK-NEXT: sldi r6, r5, 294; CHECK-NEXT: sub r5, r4, r595; CHECK-NEXT: addi r6, r6, -496; CHECK-NEXT: add r3, r3, r697; CHECK-NEXT: add r4, r29, r698; CHECK-NEXT: mtctr r599; CHECK-NEXT: .LBB0_8: # %for.body100; CHECK-NEXT: #101; CHECK-NEXT: lfsu f0, 4(r4)102; CHECK-NEXT: lfsu f1, 4(r3)103; CHECK-NEXT: fdivs f0, f0, f1104; CHECK-NEXT: stfs f0, 0(r4)105; CHECK-NEXT: bdnz .LBB0_8106; CHECK-NEXT: .LBB0_9: # %for.end107; CHECK-NEXT: ld r30, 192(r1) # 8-byte Folded Reload108; CHECK-NEXT: ld r29, 184(r1) # 8-byte Folded Reload109; CHECK-NEXT: addi r1, r1, 208110; CHECK-NEXT: ld r0, 16(r1)111; CHECK-NEXT: mtlr r0112; CHECK-NEXT: blr113entry:114 %0 = load ptr, ptr @a, align 8115 %call = call signext i32 @c() #2116 %call1 = call ptr @b() #2117 %cmp11 = icmp sgt i32 %call, 0118 br i1 %cmp11, label %for.body.preheader, label %for.end119 120for.body.preheader: ; preds = %entry121 %wide.trip.count = zext i32 %call to i64122 %min.iters.check = icmp ult i32 %call, 4123 br i1 %min.iters.check, label %for.body.preheader18, label %vector.memcheck124 125vector.memcheck: ; preds = %for.body.preheader126 %scevgep = getelementptr float, ptr %0, i64 %wide.trip.count127 %scevgep15 = getelementptr float, ptr %call1, i64 %wide.trip.count128 %bound0 = icmp ult ptr %0, %scevgep15129 %bound1 = icmp ult ptr %call1, %scevgep130 %found.conflict = and i1 %bound0, %bound1131 br i1 %found.conflict, label %for.body.preheader18, label %vector.ph132 133vector.ph: ; preds = %vector.memcheck134 %n.vec = and i64 %wide.trip.count, 4294967292135 br label %vector.body136 137vector.body: ; preds = %vector.body, %vector.ph138 %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]139 %1 = getelementptr inbounds float, ptr %call1, i64 %index140 %wide.load = load <4 x float>, ptr %1, align 4141 %2 = getelementptr inbounds float, ptr %0, i64 %index142 %wide.load17 = load <4 x float>, ptr %2, align 4143 %3 = fdiv reassoc nsz arcp afn <4 x float> %wide.load17, %wide.load144 store <4 x float> %3, ptr %2, align 4145 %index.next = add i64 %index, 4146 %4 = icmp eq i64 %index.next, %n.vec147 br i1 %4, label %middle.block, label %vector.body148 149middle.block: ; preds = %vector.body150 %cmp.n = icmp eq i64 %n.vec, %wide.trip.count151 br i1 %cmp.n, label %for.end, label %for.body.preheader18152 153for.body.preheader18: ; preds = %middle.block, %vector.memcheck, %for.body.preheader154 %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]155 br label %for.body156 157for.body: ; preds = %for.body.preheader18, %for.body158 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader18 ]159 %arrayidx = getelementptr inbounds float, ptr %call1, i64 %indvars.iv160 %5 = load float, ptr %arrayidx, align 4161 %arrayidx3 = getelementptr inbounds float, ptr %0, i64 %indvars.iv162 %6 = load float, ptr %arrayidx3, align 4163 %div = fdiv reassoc nsz arcp afn float %6, %5164 store float %div, ptr %arrayidx3, align 4165 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1166 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count167 br i1 %exitcond.not, label %for.end, label %for.body168 169for.end: ; preds = %for.body, %middle.block, %entry170 ret void171}172 173declare signext i32 @c(...) local_unnamed_addr #1174 175declare ptr @b(...) local_unnamed_addr #1176 177attributes #0 = { nounwind }178