blob: 6e84ecfee052533263c4802982888c18c9882bfe [file] [log] [blame]
Matthias Braune2d2ce92017-08-01 22:20:41 +00001; RUN: llc -verify-machineinstrs < %s -relocation-model=pic | FileCheck %s
Hal Finkel96c2d4d2012-06-08 15:38:21 +00002target datalayout = "E-p:64:64:64-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:64"
3target triple = "powerpc64-unknown-freebsd10.0"
Hal Finkel96c2d4d2012-06-08 15:38:21 +00004
5@a = common global i32 0, align 4
6
7define void @test1(i32 %c) nounwind {
8entry:
9 br label %for.body
10
11for.body: ; preds = %for.body, %entry
12 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
David Blaikiea79ac142015-02-27 21:17:42 +000013 %0 = load volatile i32, i32* @a, align 4
Hal Finkel96c2d4d2012-06-08 15:38:21 +000014 %add = add nsw i32 %0, %c
Manman Ren1a5ff282013-04-30 17:52:57 +000015 store volatile i32 %add, i32* @a, align 4
Hal Finkel96c2d4d2012-06-08 15:38:21 +000016 %inc = add nsw i32 %i.01, 1
17 %exitcond = icmp eq i32 %inc, 2048
18 br i1 %exitcond, label %for.end, label %for.body
19
20for.end: ; preds = %for.body
21 ret void
22; CHECK: @test1
Hal Finkel2edfbdd2012-06-09 22:10:19 +000023; CHECK-NOT: or 3, 3, 3
Hal Finkel96c2d4d2012-06-08 15:38:21 +000024; CHECK: mtctr
Hal Finkel25c19922013-05-15 21:37:41 +000025; CHECK-NOT: addi {[0-9]+}
Hal Finkel96c2d4d2012-06-08 15:38:21 +000026; CHECK-NOT: cmplwi
27; CHECK: bdnz
28}
29
30define void @test2(i32 %c, i32 %d) nounwind {
31entry:
32 %cmp1 = icmp sgt i32 %d, 0
33 br i1 %cmp1, label %for.body, label %for.end
34
35for.body: ; preds = %entry, %for.body
36 %i.02 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
David Blaikiea79ac142015-02-27 21:17:42 +000037 %0 = load volatile i32, i32* @a, align 4
Hal Finkel96c2d4d2012-06-08 15:38:21 +000038 %add = add nsw i32 %0, %c
Manman Ren1a5ff282013-04-30 17:52:57 +000039 store volatile i32 %add, i32* @a, align 4
Hal Finkel96c2d4d2012-06-08 15:38:21 +000040 %inc = add nsw i32 %i.02, 1
41 %exitcond = icmp eq i32 %inc, %d
42 br i1 %exitcond, label %for.end, label %for.body
43
44for.end: ; preds = %for.body, %entry
45 ret void
46; CHECK: @test2
47; CHECK: mtctr
Hal Finkel25c19922013-05-15 21:37:41 +000048; CHECK-NOT: addi {[0-9]+}
Hal Finkel96c2d4d2012-06-08 15:38:21 +000049; CHECK-NOT: cmplwi
50; CHECK: bdnz
51}
52
53define void @test3(i32 %c, i32 %d) nounwind {
54entry:
55 %cmp1 = icmp sgt i32 %d, 0
56 br i1 %cmp1, label %for.body, label %for.end
57
58for.body: ; preds = %entry, %for.body
59 %i.02 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
60 %mul = mul nsw i32 %i.02, %c
David Blaikiea79ac142015-02-27 21:17:42 +000061 %0 = load volatile i32, i32* @a, align 4
Hal Finkel96c2d4d2012-06-08 15:38:21 +000062 %add = add nsw i32 %0, %mul
Manman Ren1a5ff282013-04-30 17:52:57 +000063 store volatile i32 %add, i32* @a, align 4
Hal Finkel96c2d4d2012-06-08 15:38:21 +000064 %inc = add nsw i32 %i.02, 1
65 %exitcond = icmp eq i32 %inc, %d
66 br i1 %exitcond, label %for.end, label %for.body
67
68for.end: ; preds = %for.body, %entry
69 ret void
70; CHECK: @test3
71; CHECK: mtctr
Hal Finkel25c19922013-05-15 21:37:41 +000072; CHECK-NOT: addi {[0-9]+}
Hal Finkel96c2d4d2012-06-08 15:38:21 +000073; CHECK-NOT: cmplwi
74; CHECK: bdnz
75}
David Majnemerd0bcef22014-12-27 19:45:38 +000076
77@tls_var = external thread_local global i8
78
Ehsan Amiri4701a912016-04-07 15:30:55 +000079define i32 @test4(i32 %inp) {
David Majnemerd0bcef22014-12-27 19:45:38 +000080entry:
81 br label %for.body
82
83for.body: ; preds = %for.body, %entry
Ehsan Amiri4701a912016-04-07 15:30:55 +000084 %phi = phi i32 [ %dec, %for.body ], [ %inp, %entry ]
David Majnemerd0bcef22014-12-27 19:45:38 +000085 %load = ptrtoint i8* @tls_var to i32
Ehsan Amiri4701a912016-04-07 15:30:55 +000086 %val = add i32 %load, %phi
David Majnemerd0bcef22014-12-27 19:45:38 +000087 %dec = add i32 %phi, -1
88 %cmp = icmp sgt i32 %phi, 1
89 br i1 %cmp, label %for.body, label %return
90
91return: ; preds = %for.body
Ehsan Amiri4701a912016-04-07 15:30:55 +000092 ret i32 %val
David Majnemerd0bcef22014-12-27 19:45:38 +000093; CHECK-LABEL: @test4
Ehsan Amiri4701a912016-04-07 15:30:55 +000094; CHECK: mtctr
95; CHECK: bdnz
96; CHECK: __tls_get_addr
David Majnemerd0bcef22014-12-27 19:45:38 +000097}