1; RUN: llc < %s -verify-machineinstrs -stop-after=hardware-loops -mcpu=pwr9 \ 2; RUN: -mtriple=powerpc64le-unknown-unknown | FileCheck %s 3; RUN: llc < %s -verify-machineinstrs -stop-after=hardware-loops -mcpu=pwr8 \ 4; RUN: -mtriple=powerpc64le-unknown-unknown | FileCheck %s 5 6@a = internal global fp128 0xL00000000000000000000000000000000, align 16 7@x = internal global [4 x fp128] zeroinitializer, align 16 8@y = internal global [4 x fp128] zeroinitializer, align 16 9 10define void @fmul_ctrloop_fp128() { 11entry: 12 %0 = load fp128, ptr @a, align 16 13 br label %for.body 14 15for.body: ; preds = %for.body, %entry 16 %i.06 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 17 %arrayidx = getelementptr inbounds [4 x fp128], ptr @x, i64 0, i64 %i.06 18 %1 = load fp128, ptr %arrayidx, align 16 19 %mul = fmul fp128 %0, %1 20 %arrayidx1 = getelementptr inbounds [4 x fp128], ptr @y, i64 0, i64 %i.06 21 store fp128 %mul, ptr %arrayidx1, align 16 22 %inc = add nuw nsw i64 %i.06, 1 23 %exitcond = icmp eq i64 %inc, 4 24 br i1 %exitcond, label %for.end, label %for.body 25 26for.end: ; preds = %for.body 27 ret void 28 29; CHECK-LABEL: fmul_ctrloop_fp128 30; CHECK-NOT: call void @llvm.set.loop.iterations.i64(i64 4) 31; CHECK-NOT: call i1 @llvm.loop.decrement.i64(i64 1) 32} 33 34define void @fpext_ctrloop_fp128(ptr %a) { 35entry: 36 br label %for.body 37 38for.body: 39 %i.06 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 40 %arrayidx = getelementptr inbounds double, ptr %a, i64 %i.06 41 %0 = load double, ptr %arrayidx, align 8 42 %ext = fpext double %0 to fp128 43 %arrayidx1 = getelementptr inbounds [4 x fp128], ptr @y, i64 0, i64 %i.06 44 store fp128 %ext, ptr %arrayidx1, align 16 45 %inc = add nuw nsw i64 %i.06, 1 46 %exitcond = icmp eq i64 %inc, 4 47 br i1 %exitcond, label %for.end, label %for.body 48 49for.end: 50 ret void 51 52; CHECK-LABEL: fpext_ctrloop_fp128 53; CHECK-NOT: call void @llvm.set.loop.iterations.i64(i64 4) 54; CHECK-NOT: call i1 @llvm.loop.decrement.i64(i64 1) 55} 56 57define void @fptrunc_ctrloop_fp128(ptr %a) { 58entry: 59 br label %for.body 60 61for.body: 62 %i.06 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 63 %arrayidx = getelementptr inbounds [4 x fp128], ptr @x, i64 0, i64 %i.06 64 %0 = load fp128, ptr %arrayidx, align 16 65 %trunc = fptrunc fp128 %0 to double 66 %arrayidx1 = getelementptr inbounds double, ptr %a, i64 %i.06 67 store double %trunc, ptr %arrayidx1, align 16 68 %inc = add nuw nsw i64 %i.06, 1 69 %exitcond = icmp eq i64 %inc, 4 70 br i1 %exitcond, label %for.end, label %for.body 71 72for.end: 73 ret void 74 75; CHECK-LABEL: fptrunc_ctrloop_fp128 76; CHECK-NOT: call void @llvm.set.loop.iterations.i64(i64 4) 77; CHECK-NOT: call i1 @llvm.loop.decrement.i64(i64 1) 78} 79 80declare void @obfuscate(ptr, ...) local_unnamed_addr #2 81