mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
102 lines
4.3 KiB
Plaintext
102 lines
4.3 KiB
Plaintext
// REQUIRES: objc_interop
|
|
// RUN: otool -tvV %platform-module-dir/libswiftCore.dylib | %FileCheck %s --check-prefix=CHECK-%target-cpu
|
|
|
|
// Verify the autorelease return optimization sequence.
|
|
|
|
/// Test x86-64:
|
|
|
|
// CHECK-x86_64-LABEL: _swift_stdlib_NSStringHashValue:
|
|
// CHECK-x86_64-NOT: ret
|
|
// CHECK-x86_64: movq {{.*}}(%rip), %rsi ## Objc selector ref: decomposedStringWithCanonicalMapping
|
|
// CHECK-x86_64: movq {{.*}}(%rip), [[MSG:%.*]] ## Objc message: -[%rdi decomposedStringWithCanonicalMapping]
|
|
// CHECK-x86_64: callq *[[MSG]]
|
|
// CHECK-x86_64: movq %rax, %rdi
|
|
// CHECK-x86_64: callq {{.*}} ## symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-x86_64: ret
|
|
|
|
|
|
// CHECK-x86_64-LABEL: _swift_stdlib_NSStringHashValuePointer:
|
|
// CHECK-x86_64-NOT: ret
|
|
// CHECK-x86_64: movq {{.*}}(%rip), %rsi ## Objc selector ref: decomposedStringWithCanonicalMapping
|
|
// CHECK-x86_64: movq {{.*}}(%rip), [[MSG:%.*]] ## Objc message: -[%rdi decomposedStringWithCanonicalMapping]
|
|
// CHECK-x86_64: callq *[[MSG]]
|
|
// CHECK-x86_64: movq %rax, %rdi
|
|
// CHECK-x86_64: callq {{.*}} ## symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-x86_64: ret
|
|
|
|
/// Test i386:
|
|
|
|
// CHECK-i386-LABEL: _swift_stdlib_NSStringHashValue:
|
|
// CHECK-i386-NOT: ret
|
|
// CHECK-i386: calll {{.*}} ## symbol stub for: _objc_msgSend
|
|
// CHECK-i386: movl %ebp, %ebp
|
|
// CHECK-i386: calll {{.*}} ## symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-i386: ret
|
|
// CHECK-i386-LABEL: _swift_stdlib_NSStringHashValuePointer:
|
|
// CHECK-i386-NOT: ret
|
|
// CHECK-i386: calll {{.*}} ## symbol stub for: _objc_msgSend
|
|
// CHECK-i386: movl %ebp, %ebp
|
|
// CHECK-i386: calll {{.*}} ## symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-i386: ret
|
|
|
|
/// Test armv7:
|
|
|
|
// CHECK-armv7-LABEL: _swift_stdlib_NSStringHashValue:
|
|
// CHECK-armv7-NOT: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7: blx {{.*}} @ symbol stub for: _objc_msgSend
|
|
// CHECK-armv7: mov r7, r7
|
|
// CHECK-armv7: blx {{.*}} @ symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-armv7: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7-LABEL: _swift_stdlib_NSStringHashValuePointer:
|
|
// CHECK-armv7-NOT: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7: blx {{.*}} @ symbol stub for: _objc_msgSend
|
|
// CHECK-armv7: mov r7, r7
|
|
// CHECK-armv7: blx {{.*}} @ symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-armv7: pop {{.*}}pc{{.*}}
|
|
|
|
/// Test armv7s:
|
|
|
|
// CHECK-armv7s-LABEL: _swift_stdlib_NSStringHashValue:
|
|
// CHECK-armv7s-NOT: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7s: blx {{.*}} @ symbol stub for: _objc_msgSend
|
|
// CHECK-armv7s: mov r7, r7
|
|
// CHECK-armv7s: blx {{.*}} @ symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-armv7s: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7s-LABEL: _swift_stdlib_NSStringHashValuePointer:
|
|
// CHECK-armv7s-NOT: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7s: blx {{.*}} @ symbol stub for: _objc_msgSend
|
|
// CHECK-armv7s: mov r7, r7
|
|
// CHECK-armv7s: blx {{.*}} @ symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-armv7s: pop {{.*}}pc{{.*}}
|
|
|
|
|
|
/// Test armv7k:
|
|
|
|
// CHECK-armv7k-LABEL: _swift_stdlib_NSStringHashValue:
|
|
// CHECK-armv7k-NOT: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7k: blx {{.*}} @ symbol stub for: _objc_msgSend
|
|
// CHECK-armv7k: mov r7, r7
|
|
// CHECK-armv7k: blx {{.*}} @ symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-armv7k: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7k-LABEL: _swift_stdlib_NSStringHashValuePointer:
|
|
// CHECK-armv7k-NOT: pop {{.*}}pc{{.*}}
|
|
// CHECK-armv7k: blx {{.*}} @ symbol stub for: _objc_msgSend
|
|
// CHECK-armv7k: mov r7, r7
|
|
// CHECK-armv7k: blx {{.*}} @ symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-armv7k: pop {{.*}}pc{{.*}}
|
|
|
|
/// Test arm64:
|
|
|
|
// CHECK-arm64-LABEL: _swift_stdlib_NSStringHashValue:
|
|
// CHECK-arm64-NOT: ret
|
|
// CHECK-arm64: bl {{.*}} ; Objc message: -[x0 decomposedStringWithCanonicalMapping]
|
|
// CHECK-arm64: mov x29, x29
|
|
// CHECK-arm64: bl {{.*}} ; symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-arm64: ret
|
|
// CHECK-arm64-LABEL: _swift_stdlib_NSStringHashValuePointer:
|
|
// CHECK-arm64-NOT: ret
|
|
// CHECK-arm64: bl {{.*}} ; Objc message: -[x0 decomposedStringWithCanonicalMapping]
|
|
// CHECK-arm64: mov x29, x29
|
|
// CHECK-arm64: bl {{.*}} ; symbol stub for: _objc_retainAutoreleasedReturnValue
|
|
// CHECK-arm64: ret
|