@@ -49,6 +49,19 @@ define <4 x float> @forward_masked_load(ptr %0, ptr %1) {
4949 ret <4 x float > %load2
5050}
5151
52+ define <4 x float > @forward_masked_load_arbitrary_mask (ptr %loc_a , ptr %loc_b , <4 x i1 > %mask ) {
53+ ; CHECK-LABEL: @forward_masked_load_arbitrary_mask(
54+ ; CHECK-NEXT: [[LOAD1:%.*]] = call <4 x float> @llvm.masked.load.v4f32.p0(ptr [[LOC_A:%.*]], i32 1, <4 x i1> [[MASK:%.*]], <4 x float> zeroinitializer)
55+ ; CHECK-NEXT: call void @llvm.masked.store.v4f32.p0(<4 x float> [[LOAD1]], ptr [[LOC_B:%.*]], i32 1, <4 x i1> [[MASK]])
56+ ; CHECK-NEXT: [[TMP1:%.*]] = select <4 x i1> [[MASK]], <4 x float> [[LOAD1]], <4 x float> zeroinitializer
57+ ; CHECK-NEXT: ret <4 x float> [[TMP1]]
58+ ;
59+ %load1 = call <4 x float > @llvm.masked.load.v4f32.p0 (ptr %loc_a , i32 1 , <4 x i1 > %mask , <4 x float > zeroinitializer )
60+ call void @llvm.masked.store.v4f32.p0 (<4 x float > %load1 , ptr %loc_b , i32 1 , <4 x i1 > %mask )
61+ %load2 = call <4 x float > @llvm.masked.load.v4f32.p0 (ptr %loc_b , i32 1 , <4 x i1 > %mask , <4 x float > zeroinitializer )
62+ ret <4 x float > %load2
63+ }
64+
5265define <4 x float > @forward_binop_splat_i1_mask (ptr %0 , ptr %1 ) {
5366; CHECK-LABEL: @forward_binop_splat_i1_mask(
5467; CHECK-NEXT: [[LOAD_0_0:%.*]] = call <4 x float> @llvm.masked.load.v4f32.p0(ptr [[TMP0:%.*]], i32 1, <4 x i1> splat (i1 true), <4 x float> zeroinitializer)
0 commit comments