File: debuginfo_canonicalizer.sil

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (138 lines) | stat: -rw-r--r-- 4,867 bytes parent folder | download
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
// RUN: %target-sil-opt -sil-onone-debuginfo-canonicalizer -enable-sil-verify-all %s 2>&1 | %FileCheck %s

sil_stage canonical

import Builtin

struct Int64 {
  var value: Builtin.Int64
}

class Klass {
  var value: Int64
}

// Since we only take the last debug_value associated with a SILDebugVariable,
// we only should see someVar for debug_value %2.
//
// CHECK-LABEL: sil @yieldOnceCoroutine : $@yield_once @convention(method) (@guaranteed Klass) -> @yields @inout Int64 {
// CHECK: bb0([[ARG:%.*]] : $Klass):
// CHECK-NEXT: debug_value [moveable_value_debuginfo] [[ARG]] : $Klass, let, name "someVar"
// CHECK-NEXT: [[ADDR:%.*]] = ref_element_addr [[ARG]] : $Klass
// CHECK-NEXT: yield [[ADDR]] : $*Int64, resume bb1, unwind bb2
//
// CHECK: bb1:
// CHECK-NEXT: debug_value [moveable_value_debuginfo] [[ARG]] : $Klass, let, name "someVar"
// CHECK-NEXT: tuple
// CHECK-NEXT: return
//
// CHECK: bb2:
// CHECK-NEXT: debug_value [moveable_value_debuginfo] [[ARG]] : $Klass, let, name "someVar"
// CHECK-NEXT: unwind
// CHECK: } // end sil function 'yieldOnceCoroutine'
sil @yieldOnceCoroutine : $@yield_once @convention(method) (@guaranteed Klass) -> @yields @inout Int64 {
bb0(%0 : $Klass):
  debug_value [moveable_value_debuginfo] %0 : $Klass, let, name "someVar"
  %1 = ref_element_addr %0 : $Klass, #Klass.value
  yield %1 : $*Int64, resume bb1, unwind bb2

bb1:
  %9999 = tuple()
  return %9999 : $()

bb2:
  unwind
}

// CHECK-LABEL: sil @testSimple : $@convention(thin) (@guaranteed Klass) -> () {
// CHECK: bb0([[ARG:%.*]] :
// CHECK:   debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK:   begin_apply
// CHECK-NEXT:   debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK:   end_apply
// CHECK-NEXT:   debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK: } // end sil function 'testSimple'
sil @testSimple : $@convention(thin) (@guaranteed Klass) -> () {
bb0(%0 : $Klass):
  debug_value [moveable_value_debuginfo] %0 : $Klass, let, name "arg"
  %f = function_ref @yieldOnceCoroutine : $@yield_once @convention(method) (@guaranteed Klass) -> @yields @inout Int64
  (%3, %4) = begin_apply %f(%0) : $@yield_once @convention(method) (@guaranteed Klass) -> @yields @inout Int64
  %9999 = tuple()
  end_apply %4
  return %9999 : $()
}

// CHECK-LABEL: sil @testDiamond : $@convention(thin) (@guaranteed Klass) -> () {
// CHECK: bb0([[ARG:%.*]] :
// CHECK:   debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK:   begin_apply
// CHECK-NEXT: debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK-NEXT:   cond_br undef, [[BB_LHS:bb[0-9]+]], [[BB_RHS:bb[0-9]+]]
//
// CHECK: [[BB_LHS]]:
// CHECK:   end_apply
// CHECK-NEXT:   debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK-NEXT:   br [[BB_CONT:bb[0-9]+]]
//
// CHECK: [[BB_RHS]]:
// CHECK:   abort_apply
// CHECK-NEXT:   debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK: } // end sil function 'testDiamond'
sil @testDiamond : $@convention(thin) (@guaranteed Klass) -> () {
bb0(%0 : $Klass):
  debug_value [moveable_value_debuginfo] %0 : $Klass, let, name "arg"
  %f = function_ref @yieldOnceCoroutine : $@yield_once @convention(method) (@guaranteed Klass) -> @yields @inout Int64
  (%3, %token) = begin_apply %f(%0) : $@yield_once @convention(method) (@guaranteed Klass) -> @yields @inout Int64
  cond_br undef, bb1, bb2

bb1:
  end_apply %token
  br bb3

bb2:
  abort_apply %token
  br bb3

bb3:
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @testUndefDiamond : $@convention(thin) (@guaranteed Klass) -> () {
// CHECK: bb0([[ARG:%.*]] :
// CHECK:   debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK:   begin_apply
// CHECK-NEXT: debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK-NEXT:   cond_br undef, [[BB_LHS:bb[0-9]+]], [[BB_RHS:bb[0-9]+]]
//
// CHECK: [[BB_LHS]]:
// CHECK:   end_apply
// CHECK-NEXT:   debug_value [moveable_value_debuginfo] [[ARG]]
// CHECK-NEXT:   br [[BB_CONT:bb[0-9]+]]
//
// CHECK: [[BB_RHS]]:
// CHECK-NEXT:   debug_value [moveable_value_debuginfo] undef
// CHECK-NEXT:   abort_apply
// CHECK-NEXT:   debug_value [moveable_value_debuginfo] undef
// CHECK-NEXT:   br [[BB_CONT]]
// CHECK: } // end sil function 'testUndefDiamond'
sil @testUndefDiamond : $@convention(thin) (@guaranteed Klass) -> () {
bb0(%0 : $Klass):
  debug_value [moveable_value_debuginfo] %0 : $Klass, let, (name "arg", loc "debuginfo_canonicalizer.sil":121:3)
  %f = function_ref @yieldOnceCoroutine : $@yield_once @convention(method) (@guaranteed Klass) -> @yields @inout Int64
  (%3, %token) = begin_apply %f(%0) : $@yield_once @convention(method) (@guaranteed Klass) -> @yields @inout Int64
  cond_br undef, bb1, bb2

bb1:
  end_apply %token
  br bb3

bb2:
  debug_value [moveable_value_debuginfo] undef : $Klass, let, (name "arg", loc "debuginfo_canonicalizer.sil":121:3)
  abort_apply %token
  br bb3

bb3:
  %9999 = tuple()
  return %9999 : $()
}