1*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs < %s -mcpu=ppc | FileCheck %s
2fa5f6f74SHal Finkel
3fa5f6f74SHal Finkeltarget datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32"
4fa5f6f74SHal Finkeltarget triple = "powerpc-unknown-linux-gnu"
5fa5f6f74SHal Finkel
6fa5f6f74SHal Finkeldefine i64 @foo(i64* nocapture %n, i64 %d) nounwind readonly {
7fa5f6f74SHal Finkelentry:
8fa5f6f74SHal Finkel  br label %for.body
9fa5f6f74SHal Finkel
10fa5f6f74SHal Finkelfor.body:                                         ; preds = %for.body, %entry
11fa5f6f74SHal Finkel  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
12fa5f6f74SHal Finkel  %x.05 = phi i64 [ 0, %entry ], [ %conv1, %for.body ]
1379e6c749SDavid Blaikie  %arrayidx = getelementptr inbounds i64, i64* %n, i32 %i.06
14a79ac14fSDavid Blaikie  %0 = load i64, i64* %arrayidx, align 8
15fa5f6f74SHal Finkel  %conv = udiv i64 %x.05, %d
16fa5f6f74SHal Finkel  %conv1 = add i64 %conv, %0
17fa5f6f74SHal Finkel  %inc = add nsw i32 %i.06, 1
18fa5f6f74SHal Finkel  %exitcond = icmp eq i32 %inc, 2048
19fa5f6f74SHal Finkel  br i1 %exitcond, label %for.end, label %for.body
20fa5f6f74SHal Finkel
21fa5f6f74SHal Finkelfor.end:                                          ; preds = %for.body
22fa5f6f74SHal Finkel  ret i64 %conv1
23fa5f6f74SHal Finkel}
24fa5f6f74SHal Finkel
25fa5f6f74SHal Finkel; CHECK: @foo
26fa5f6f74SHal Finkel; CHECK-NOT: mtctr
27fa5f6f74SHal Finkel
28fa5f6f74SHal Finkeldefine i64 @foo2(i64* nocapture %n, i64 %d) nounwind readonly {
29fa5f6f74SHal Finkelentry:
30fa5f6f74SHal Finkel  br label %for.body
31fa5f6f74SHal Finkel
32fa5f6f74SHal Finkelfor.body:                                         ; preds = %for.body, %entry
33fa5f6f74SHal Finkel  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
34fa5f6f74SHal Finkel  %x.05 = phi i64 [ 0, %entry ], [ %conv1, %for.body ]
3579e6c749SDavid Blaikie  %arrayidx = getelementptr inbounds i64, i64* %n, i32 %i.06
36a79ac14fSDavid Blaikie  %0 = load i64, i64* %arrayidx, align 8
37fa5f6f74SHal Finkel  %conv = sdiv i64 %x.05, %d
38fa5f6f74SHal Finkel  %conv1 = add i64 %conv, %0
39fa5f6f74SHal Finkel  %inc = add nsw i32 %i.06, 1
40fa5f6f74SHal Finkel  %exitcond = icmp eq i32 %inc, 2048
41fa5f6f74SHal Finkel  br i1 %exitcond, label %for.end, label %for.body
42fa5f6f74SHal Finkel
43fa5f6f74SHal Finkelfor.end:                                          ; preds = %for.body
44fa5f6f74SHal Finkel  ret i64 %conv1
45fa5f6f74SHal Finkel}
46fa5f6f74SHal Finkel
47fa5f6f74SHal Finkel; CHECK: @foo2
48fa5f6f74SHal Finkel; CHECK-NOT: mtctr
49fa5f6f74SHal Finkel
50fa5f6f74SHal Finkeldefine i64 @foo3(i64* nocapture %n, i64 %d) nounwind readonly {
51fa5f6f74SHal Finkelentry:
52fa5f6f74SHal Finkel  br label %for.body
53fa5f6f74SHal Finkel
54fa5f6f74SHal Finkelfor.body:                                         ; preds = %for.body, %entry
55fa5f6f74SHal Finkel  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
56fa5f6f74SHal Finkel  %x.05 = phi i64 [ 0, %entry ], [ %conv1, %for.body ]
5779e6c749SDavid Blaikie  %arrayidx = getelementptr inbounds i64, i64* %n, i32 %i.06
58a79ac14fSDavid Blaikie  %0 = load i64, i64* %arrayidx, align 8
59fa5f6f74SHal Finkel  %conv = urem i64 %x.05, %d
60fa5f6f74SHal Finkel  %conv1 = add i64 %conv, %0
61fa5f6f74SHal Finkel  %inc = add nsw i32 %i.06, 1
62fa5f6f74SHal Finkel  %exitcond = icmp eq i32 %inc, 2048
63fa5f6f74SHal Finkel  br i1 %exitcond, label %for.end, label %for.body
64fa5f6f74SHal Finkel
65fa5f6f74SHal Finkelfor.end:                                          ; preds = %for.body
66fa5f6f74SHal Finkel  ret i64 %conv1
67fa5f6f74SHal Finkel}
68fa5f6f74SHal Finkel
69fa5f6f74SHal Finkel; CHECK: @foo3
70fa5f6f74SHal Finkel; CHECK-NOT: mtctr
71fa5f6f74SHal Finkel
72fa5f6f74SHal Finkeldefine i64 @foo4(i64* nocapture %n, i64 %d) nounwind readonly {
73fa5f6f74SHal Finkelentry:
74fa5f6f74SHal Finkel  br label %for.body
75fa5f6f74SHal Finkel
76fa5f6f74SHal Finkelfor.body:                                         ; preds = %for.body, %entry
77fa5f6f74SHal Finkel  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
78fa5f6f74SHal Finkel  %x.05 = phi i64 [ 0, %entry ], [ %conv1, %for.body ]
7979e6c749SDavid Blaikie  %arrayidx = getelementptr inbounds i64, i64* %n, i32 %i.06
80a79ac14fSDavid Blaikie  %0 = load i64, i64* %arrayidx, align 8
81fa5f6f74SHal Finkel  %conv = srem i64 %x.05, %d
82fa5f6f74SHal Finkel  %conv1 = add i64 %conv, %0
83fa5f6f74SHal Finkel  %inc = add nsw i32 %i.06, 1
84fa5f6f74SHal Finkel  %exitcond = icmp eq i32 %inc, 2048
85fa5f6f74SHal Finkel  br i1 %exitcond, label %for.end, label %for.body
86fa5f6f74SHal Finkel
87fa5f6f74SHal Finkelfor.end:                                          ; preds = %for.body
88fa5f6f74SHal Finkel  ret i64 %conv1
89fa5f6f74SHal Finkel}
90fa5f6f74SHal Finkel
91fa5f6f74SHal Finkel; CHECK: @foo4
92fa5f6f74SHal Finkel; CHECK-NOT: mtctr
93fa5f6f74SHal Finkel
94