1*a538b0f0SEhsan Amiri; RUN: llc -verify-machineinstrs < %s | FileCheck %s
2c4c6c876SHal Finkeltarget datalayout = "E-m:e-p:32:32-i128:64-n32"
3c4c6c876SHal Finkeltarget triple = "powerpc-ellcc-linux"
4c4c6c876SHal Finkel
5c4c6c876SHal Finkel; Function Attrs: nounwind
6c4c6c876SHal Finkeldefine void @foo1(i128* %a, i128* readonly %b, i128* readonly %c) #0 {
7c4c6c876SHal Finkelentry:
8c4c6c876SHal Finkel  br label %for.body
9c4c6c876SHal Finkel
10c4c6c876SHal Finkelfor.body:                                         ; preds = %for.body, %entry
11c4c6c876SHal Finkel  %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
12a79ac14fSDavid Blaikie  %0 = load i128, i128* %b, align 16
13a79ac14fSDavid Blaikie  %1 = load i128, i128* %c, align 16
14c4c6c876SHal Finkel  %shl = shl i128 %0, %1
15c4c6c876SHal Finkel  store i128 %shl, i128* %a, align 16
16c4c6c876SHal Finkel  %inc = add nsw i32 %i.02, 1
17c4c6c876SHal Finkel  %exitcond = icmp eq i32 %inc, 2048
18c4c6c876SHal Finkel  br i1 %exitcond, label %for.end, label %for.body
19c4c6c876SHal Finkel
20c4c6c876SHal Finkelfor.end:                                          ; preds = %for.body
21c4c6c876SHal Finkel  ret void
22c4c6c876SHal Finkel
23c4c6c876SHal Finkel; CHECK-LABEL: @foo1
24c4c6c876SHal Finkel; CHECK-NOT: mtctr
25c4c6c876SHal Finkel}
26c4c6c876SHal Finkel
27c4c6c876SHal Finkel; Function Attrs: nounwind
28c4c6c876SHal Finkeldefine void @foo2(i128* %a, i128* readonly %b, i128* readonly %c) #0 {
29c4c6c876SHal Finkelentry:
30c4c6c876SHal Finkel  br label %for.body
31c4c6c876SHal Finkel
32c4c6c876SHal Finkelfor.body:                                         ; preds = %for.body, %entry
33c4c6c876SHal Finkel  %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
34a79ac14fSDavid Blaikie  %0 = load i128, i128* %b, align 16
35a79ac14fSDavid Blaikie  %1 = load i128, i128* %c, align 16
36c4c6c876SHal Finkel  %shl = ashr i128 %0, %1
37c4c6c876SHal Finkel  store i128 %shl, i128* %a, align 16
38c4c6c876SHal Finkel  %inc = add nsw i32 %i.02, 1
39c4c6c876SHal Finkel  %exitcond = icmp eq i32 %inc, 2048
40c4c6c876SHal Finkel  br i1 %exitcond, label %for.end, label %for.body
41c4c6c876SHal Finkel
42c4c6c876SHal Finkelfor.end:                                          ; preds = %for.body
43c4c6c876SHal Finkel  ret void
44c4c6c876SHal Finkel
45c4c6c876SHal Finkel; CHECK-LABEL: @foo2
46c4c6c876SHal Finkel; CHECK-NOT: mtctr
47c4c6c876SHal Finkel}
48c4c6c876SHal Finkel
49c4c6c876SHal Finkel; Function Attrs: nounwind
50c4c6c876SHal Finkeldefine void @foo3(i128* %a, i128* readonly %b, i128* readonly %c) #0 {
51c4c6c876SHal Finkelentry:
52c4c6c876SHal Finkel  br label %for.body
53c4c6c876SHal Finkel
54c4c6c876SHal Finkelfor.body:                                         ; preds = %for.body, %entry
55c4c6c876SHal Finkel  %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
56a79ac14fSDavid Blaikie  %0 = load i128, i128* %b, align 16
57a79ac14fSDavid Blaikie  %1 = load i128, i128* %c, align 16
58c4c6c876SHal Finkel  %shl = lshr i128 %0, %1
59c4c6c876SHal Finkel  store i128 %shl, i128* %a, align 16
60c4c6c876SHal Finkel  %inc = add nsw i32 %i.02, 1
61c4c6c876SHal Finkel  %exitcond = icmp eq i32 %inc, 2048
62c4c6c876SHal Finkel  br i1 %exitcond, label %for.end, label %for.body
63c4c6c876SHal Finkel
64c4c6c876SHal Finkelfor.end:                                          ; preds = %for.body
65c4c6c876SHal Finkel  ret void
66c4c6c876SHal Finkel
67c4c6c876SHal Finkel; CHECK-LABEL: @foo3
68c4c6c876SHal Finkel; CHECK-NOT: mtctr
69c4c6c876SHal Finkel}
70c4c6c876SHal Finkel
71c4c6c876SHal Finkelattributes #0 = { nounwind }
72c4c6c876SHal Finkel
73