mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Don't emit shadow copies for anonymous variables.
Switch statements generate at least one anonymous match variable per case, which consumes both a lot of stack space and an explosion of range extension depencies due to the way case statements are scoped. rdar://problem/34326355
This commit is contained in:
@@ -31,27 +31,28 @@ public func mangle(s: [UnicodeScalar]) -> [UnicodeScalar] {
|
||||
|
||||
// The patterns in the first case statement each define an anonymous variable,
|
||||
// which shares the storage with the expression in the switch statement. Make
|
||||
// sure we only emit live range extensions for the storage once per basic block.
|
||||
// sure we emit a dbg.value once per basic block.
|
||||
|
||||
// CHECK: define {{.*}}@_T011patternvars6mangleSayAA13UnicodeScalarVGAE1s_tFA2DcfU_
|
||||
// CHECK: call void asm sideeffect "", "r"
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
// CHECK: br {{.*}}label
|
||||
// CHECK: call void asm sideeffect "", "r"
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
// CHECK: br {{.*}}label
|
||||
// CHECK: call void asm sideeffect "", "r"
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
// CHECK: br {{.*}}label
|
||||
// CHECK: call void asm sideeffect "", "r"
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
// CHECK: br {{.*}}label
|
||||
// CHECK: call void asm sideeffect "", "r"
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
// CHECK: br {{.*}}label
|
||||
// CHECK: call void asm sideeffect "", "r"
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
// CHECK: br {{.*}}label
|
||||
// CHECK: call void asm sideeffect "", "r"
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
// CHECK: br {{.*}}label
|
||||
// CHECK: %[[VAL:[0-9]+]] = call swiftcc i32 @_T011patternvars13UnicodeScalarV5values6UInt32Vvg(i32 %0)
|
||||
// CHECK-NEXT: call void @llvm.dbg.value(metadata i32 %[[VAL]]
|
||||
// CHECK: ; <label>
|
||||
// CHECK: call void @llvm.dbg.value(metadata i32 %[[VAL]]
|
||||
// CHECK-NOT: call void @llvm.dbg.value
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
|
||||
// CHECK: ; <label>
|
||||
// CHECK: call void @llvm.dbg.value(metadata i32 %[[VAL]]
|
||||
// CHECK-NOT: call void @llvm.dbg.value
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
|
||||
// CHECK: ; <label>
|
||||
// CHECK: call void @llvm.dbg.value(metadata i32 %[[VAL]]
|
||||
// CHECK-NOT: call void @llvm.dbg.value
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
|
||||
// CHECK: ; <label>
|
||||
// CHECK: call void @llvm.dbg.value(metadata i32 %[[VAL]]
|
||||
// CHECK-NOT: call void @llvm.dbg.value
|
||||
// CHECK-NOT: call void asm sideeffect "", "r"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user