aboutsummaryrefslogtreecommitdiffstats
path: root/test/Transforms/GVN/cond_br2.ll
blob: 02154a783912d349b97e915163edab92b41f00d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
; RUN: opt -basicaa -gvn -S < %s | FileCheck %s
target 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-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"

%"class.llvm::SmallVector" = type { %"class.llvm::SmallVectorImpl", [1 x %"union.llvm::SmallVectorBase::U"] }
%"class.llvm::SmallVectorImpl" = type { %"class.llvm::SmallVectorTemplateBase" }
%"class.llvm::SmallVectorTemplateBase" = type { %"class.llvm::SmallVectorTemplateCommon" }
%"class.llvm::SmallVectorTemplateCommon" = type { %"class.llvm::SmallVectorBase" }
%"class.llvm::SmallVectorBase" = type { i8*, i8*, i8*, %"union.llvm::SmallVectorBase::U" }
%"union.llvm::SmallVectorBase::U" = type { x86_fp80 }

; Function Attrs: ssp uwtable
define void @_Z4testv() #0 {
; CHECK: @_Z4testv()
; CHECK: invoke.cont:
; CHECK: br i1 true, label %new.notnull.i11, label %if.end.i14
; CHECK: Retry.i10:

entry:
  %sv = alloca %"class.llvm::SmallVector", align 16
  %0 = bitcast %"class.llvm::SmallVector"* %sv to i8*
  call void @llvm.lifetime.start(i64 64, i8* %0) #1
  %BeginX.i.i.i.i.i.i = getelementptr inbounds %"class.llvm::SmallVector", %"class.llvm::SmallVector"* %sv, i64 0, i32 0, i32 0, i32 0, i32 0, i32 0
  %FirstEl.i.i.i.i.i.i = getelementptr inbounds %"class.llvm::SmallVector", %"class.llvm::SmallVector"* %sv, i64 0, i32 0, i32 0, i32 0, i32 0, i32 3
  %1 = bitcast %"union.llvm::SmallVectorBase::U"* %FirstEl.i.i.i.i.i.i to i8*
  store i8* %1, i8** %BeginX.i.i.i.i.i.i, align 16, !tbaa !4
  %EndX.i.i.i.i.i.i = getelementptr inbounds %"class.llvm::SmallVector", %"class.llvm::SmallVector"* %sv, i64 0, i32 0, i32 0, i32 0, i32 0, i32 1
  store i8* %1, i8** %EndX.i.i.i.i.i.i, align 8, !tbaa !4
  %CapacityX.i.i.i.i.i.i = getelementptr inbounds %"class.llvm::SmallVector", %"class.llvm::SmallVector"* %sv, i64 0, i32 0, i32 0, i32 0, i32 0, i32 2
  %add.ptr.i.i.i.i2.i.i = getelementptr inbounds %"union.llvm::SmallVectorBase::U", %"union.llvm::SmallVectorBase::U"* %FirstEl.i.i.i.i.i.i, i64 2
  %add.ptr.i.i.i.i.i.i = bitcast %"union.llvm::SmallVectorBase::U"* %add.ptr.i.i.i.i2.i.i to i8*
  store i8* %add.ptr.i.i.i.i.i.i, i8** %CapacityX.i.i.i.i.i.i, align 16, !tbaa !4
  %EndX.i = getelementptr inbounds %"class.llvm::SmallVector", %"class.llvm::SmallVector"* %sv, i64 0, i32 0, i32 0, i32 0, i32 0, i32 1
  %2 = load i8*, i8** %EndX.i, align 8, !tbaa !4
  %CapacityX.i = getelementptr inbounds %"class.llvm::SmallVector", %"class.llvm::SmallVector"* %sv, i64 0, i32 0, i32 0, i32 0, i32 0, i32 2
  %cmp.i = icmp ult i8* %2, %add.ptr.i.i.i.i.i.i
  br i1 %cmp.i, label %Retry.i, label %if.end.i

Retry.i:                                          ; preds = %.noexc, %entry
  %3 = phi i8* [ %2, %entry ], [ %.pre.i, %.noexc ]
  %new.isnull.i = icmp eq i8* %3, null
  br i1 %new.isnull.i, label %invoke.cont, label %new.notnull.i

new.notnull.i:                                    ; preds = %Retry.i
  %4 = bitcast i8* %3 to i32*
  store i32 1, i32* %4, align 4, !tbaa !5
  br label %invoke.cont

if.end.i:                                         ; preds = %entry
  %5 = getelementptr inbounds %"class.llvm::SmallVector", %"class.llvm::SmallVector"* %sv, i64 0, i32 0, i32 0, i32 0, i32 0
  invoke void @_ZN4llvm15SmallVectorBase8grow_podEmm(%"class.llvm::SmallVectorBase"* %5, i64 0, i64 4)
          to label %.noexc unwind label %lpad

