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