2021-04-03 06:05:11 -05:00
//
2018-05-04 13:07:35 -05:00
// compile-flags: -C no-prepopulate-passes
#![ crate_type = " lib " ]
#![ feature(repr_simd, platform_intrinsics) ]
#![ allow(non_camel_case_types) ]
#[ repr(simd) ]
#[ derive(Copy, Clone, PartialEq, Debug) ]
pub struct Vec2 < T > ( pub T , pub T ) ;
#[ repr(simd) ]
#[ derive(Copy, Clone, PartialEq, Debug) ]
pub struct Vec4 < T > ( pub T , pub T , pub T , pub T ) ;
extern " platform-intrinsic " {
fn simd_gather < T , P , M > ( value : T , pointers : P , mask : M ) -> T ;
}
// CHECK-LABEL: @gather_f32x2
#[ no_mangle ]
pub unsafe fn gather_f32x2 ( pointers : Vec2 < * const f32 > , mask : Vec2 < i32 > ,
values : Vec2 < f32 > ) -> Vec2 < f32 > {
2022-02-21 04:21:23 -06:00
// CHECK: call <2 x float> @llvm.masked.gather.v2f32.{{.+}}(<2 x {{float\*|ptr}}> {{.*}}, i32 {{.*}}, <2 x i1> {{.*}}, <2 x float> {{.*}})
2018-05-04 13:07:35 -05:00
simd_gather ( values , pointers , mask )
}
// CHECK-LABEL: @gather_pf32x2
#[ no_mangle ]
pub unsafe fn gather_pf32x2 ( pointers : Vec2 < * const * const f32 > , mask : Vec2 < i32 > ,
values : Vec2 < * const f32 > ) -> Vec2 < * const f32 > {
2022-02-21 04:21:23 -06:00
// CHECK: call <2 x {{float\*|ptr}}> @llvm.masked.gather.{{.+}}(<2 x {{float\*\*|ptr}}> {{.*}}, i32 {{.*}}, <2 x i1> {{.*}}, <2 x {{float\*|ptr}}> {{.*}})
2018-05-04 13:07:35 -05:00
simd_gather ( values , pointers , mask )
}