mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Merge pull request #68659 from kubamracek/embedded-ispod
[embedded] Handle thick->thin metatype conversion on IsPOD builtin too
This commit is contained in:
@@ -40,8 +40,9 @@ extension BuiltinInst : OnoneSimplifyable {
|
||||
.AssignCopyArrayNoAlias,
|
||||
.AssignCopyArrayFrontToBack,
|
||||
.AssignCopyArrayBackToFront,
|
||||
.AssignTakeArray:
|
||||
optimizeArrayBuiltin(context)
|
||||
.AssignTakeArray,
|
||||
.IsPOD:
|
||||
optimizeFirstArgumentToThinMetatype(context)
|
||||
default:
|
||||
if let literal = constantFold(context) {
|
||||
uses.replaceAll(with: literal, context)
|
||||
@@ -173,7 +174,7 @@ private extension BuiltinInst {
|
||||
context.erase(instruction: self)
|
||||
}
|
||||
|
||||
func optimizeArrayBuiltin(_ context: SimplifyContext) {
|
||||
func optimizeFirstArgumentToThinMetatype(_ context: SimplifyContext) {
|
||||
guard let metatypeInst = operands[0].value as? MetatypeInst,
|
||||
metatypeInst.type.representationOfMetatype(in: parentFunction) == .Thick else {
|
||||
return
|
||||
|
||||
34
test/embedded/builtins-misc.swift
Normal file
34
test/embedded/builtins-misc.swift
Normal file
@@ -0,0 +1,34 @@
|
||||
// RUN: %target-swift-emit-ir %s -parse-stdlib -module-name Swift -enable-experimental-feature Embedded -wmo -target arm64e-apple-none | %FileCheck %s
|
||||
|
||||
// REQUIRES: swift_in_compiler
|
||||
|
||||
class MyClass {}
|
||||
|
||||
struct MyStruct {
|
||||
var c: MyClass
|
||||
}
|
||||
|
||||
public func foo() -> Builtin.Int1 {
|
||||
return Builtin.ispod(MyStruct.self)
|
||||
}
|
||||
|
||||
// CHECK: define {{.*}}i1 @"$ss3fooBi1_yF"()
|
||||
// CHECK-NEXT: entry:
|
||||
// CHECK-NEXT: ret i1 false
|
||||
// CHECK-NEXT: }
|
||||
|
||||
public func bar() -> Builtin.Int1 {
|
||||
var s = MyGenericStruct<MyStruct>()
|
||||
return s.foo()
|
||||
}
|
||||
|
||||
public struct MyGenericStruct<T> {
|
||||
public func foo() -> Builtin.Int1 {
|
||||
return Builtin.ispod(T.self)
|
||||
}
|
||||
}
|
||||
|
||||
// CHECK: define {{.*}}i1 @"$ss15MyGenericStructV3fooBi1_yFs0aC0V_Tg5"()
|
||||
// CHECK-NEXT: entry:
|
||||
// CHECK-NEXT: ret i1 false
|
||||
// CHECK-NEXT: }
|
||||
Reference in New Issue
Block a user