@@ -36,6 +36,9 @@ pub struct Baz {
3636// CHECK-LABEL: @vec_iterator_cast_primitive
3737#[ no_mangle]
3838pub fn vec_iterator_cast_primitive ( vec : Vec < i8 > ) -> Vec < u8 > {
39+ // CHECK-NOT: loop
40+ // CHECK: call
41+ // CHECK-SAME: void @llvm.assume(i1 %{{.+}})
3942 // CHECK-NOT: loop
4043 // CHECK-NOT: call
4144 vec. into_iter ( ) . map ( |e| e as u8 ) . collect ( )
@@ -44,14 +47,37 @@ pub fn vec_iterator_cast_primitive(vec: Vec<i8>) -> Vec<u8> {
4447// CHECK-LABEL: @vec_iterator_cast_wrapper
4548#[ no_mangle]
4649pub fn vec_iterator_cast_wrapper ( vec : Vec < u8 > ) -> Vec < Wrapper < u8 > > {
50+ // CHECK-NOT: loop
51+ // CHECK: call
52+ // CHECK-SAME: void @llvm.assume(i1 %{{.+}})
4753 // CHECK-NOT: loop
4854 // CHECK-NOT: call
4955 vec. into_iter ( ) . map ( |e| Wrapper ( e) ) . collect ( )
5056}
5157
58+ // CHECK-LABEL: @vec_iterator_cast_signed
59+ #[ no_mangle]
60+ pub fn vec_iterator_cast_signed ( vec : Vec < i32 > ) -> Vec < u32 > {
61+ // CHECK-NOT: and i{{[0-9]+}} %{{.*}}, {{[0-9]+}}
62+ vec. into_iter ( ) . map ( |e| u32:: from_ne_bytes ( e. to_ne_bytes ( ) ) ) . collect ( )
63+ }
64+
65+ // CHECK-LABEL: @vec_iterator_cast_signed_nested
66+ #[ no_mangle]
67+ pub fn vec_iterator_cast_signed_nested ( vec : Vec < Vec < i32 > > ) -> Vec < Vec < u32 > > {
68+ // CHECK-NOT: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
69+ // CHECK-NOT: %{{.*}} = udiv
70+ vec. into_iter ( )
71+ . map ( |e| e. into_iter ( ) . map ( |e| u32:: from_ne_bytes ( e. to_ne_bytes ( ) ) ) . collect ( ) )
72+ . collect ( )
73+ }
74+
5275// CHECK-LABEL: @vec_iterator_cast_unwrap
5376#[ no_mangle]
5477pub fn vec_iterator_cast_unwrap ( vec : Vec < Wrapper < u8 > > ) -> Vec < u8 > {
78+ // CHECK-NOT: loop
79+ // CHECK: call
80+ // CHECK-SAME: void @llvm.assume(i1 %{{.+}})
5581 // CHECK-NOT: loop
5682 // CHECK-NOT: call
5783 vec. into_iter ( ) . map ( |e| e. 0 ) . collect ( )
@@ -60,6 +86,9 @@ pub fn vec_iterator_cast_unwrap(vec: Vec<Wrapper<u8>>) -> Vec<u8> {
6086// CHECK-LABEL: @vec_iterator_cast_aggregate
6187#[ no_mangle]
6288pub fn vec_iterator_cast_aggregate ( vec : Vec < [ u64 ; 4 ] > ) -> Vec < Foo > {
89+ // CHECK-NOT: loop
90+ // CHECK: call
91+ // CHECK-SAME: void @llvm.assume(i1 %{{.+}})
6392 // CHECK-NOT: loop
6493 // CHECK-NOT: call
6594 vec. into_iter ( ) . map ( |e| unsafe { std:: mem:: transmute ( e) } ) . collect ( )
@@ -68,6 +97,9 @@ pub fn vec_iterator_cast_aggregate(vec: Vec<[u64; 4]>) -> Vec<Foo> {
6897// CHECK-LABEL: @vec_iterator_cast_deaggregate_tra
6998#[ no_mangle]
7099pub fn vec_iterator_cast_deaggregate_tra ( vec : Vec < Bar > ) -> Vec < [ u64 ; 4 ] > {
100+ // CHECK-NOT: loop
101+ // CHECK: call
102+ // CHECK-SAME: void @llvm.assume(i1 %{{.+}})
71103 // CHECK-NOT: loop
72104 // CHECK-NOT: call
73105
@@ -81,6 +113,9 @@ pub fn vec_iterator_cast_deaggregate_tra(vec: Vec<Bar>) -> Vec<[u64; 4]> {
81113// CHECK-LABEL: @vec_iterator_cast_deaggregate_fold
82114#[ no_mangle]
83115pub fn vec_iterator_cast_deaggregate_fold ( vec : Vec < Baz > ) -> Vec < [ u64 ; 4 ] > {
116+ // CHECK-NOT: loop
117+ // CHECK: call
118+ // CHECK-SAME: void @llvm.assume(i1 %{{.+}})
84119 // CHECK-NOT: loop
85120 // CHECK-NOT: call
86121
@@ -94,6 +129,11 @@ pub fn vec_iterator_cast_deaggregate_fold(vec: Vec<Baz>) -> Vec<[u64; 4]> {
94129// CHECK-LABEL: @vec_iterator_cast_unwrap_drop
95130#[ no_mangle]
96131pub fn vec_iterator_cast_unwrap_drop ( vec : Vec < Wrapper < String > > ) -> Vec < String > {
132+ // CHECK-NOT: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
133+ // CHECK-NOT: %{{.*}} = mul
134+ // CHECK-NOT: %{{.*}} = udiv
135+ // CHECK: call
136+ // CHECK-SAME: void @llvm.assume(i1 %{{.+}})
97137 // CHECK-NOT: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
98138 // CHECK-NOT: call
99139 // CHECK-NOT: %{{.*}} = mul
@@ -105,10 +145,16 @@ pub fn vec_iterator_cast_unwrap_drop(vec: Vec<Wrapper<String>>) -> Vec<String> {
105145// CHECK-LABEL: @vec_iterator_cast_wrap_drop
106146#[ no_mangle]
107147pub fn vec_iterator_cast_wrap_drop ( vec : Vec < String > ) -> Vec < Wrapper < String > > {
148+ // CHECK-NOT: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
149+ // CHECK-NOT: %{{.*}} = mul
150+ // CHECK-NOT: %{{.*}} = udiv
151+ // CHECK: call
152+ // CHECK-SAME: void @llvm.assume(i1 %{{.+}})
108153 // CHECK-NOT: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
109154 // CHECK-NOT: call
110155 // CHECK-NOT: %{{.*}} = mul
111156 // CHECK-NOT: %{{.*}} = udiv
157+ // CHECK: ret void
112158
113159 vec. into_iter ( ) . map ( Wrapper ) . collect ( )
114160}
0 commit comments