~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Analysis/ScalarEvolution/max-trip-count-address-space.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s
 
2
 
 
3
; ScalarEvolution should be able to understand the loop and eliminate the casts.
 
4
 
 
5
target datalayout = "e-p:32:32:32-p1:16:16:16-p2:8:8:8-p4:64:64:64-n16:32:64"
 
6
 
 
7
; CHECK:  {%d,+,4}<%bb>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: ((4 * (trunc i32 (-1 + %n) to i16)) + %d)
 
8
 
 
9
 
 
10
define void @foo(i32 addrspace(1)* nocapture %d, i32 %n) nounwind {
 
11
; CHECK: @foo
 
12
entry:
 
13
        %0 = icmp sgt i32 %n, 0         ; <i1> [#uses=1]
 
14
        br i1 %0, label %bb.nph, label %return
 
15
 
 
16
bb.nph:         ; preds = %entry
 
17
        br label %bb
 
18
 
 
19
bb:             ; preds = %bb1, %bb.nph
 
20
        %i.02 = phi i32 [ %5, %bb1 ], [ 0, %bb.nph ]            ; <i32> [#uses=2]
 
21
        %p.01 = phi i8 [ %4, %bb1 ], [ -1, %bb.nph ]            ; <i8> [#uses=2]
 
22
        %1 = sext i8 %p.01 to i32               ; <i32> [#uses=1]
 
23
        %2 = sext i32 %i.02 to i64              ; <i64> [#uses=1]
 
24
        %3 = getelementptr i32, i32 addrspace(1)* %d, i64 %2            ; <i32*> [#uses=1]
 
25
        store i32 %1, i32 addrspace(1)* %3, align 4
 
26
        %4 = add i8 %p.01, 1            ; <i8> [#uses=1]
 
27
        %5 = add i32 %i.02, 1           ; <i32> [#uses=2]
 
28
        br label %bb1
 
29
 
 
30
bb1:            ; preds = %bb
 
31
        %6 = icmp slt i32 %5, %n                ; <i1> [#uses=1]
 
32
        br i1 %6, label %bb, label %bb1.return_crit_edge
 
33
 
 
34
bb1.return_crit_edge:           ; preds = %bb1
 
35
        br label %return
 
36
 
 
37
return:         ; preds = %bb1.return_crit_edge, %entry
 
38
        ret void
 
39
}
 
40
 
 
41
define void @test(i8 addrspace(1)* %a, i32 %n) nounwind {
 
42
; CHECK: @test
 
43
entry:
 
44
  %cmp1 = icmp sgt i32 %n, 0
 
45
  br i1 %cmp1, label %for.body.lr.ph, label %for.end
 
46
 
 
47
for.body.lr.ph:                                   ; preds = %entry
 
48
  %tmp = zext i32 %n to i64
 
49
  br label %for.body
 
50
 
 
51
for.body:                                         ; preds = %for.body, %for.body.lr.ph
 
52
  %indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %for.body.lr.ph ]
 
53
  %arrayidx = getelementptr i8, i8 addrspace(1)* %a, i64 %indvar
 
54
  store i8 0, i8 addrspace(1)* %arrayidx, align 1
 
55
  %indvar.next = add i64 %indvar, 1
 
56
  %exitcond = icmp ne i64 %indvar.next, %tmp
 
57
  br i1 %exitcond, label %for.body, label %for.cond.for.end_crit_edge
 
58
 
 
59
for.cond.for.end_crit_edge:                       ; preds = %for.body
 
60
  br label %for.end
 
61
 
 
62
for.end:                                          ; preds = %for.cond.for.end_crit_edge, %entry
 
63
  ret void
 
64
}
 
65
 
 
66
; CHECK: Determining loop execution counts for: @test
 
67
; CHECK-NEXT: backedge-taken count is
 
68
; CHECK-NEXT: max backedge-taken count is -1