xref: /llvm-project/llvm/test/CodeGen/PowerPC/ctrloop-fp128.ll (revision 427fb35192f1f7bb694a5910b05abc5925a798b2)
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