@@ -5,6 +5,9 @@ target triple = "x86_64-unknown-linux-gnu"
5
5
@__profn_foo = private constant [3 x i8 ] c "foo"
6
6
@__profn_bar = private constant [3 x i8 ] c "bar"
7
7
8
+ @__profn_fooint = private constant [6 x i8 ] c "fooint"
9
+ @__profn_barint = private constant [6 x i8 ] c "barint"
10
+
8
11
; CHECK-LABEL: define void @foo
9
12
; CHECK-NEXT: %pgocount = load i8, ptr @__profc_foo, align 1
10
13
; CHECK-NEXT: %pgocount.ifnonzero = icmp ne i8 %pgocount, 0
@@ -67,3 +70,91 @@ return: ; preds = %if.end, %if.then
67
70
%1 = load i32 , ptr %retval , align 4
68
71
ret i32 %1
69
72
}
73
+
74
+ ; CHECK-LABEL: define void @fooint
75
+ ; CHECK-NEXT: %pgocount = load i64, ptr @__profc_fooint, align 8
76
+ ; CHECK-NEXT: %pgocount.ifzero = icmp eq i64 %pgocount, 0
77
+ ; CHECK-NEXT: br i1 %pgocount.ifzero, label %1, label %2
78
+
79
+ ; CHECK-LABEL: 1:
80
+ ; CHECK-NEXT: store i64 1, ptr @__profc_fooint, align 8
81
+ ; CHECK-NEXT: br label %2
82
+
83
+ ; CHECK-LABEL: 2:
84
+ ; CHECK-NEXT: ret void
85
+ define void @fooint () {
86
+ call void @llvm.instrprof.increment (ptr @__profn_fooint , i64 0 , i32 1 , i32 0 )
87
+ ret void
88
+ }
89
+
90
+ ; CHECK-LABEL: define i32 @barint
91
+ ; CHECK-LABEL: entry:
92
+ ; CHECK-NEXT: %retval = alloca i32, align 4
93
+ ; CHECK-NEXT: %cond.addr = alloca i32, align 4
94
+ ; CHECK-NEXT: store i32 %cond, ptr %cond.addr, align 4
95
+ ; CHECK-NEXT: %pgocount = load i64, ptr @__profc_barint, align 8
96
+ ; CHECK-NEXT: %pgocount.ifzero = icmp eq i64 %pgocount, 0
97
+ ; CHECK-NEXT: br i1 %pgocount.ifzero, label %0, label %1
98
+
99
+ ; CHECK-LABEL: 0: ; preds = %entry
100
+ ; CHECK-NEXT: store i64 1, ptr @__profc_barint, align 8
101
+ ; CHECK-NEXT: br label %1
102
+
103
+ ; CHECK-LABEL: 1: ; preds = %entry, %0
104
+ ; CHECK-NEXT: %2 = load i32, ptr %cond.addr, align 4
105
+ ; CHECK-NEXT: %cmp = icmp slt i32 %2, 0
106
+ ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.end
107
+
108
+ ; CHECK-LABEL: if.then: ; preds = %1
109
+ ; CHECK-NEXT: %pgocount1 = load i64, ptr getelementptr inbounds ([3 x i64], ptr @__profc_barint, i32 0, i32 1), align 8
110
+ ; CHECK-NEXT: %pgocount.ifzero2 = icmp eq i64 %pgocount1, 0
111
+ ; CHECK-NEXT: br i1 %pgocount.ifzero2, label %3, label %4
112
+
113
+ ; CHECK-LABEL: 3: ; preds = %if.then
114
+ ; CHECK-NEXT: store i64 1, ptr getelementptr inbounds ([3 x i64], ptr @__profc_barint, i32 0, i32 1), align 8
115
+ ; CHECK-NEXT: br label %4
116
+ ;
117
+ ; CHECK-LABEL: 4: ; preds = %if.then, %3
118
+ ; CHECK-NEXT: store i32 -1, ptr %retval, align 4
119
+ ; CHECK-NEXT: br label %return
120
+ ;
121
+ ; CHECK-LABEL: if.end: ; preds = %1
122
+ ; CHECK-NEXT: %pgocount3 = load i64, ptr getelementptr inbounds ([3 x i64], ptr @__profc_barint, i32 0, i32 2), align 8
123
+ ; CHECK-NEXT: %pgocount.ifzero4 = icmp eq i64 %pgocount3, 0
124
+ ; CHECK-NEXT: br i1 %pgocount.ifzero4, label %5, label %6
125
+ ;
126
+ ; CHECK-LABEL: 5: ; preds = %if.end
127
+ ; CHECK-NEXT: store i64 1, ptr getelementptr inbounds ([3 x i64], ptr @__profc_barint, i32 0, i32 2), align 8
128
+ ; CHECK-NEXT: br label %6
129
+ ;
130
+ ; CHECK-LABEL: 6: ; preds = %if.end, %5
131
+ ; CHECK-NEXT: store i32 0, ptr %retval, align 4
132
+ ; CHECK-NEXT: br label %return
133
+ ;
134
+ ; CHECK-LABEL: return: ; preds = %6, %4
135
+ ; CHECK-NEXT: %7 = load i32, ptr %retval, align 4
136
+ ; CHECK-NEXT: ret i32 %7
137
+ define i32 @barint (i32 %cond ) #0 {
138
+ entry:
139
+ %retval = alloca i32 , align 4
140
+ %cond.addr = alloca i32 , align 4
141
+ store i32 %cond , ptr %cond.addr , align 4
142
+ call void @llvm.instrprof.increment (ptr @__profn_barint , i64 0 , i32 3 , i32 0 )
143
+ %0 = load i32 , ptr %cond.addr , align 4
144
+ %cmp = icmp slt i32 %0 , 0
145
+ br i1 %cmp , label %if.then , label %if.end
146
+
147
+ if.then: ; preds = %entry
148
+ call void @llvm.instrprof.increment (ptr @__profn_barint , i64 0 , i32 3 , i32 1 )
149
+ store i32 -1 , ptr %retval , align 4
150
+ br label %return
151
+
152
+ if.end: ; preds = %entry
153
+ call void @llvm.instrprof.increment (ptr @__profn_barint , i64 0 , i32 3 , i32 2 )
154
+ store i32 0 , ptr %retval , align 4
155
+ br label %return
156
+
157
+ return: ; preds = %if.end, %if.then
158
+ %1 = load i32 , ptr %retval , align 4
159
+ ret i32 %1
160
+ }
0 commit comments