mirror of
https://github.com/apple/swift.git
synced 2026-10-12 14:50:47 +02:00
Tests require the compiler built with SwiftCompilerSources since a long time. So this lit feature was redundant anyway. We can remove it.
73 lines
3.3 KiB
Plaintext
73 lines
3.3 KiB
Plaintext
// RUN: %target-sil-opt -enable-sil-verify-all %s -simplification -simplify-instruction=tuple_pack_element_addr | %FileCheck %s
|
|
|
|
|
|
import Swift
|
|
import Builtin
|
|
|
|
struct A {}
|
|
struct B {}
|
|
|
|
sil @use : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
|
|
// CHECK-LABEL: sil @simplify_scalar_index_zero
|
|
// CHECK-NOT: tuple_pack_element_addr
|
|
// CHECK: [[ADDR:%[^,]+]] = tuple_element_addr %0, 0
|
|
// CHECK: apply {{.*}}<A>([[ADDR]])
|
|
// CHECK: } // end sil function 'simplify_scalar_index_zero'
|
|
sil @simplify_scalar_index_zero : $@convention(thin) (@inout (A, B)) -> () {
|
|
bb0(%tuple : $*(A, B)):
|
|
%idx = scalar_pack_index 0 of $Pack{A, B}
|
|
%addr = tuple_pack_element_addr %idx of %tuple : $*(A, B) as $*A
|
|
%use = function_ref @use : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
apply %use<A>(%addr) : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
%ret = tuple ()
|
|
return %ret : $()
|
|
}
|
|
|
|
// CHECK-LABEL: sil @simplify_scalar_index_one
|
|
// CHECK-NOT: tuple_pack_element_addr
|
|
// CHECK: [[ADDR:%[^,]+]] = tuple_element_addr %0, 1
|
|
// CHECK: apply {{.*}}<B>([[ADDR]])
|
|
// CHECK: } // end sil function 'simplify_scalar_index_one'
|
|
sil @simplify_scalar_index_one : $@convention(thin) (@inout (A, B)) -> () {
|
|
bb0(%tuple : $*(A, B)):
|
|
%idx = scalar_pack_index 1 of $Pack{A, B}
|
|
%addr = tuple_pack_element_addr %idx of %tuple : $*(A, B) as $*B
|
|
%use = function_ref @use : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
apply %use<B>(%addr) : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
%ret = tuple ()
|
|
return %ret : $()
|
|
}
|
|
|
|
// A dynamic_pack_index does not get simplified, since the indexed
|
|
// component is not statically known.
|
|
// CHECK-LABEL: sil @dont_simplify_dynamic_pack_index
|
|
// CHECK: tuple_pack_element_addr
|
|
// CHECK: } // end sil function 'dont_simplify_dynamic_pack_index'
|
|
sil @dont_simplify_dynamic_pack_index : $@convention(thin) (@inout (A, B), Builtin.Word) -> () {
|
|
bb0(%tuple : $*(A, B), %i : $Builtin.Word):
|
|
%idx = dynamic_pack_index %i of $Pack{A, B}
|
|
%tok = open_pack_element %idx of <each Z> at <Pack{A, B}>, shape $Z, uuid "01234567-89AB-CDEF-0123-000000000000"
|
|
%addr = tuple_pack_element_addr %idx of %tuple : $*(A, B) as $*@pack_element("01234567-89AB-CDEF-0123-000000000000") Z
|
|
%use = function_ref @use : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
apply %use<@pack_element("01234567-89AB-CDEF-0123-000000000000") Z>(%addr) : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
%ret = tuple ()
|
|
return %ret : $()
|
|
}
|
|
|
|
// A scalar_pack_index over a tuple containing a pack expansion does not
|
|
// get simplified, since tuple_element_addr cannot index past the
|
|
// expansion at compile time.
|
|
// CHECK-LABEL: sil @dont_simplify_pack_expansion_tuple
|
|
// CHECK: tuple_pack_element_addr
|
|
// CHECK: } // end sil function 'dont_simplify_pack_expansion_tuple'
|
|
sil @dont_simplify_pack_expansion_tuple : $@convention(thin) <each T> (@inout (A, repeat each T, B)) -> () {
|
|
bb0(%tuple : $*(A, repeat each T, B)):
|
|
%idx = scalar_pack_index 0 of $Pack{A, repeat each T, B}
|
|
%addr = tuple_pack_element_addr %idx of %tuple : $*(A, repeat each T, B) as $*A
|
|
%use = function_ref @use : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
apply %use<A>(%addr) : $@convention(thin) <T> (@in_guaranteed T) -> ()
|
|
%ret = tuple ()
|
|
return %ret : $()
|
|
}
|