mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
45 lines
1.4 KiB
Plaintext
45 lines
1.4 KiB
Plaintext
// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s
|
|
|
|
// REQUIRES: rdar60068448
|
|
// FIXME Reenable the !invariant.load metadata after debugging miscompiles...
|
|
// <rdar://60068448> Teach IRGen to emit !invariant metadata for 'let' variables
|
|
|
|
sil_stage lowered
|
|
|
|
import Builtin
|
|
|
|
struct X {
|
|
var y: Builtin.Int32
|
|
var z: Builtin.Int32
|
|
}
|
|
|
|
class C {
|
|
@_hasStorage @_hasInitialValue final let prop: Builtin.Int32 { get }
|
|
}
|
|
|
|
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @invariant_load
|
|
sil [ossa] @invariant_load : $@convention(thin) (Builtin.RawPointer) -> () {
|
|
entry(%p : $Builtin.RawPointer):
|
|
%a = pointer_to_address %p : $Builtin.RawPointer to [invariant] $*X
|
|
// CHECK: load i32, {{.*}} !invariant.load
|
|
// CHECK: load i32, {{.*}} !invariant.load
|
|
%x = load [trivial] %a : $*X
|
|
%yp = struct_element_addr %a : $*X, #X.y
|
|
// CHECK: load i32, {{.*}} !invariant.load
|
|
%y = load [trivial] %yp : $*Builtin.Int32
|
|
%zp = struct_element_addr %a : $*X, #X.z
|
|
// CHECK: load i32, {{.*}} !invariant.load
|
|
%z = load [trivial] %zp : $*Builtin.Int32
|
|
return undef : $()
|
|
}
|
|
|
|
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @testLetProp
|
|
sil @testLetProp : $@convention(thin) (@guaranteed C) -> Builtin.Int32 {
|
|
bb0(%0 : $C):
|
|
%propAdr = ref_element_addr %0 : $C, #C.prop
|
|
// CHECK: load i32, {{.*}} !invariant.load
|
|
%val = load %propAdr : $*Builtin.Int32
|
|
return %val : $Builtin.Int32
|
|
}
|
|
|