- Notifications
You must be signed in to change notification settings - Fork 10.5k
/
Copy pathcoverage_while.swift
141 lines (121 loc) · 5.01 KB
/
coverage_while.swift
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
141
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -suppress-warnings -profile-generate -profile-coverage-mapping -emit-sorted-sil -emit-sil -module-name coverage_while %s | %FileCheck %s
// RUN: %target-swift-frontend -profile-generate -profile-coverage-mapping -emit-ir %s
// CHECK-LABEL: // coverage_while.eoo() -> ()
func eoo(){
// CHECK: increment_profiler_counter
varx:Int32=0
repeat{
// CHECK: increment_profiler_counter
// CHECK: sadd_with_overflow_Int32
x +=1
// CHECK: cmp_slt_Int32
}while x <10
}
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_while.foo
func foo()->Int32{
varx:Int32=0
// CHECK: [[@LINE+1]]:9 -> [[@LINE+1]]:17 : (0 + 1)
while(x <10){
x +=1
}
// CHECK: [[@LINE+1]]:9 -> [[@LINE+1]]:22 : (0 + 2)
while((x -1)>0){
x -=1
if(x %2==0){continue}
}
// CHECK: [[@LINE+1]]:9 -> [[@LINE+1]]:18 : ((0 + 4) - 5)
while(x <100){
x +=1
if(x ==10){break}
}
// CHECK: [[@LINE+1]]:9 -> [[@LINE+1]]:18 : ((0 + 6) - 9)
while(x <100){
x +=1
while(true){break}
if(x %2==0){continue}
// CHECK: [[@LINE-1]]:33 -> [[@LINE+2]]:4 : (6 - 8)
if(x >30){break}
}
// CHECK: [[@LINE+1]]:10 -> [[@LINE+4]]:4 : 10
repeat{
x -=1
// CHECK: [[@LINE+1]]:11 -> [[@LINE+1]]:16 : 10
}while x >0
// CHECK: [[@LINE+1]]:9 -> [[@LINE+1]]:18 : ((0 + 11) - 12)
while(x <100){
if(x ==40){ // CHECK: [[@LINE]]:18 -> [[@LINE+2]]:6 : 12
return x
}
x +=1
}
vary:Int32?=2
// CHECK: [[@LINE+1]]:9 -> [[@LINE+1]]:15 : ((0 + 13) - 12)
while x >30,let _ = y {
y =nil
}
// TODO: [[@LINE+1]]:9 -> [[@LINE+1]]:18 : ((0 + 14) - 12)
whilelet _ = y {
}
// CHECK: [[@LINE-1]]:4 -> [[@LINE+1]]:11 : (0 - 12)
return x
}
// rdar://problem/24572268
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_while.goo
func goo(){
varx:Int32=0
repeat{ // CHECK-DAG: [[@LINE]]:10 -> [[@LINE+2]]:4 : [[RWS1:[0-9]+]]
x +=1
}while x <10 // CHECK-DAG: [[@LINE]]:11 -> [[@LINE]]:17 : [[RWS1]]
repeat{ // CHECK-DAG: [[@LINE]]:10 -> [[@LINE+5]]:4 : [[RWS2:[0-9]+]]
x +=1
if(x %2==0){ // CHECK-DAG: [[@LINE]]:21 -> [[@LINE+2]]:6 : [[CONT1:[0-9]+]]
continue
} // CHECK-DAG: [[@LINE]]:6 -> [[@LINE+1]]:4 : ([[RWS2]] - [[CONT1]])
}while x <20 // CHECK-DAG: [[@LINE]]:11 -> [[@LINE]]:17 : [[RWS2]]
repeat{ // CHECK-DAG: [[@LINE]]:10 -> [[@LINE+5]]:4 : [[RWS3:[0-9]+]]
x +=1
if(x %2==0){ // CHECK-DAG: [[@LINE]]:21 -> [[@LINE+2]]:6 : [[BRK1:[0-9]+]]
break
} // CHECK-DAG: [[@LINE]]:6 -> [[@LINE+1]]:4 : ([[RWS3]] - [[BRK1]])
}while x <30 // CHECK-DAG: [[@LINE]]:11 -> [[@LINE]]:17 : ([[RWS3]] - [[BRK1]])
repeat{ // CHECK-DAG: [[@LINE]]:10 -> [[@LINE+10]]:4 : [[RWS4:[0-9]+]]
x +=1
if(x %2==0){ // CHECK-DAG: [[@LINE]]:21 -> [[@LINE+2]]:6 : [[CONT2:[0-9]+]]
continue
} // CHECK-DAG: [[@LINE]]:6 -> [[@LINE+6]]:4 : ([[RWS4]] - [[CONT2]])
x +=1
if(x %7==0){ // CHECK-DAG: [[@LINE]]:21 -> [[@LINE+2]]:6 : [[BRK2:[0-9]+]]
break
} // CHECK-DAG: [[@LINE]]:6 -> [[@LINE+2]]:4 : (([[RWS4]] - [[CONT2]]) - [[BRK2]])
x +=1
}while x <40 // CHECK-DAG: [[@LINE]]:11 -> [[@LINE]]:17 : ([[RWS4]] - [[BRK2]])
repeat{ // CHECK-DAG: [[@LINE]]:10 -> [[@LINE+1]]:4 : [[RWS5:[0-9]+]]
}whilefalse // CHECK-DAG: [[@LINE]]:11 -> [[@LINE]]:16 : [[RWS5]]
repeat{ // CHECK-DAG: [[@LINE]]:10 -> [[@LINE+4]]:4 : [[RWS6:[0-9]+]]
repeat{ // CHECK-DAG: [[@LINE]]:12 -> [[@LINE+2]]:6 : [[RWS7:[0-9]+]]
return
}whilefalse // CHECK-DAG: [[@LINE]]:13 -> [[@LINE]]:18 : zero
}whilefalse // CHECK-DAG: [[@LINE]]:11 -> [[@LINE]]:16 : ([[RWS6]] - [[RWS7]])
repeat{ // CHECK-DAG: [[@LINE]]:10 -> [[@LINE+6]]:4 : [[RWS8:[0-9]+]]
repeat{ // CHECK-DAG: [[@LINE]]:12 -> [[@LINE+4]]:6 : [[RWS9:[0-9]+]]
if(true){ // CHECK-DAG: [[@LINE]]:17 -> [[@LINE+2]]:8 : [[RET1:[0-9]+]]
return
}
}whilefalse // CHECK-DAG: [[@LINE]]:13 -> [[@LINE]]:18 : ([[RWS9]] - [[RET1]])
}whilefalse // CHECK-DAG: [[@LINE]]:11 -> [[@LINE]]:16 : ([[RWS8]] - [[RET1]])
}
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_while.hoo
func hoo(){ // CHECK-NEXT: [[@LINE]]:12 -> [[@LINE+5]]:2 : 0
vari:Int=0
while(i <10){ // CHECK-NEXT: [[@LINE]]:9 -> [[@LINE]]:17 : (0 + 1)
i +=1 // CHECK-NEXT: [[@LINE-1]]:18 -> [[@LINE+1]]:4 : 1
} // CHECK-NEXT: [[@LINE]]:4 -> [[@LINE+1]]:2 : 0
}
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_while.ioo
func ioo(){ // CHECK-NEXT: [[@LINE]]:12 -> [[@LINE+6]]:2 : 0
repeat{ // CHECK-NEXT: [[@LINE]]:10 -> [[@LINE+3]]:4 : 1
break // CHECK-NEXT: [[@LINE+1]]:5 -> [[@LINE+1]]:10 : zero
break // FIXME: This next region seems wrong, we exit the loop the same number of times we enter (rdar://118472537).
}whiletrue // CHECK-NEXT: [[@LINE]]:4 -> [[@LINE+2]]:2 : (0 - 1)
// CHECK-NEXT: [[@LINE-1]]:11 -> [[@LINE-1]]:15 : zero
} // CHECK-NEXT: }