.noexc:                                           ; preds = %if.end.i
  %.pre.i = load i8*, i8** %EndX.i, align 8, !tbaa !4
  br label %Retry.i

invoke.cont:                                      ; preds = %new.notnull.i, %Retry.i
  %add.ptr.i = getelementptr inbounds i8, i8* %3, i64 4
  store i8* %add.ptr.i, i8** %EndX.i, align 8, !tbaa !4
  %6 = load i8*, i8** %CapacityX.i, align 16, !tbaa !4
  %cmp.i8 = icmp ult i8* %add.ptr.i, %6
  br i1 %cmp.i8, label %new.notnull.i11, label %if.end.i14

Retry.i10:                                        ; preds = %if.end.i14
  %.pre.i13 = load i8*, i8** %EndX.i, align 8, !tbaa !4
  %new.isnull.i9 = icmp eq i8* %.pre.i13, null
  br i1 %new.isnull.i9, label %invoke.cont2, label %new.notnull.i11

new.notnull.i11:                                  ; preds = %invoke.cont, %Retry.i10
  %7 = phi i8* [ %.pre.i13, %Retry.i10 ], [ %add.ptr.i, %invoke.cont ]
  %8 = bitcast i8* %7 to i32*
  store i32 2, i32* %8, align 4, !tbaa !5
  br label %invoke.cont2

if.end.i14:                                       ; preds = %invoke.cont
  %9 = getelementptr inbounds %"class.llvm::SmallVector", %"class.llvm::SmallVector"* %sv, i64 0, i32 0, i32 0, i32 0, i32 0
  invoke void @_ZN4llvm15SmallVectorBase8grow_podEmm(%"class.llvm::SmallVectorBase"* %9, i64 0, i64 4)
          to label %Retry.i10 unwind label %lpad

invoke.cont2:                                     ; preds = %new.notnull.i11, %Retry.i10
  %10 = phi i8* [ null, %Retry.i10 ], [ %7, %new.notnull.i11 ]
  %add.ptr.i12 = getelementptr inbounds i8, i8* %10, i64 4
  store i8* %add.ptr.i12, i8** %EndX.i, align 8, !tbaa !4
  invoke void @_Z1gRN4llvm11SmallVectorIiLj8EEE(%"class.llvm::SmallVector"* %sv)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont2
  %11 = load i8*, i8** %BeginX.i.i.i.i.i.i, align 16, !tbaa !4
  %cmp.i.i.i.i19 = icmp eq i8* %11, %1
  br i1 %cmp.i.i.i.i19, label %_ZN4llvm11SmallVectorIiLj8EED1Ev.exit21, label %if.then.i.i.i20

if.then.i.i.i20:                                  ; preds = %invoke.cont3
  call void @free(i8* %11) #1
  br label %_ZN4llvm11SmallVectorIiLj8EED1Ev.exit21

_ZN4llvm11SmallVectorIiLj8EED1Ev.exit21:          ; preds = %invoke.cont3, %if.then.i.i.i20
  call void @llvm.lifetime.end(i64 64, i8* %0) #1
  ret void

lpad:                                             ; preds = %if.end.i14, %if.end.i, %invoke.cont2
  %12 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
          cleanup
  %13 = load i8*, i8** %BeginX.i.i.i.i.i.i, align 16, !tbaa !4
  %cmp.i.i.i.i = icmp eq i8* %13, %1
  br i1 %cmp.i.i.i.i, label %eh.resume, label %if.then.i.i.i

if.then.i.i.i:                                    ; preds = %lpad
  call void @free(i8* %13) #1
  br label %eh.resume

eh.resume:                                        ; preds = %if.then.i.i.i, %lpad
  resume { i8*, i32 } %12
}

; Function Attrs: nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #1

declare i32 @__gxx_personality_v0(...)

declare void @_Z1gRN4llvm11SmallVectorIiLj8EEE(%"class.llvm::SmallVector"*) #2

; Function Attrs: nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #1

declare void @_ZN4llvm15SmallVectorBase8grow_podEmm(%"class.llvm::SmallVectorBase"*, i64, i64) #2

; Function Attrs: nounwind
declare void @free(i8* nocapture) #3

attributes #0 = { ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind }
attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }

!0 = !{!"any pointer", !1}
!1 = !{!"omnipotent char", !2}
!2 = !{!"Simple C/C++ TBAA"}
!3 = !{!"int", !1}
!4 = !{!0, !0, i64 0}
!5 = !{!3, !3, i64 0}