File: rdar39146527.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 (93 lines) | stat: -rw-r--r-- 4,031 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
// RUN: %target-swift-frontend -emit-sil -O -sil-verify-all %s | %FileCheck %s
// RUN: %target-swift-frontend -emit-ir -O -sil-verify-all -profile-generate %s

// Test contains a reference to _StringObject._object, which is not defined on
// some architectures.
// REQUIRES: CPU=x86_64

import Builtin
import Swift

enum Name {
  case short(Character, allowingJoined: Bool)
  case longWithSingleDash(String)
  case long(String)
}

sil @bar : $@convention(thin) () -> @owned String
sil @baz : $@convention(thin) (Builtin.Int64) -> @owned Name

// rdar://39146527 – Ensure that we can thread jump from bb4 to bb7 without
// breaking the profiling instructions.

sil @foo : $@convention(thin) (Name, String, Builtin.Int64, Builtin.Int64) -> String {
bb0(%0 : $Name, %1 : $String, %2 : $Builtin.Int64, %3 : $Builtin.Int64):
  br bb2(%2 : $Builtin.Int64)

bb1:
  // CHECK: increment_profiler_counter 0, "xxxx.swift:$sSK4TestAA4NameO7ElementRtzrlE09preferredC0ACSgvgAGyKXEfu_", num_counters 1, hash 0
  increment_profiler_counter 0, "xxxx.swift:$sSK4TestAA4NameO7ElementRtzrlE09preferredC0ACSgvgAGyKXEfu_", num_counters 1, hash 0

  %6 = function_ref @bar : $@convention(thin) () -> @owned String
  %7 = apply %6() : $@convention(thin) () -> @owned String
  br bb11(%7 : $String)

bb2(%9 : $Builtin.Int64):

  %10 = function_ref @baz : $@convention(thin) (Builtin.Int64) -> @owned Name
  %11 = apply %10(%9) : $@convention(thin) (Builtin.Int64) -> @owned Name
  switch_enum %11 : $Name, case #Name.short!enumelt: bb3, case #Name.longWithSingleDash!enumelt: bb4, case #Name.long!enumelt: bb5

bb3(%13 : $(Character, allowingJoined: Bool)):
  release_value %11 : $Name

  // CHECK: increment_profiler_counter 1, "$s4Test4NameO4caseAC4CaseOvg", num_counters 4, hash 0
  increment_profiler_counter 1, "$s4Test4NameO4caseAC4CaseOvg", num_counters 4, hash 0
  %16 = builtin "cmp_eq_Int64"(%3 : $Builtin.Int64, %2 : $Builtin.Int64) : $Builtin.Int1
  cond_br %16, bb1, bb6

bb4(%18 : $String):
  // CHECK: increment_profiler_counter 2, "$s4Test4NameO4caseAC4CaseOvg", num_counters 4, hash 0
  increment_profiler_counter 2, "$s4Test4NameO4caseAC4CaseOvg", num_counters 4, hash 0
  br bb7(%11 : $Name)

bb5(%21 : $String):
  // CHECK: increment_profiler_counter 3, "$s4Test4NameO4caseAC4CaseOvg", num_counters 4, hash 0
  increment_profiler_counter 3, "$s4Test4NameO4caseAC4CaseOvg", num_counters 4, hash 0
  br bb7(%0 : $Name)

bb6:
  br bb2(%3 : $Builtin.Int64)

bb7(%25 : $Name):
  // CHECK: increment_profiler_counter 0, "$s4Test4NameO11valueStringSSvg", num_counters 4, hash 0
  increment_profiler_counter 0, "$s4Test4NameO11valueStringSSvg", num_counters 4, hash 0
  switch_enum %25 : $Name, case #Name.long!enumelt: bb8, case #Name.short!enumelt: bb9, case #Name.longWithSingleDash!enumelt: bb10

bb8(%28 : $String):
  // CHECK: increment_profiler_counter 1, "$s4Test4NameO11valueStringSSvg", num_counters 4, hash 0
  increment_profiler_counter 1, "$s4Test4NameO11valueStringSSvg", num_counters 4, hash 0
  br bb11(%28 : $String)

bb9(%31 : $(Character, allowingJoined: Bool)):
  %32 = tuple_extract %31 : $(Character, allowingJoined: Bool), 0
  %33 = struct_extract %32 : $Character, #Character._str
  %34 = struct_extract %33 : $String, #String._guts
  %35 = struct_extract %34 : $_StringGuts, #_StringGuts._object
  %36 = struct_extract %35 : $_StringObject, #_StringObject._object
  strong_retain %36 : $Builtin.BridgeObject
  // CHECK: increment_profiler_counter 2, "$s4Test4NameO11valueStringSSvg", num_counters 4, hash 0
  increment_profiler_counter 2, "$s4Test4NameO11valueStringSSvg", num_counters 4, hash 0
  %40 = struct_extract %32 : $Character, #Character._str
  release_value %25 : $Name
  br bb11(%40 : $String)

bb10(%43 : $String):
  // CHECK: increment_profiler_counter 3, "$s4Test4NameO11valueStringSSvg", num_counters 4, hash 0
  increment_profiler_counter 3, "$s4Test4NameO11valueStringSSvg", num_counters 4, hash 0
  br bb11(%43 : $String)

bb11(%46 : $String):
  release_value %1 : $String
  return %46 : $String
}