~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Transforms/SimplifyCFG/speculate-with-offset.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 -simplifycfg -S < %s | FileCheck %s
 
2
 
 
3
; This load is safe to speculate, as it's from a safe offset
 
4
; within an alloca.
 
5
 
 
6
; CHECK-LABEL: @yes(
 
7
; CHECK-NOT: br
 
8
 
 
9
define void @yes(i1 %c) nounwind {
 
10
entry:
 
11
  %a = alloca [4 x i64*], align 8
 
12
  %__a.addr = getelementptr [4 x i64*], [4 x i64*]* %a, i64 0, i64 3
 
13
  call void @frob(i64** %__a.addr)
 
14
  br i1 %c, label %if.then, label %if.end
 
15
 
 
16
if.then:                                          ; preds = %entry
 
17
  br label %return
 
18
 
 
19
if.end:                                           ; preds = %entry
 
20
  %tmp5 = load i64*, i64** %__a.addr, align 8
 
21
  br label %return
 
22
 
 
23
return:                                           ; preds = %if.end, %if.then
 
24
  %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
 
25
  ret void
 
26
}
 
27
 
 
28
; CHECK-LABEL: @no0(
 
29
; CHECK: br i1 %c
 
30
 
 
31
define void @no0(i1 %c) nounwind {
 
32
entry:
 
33
  %a = alloca [4 x i64*], align 8
 
34
  %__a.addr = getelementptr [4 x i64*], [4 x i64*]* %a, i64 0, i64 4
 
35
  call void @frob(i64** %__a.addr)
 
36
  br i1 %c, label %if.then, label %if.end
 
37
 
 
38
if.then:                                          ; preds = %entry
 
39
  br label %return
 
40
 
 
41
if.end:                                           ; preds = %entry
 
42
  %tmp5 = load i64*, i64** %__a.addr, align 8
 
43
  br label %return
 
44
 
 
45
return:                                           ; preds = %if.end, %if.then
 
46
  %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
 
47
  ret void
 
48
}
 
49
 
 
50
; CHECK-LABEL: @no1(
 
51
; CHECK: br i1 %c
 
52
 
 
53
define void @no1(i1 %c, i64 %n) nounwind {
 
54
entry:
 
55
  %a = alloca [4 x i64*], align 8
 
56
  %__a.addr = getelementptr [4 x i64*], [4 x i64*]* %a, i64 0, i64 %n
 
57
  call void @frob(i64** %__a.addr)
 
58
  br i1 %c, label %if.then, label %if.end
 
59
 
 
60
if.then:                                          ; preds = %entry
 
61
  br label %return
 
62
 
 
63
if.end:                                           ; preds = %entry
 
64
  %tmp5 = load i64*, i64** %__a.addr, align 8
 
65
  br label %return
 
66
 
 
67
return:                                           ; preds = %if.end, %if.then
 
68
  %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
 
69
  ret void
 
70
}
 
71
 
 
72
; CHECK-LABEL: @no2(
 
73
; CHECK: br i1 %c
 
74
 
 
75
define void @no2(i1 %c, i64 %n) nounwind {
 
76
entry:
 
77
  %a = alloca [4 x i64*], align 8
 
78
  %__a.addr = getelementptr [4 x i64*], [4 x i64*]* %a, i64 1, i64 0
 
79
  call void @frob(i64** %__a.addr)
 
80
  br i1 %c, label %if.then, label %if.end
 
81
 
 
82
if.then:                                          ; preds = %entry
 
83
  br label %return
 
84
 
 
85
if.end:                                           ; preds = %entry
 
86
  %tmp5 = load i64*, i64** %__a.addr, align 8
 
87
  br label %return
 
88
 
 
89
return:                                           ; preds = %if.end, %if.then
 
90
  %storemerge = phi i64* [ undef, %if.then ], [ %tmp5, %if.end ]
 
91
  ret void
 
92
}
 
93
 
 
94
declare void @frob(i64** nocapture %p)