mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Type annotations for instruction operands are omitted, e.g. ``` %3 = struct $S(%1, %2) ``` Operand types are redundant anyway and were only used for sanity checking in the SIL parser. But: operand types _are_ printed if the definition of the operand value was not printed yet. This happens: * if the block with the definition appears after the block where the operand's instruction is located * if a block or instruction is printed in isolation, e.g. in a debugger The old behavior can be restored with `-Xllvm -sil-print-types`. This option is added to many existing test files which check for operand types in their check-lines.
25 lines
1.3 KiB
Swift
25 lines
1.3 KiB
Swift
// RUN: %target-swift-frontend -enable-builtin-module -O -Xllvm -sil-print-types -emit-sil %s | %IRGenFileCheck %s
|
|
|
|
import Builtin
|
|
|
|
// CHECK-LABEL: sil @storeBytesBitwiseCopyable : {{.*}} {
|
|
// CHECK: bb0(
|
|
// CHECK-SAME: [[SELF:%[^,]+]] : $UnsafeMutableRawPointer,
|
|
// CHECK-SAME: [[VALUE:%[^,]+]] : $*T,
|
|
// CHECK-SAME: [[OFFSET:%[^,]+]] : $Int,
|
|
// CHECK-SAME: {{%[^,]+}} : $@thick T.Type):
|
|
// CHECK: [[SELF_RAW_VALUE:%[^,]+]] = struct_extract [[SELF]] : {{.*}} #UnsafeMutableRawPointer._rawValue
|
|
// CHECK: [[OFFSET_VALUE:%[^,]+]] = struct_extract [[OFFSET]] : {{.*}} #Int._value
|
|
// CHECK: [[OFFSET_WORD:%[^,]+]] = builtin "{{trunc|sext}}OrBitCast_Int[[PTR_SIZE]]_Word"([[OFFSET_VALUE]] : $Builtin.Int[[PTR_SIZE]])
|
|
// CHECK: [[DESTINATION_POINTER:%[^,]+]] = index_raw_pointer [[SELF_RAW_VALUE]] : $Builtin.RawPointer, [[OFFSET_WORD]]
|
|
// CHECK: [[DESTINATION:%[^,]+]] = pointer_to_address [[DESTINATION_POINTER]] : $Builtin.RawPointer to [align=1]
|
|
// CHECK: copy_addr [[VALUE]] to [[DESTINATION]]
|
|
// CHECK-LABEL: } // end sil function 'storeBytesBitwiseCopyable'
|
|
@_silgen_name("storeBytesBitwiseCopyable")
|
|
public func storeBytes<T : BitwiseCopyable>(
|
|
_ self: UnsafeMutableRawPointer,
|
|
of value: T, toByteOffset offset: Int = 0, as type: T.Type
|
|
) {
|
|
Builtin.storeRaw(value, (self + offset)._rawValue)
|
|
}
|