mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
This commit adds a DebugVariable field that is shared by - AllocBoxInst - AllocStackInst - DebugValueInst - DebugValueAddrInst Currently DebugVariable only holds the Swift argument number. This allows us to retire several expensive heuristics in IRGen that attempted to identify which local variables actually where arguments and recover their relative order. Memory footprint notes: This commit adds a 4-byte field to 4 SILInstructin subclasses. This was offset by8ab1e2dd50which removed 20 bytes from *every* SILInstruction. Caveats: This commit surfaces a known bug in FunctionSigantureOpts, tracked in rdar://problem/23727705 — debug info for exploded function arguments cannot be expressed until this is fixed. This reappliesed2b16dc5awith a bugfix for generic function arrguments and an additional testcase. <rdar://problem/21185379&22705926>
22 lines
997 B
Swift
22 lines
997 B
Swift
// RUN: %target-swift-frontend %s -emit-ir -g -o - | FileCheck %s
|
|
import StdlibUnittest
|
|
func foo<T>(x: T) -> () {
|
|
// CHECK: define {{.*}} @_TF11generic_arg3foourFxT_
|
|
// CHECK: %[[T:.*]] = alloca %swift.type*
|
|
// CHECK: %[[X:.*]] = alloca %swift.opaque*
|
|
// CHECK: store %swift.type* %T, %swift.type** %[[T]],
|
|
// CHECK: call void @llvm.dbg.declare(metadata %swift.type** %[[T]],
|
|
// CHECK-SAME: metadata ![[T1:.*]], metadata ![[EMPTY:.*]])
|
|
// CHECK: store %swift.opaque* %0, %swift.opaque** %[[X]],
|
|
// CHECK: call void @llvm.dbg.declare(metadata %swift.opaque** %[[X]],
|
|
// CHECK-SAME: metadata ![[X1:.*]], metadata ![[EMPTY]])
|
|
// CHECK: ![[T1]] = !DILocalVariable(name: "$swift.type.T",
|
|
// CHECK-SAME: flags: DIFlagArtificial)
|
|
// CHECK: ![[EMPTY]] = !DIExpression()
|
|
// CHECK: ![[X1]] = !DILocalVariable(name: "x", arg: 1,
|
|
// CHECK-SAME: line: 3, type: !"_TtQq_F11generic_arg3foourFxT_")
|
|
_blackHole(x)
|
|
}
|
|
|
|
foo(42)
|