mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[IRGen] Upstream test changes for pointer authenticated value witness tables
The original change was done by Arnold Schwaighofer.
This commit is contained in:
@@ -26,7 +26,8 @@ entry(%x : $*T):
|
||||
// CHECK: [[ADDR:%.*]] = extractvalue { ptr, ptr } [[BOX_PAIR]], 1
|
||||
%b = alloc_existential_box $Error, $T
|
||||
%p = project_existential_box $T in %b : $Error
|
||||
// CHECK: [[INITWITHTAKE:%.*]] = load ptr, ptr %5
|
||||
// CHECK: load ptr, ptr
|
||||
// CHECK: [[INITWITHTAKE:%.*]] = load ptr, ptr
|
||||
// CHECK: call ptr [[INITWITHTAKE]](ptr noalias [[ADDR]], ptr noalias %0, ptr %T)
|
||||
copy_addr [take] %x to [init] %p : $*T
|
||||
// CHECK: ret ptr [[BOX]]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// RUN: %target-swift-frontend -primary-file %s -emit-ir | %FileCheck %s
|
||||
|
||||
// CHECK: @"$s10empty_enum6JamaisOMf" =
|
||||
// CHECK-SAME: {{@"\$sytWV"|ptr @"\$s10empty_enum6JamaisOWV"}}
|
||||
// CHECK-SAME: {{@"\$sytWV(.ptrauth)?"|ptr @"\$s10empty_enum6JamaisOWV"}}
|
||||
|
||||
enum Jamais {}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %target-swift-frontend -disable-type-layout %s -gnone -emit-ir -I %S/Inputs | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize
|
||||
// RUN: %target-swift-frontend -disable-type-layout %s -gnone -emit-ir -I %S/Inputs | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize --check-prefix=CHECK-%target-cpu
|
||||
|
||||
import Builtin
|
||||
|
||||
@@ -432,6 +432,9 @@ entry(%a : $*EitherOr<T, C>, %b : $*EitherOr<T, C>):
|
||||
// CHECK-NEXT: br i1 [[T_OK]],
|
||||
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[T_CHECKED]]
|
||||
// CHECK-NEXT: [[VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VALUE_WITNESSES:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK-NEXT: [[LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[VALUE_WITNESSES]], i32 8
|
||||
// CHECK-NEXT: store ptr [[LAYOUT]], {{.*}} [[BUF0]]
|
||||
|
||||
@@ -443,6 +446,9 @@ entry(%a : $*EitherOr<T, C>, %b : $*EitherOr<T, C>):
|
||||
// CHECK-NEXT: br i1 [[U_OK]],
|
||||
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[U_CHECKED]]
|
||||
// CHECK-NEXT: [[VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VALUE_WITNESSES:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK-NEXT: [[LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[VALUE_WITNESSES]], i32 8
|
||||
// CHECK-NEXT: store ptr [[LAYOUT]], {{.*}} [[BUF1]]
|
||||
|
||||
|
||||
@@ -79,6 +79,9 @@ public func functionWithResilientEnum(_ m: Medium) -> Medium {
|
||||
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// This is copying the +0 argument to be used as a return value.
|
||||
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
|
||||
// CHECK-NEXT: [[WITNESS_FN:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
|
||||
@@ -97,6 +100,9 @@ public func functionWithIndirectResilientEnum(_ ia: IndirectApproach) -> Indirec
|
||||
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// This is copying the +0 argument into the return slot.
|
||||
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
|
||||
// CHECK-NEXT: [[WITNESS_FN:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
|
||||
@@ -115,6 +121,9 @@ public func constructResilientEnumNoPayload() -> Medium {
|
||||
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
|
||||
// CHECK-16-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 16
|
||||
// CHECK-32-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 14
|
||||
@@ -134,6 +143,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
|
||||
// CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK-NEXT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
|
||||
// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
|
||||
// CHECK-NEXT: [[WITNESS:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
|
||||
@@ -146,6 +158,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
|
||||
// CHECK-NEXT: [[METADATA2:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK-NEXT: [[VWT_ADDR2:%.*]] = getelementptr inbounds ptr, ptr [[METADATA2]], [[INT]] -1
|
||||
// CHECK-NEXT: [[VWT2:%.*]] = load ptr, ptr [[VWT_ADDR2]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR2]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT2:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
|
||||
// CHECK-16-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT2]], i32 16
|
||||
// CHECK-32-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT2]], i32 14
|
||||
@@ -165,6 +180,9 @@ public func constructResilientEnumPayload(_ s: Size) -> Medium {
|
||||
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
|
||||
// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK: [[WITNESS_FOR_SIZE:%size]] = load [[INT]], ptr [[WITNESS_ADDR]]
|
||||
@@ -228,14 +246,18 @@ public func resilientSwitchTest(_ m: Medium) -> Int {
|
||||
|
||||
public func reabstraction<T>(_ f: (Medium) -> T) {}
|
||||
|
||||
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15enum_resilience25resilientEnumPartialApplyyySi0c1_A06MediumOXEF"(ptr %0, ptr %1)
|
||||
public func resilientEnumPartialApply(_ f: (Medium) -> Int) {
|
||||
// CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15enum_resilience25resilientEnumPartialApplyyySi0c1_A06MediumOXEF"(ptr %0, ptr %1)
|
||||
// CHECK-64: [[STACKALLOC:%.*]] = alloca i8
|
||||
// CHECK-64: call swiftcc void @"$s15enum_resilience13reabstractionyyx010resilient_A06MediumOXElF"(ptr @"$s14resilient_enum6MediumOSiIgnd_ACSiIegnr_TRTA{{(\.ptrauth)?}}", ptr [[CONTEXT:%.*]], ptr @"$sSiN")
|
||||
// CHECK-64: ret void
|
||||
|
||||
// CHECK: [[STACKALLOC:%.*]] = alloca i8
|
||||
// CHECK: call swiftcc void @"$s15enum_resilience13reabstractionyyx010resilient_A06MediumOXElF"(ptr @"$s14resilient_enum6MediumOSiIgnd_ACSiIegnr_TRTA{{(\.ptrauth)?}}", ptr [[CONTEXT:%.*]], ptr @"$sSiN")
|
||||
// CHECK-32-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15enum_resilience25resilientEnumPartialApplyyySi0c1_A06MediumOXEF"(ptr %0, ptr %1)
|
||||
// CHECK-32: [[STACKALLOC:%.*]] = alloca i8
|
||||
// CHECK-32: call swiftcc void @"$s15enum_resilience13reabstractionyyx010resilient_A06MediumOXElF"(ptr @"$s14resilient_enum6MediumOSiIgnd_ACSiIegnr_TRTA", ptr [[CONTEXT:%.*]], ptr @"$sSiN")
|
||||
// CHECK-32: ret void
|
||||
public func resilientEnumPartialApply(_ f: (Medium) -> Int) {
|
||||
reabstraction(f)
|
||||
|
||||
// CHECK: ret void
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define internal swiftcc void @"$s14resilient_enum6MediumOSiIgnd_ACSiIegnr_TRTA"(ptr noalias nocapture sret({{.*}}) %0, ptr noalias %1, ptr swiftself %2)
|
||||
@@ -268,7 +290,7 @@ public func getResilientEnumType() -> Any.Type {
|
||||
// CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont
|
||||
|
||||
// CHECK: cacheIsNull:
|
||||
// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s15enum_resilience24EnumWithResilientPayloadOMn")
|
||||
// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s15enum_resilience24EnumWithResilientPayloadOMn{{(\.ptrauth.*)?}}")
|
||||
// CHECK-NEXT: [[RESPONSE_METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0
|
||||
// CHECK-NEXT: [[RESPONSE_STATE:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1
|
||||
// CHECK-NEXT: br label %cont
|
||||
@@ -307,9 +329,12 @@ public func constructExhaustiveWithResilientMembers() -> SimpleShape {
|
||||
return .KleinBottle
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i{{64|32}}, i8 } @"$s15enum_resilience19constructFullyFixed010resilient_A00dE6LayoutOyF"()
|
||||
// CHECK: ret { [[INT]], i8 } { [[INT]] 0, i8 1 }
|
||||
// CHECK-NEXT: {{^}$}}
|
||||
// CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i{{64|32}}, i8 } @"$s15enum_resilience19constructFullyFixed010resilient_A00dE6LayoutOyF"()
|
||||
// CHECK-64: ret { [[INT]], i8 } { [[INT]] 0, i8 1 }
|
||||
// CHECK-64-NEXT: {{^}$}}
|
||||
// CHECK-32-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i{{64|32}}, i8 } @"$s15enum_resilience19constructFullyFixed010resilient_A00dE6LayoutOyF"()
|
||||
// CHECK-32: ret { [[INT]], i8 } { [[INT]] 0, i8 1 }
|
||||
// CHECK-32-NEXT: {{^}$}}
|
||||
public func constructFullyFixed() -> FullyFixedLayout {
|
||||
return .noPayload
|
||||
}
|
||||
@@ -324,6 +349,9 @@ public func constructFullyFixed() -> FullyFixedLayout {
|
||||
// CHECK: [[SATISFIED1]]:
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[SIZE_METADATA]], [[INT]] -1
|
||||
// CHECK-NEXT: [[SIZE_VWT:%.*]] = load ptr, ptr [[T1]],
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[SIZE_VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK-NEXT: [[SIZE_LAYOUT_1:%.*]] = getelementptr inbounds ptr, ptr [[SIZE_VWT]], i32 8
|
||||
// CHECK-NEXT: store ptr [[SIZE_LAYOUT_1]],
|
||||
// CHECK-NEXT: getelementptr
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %target-swift-frontend -disable-type-layout %s -emit-ir | %FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize
|
||||
// RUN: %target-swift-frontend -disable-type-layout %s -emit-ir | %FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize --check-prefix=CHECK-%target-cpu
|
||||
|
||||
sil_stage canonical
|
||||
|
||||
@@ -50,6 +50,9 @@ entry(%0 : $*T):
|
||||
// CHECK: [[METATYPE:%.*]] = load ptr, ptr [[METATYPE_ADDR]]
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METATYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[FLAGS:%.*]] = load i32, ptr [[FLAGS_ADDR]]
|
||||
// CHECK: [[ISNOTINLINE:%.*]] = and i32 [[FLAGS]], 131072
|
||||
@@ -61,11 +64,17 @@ entry(%0 : $*T):
|
||||
// CHECK: ret ptr [[EXISTENTIAL_BUFFER]]
|
||||
//
|
||||
// CHECK:allocateBox:
|
||||
// CHECK: [[CALL:%.*]] = call swiftcc { ptr, ptr } @swift_allocBox(ptr [[METATYPE]])
|
||||
// CHECK: [[BOX:%.*]] = extractvalue { ptr, ptr } [[CALL]], 0
|
||||
// CHECK: [[ADDR:%.*]] = extractvalue { ptr, ptr } [[CALL]], 1
|
||||
// CHECK: store ptr [[BOX]], ptr [[EXISTENTIAL_BUFFER]]
|
||||
// CHECK: ret ptr [[ADDR]]
|
||||
// CHECK-64: [[CALL:%.*]] = call swiftcc { ptr, ptr } @swift_allocBox(ptr [[METATYPE]])
|
||||
// CHECK-64: [[BOX:%.*]] = extractvalue { ptr, ptr } [[CALL]], 0
|
||||
// CHECK-64: [[ADDR:%.*]] = extractvalue { ptr, ptr } [[CALL]], 1
|
||||
// CHECK-64: store ptr [[BOX]], ptr [[EXISTENTIAL_BUFFER]]
|
||||
// CHECK-64: ret ptr [[ADDR]]
|
||||
//
|
||||
// CHECK-32: [[CALL:%.*]] = call swiftcc { ptr, ptr } @swift_allocBox(ptr [[METATYPE]])
|
||||
// CHECK-32: [[BOX:%.*]] = extractvalue { ptr, ptr } [[CALL]], 0
|
||||
// CHECK-32: [[ADDR:%.*]] = extractvalue { ptr, ptr } [[CALL]], 1
|
||||
// CHECK-32: store ptr [[BOX]], ptr [[EXISTENTIAL_BUFFER]]
|
||||
// CHECK-32: ret ptr [[ADDR]]
|
||||
|
||||
// CHECK-LABEL: define {{.*}} @test_init_existential_fixed
|
||||
// CHECK: [[CONTAINER:%.*]] = alloca %T25existentials_opaque_boxed11ExistentialP
|
||||
@@ -143,6 +152,9 @@ entry:
|
||||
// CHECK: [[META:%.*]] = load ptr, ptr [[META_ADDR]]
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %2, {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[FLAGS:%.*]] = load i32, ptr [[FLAGS_ADDR]]
|
||||
// CHECK: [[ISNOTINLINE:%.*]] = and i32 [[FLAGS]], 131072
|
||||
@@ -157,6 +169,9 @@ entry:
|
||||
// CHECK: [[REFERENCE:%.*]] = load ptr, ptr [[BUFFER]]
|
||||
// CHECK: [[VWT_ADDR2:%.*]] = getelementptr inbounds ptr, ptr [[META]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT2:%.*]] = load ptr, ptr [[VWT_ADDR2]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR2]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT2:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[SIZE2_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT2]], i32 0, i32 8
|
||||
// CHECK: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE2_ADDR]]
|
||||
// CHECK-64:[[T0:%.*]] = zext i32 [[FLAGS]] to i64
|
||||
@@ -189,6 +204,9 @@ bb0(%0 : $*Existential):
|
||||
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} linkonce_odr hidden ptr @__swift_project_boxed_opaque_existential_1(ptr %0, ptr %1)
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %1, {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[FLAGS:%.*]] = load i32, ptr [[FLAGS_ADDR]]
|
||||
// CHECK: [[ISNOTINLINE:%.*]] = and i32 [[FLAGS]], 131072
|
||||
@@ -208,7 +226,7 @@ bb0(%0 : $*Existential):
|
||||
// CHECK: [[HEADERSIZEPLUSALIGN:%.*]] = add {{(i64 16|i32 8)}}, [[ALIGNMASK]]
|
||||
// CHECK: [[NOTALIGNMASK:%.*]] = xor {{(i64|i32)}} [[ALIGNMASK]], -1
|
||||
// CHECK: [[ALIGNEDSTART:%.*]] = and {{(i64|i32)}} [[HEADERSIZEPLUSALIGN]], [[NOTALIGNMASK]]
|
||||
// CHECK: [[STARTOFVALUE:%.*]] = getelementptr inbounds i8, ptr %5, {{(i64|i32)}} [[ALIGNEDSTART]]
|
||||
// CHECK: [[STARTOFVALUE:%.*]] = getelementptr inbounds i8, ptr [[REF]], {{(i64|i32)}} [[ALIGNEDSTART]]
|
||||
// CHECK: ret ptr [[STARTOFVALUE]]
|
||||
|
||||
|
||||
@@ -229,6 +247,9 @@ bb0(%0 : $*Existential):
|
||||
// CHECK: define{{( dllexport)?}}{{( protected)?}} linkonce_odr hidden ptr @__swift_mutable_project_boxed_opaque_existential_1(ptr %0, ptr %1)
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %1, {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[FLAGS:%.*]] = load i32, ptr [[FLAGS_ADDR]]
|
||||
// CHECK: [[ISNOTINLINE:%.*]] = and i32 [[FLAGS]], 131072
|
||||
@@ -244,9 +265,10 @@ bb0(%0 : $*Existential):
|
||||
// CHECK-32:[[ALIGNMASK:%.*]] = and i32 [[FLAGS]], 255
|
||||
// CHECK-16:[[T0:%.*]] = trunc i32 [[FLAGS]] to i16
|
||||
// CHECK-16:[[ALIGNMASK:%.*]] = and i16 [[T0]], 255
|
||||
// CHECK: [[REFANDADDR:%.*]] = call swiftcc { ptr, ptr } @swift_makeBoxUnique(ptr %0, ptr %1, {{(i64|i32)}} [[ALIGNMASK]])
|
||||
// CHECK: [[REF:%.*]] = extractvalue { ptr, ptr } [[REFANDADDR]], 0
|
||||
// CHECK: [[ADDR:%.*]] = extractvalue { ptr, ptr } [[REFANDADDR]], 1
|
||||
// CHECK-64: [[REFANDADDR:%.*]] = call swiftcc { ptr, ptr } @swift_makeBoxUnique(ptr %0, ptr %1, {{(i64|i32)}} [[ALIGNMASK]])
|
||||
// CHECK-32: [[REFANDADDR:%.*]] = call swiftcc { ptr, ptr } @swift_makeBoxUnique(ptr %0, ptr %1, {{(i64|i32)}} [[ALIGNMASK]])
|
||||
// CHECK: [[REF:%.*]] = extractvalue {{.*}}{ ptr, ptr }{{.*}} [[REFANDADDR]], 0
|
||||
// CHECK: [[ADDR:%.*]] = extractvalue {{.*}}{ ptr, ptr }{{.*}} [[REFANDADDR]], 1
|
||||
// CHECK: ret ptr [[ADDR]]
|
||||
|
||||
|
||||
@@ -273,6 +295,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: [[BUFFER_ADDR:%.*]] = getelementptr inbounds %__opaque_existential_type_1, ptr %0, i32 0, i32 0
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[FLAGS:%.*]] = load i32, ptr [[FLAGS_ADDR]]
|
||||
// CHECK: [[ISNOTINLINE:%.*]] = and i32 [[FLAGS]], 131072
|
||||
@@ -282,6 +307,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: inline:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[VW_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 1
|
||||
// CHECK: [[VW:%.*]] = load ptr, ptr [[VW_ADDR]]
|
||||
// CHECK: call void [[VW]](ptr noalias [[BUFFER_ADDR]], ptr [[METADATA]])
|
||||
@@ -333,6 +361,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: match:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[DEST_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[FLAGS:%.*]] = load i32, ptr [[FLAGS_ADDR]]
|
||||
// CHECK: [[ISNOTINLINE:%.*]] = and i32 [[FLAGS]], 131072
|
||||
@@ -342,6 +373,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: match-inline:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[DEST_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[VW_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 3
|
||||
// CHECK: [[VW:%.*]] = load ptr, ptr [[VW_ADDR]]
|
||||
// CHECK: call ptr [[VW]](ptr [[DEST_BUFFERADDR]], ptr [[SRC_BUFFERADDR]], ptr [[DEST_TYPE]])
|
||||
@@ -363,12 +397,18 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: store ptr [[SRC_PTW]], ptr [[DEST_PWT_ADDR]]
|
||||
// CHECK: [[DEST_VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[DEST_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[DEST_VWT:%.*]] = load ptr, ptr [[DEST_VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[DEST_VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[DEST_VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[DEST_FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[DEST_VWT]], i32 0, i32 10
|
||||
// CHECK: [[DEST_FLAGS:%.*]] = load i32, ptr [[DEST_FLAGS_ADDR]]
|
||||
// CHECK: [[DEST_ISNOTINLINE:%.*]] = and i32 [[DEST_FLAGS]], 131072
|
||||
// CHECK: [[DEST_ISINLINE:%.*]] = icmp eq i32 [[DEST_ISNOTINLINE]], 0
|
||||
// CHECK: [[SRC_VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[SRC_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[SRC_VWT:%.*]] = load ptr, ptr [[SRC_VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[SRC_VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[SRC_VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[SRC_FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[SRC_VWT]], i32 0, i32 10
|
||||
// CHECK: [[SRC_FLAGS:%.*]] = load i32, ptr [[SRC_FLAGS_ADDR]]
|
||||
// CHECK: [[SRC_ISNOTINLINE:%.*]] = and i32 [[SRC_FLAGS]], 131072
|
||||
@@ -378,6 +418,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: dest-inline:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[DEST_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[VW_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 4
|
||||
// CHECK: [[VW:%.*]] = load ptr, ptr [[VW_ADDR]]
|
||||
// CHECK: call ptr [[VW]](ptr noalias [[TMPBUFFER]], ptr noalias [[DEST_BUFFERADDR]], ptr [[DEST_TYPE]])
|
||||
@@ -386,6 +429,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: dest-inline-src-inline:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[SRC_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[VW_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
|
||||
// CHECK: [[VW:%.*]] = load ptr, ptr [[VW_ADDR]]
|
||||
// CHECK: call ptr [[VW]](ptr noalias [[DEST_BUFFERADDR]], ptr noalias [[SRC_BUFFERADDR]], ptr [[SRC_TYPE]])
|
||||
@@ -400,6 +446,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: dest-inline-cont:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[DEST_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[VW_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 1
|
||||
// CHECK: [[VW:%.*]] = load ptr, ptr [[VW_ADDR]]
|
||||
// CHECK: call void [[VW]](ptr noalias [[TMPBUFFER]], ptr [[DEST_TYPE]])
|
||||
@@ -412,6 +461,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: dest-outline-src-inline:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[SRC_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[VW_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2
|
||||
// CHECK: [[VW:%.*]] = load ptr, ptr [[VW_ADDR]]
|
||||
// CHECK: call ptr [[VW]](ptr noalias [[DEST_BUFFERADDR]], ptr noalias [[SRC_BUFFERADDR]], ptr [[SRC_TYPE]])
|
||||
@@ -496,6 +548,9 @@ bb0(%0 : $*OtherExistential):
|
||||
// CHECK: [[BUFFER_LOCAL_ADDR:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, ptr %1, i32 0, i32 0
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[ARG_TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[VW:%.*]] = load ptr, ptr [[VWT]]
|
||||
// CHECK: call ptr [[VW]]({{.*}} noalias [[BUFFER_LOCAL_ADDR]], {{.*}} noalias [[BUFFER_ARG_ADDR]], ptr [[ARG_TYPE]])
|
||||
// CHECK: ret ptr %1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s
|
||||
// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-cpu
|
||||
|
||||
import Builtin
|
||||
|
||||
@@ -10,6 +10,9 @@ protocol P {}
|
||||
// CHECK: call {{.*}} @__swift_project_boxed_opaque_existential_1
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[TYPE]], {{(i64|i32)}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], {{(i64|i32)}} 2
|
||||
// CHECK: [[WITNESS:%.*]] = load ptr, ptr [[WITNESS_ADDR]]
|
||||
// CHECK: call ptr [[WITNESS]](
|
||||
|
||||
@@ -16,7 +16,7 @@ import c_layout
|
||||
// CHECK-SAME: @"$sSo14HasNestedUnionVMa"
|
||||
|
||||
// CHECK-LABEL: @"$sSo14HasNestedUnionV18__Unnamed_struct_sVMf" = linkonce_odr hidden constant
|
||||
// CHECK-SAME: @"$sSo14HasNestedUnionV18__Unnamed_struct_sVWV"
|
||||
// CHECK-SAME: @"$sSo14HasNestedUnionV18__Unnamed_struct_sVWV{{(\.ptrauth)?}}"
|
||||
// CHECK-SAME: [[INT]] 512,
|
||||
// CHECK-SAME: @"$sSo14HasNestedUnionV18__Unnamed_struct_sVMn{{(\.ptrauth)?}}"
|
||||
// CHECK-SAME: i32 0,
|
||||
|
||||
@@ -21,7 +21,7 @@ import c_layout
|
||||
// CHECK-SAME: @"$sSo14HasNestedUnionVMa"
|
||||
|
||||
// CHECK-LABEL: @"$sSo14HasNestedUnionV18__Unnamed_struct_sVMf" = linkonce_odr hidden constant
|
||||
// CHECK-SAME: @"$sSo14HasNestedUnionV18__Unnamed_struct_sVWV"
|
||||
// CHECK-SAME: @"$sSo14HasNestedUnionV18__Unnamed_struct_sVWV{{(\.ptrauth)?}}"
|
||||
// CHECK-SAME: [[INT]] 512,
|
||||
// CHECK-SAME: @"$sSo14HasNestedUnionV18__Unnamed_struct_sVMn
|
||||
// CHECK-SAME: i32 0,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// RUN: %empty-directory(%t)
|
||||
|
||||
// RUN: %target-swift-frontend %S/../Inputs/resilient_struct.swift -enable-library-evolution -emit-module -emit-module-path %t/resilient_struct.swiftmodule
|
||||
// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -enable-library-evolution -I %t -emit-ir %s | %FileCheck %s
|
||||
// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -enable-library-evolution -I %t -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-cpu
|
||||
// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -enable-library-evolution -I %t -emit-ir -O %s
|
||||
|
||||
// CHECK: %swift.type = type { [[INT:i32|i64]] }
|
||||
@@ -123,6 +123,9 @@ bb0:
|
||||
// CHECK: entry:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %0, {{.*}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[FLAGS:%.*]] = load i32, ptr [[FLAGS_ADDR]]
|
||||
// CHECK: [[ISNOTINLINE:%.*]] = and i32 [[FLAGS]], 131072
|
||||
@@ -132,6 +135,9 @@ bb0:
|
||||
// CHECK: outline.allocateValueInBuffer:
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %0, {{.*}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]]
|
||||
// CHECK: [[ALIGN:%.*]] = and {{.*}}, 255
|
||||
@@ -147,6 +153,9 @@ bb0:
|
||||
// CHECK-LABEL: define linkonce_odr hidden ptr @__swift_project_value_buffer(ptr %0, ptr %1)
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %0, {{.*}} -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[FLAGS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[FLAGS:%.*]] = load i32, ptr [[FLAGS_ADDR]]
|
||||
// CHECK: [[ISNOTINLINE:%.*]] = and i32 [[FLAGS]], 131072
|
||||
|
||||
@@ -16,8 +16,11 @@ bb0(%x : $*T):
|
||||
}
|
||||
// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @generic(ptr noalias %0, ptr %T) {{.*}} {
|
||||
// Allocate it.
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %T, {{(i32|i64)}} -1
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %T, {{(i32|i64)}} -1
|
||||
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK-NEXT: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]]
|
||||
// CHECK-NEXT: [[Y_ALLOCA:%.*]] = alloca i8, {{.*}} [[SIZE]], align 16
|
||||
@@ -53,8 +56,11 @@ bb0(%x : $*T):
|
||||
}
|
||||
// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @generic_with_reuse(ptr noalias %0, ptr %T) {{.*}} {
|
||||
// Allocate it.
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %T, {{(i32|i64)}} -1
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr %T, {{(i32|i64)}} -1
|
||||
// CHECK-NEXT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK-NEXT: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]]
|
||||
// CHECK-NEXT: [[Y_ALLOCA:%.*]] = alloca i8, {{.*}} [[SIZE]], align 16
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
// RUN: -emit-module-path=%t/resilient_struct.swiftmodule \
|
||||
// RUN: -module-name=resilient_struct %S/../Inputs/resilient_struct.swift
|
||||
|
||||
// RUN: %target-swift-frontend -module-name main -I %t -emit-ir -primary-file %s %S/Inputs/OtherModule.swift | %FileCheck %s -DINT=i%target-ptrsize
|
||||
// RUN: %target-swift-frontend -module-name main -I %t -emit-ir -primary-file %s %S/Inputs/OtherModule.swift | %FileCheck %s -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-%target-cpu
|
||||
|
||||
// Check that we correctly handle resilience when parsing as SIL + SIB.
|
||||
// RUN: %target-swift-frontend -emit-sib -module-name main %S/Inputs/OtherModule.swift -I %t -o %t/other.sib
|
||||
// RUN: %target-swift-frontend -emit-silgen -module-name main -primary-file %s %S/Inputs/OtherModule.swift -I %t -o %t/main.sil
|
||||
// RUN: %target-swift-frontend -emit-ir -module-name main -primary-file %t/main.sil %t/other.sib -I %t | %FileCheck %s -DINT=i%target-ptrsize
|
||||
// RUN: %target-swift-frontend -emit-ir -module-name main -primary-file %t/main.sil %t/other.sib -I %t | %FileCheck %s -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-%target-cpu
|
||||
|
||||
// This is a single-module version of the test case in
|
||||
// multi_module_resilience.
|
||||
@@ -20,6 +20,8 @@
|
||||
// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s4main3FooVMa"([[INT]] 0)
|
||||
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK: [[VWT:%.*]] = load ptr,
|
||||
// CHECK-arm64e: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// Allocate 'copy'.
|
||||
// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]]
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// RUN: -emit-module-path=%t/OtherModule.swiftmodule \
|
||||
// RUN: -module-name=OtherModule %S/Inputs/OtherModule.swift
|
||||
|
||||
// RUN: %target-swift-frontend -module-name main -I %t -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize
|
||||
// RUN: %target-swift-frontend -module-name main -I %t -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-%target-cpu
|
||||
|
||||
// rdar://39763787
|
||||
|
||||
@@ -19,6 +19,8 @@ import OtherModule
|
||||
// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s11OtherModule3FooVMa"([[INT]] 0)
|
||||
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK: [[VWT:%.*]] = load ptr,
|
||||
// CHECK-arm64e: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// Allocate 'copy'.
|
||||
// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]]
|
||||
@@ -38,6 +40,8 @@ public func copyFoo(foo: Foo) -> Foo {
|
||||
// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s11OtherModule3BarVMa"([[INT]] 0)
|
||||
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK: [[VWT:%.*]] = load ptr,
|
||||
// CHECK-arm64e: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// Allocate 'copy'.
|
||||
// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]]
|
||||
|
||||
@@ -6,9 +6,11 @@ sil_stage raw
|
||||
|
||||
// CHECK: define hidden swiftcc void @f010_irgen_identity(ptr noalias sret({{.*}}) %0, ptr noalias %1, ptr %T)
|
||||
// CHECK: entry:
|
||||
// CHECK-arm64e: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: call i64 @llvm.ptrauth.auth
|
||||
// CHECK-NOT: call
|
||||
// CHECK-NOT: call
|
||||
// CHECK: [[InitializeWithTake_ADDR:%.*]] = getelementptr inbounds ptr, ptr %T.valueWitnesses
|
||||
// CHECK: [[InitializeWithTake_ADDR:%.*]] = getelementptr inbounds ptr, ptr {{.*}}, {{(i32|i64)}} 4
|
||||
// CHECK: [[InitializeWithTake:%.*]] = load ptr, ptr [[InitializeWithTake_ADDR]]
|
||||
// CHECK-arm64e: call i64 @llvm.ptrauth.blend
|
||||
// CHECK: %{{.*}} = call ptr [[InitializeWithTake]](ptr noalias %0, ptr noalias %1, ptr %T)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// RUN: %empty-directory(%t)
|
||||
// RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/../Inputs/resilient_struct.swift
|
||||
// RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_enum.swiftmodule -module-name=resilient_enum -I %t %S/../Inputs/resilient_enum.swift
|
||||
// RUN: %target-swift-frontend -module-name struct_resilience -Xllvm -sil-disable-pass=MandatoryARCOpts -I %t -emit-ir -enable-library-evolution %s | %FileCheck %s
|
||||
// RUN: %target-swift-frontend -module-name struct_resilience -Xllvm -sil-disable-pass=MandatoryARCOpts -I %t -emit-ir -enable-library-evolution %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-cpu
|
||||
// RUN: %target-swift-frontend -module-name struct_resilience -I %t -emit-ir -enable-library-evolution -O %s
|
||||
|
||||
import resilient_struct
|
||||
@@ -22,6 +22,9 @@ public func functionWithResilientTypesSize(_ s: __owned Size, f: (__owned Size)
|
||||
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
|
||||
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK: [[WITNESS_FOR_SIZE:%.*]] = load [[INT]], ptr [[WITNESS_ADDR]]
|
||||
@@ -201,6 +204,9 @@ public func memoryLayoutDotSizeWithResilientStruct() -> Int {
|
||||
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
|
||||
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8
|
||||
// CHECK: [[WITNESS_FOR_SIZE:%.*]] = load [[INT]], ptr [[WITNESS_ADDR]]
|
||||
@@ -216,6 +222,9 @@ public func memoryLayoutDotStrideWithResilientStruct() -> Int {
|
||||
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
|
||||
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 9
|
||||
// CHECK: [[WITNESS_FOR_STRIDE:%.*]] = load [[INT]], ptr [[WITNESS_ADDR]]
|
||||
@@ -231,6 +240,9 @@ public func memoryLayoutDotAlignmentWithResilientStruct() -> Int {
|
||||
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
|
||||
// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], [[INT]] -1
|
||||
// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
|
||||
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 10
|
||||
// CHECK: [[WITNESS_FOR_FLAGS:%.*]] = load i32, ptr [[WITNESS_ADDR]]
|
||||
@@ -282,6 +294,9 @@ public func memoryLayoutDotOffsetOfWithResilientStruct() -> Int? {
|
||||
// CHECK: [[SIZE_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
|
||||
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[SIZE_METADATA]], [[INT]] -1
|
||||
// CHECK: [[SIZE_VWT:%.*]] = load ptr, ptr [[T1]],
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[SIZE_VWT:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[SIZE_LAYOUT_1:%.*]] = getelementptr inbounds ptr, ptr [[SIZE_VWT]], i32 8
|
||||
// CHECK: [[FIELD_1:%.*]] = getelementptr inbounds ptr, ptr [[FIELDS_ADDR]], i32 0
|
||||
// CHECK: store ptr [[SIZE_LAYOUT_1:%.*]], ptr [[FIELD_1]]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize
|
||||
// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize --check-prefix=CHECK-%target-cpu
|
||||
|
||||
class C {}
|
||||
|
||||
@@ -37,6 +37,9 @@ struct TypeLayoutTest<T> {
|
||||
// CHECK: br i1 [[T_OK]],
|
||||
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[T_CHECKED]], {{i32|i64}} -1
|
||||
// CHECK: [[T_VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[T_VALUE_WITNESSES:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8
|
||||
// CHECK: store ptr [[T_LAYOUT]]
|
||||
var z: T
|
||||
@@ -73,6 +76,9 @@ struct TypeLayoutTest<T> {
|
||||
// CHECK: br i1 [[METADATA_OK]],
|
||||
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], {{i32|i64}} -1
|
||||
// CHECK: [[VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VALUE_WITNESSES:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[VALUE_WITNESSES]], i32 8
|
||||
// CHECK: store ptr [[LAYOUT]]
|
||||
var j: GMult<T>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize
|
||||
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize --check-prefix=CHECK-%target-cpu
|
||||
// REQUIRES: objc_interop
|
||||
|
||||
import Foundation
|
||||
@@ -32,6 +32,9 @@ struct TypeLayoutTest<T> {
|
||||
// CHECK: br i1 [[T_OK]],
|
||||
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[T_CHECKED]], {{i32|i64}} -1
|
||||
// CHECK: [[T_VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[T_VALUE_WITNESSES:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8
|
||||
// CHECK: store ptr [[T_LAYOUT]]
|
||||
var z: T
|
||||
@@ -71,6 +74,9 @@ struct TypeLayoutTest<T> {
|
||||
// CHECK: br i1 [[METADATA_OK]],
|
||||
// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], {{i32|i64}} -1
|
||||
// CHECK: [[VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]]
|
||||
// CHECK-arm64e-NEXT: ptrtoint ptr [[T1]] to i64
|
||||
// CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend
|
||||
// CHECK-arm64e: [[VALUE_WITNESSES:%.*]] = inttoptr i64 {{%.*}} to ptr
|
||||
// CHECK: [[LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[VALUE_WITNESSES]], i32 8
|
||||
// CHECK: store ptr [[LAYOUT]]
|
||||
var j: GMult<T>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// RUN: %target-swift-frontend -enable-type-layout -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK
|
||||
// RUN: %target-swift-frontend -enable-type-layout -primary-file %s -O -emit-ir | %FileCheck %s --check-prefix=OPT --check-prefix=OPT-%target-ptrsize
|
||||
// RUN: %target-swift-frontend -enable-type-layout -primary-file %s -O -emit-ir | %FileCheck %s --check-prefix=OPT --check-prefix=OPT-%target-ptrsize --check-prefix=OPT-%target-ptrauth
|
||||
// RUN: %target-swift-frontend -primary-file %s -emit-ir | %FileCheck %s --check-prefix=NOTL
|
||||
|
||||
public struct B<T> {
|
||||
@@ -83,15 +83,35 @@ public enum ForwardEnum<T> {
|
||||
// OPT: [[T_PARAM:%.*]] = getelementptr inbounds ptr, ptr %"A<T>", {{(i64|i32)}} 2
|
||||
// OPT: [[T:%.*]] = load ptr, ptr [[T_PARAM]]
|
||||
// OPT: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[T]], {{(i64|i32)}} -1
|
||||
// OPT: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
|
||||
// OPT-noptrauth: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]]
|
||||
|
||||
// OPT-ptrauth: [[ADDR_INT:%.*]] = ptrtoint ptr [[VWT_ADDR]] to i64
|
||||
// OPT-ptrauth: [[DISCRIMINANT:%.*]] = tail call i64 @llvm.ptrauth.blend(i64 [[ADDR_INT]], i64 11839)
|
||||
// OPT-ptrauth: [[SIGNED_VWT:%.*]] = ptrtoint ptr %T.valueWitnesses
|
||||
// OPT-ptrauth: [[VWT_INT:%.*]] = tail call i64 @llvm.ptrauth.auth(i64 [[SIGNED_VWT]], i32 2, i64 [[DISCRIMINANT]])
|
||||
// OPT-ptrauth: [[VWT:%.*]] = inttoptr i64 [[VWT_INT]] to ptr
|
||||
|
||||
// OPT: [[DESTROY_VW:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], {{(i64|i32)}} 1
|
||||
// OPT: [[DESTROY:%.*]] = load ptr, ptr [[DESTROY_VW]]
|
||||
|
||||
// OPT-ptrauth: [[DESTROY_ADDR:%.*]] = ptrtoint ptr [[DESTROY_VW]] to i64
|
||||
// OPT-ptrauth: [[DISCRIMINANT:%.*]] = tail call i64 @llvm.ptrauth.blend(i64 [[DESTROY_ADDR]], i64 1272)
|
||||
|
||||
// OPT: tail call void [[DESTROY]](ptr noalias %object, ptr [[T]])
|
||||
// OPT: [[SIZE_VW:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], {{i64|i32}} 0, {{(i64|i32)}} 8
|
||||
|
||||
// OPT-noptrauth: [[SIZE_VW:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], {{(i64|i32)}} 0, {{(i64|i32)}} 8
|
||||
// OPT-ptrauth: [[SIZE_VW:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i64 0, i32 8
|
||||
|
||||
// OPT: [[SIZE_T:%.*]] = load {{(i64|i32)}}, ptr [[SIZE_VW]]
|
||||
// OPT: [[OBJECT:%.*]] = ptrtoint ptr %object to {{(i64|i32)}}
|
||||
// OPT: [[FLAGS_VW:%.*]] = getelementptr inbounds {{.*}}, ptr [[VWT]], {{i64|i32}} 0, {{(i64|i32)}} 10
|
||||
// OPT: [[FLAGS3:%.*]] = load i32, ptr [[FLAGS_VW]]
|
||||
// OPT-noptrauth: [[OBJECT:%.*]] = ptrtoint ptr %object to {{(i64|i32)}}
|
||||
// OPT-ptrauth: [[OBJECT:%.*]] = ptrtoint ptr %object to {{(i64|i32)}}
|
||||
|
||||
// OPT-noptrauth: [[FLAGS2:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], {{(i64|i32)}} 0, {{(i64|i32)}} 10
|
||||
|
||||
// OPT-ptrauth: [[FLAGS2:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i64 0, {{(i64|i32)}} 10
|
||||
|
||||
// OPT: [[FLAGS3:%.*]] = load i32, ptr [[FLAGS2]]
|
||||
// OPT: [[FLAGS:%.*]] = and i32 [[FLAGS3]], 255
|
||||
// OPT-64: %flags.alignmentMask = zext i32 [[FLAGS]] to i64
|
||||
// OPT-64: [[TMP:%.*]] = add {{(i64|i32)}} [[SIZE_T]], %flags.alignmentMask
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
// Make sure we generate the outer metadata.
|
||||
|
||||
// CHECK-DAG: @"$s4test5OuterVMf" = internal constant {{.*}} {{@"\$sytWV"|ptr @"\$s4test5OuterVWV"}}, {{.*}} @"$s4test5OuterVMn{{(\.ptrauth)?}}"
|
||||
// CHECK-DAG: @"$s4test6Outer2VMf" = internal constant {{.*}} {{@"\$sytWV"|ptr @"\$s4test6Outer2VWV"}}, {{.*}} @"$s4test6Outer2VMn{{(\.ptrauth)?}}"
|
||||
// CHECK-DAG: @"$s4test6Outer3VMf" = internal constant {{.*}} {{@"\$sytWV"|ptr @"\$s4test6Outer3VWV"}}, {{.*}} @"$s4test6Outer3VMn{{(\.ptrauth)?}}"
|
||||
// CHECK-DAG: @"$s4test6Outer4VMf" = internal constant {{.*}} {{@"\$sytWV"|ptr @"\$s4test6Outer4VWV"}}, {{.*}} @"$s4test6Outer4VMn{{(\.ptrauth[.0-9]*)?}}"
|
||||
// CHECK-DAG: @"$s4test5OuterVMf" = internal constant {{.*}} {{@"\$sytWV(\.ptrauth[.0-9]*)?"|ptr @"\$s4test5OuterVWV"}}, {{.*}} @"$s4test5OuterVMn{{(\.ptrauth[.0-9]*)?}}"
|
||||
// CHECK-DAG: @"$s4test6Outer2VMf" = internal constant {{.*}} {{@"\$sytWV(\.ptrauth[.0-9]*)?"|ptr @"\$s4test6Outer2VWV"}}, {{.*}} @"$s4test6Outer2VMn{{(\.ptrauth[.0-9]*)?}}"
|
||||
// CHECK-DAG: @"$s4test6Outer3VMf" = internal constant {{.*}} {{@"\$sytWV(\.ptrauth[.0-9]*)?"|ptr @"\$s4test6Outer3VWV"}}, {{.*}} @"$s4test6Outer3VMn{{(\.ptrauth[.0-9]*)?}}"
|
||||
// CHECK-DAG: @"$s4test6Outer4VMf" = internal constant {{.*}} {{@"\$sytWV(\.ptrauth[.0-9]*)?"|ptr @"\$s4test6Outer4VWV"}}, {{.*}} @"$s4test6Outer4VMn{{(\.ptrauth[.0-9]*)?}}"
|
||||
|
||||
class C<T> { }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user