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