brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.9 KiB · 4556df3 Raw
577 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=slp-vectorizer -S -mtriple=riscv64-unknown-linux-gnu -mattr=+v < %s | FileCheck %s --check-prefixes=CHECK,NO-ZVFHMIN-ZVFBFMIN3; RUN: opt -passes=slp-vectorizer -S -mtriple=riscv64-unknown-linux-gnu -mattr=+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN-ZVFBFMIN4 5 6define void @test(ptr %p, ptr noalias %s) {7; CHECK-LABEL: @test(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [48 x float], ptr [[P:%.*]], i64 0, i64 010; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds [48 x float], ptr [[P]], i64 0, i64 3011; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds float, ptr [[S:%.*]], i64 012; CHECK-NEXT:    [[TMP0:%.*]] = call <8 x float> @llvm.experimental.vp.strided.load.v8f32.p0.i64(ptr align 4 [[ARRAYIDX]], i64 16, <8 x i1> splat (i1 true), i32 8)13; CHECK-NEXT:    [[TMP1:%.*]] = call <8 x float> @llvm.experimental.vp.strided.load.v8f32.p0.i64(ptr align 4 [[ARRAYIDX1]], i64 -16, <8 x i1> splat (i1 true), i32 8)14; CHECK-NEXT:    [[TMP2:%.*]] = fsub fast <8 x float> [[TMP1]], [[TMP0]]15; CHECK-NEXT:    store <8 x float> [[TMP2]], ptr [[ARRAYIDX2]], align 416; CHECK-NEXT:    ret void17;18entry:19  %arrayidx = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 020  %i = load float, ptr %arrayidx, align 421  %arrayidx1 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 3022  %i1 = load float, ptr %arrayidx1, align 423  %add = fsub fast float %i1, %i24  %arrayidx2 = getelementptr inbounds float, ptr %s, i64 025  store float %add, ptr %arrayidx2, align 426  %arrayidx4 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 427  %i2 = load float, ptr %arrayidx4, align 428  %arrayidx6 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 2629  %i3 = load float, ptr %arrayidx6, align 430  %add7 = fsub fast float %i3, %i231  %arrayidx9 = getelementptr inbounds float, ptr %s, i64 132  store float %add7, ptr %arrayidx9, align 433  %arrayidx11 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 834  %i4 = load float, ptr %arrayidx11, align 435  %arrayidx13 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 2236  %i5 = load float, ptr %arrayidx13, align 437  %add14 = fsub fast float %i5, %i438  %arrayidx16 = getelementptr inbounds float, ptr %s, i64 239  store float %add14, ptr %arrayidx16, align 440  %arrayidx18 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 1241  %i6 = load float, ptr %arrayidx18, align 442  %arrayidx20 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 1843  %i7 = load float, ptr %arrayidx20, align 444  %add21 = fsub fast float %i7, %i645  %arrayidx23 = getelementptr inbounds float, ptr %s, i64 346  store float %add21, ptr %arrayidx23, align 447  %arrayidx25 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 1648  %i8 = load float, ptr %arrayidx25, align 449  %arrayidx27 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 1450  %i9 = load float, ptr %arrayidx27, align 451  %add28 = fsub fast float %i9, %i852  %arrayidx30 = getelementptr inbounds float, ptr %s, i64 453  store float %add28, ptr %arrayidx30, align 454  %arrayidx32 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 2055  %i10 = load float, ptr %arrayidx32, align 456  %arrayidx34 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 1057  %i11 = load float, ptr %arrayidx34, align 458  %add35 = fsub fast float %i11, %i1059  %arrayidx37 = getelementptr inbounds float, ptr %s, i64 560  store float %add35, ptr %arrayidx37, align 461  %arrayidx39 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 2462  %i12 = load float, ptr %arrayidx39, align 463  %arrayidx41 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 664  %i13 = load float, ptr %arrayidx41, align 465  %add42 = fsub fast float %i13, %i1266  %arrayidx44 = getelementptr inbounds float, ptr %s, i64 667  store float %add42, ptr %arrayidx44, align 468  %arrayidx46 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 2869  %i14 = load float, ptr %arrayidx46, align 470  %arrayidx48 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 271  %i15 = load float, ptr %arrayidx48, align 472  %add49 = fsub fast float %i15, %i1473  %arrayidx51 = getelementptr inbounds float, ptr %s, i64 774  store float %add49, ptr %arrayidx51, align 475  ret void76}77 78define void @test1(ptr %p, ptr noalias %s, i32 %stride) {79; CHECK-LABEL: @test1(80; CHECK-NEXT:  entry:81; CHECK-NEXT:    [[STR:%.*]] = zext i32 [[STRIDE:%.*]] to i6482; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [48 x float], ptr [[P:%.*]], i64 0, i64 083; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds [48 x float], ptr [[P]], i64 0, i64 3084; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds float, ptr [[S:%.*]], i64 085; CHECK-NEXT:    [[TMP0:%.*]] = mul i64 [[STR]], 486; CHECK-NEXT:    [[TMP1:%.*]] = call <8 x float> @llvm.experimental.vp.strided.load.v8f32.p0.i64(ptr align 4 [[ARRAYIDX]], i64 [[TMP0]], <8 x i1> splat (i1 true), i32 8)87; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x float> @llvm.experimental.vp.strided.load.v8f32.p0.i64(ptr align 4 [[ARRAYIDX1]], i64 -16, <8 x i1> splat (i1 true), i32 8)88; CHECK-NEXT:    [[TMP3:%.*]] = fsub fast <8 x float> [[TMP2]], [[TMP1]]89; CHECK-NEXT:    store <8 x float> [[TMP3]], ptr [[ARRAYIDX2]], align 490; CHECK-NEXT:    ret void91;92entry:93  %str = zext i32 %stride to i6494  %arrayidx = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 095  %i = load float, ptr %arrayidx, align 496  %arrayidx1 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 3097  %i1 = load float, ptr %arrayidx1, align 498  %add = fsub fast float %i1, %i99  %arrayidx2 = getelementptr inbounds float, ptr %s, i64 0100  store float %add, ptr %arrayidx2, align 4101  %arrayidx4 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %str102  %i2 = load float, ptr %arrayidx4, align 4103  %arrayidx6 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 26104  %i3 = load float, ptr %arrayidx6, align 4105  %add7 = fsub fast float %i3, %i2106  %arrayidx9 = getelementptr inbounds float, ptr %s, i64 1107  store float %add7, ptr %arrayidx9, align 4108  %st1 = mul i64 %str, 2109  %arrayidx11 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st1110  %i4 = load float, ptr %arrayidx11, align 4111  %arrayidx13 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 22112  %i5 = load float, ptr %arrayidx13, align 4113  %add14 = fsub fast float %i5, %i4114  %arrayidx16 = getelementptr inbounds float, ptr %s, i64 2115  store float %add14, ptr %arrayidx16, align 4116  %st2 = mul i64 %str, 3117  %arrayidx18 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st2118  %i6 = load float, ptr %arrayidx18, align 4119  %arrayidx20 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 18120  %i7 = load float, ptr %arrayidx20, align 4121  %add21 = fsub fast float %i7, %i6122  %arrayidx23 = getelementptr inbounds float, ptr %s, i64 3123  store float %add21, ptr %arrayidx23, align 4124  %st3 = mul i64 %str, 4125  %arrayidx25 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st3126  %i8 = load float, ptr %arrayidx25, align 4127  %arrayidx27 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 14128  %i9 = load float, ptr %arrayidx27, align 4129  %add28 = fsub fast float %i9, %i8130  %arrayidx30 = getelementptr inbounds float, ptr %s, i64 4131  store float %add28, ptr %arrayidx30, align 4132  %st4 = mul i64 %str, 5133  %arrayidx32 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st4134  %i10 = load float, ptr %arrayidx32, align 4135  %arrayidx34 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 10136  %i11 = load float, ptr %arrayidx34, align 4137  %add35 = fsub fast float %i11, %i10138  %arrayidx37 = getelementptr inbounds float, ptr %s, i64 5139  store float %add35, ptr %arrayidx37, align 4140  %st5 = mul i64 %str, 6141  %arrayidx39 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st5142  %i12 = load float, ptr %arrayidx39, align 4143  %arrayidx41 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 6144  %i13 = load float, ptr %arrayidx41, align 4145  %add42 = fsub fast float %i13, %i12146  %arrayidx44 = getelementptr inbounds float, ptr %s, i64 6147  store float %add42, ptr %arrayidx44, align 4148  %st6 = mul i64 %str, 7149  %arrayidx46 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st6150  %i14 = load float, ptr %arrayidx46, align 4151  %arrayidx48 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 2152  %i15 = load float, ptr %arrayidx48, align 4153  %add49 = fsub fast float %i15, %i14154  %arrayidx51 = getelementptr inbounds float, ptr %s, i64 7155  store float %add49, ptr %arrayidx51, align 4156  ret void157}158 159define void @test2(ptr %p, ptr noalias %s, i32 %stride) {160; CHECK-LABEL: @test2(161; CHECK-NEXT:  entry:162; CHECK-NEXT:    [[STR:%.*]] = zext i32 [[STRIDE:%.*]] to i64163; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [48 x float], ptr [[P:%.*]], i64 0, i64 2164; CHECK-NEXT:    [[ST6:%.*]] = mul i64 [[STR]], 7165; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds [48 x float], ptr [[P]], i64 0, i64 [[ST6]]166; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds float, ptr [[S:%.*]], i64 0167; CHECK-NEXT:    [[TMP0:%.*]] = call <8 x float> @llvm.experimental.vp.strided.load.v8f32.p0.i64(ptr align 4 [[ARRAYIDX]], i64 16, <8 x i1> splat (i1 true), i32 8)168; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[STR]], -4169; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x float> @llvm.experimental.vp.strided.load.v8f32.p0.i64(ptr align 4 [[ARRAYIDX1]], i64 [[TMP1]], <8 x i1> splat (i1 true), i32 8)170; CHECK-NEXT:    [[TMP3:%.*]] = fsub fast <8 x float> [[TMP2]], [[TMP0]]171; CHECK-NEXT:    store <8 x float> [[TMP3]], ptr [[ARRAYIDX2]], align 4172; CHECK-NEXT:    ret void173;174entry:175  %str = zext i32 %stride to i64176  %arrayidx = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 2177  %i = load float, ptr %arrayidx, align 4178  %st6 = mul i64 %str, 7179  %arrayidx1 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st6180  %i1 = load float, ptr %arrayidx1, align 4181  %add = fsub fast float %i1, %i182  %arrayidx2 = getelementptr inbounds float, ptr %s, i64 0183  store float %add, ptr %arrayidx2, align 4184  %arrayidx4 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 6185  %i2 = load float, ptr %arrayidx4, align 4186  %st5 = mul i64 %str, 6187  %arrayidx6 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st5188  %i3 = load float, ptr %arrayidx6, align 4189  %add7 = fsub fast float %i3, %i2190  %arrayidx9 = getelementptr inbounds float, ptr %s, i64 1191  store float %add7, ptr %arrayidx9, align 4192  %arrayidx11 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 10193  %i4 = load float, ptr %arrayidx11, align 4194  %st4 = mul i64 %str, 5195  %arrayidx13 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st4196  %i5 = load float, ptr %arrayidx13, align 4197  %add14 = fsub fast float %i5, %i4198  %arrayidx16 = getelementptr inbounds float, ptr %s, i64 2199  store float %add14, ptr %arrayidx16, align 4200  %arrayidx18 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 14201  %i6 = load float, ptr %arrayidx18, align 4202  %st3 = mul i64 %str, 4203  %arrayidx20 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st3204  %i7 = load float, ptr %arrayidx20, align 4205  %add21 = fsub fast float %i7, %i6206  %arrayidx23 = getelementptr inbounds float, ptr %s, i64 3207  store float %add21, ptr %arrayidx23, align 4208  %arrayidx25 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 18209  %st2 = mul i64 %str, 3210  %i8 = load float, ptr %arrayidx25, align 4211  %arrayidx27 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st2212  %i9 = load float, ptr %arrayidx27, align 4213  %add28 = fsub fast float %i9, %i8214  %arrayidx30 = getelementptr inbounds float, ptr %s, i64 4215  store float %add28, ptr %arrayidx30, align 4216  %arrayidx32 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 22217  %i10 = load float, ptr %arrayidx32, align 4218  %st1 = mul i64 %str, 2219  %arrayidx34 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %st1220  %i11 = load float, ptr %arrayidx34, align 4221  %add35 = fsub fast float %i11, %i10222  %arrayidx37 = getelementptr inbounds float, ptr %s, i64 5223  store float %add35, ptr %arrayidx37, align 4224  %arrayidx39 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 26225  %i12 = load float, ptr %arrayidx39, align 4226  %arrayidx41 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 %str227  %i13 = load float, ptr %arrayidx41, align 4228  %add42 = fsub fast float %i13, %i12229  %arrayidx44 = getelementptr inbounds float, ptr %s, i64 6230  store float %add42, ptr %arrayidx44, align 4231  %arrayidx46 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 30232  %i14 = load float, ptr %arrayidx46, align 4233  %arrayidx48 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 0234  %i15 = load float, ptr %arrayidx48, align 4235  %add49 = fsub fast float %i15, %i14236  %arrayidx51 = getelementptr inbounds float, ptr %s, i64 7237  store float %add49, ptr %arrayidx51, align 4238  ret void239}240 241define void @test3(ptr %p, ptr noalias %s) {242; CHECK-LABEL: @test3(243; CHECK-NEXT:  entry:244; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [48 x float], ptr [[P:%.*]], i64 0, i64 0245; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds [48 x float], ptr [[P]], i64 0, i64 30246; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds float, ptr [[S:%.*]], i64 0247; CHECK-NEXT:    [[TMP0:%.*]] = call <8 x float> @llvm.experimental.vp.strided.load.v8f32.p0.i64(ptr align 4 [[ARRAYIDX]], i64 16, <8 x i1> splat (i1 true), i32 8)248; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x float> @llvm.experimental.vp.strided.load.v8f32.p0.i64(ptr align 4 [[ARRAYIDX1]], i64 -4, <8 x i1> splat (i1 true), i32 8)249; CHECK-NEXT:    [[TMP3:%.*]] = fsub fast <8 x float> [[TMP2]], [[TMP0]]250; CHECK-NEXT:    store <8 x float> [[TMP3]], ptr [[ARRAYIDX2]], align 4251; CHECK-NEXT:    ret void252;253entry:254  %arrayidx = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 0255  %i = load float, ptr %arrayidx, align 4256  %arrayidx1 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 30257  %i1 = load float, ptr %arrayidx1, align 4258  %add = fsub fast float %i1, %i259  %arrayidx2 = getelementptr inbounds float, ptr %s, i64 0260  store float %add, ptr %arrayidx2, align 4261  %arrayidx4 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 4262  %i2 = load float, ptr %arrayidx4, align 4263  %arrayidx6 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 29264  %i3 = load float, ptr %arrayidx6, align 4265  %add7 = fsub fast float %i3, %i2266  %arrayidx9 = getelementptr inbounds float, ptr %s, i64 1267  store float %add7, ptr %arrayidx9, align 4268  %arrayidx11 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 8269  %i4 = load float, ptr %arrayidx11, align 4270  %arrayidx13 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 28271  %i5 = load float, ptr %arrayidx13, align 4272  %add14 = fsub fast float %i5, %i4273  %arrayidx16 = getelementptr inbounds float, ptr %s, i64 2274  store float %add14, ptr %arrayidx16, align 4275  %arrayidx18 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 12276  %i6 = load float, ptr %arrayidx18, align 4277  %arrayidx20 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 27278  %i7 = load float, ptr %arrayidx20, align 4279  %add21 = fsub fast float %i7, %i6280  %arrayidx23 = getelementptr inbounds float, ptr %s, i64 3281  store float %add21, ptr %arrayidx23, align 4282  %arrayidx25 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 16283  %i8 = load float, ptr %arrayidx25, align 4284  %arrayidx27 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 26285  %i9 = load float, ptr %arrayidx27, align 4286  %add28 = fsub fast float %i9, %i8287  %arrayidx30 = getelementptr inbounds float, ptr %s, i64 4288  store float %add28, ptr %arrayidx30, align 4289  %arrayidx32 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 20290  %i10 = load float, ptr %arrayidx32, align 4291  %arrayidx34 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 25292  %i11 = load float, ptr %arrayidx34, align 4293  %add35 = fsub fast float %i11, %i10294  %arrayidx37 = getelementptr inbounds float, ptr %s, i64 5295  store float %add35, ptr %arrayidx37, align 4296  %arrayidx39 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 24297  %i12 = load float, ptr %arrayidx39, align 4298  %arrayidx41 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 24299  %i13 = load float, ptr %arrayidx41, align 4300  %add42 = fsub fast float %i13, %i12301  %arrayidx44 = getelementptr inbounds float, ptr %s, i64 6302  store float %add42, ptr %arrayidx44, align 4303  %arrayidx46 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 28304  %i14 = load float, ptr %arrayidx46, align 4305  %arrayidx48 = getelementptr inbounds [48 x float], ptr %p, i64 0, i64 23306  %i15 = load float, ptr %arrayidx48, align 4307  %add49 = fsub fast float %i15, %i14308  %arrayidx51 = getelementptr inbounds float, ptr %s, i64 7309  store float %add49, ptr %arrayidx51, align 4310  ret void311}312 313 314define void @test_bf16(ptr %p, ptr noalias %s) {315; NO-ZVFHMIN-ZVFBFMIN-LABEL: @test_bf16(316; NO-ZVFHMIN-ZVFBFMIN-NEXT:  entry:317; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P:%.*]], i64 0, i64 0318; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I:%.*]] = load bfloat, ptr [[ARRAYIDX]], align 4319; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 30320; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I1:%.*]] = load bfloat, ptr [[ARRAYIDX1]], align 4321; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD:%.*]] = fsub fast bfloat [[I1]], [[I]]322; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds bfloat, ptr [[S:%.*]], i64 0323; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store bfloat [[ADD]], ptr [[ARRAYIDX2]], align 4324; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX4:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 4325; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I2:%.*]] = load bfloat, ptr [[ARRAYIDX4]], align 4326; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 26327; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I3:%.*]] = load bfloat, ptr [[ARRAYIDX6]], align 4328; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD7:%.*]] = fsub fast bfloat [[I3]], [[I2]]329; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds bfloat, ptr [[S]], i64 1330; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store bfloat [[ADD7]], ptr [[ARRAYIDX9]], align 4331; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 8332; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I4:%.*]] = load bfloat, ptr [[ARRAYIDX11]], align 4333; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 22334; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I5:%.*]] = load bfloat, ptr [[ARRAYIDX13]], align 4335; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD14:%.*]] = fsub fast bfloat [[I5]], [[I4]]336; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX16:%.*]] = getelementptr inbounds bfloat, ptr [[S]], i64 2337; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store bfloat [[ADD14]], ptr [[ARRAYIDX16]], align 4338; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX18:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 12339; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I6:%.*]] = load bfloat, ptr [[ARRAYIDX18]], align 4340; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX20:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 18341; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I7:%.*]] = load bfloat, ptr [[ARRAYIDX20]], align 4342; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD21:%.*]] = fsub fast bfloat [[I7]], [[I6]]343; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX23:%.*]] = getelementptr inbounds bfloat, ptr [[S]], i64 3344; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store bfloat [[ADD21]], ptr [[ARRAYIDX23]], align 4345; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX25:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 16346; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I8:%.*]] = load bfloat, ptr [[ARRAYIDX25]], align 4347; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX27:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 14348; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I9:%.*]] = load bfloat, ptr [[ARRAYIDX27]], align 4349; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD28:%.*]] = fsub fast bfloat [[I9]], [[I8]]350; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX30:%.*]] = getelementptr inbounds bfloat, ptr [[S]], i64 4351; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store bfloat [[ADD28]], ptr [[ARRAYIDX30]], align 4352; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX32:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 20353; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I10:%.*]] = load bfloat, ptr [[ARRAYIDX32]], align 4354; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX34:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 10355; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I11:%.*]] = load bfloat, ptr [[ARRAYIDX34]], align 4356; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD35:%.*]] = fsub fast bfloat [[I11]], [[I10]]357; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX37:%.*]] = getelementptr inbounds bfloat, ptr [[S]], i64 5358; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store bfloat [[ADD35]], ptr [[ARRAYIDX37]], align 4359; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX39:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 24360; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I12:%.*]] = load bfloat, ptr [[ARRAYIDX39]], align 4361; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX41:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 6362; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I13:%.*]] = load bfloat, ptr [[ARRAYIDX41]], align 4363; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD42:%.*]] = fsub fast bfloat [[I13]], [[I12]]364; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX44:%.*]] = getelementptr inbounds bfloat, ptr [[S]], i64 6365; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store bfloat [[ADD42]], ptr [[ARRAYIDX44]], align 4366; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX46:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 28367; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I14:%.*]] = load bfloat, ptr [[ARRAYIDX46]], align 4368; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX48:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 2369; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I15:%.*]] = load bfloat, ptr [[ARRAYIDX48]], align 4370; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD49:%.*]] = fsub fast bfloat [[I15]], [[I14]]371; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX51:%.*]] = getelementptr inbounds bfloat, ptr [[S]], i64 7372; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store bfloat [[ADD49]], ptr [[ARRAYIDX51]], align 4373; NO-ZVFHMIN-ZVFBFMIN-NEXT:    ret void374;375; ZVFHMIN-ZVFBFMIN-LABEL: @test_bf16(376; ZVFHMIN-ZVFBFMIN-NEXT:  entry:377; ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P:%.*]], i64 0, i64 0378; ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds [48 x bfloat], ptr [[P]], i64 0, i64 30379; ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds bfloat, ptr [[S:%.*]], i64 0380; ZVFHMIN-ZVFBFMIN-NEXT:    [[TMP15:%.*]] = call <8 x bfloat> @llvm.experimental.vp.strided.load.v8bf16.p0.i64(ptr align 4 [[ARRAYIDX]], i64 8, <8 x i1> splat (i1 true), i32 8)381; ZVFHMIN-ZVFBFMIN-NEXT:    [[TMP7:%.*]] = call <8 x bfloat> @llvm.experimental.vp.strided.load.v8bf16.p0.i64(ptr align 4 [[ARRAYIDX1]], i64 -8, <8 x i1> splat (i1 true), i32 8)382; ZVFHMIN-ZVFBFMIN-NEXT:    [[TMP16:%.*]] = fsub fast <8 x bfloat> [[TMP7]], [[TMP15]]383; ZVFHMIN-ZVFBFMIN-NEXT:    store <8 x bfloat> [[TMP16]], ptr [[ARRAYIDX2]], align 4384; ZVFHMIN-ZVFBFMIN-NEXT:    ret void385;386entry:387  %arrayidx = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 0388  %i = load bfloat, ptr %arrayidx, align 4389  %arrayidx1 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 30390  %i1 = load bfloat, ptr %arrayidx1, align 4391  %add = fsub fast bfloat %i1, %i392  %arrayidx2 = getelementptr inbounds bfloat, ptr %s, i64 0393  store bfloat %add, ptr %arrayidx2, align 4394  %arrayidx4 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 4395  %i2 = load bfloat, ptr %arrayidx4, align 4396  %arrayidx6 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 26397  %i3 = load bfloat, ptr %arrayidx6, align 4398  %add7 = fsub fast bfloat %i3, %i2399  %arrayidx9 = getelementptr inbounds bfloat, ptr %s, i64 1400  store bfloat %add7, ptr %arrayidx9, align 4401  %arrayidx11 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 8402  %i4 = load bfloat, ptr %arrayidx11, align 4403  %arrayidx13 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 22404  %i5 = load bfloat, ptr %arrayidx13, align 4405  %add14 = fsub fast bfloat %i5, %i4406  %arrayidx16 = getelementptr inbounds bfloat, ptr %s, i64 2407  store bfloat %add14, ptr %arrayidx16, align 4408  %arrayidx18 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 12409  %i6 = load bfloat, ptr %arrayidx18, align 4410  %arrayidx20 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 18411  %i7 = load bfloat, ptr %arrayidx20, align 4412  %add21 = fsub fast bfloat %i7, %i6413  %arrayidx23 = getelementptr inbounds bfloat, ptr %s, i64 3414  store bfloat %add21, ptr %arrayidx23, align 4415  %arrayidx25 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 16416  %i8 = load bfloat, ptr %arrayidx25, align 4417  %arrayidx27 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 14418  %i9 = load bfloat, ptr %arrayidx27, align 4419  %add28 = fsub fast bfloat %i9, %i8420  %arrayidx30 = getelementptr inbounds bfloat, ptr %s, i64 4421  store bfloat %add28, ptr %arrayidx30, align 4422  %arrayidx32 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 20423  %i10 = load bfloat, ptr %arrayidx32, align 4424  %arrayidx34 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 10425  %i11 = load bfloat, ptr %arrayidx34, align 4426  %add35 = fsub fast bfloat %i11, %i10427  %arrayidx37 = getelementptr inbounds bfloat, ptr %s, i64 5428  store bfloat %add35, ptr %arrayidx37, align 4429  %arrayidx39 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 24430  %i12 = load bfloat, ptr %arrayidx39, align 4431  %arrayidx41 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 6432  %i13 = load bfloat, ptr %arrayidx41, align 4433  %add42 = fsub fast bfloat %i13, %i12434  %arrayidx44 = getelementptr inbounds bfloat, ptr %s, i64 6435  store bfloat %add42, ptr %arrayidx44, align 4436  %arrayidx46 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 28437  %i14 = load bfloat, ptr %arrayidx46, align 4438  %arrayidx48 = getelementptr inbounds [48 x bfloat], ptr %p, i64 0, i64 2439  %i15 = load bfloat, ptr %arrayidx48, align 4440  %add49 = fsub fast bfloat %i15, %i14441  %arrayidx51 = getelementptr inbounds bfloat, ptr %s, i64 7442  store bfloat %add49, ptr %arrayidx51, align 4443  ret void444}445 446define void @test_f16(ptr %p, ptr noalias %s) {447; NO-ZVFHMIN-ZVFBFMIN-LABEL: @test_f16(448; NO-ZVFHMIN-ZVFBFMIN-NEXT:  entry:449; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [48 x half], ptr [[P:%.*]], i64 0, i64 0450; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I:%.*]] = load half, ptr [[ARRAYIDX]], align 4451; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 30452; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I1:%.*]] = load half, ptr [[ARRAYIDX1]], align 4453; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD:%.*]] = fsub fast half [[I1]], [[I]]454; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds half, ptr [[S:%.*]], i64 0455; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store half [[ADD]], ptr [[ARRAYIDX2]], align 4456; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX4:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 4457; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I2:%.*]] = load half, ptr [[ARRAYIDX4]], align 4458; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 26459; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I3:%.*]] = load half, ptr [[ARRAYIDX6]], align 4460; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD7:%.*]] = fsub fast half [[I3]], [[I2]]461; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds half, ptr [[S]], i64 1462; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store half [[ADD7]], ptr [[ARRAYIDX9]], align 4463; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 8464; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I4:%.*]] = load half, ptr [[ARRAYIDX11]], align 4465; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 22466; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I5:%.*]] = load half, ptr [[ARRAYIDX13]], align 4467; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD14:%.*]] = fsub fast half [[I5]], [[I4]]468; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX16:%.*]] = getelementptr inbounds half, ptr [[S]], i64 2469; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store half [[ADD14]], ptr [[ARRAYIDX16]], align 4470; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX18:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 12471; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I6:%.*]] = load half, ptr [[ARRAYIDX18]], align 4472; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX20:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 18473; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I7:%.*]] = load half, ptr [[ARRAYIDX20]], align 4474; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD21:%.*]] = fsub fast half [[I7]], [[I6]]475; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX23:%.*]] = getelementptr inbounds half, ptr [[S]], i64 3476; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store half [[ADD21]], ptr [[ARRAYIDX23]], align 4477; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX25:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 16478; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I8:%.*]] = load half, ptr [[ARRAYIDX25]], align 4479; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX27:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 14480; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I9:%.*]] = load half, ptr [[ARRAYIDX27]], align 4481; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD28:%.*]] = fsub fast half [[I9]], [[I8]]482; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX30:%.*]] = getelementptr inbounds half, ptr [[S]], i64 4483; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store half [[ADD28]], ptr [[ARRAYIDX30]], align 4484; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX32:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 20485; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I10:%.*]] = load half, ptr [[ARRAYIDX32]], align 4486; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX34:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 10487; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I11:%.*]] = load half, ptr [[ARRAYIDX34]], align 4488; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD35:%.*]] = fsub fast half [[I11]], [[I10]]489; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX37:%.*]] = getelementptr inbounds half, ptr [[S]], i64 5490; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store half [[ADD35]], ptr [[ARRAYIDX37]], align 4491; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX39:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 24492; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I12:%.*]] = load half, ptr [[ARRAYIDX39]], align 4493; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX41:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 6494; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I13:%.*]] = load half, ptr [[ARRAYIDX41]], align 4495; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD42:%.*]] = fsub fast half [[I13]], [[I12]]496; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX44:%.*]] = getelementptr inbounds half, ptr [[S]], i64 6497; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store half [[ADD42]], ptr [[ARRAYIDX44]], align 4498; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX46:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 28499; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I14:%.*]] = load half, ptr [[ARRAYIDX46]], align 4500; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX48:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 2501; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[I15:%.*]] = load half, ptr [[ARRAYIDX48]], align 4502; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ADD49:%.*]] = fsub fast half [[I15]], [[I14]]503; NO-ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX51:%.*]] = getelementptr inbounds half, ptr [[S]], i64 7504; NO-ZVFHMIN-ZVFBFMIN-NEXT:    store half [[ADD49]], ptr [[ARRAYIDX51]], align 4505; NO-ZVFHMIN-ZVFBFMIN-NEXT:    ret void506;507; ZVFHMIN-ZVFBFMIN-LABEL: @test_f16(508; ZVFHMIN-ZVFBFMIN-NEXT:  entry:509; ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [48 x half], ptr [[P:%.*]], i64 0, i64 0510; ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds [48 x half], ptr [[P]], i64 0, i64 30511; ZVFHMIN-ZVFBFMIN-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds half, ptr [[S:%.*]], i64 0512; ZVFHMIN-ZVFBFMIN-NEXT:    [[TMP15:%.*]] = call <8 x half> @llvm.experimental.vp.strided.load.v8f16.p0.i64(ptr align 4 [[ARRAYIDX]], i64 8, <8 x i1> splat (i1 true), i32 8)513; ZVFHMIN-ZVFBFMIN-NEXT:    [[TMP7:%.*]] = call <8 x half> @llvm.experimental.vp.strided.load.v8f16.p0.i64(ptr align 4 [[ARRAYIDX1]], i64 -8, <8 x i1> splat (i1 true), i32 8)514; ZVFHMIN-ZVFBFMIN-NEXT:    [[TMP16:%.*]] = fsub fast <8 x half> [[TMP7]], [[TMP15]]515; ZVFHMIN-ZVFBFMIN-NEXT:    store <8 x half> [[TMP16]], ptr [[ARRAYIDX2]], align 4516; ZVFHMIN-ZVFBFMIN-NEXT:    ret void517;518entry:519  %arrayidx = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 0520  %i = load half, ptr %arrayidx, align 4521  %arrayidx1 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 30522  %i1 = load half, ptr %arrayidx1, align 4523  %add = fsub fast half %i1, %i524  %arrayidx2 = getelementptr inbounds half, ptr %s, i64 0525  store half %add, ptr %arrayidx2, align 4526  %arrayidx4 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 4527  %i2 = load half, ptr %arrayidx4, align 4528  %arrayidx6 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 26529  %i3 = load half, ptr %arrayidx6, align 4530  %add7 = fsub fast half %i3, %i2531  %arrayidx9 = getelementptr inbounds half, ptr %s, i64 1532  store half %add7, ptr %arrayidx9, align 4533  %arrayidx11 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 8534  %i4 = load half, ptr %arrayidx11, align 4535  %arrayidx13 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 22536  %i5 = load half, ptr %arrayidx13, align 4537  %add14 = fsub fast half %i5, %i4538  %arrayidx16 = getelementptr inbounds half, ptr %s, i64 2539  store half %add14, ptr %arrayidx16, align 4540  %arrayidx18 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 12541  %i6 = load half, ptr %arrayidx18, align 4542  %arrayidx20 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 18543  %i7 = load half, ptr %arrayidx20, align 4544  %add21 = fsub fast half %i7, %i6545  %arrayidx23 = getelementptr inbounds half, ptr %s, i64 3546  store half %add21, ptr %arrayidx23, align 4547  %arrayidx25 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 16548  %i8 = load half, ptr %arrayidx25, align 4549  %arrayidx27 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 14550  %i9 = load half, ptr %arrayidx27, align 4551  %add28 = fsub fast half %i9, %i8552  %arrayidx30 = getelementptr inbounds half, ptr %s, i64 4553  store half %add28, ptr %arrayidx30, align 4554  %arrayidx32 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 20555  %i10 = load half, ptr %arrayidx32, align 4556  %arrayidx34 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 10557  %i11 = load half, ptr %arrayidx34, align 4558  %add35 = fsub fast half %i11, %i10559  %arrayidx37 = getelementptr inbounds half, ptr %s, i64 5560  store half %add35, ptr %arrayidx37, align 4561  %arrayidx39 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 24562  %i12 = load half, ptr %arrayidx39, align 4563  %arrayidx41 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 6564  %i13 = load half, ptr %arrayidx41, align 4565  %add42 = fsub fast half %i13, %i12566  %arrayidx44 = getelementptr inbounds half, ptr %s, i64 6567  store half %add42, ptr %arrayidx44, align 4568  %arrayidx46 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 28569  %i14 = load half, ptr %arrayidx46, align 4570  %arrayidx48 = getelementptr inbounds [48 x half], ptr %p, i64 0, i64 2571  %i15 = load half, ptr %arrayidx48, align 4572  %add49 = fsub fast half %i15, %i14573  %arrayidx51 = getelementptr inbounds half, ptr %s, i64 7574  store half %add49, ptr %arrayidx51, align 4575  ret void576}577