<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/185564>185564</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: Eliminate redundant scalar multiplication by reusing vector multiplication results
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Leo0506
</td>
</tr>
</table>
<pre>
```
define i1 @src(ptr %arg0, ptr %arg1) {
%v0 = load <2 x float>, ptr %arg1, align 4
%v1 = getelementptr inbounds nuw i8, ptr %arg1, i64 8
%v2 = load float, ptr %v1, align 4
%v3 = load <2 x float>, ptr %arg0, align 4
%v4 = getelementptr inbounds nuw i8, ptr %arg0, i64 8
%v5 = load float, ptr %v4, align 4
%v6 = fmul <2 x float> %v0, %v3
%v7 = extractelement <2 x float> %v6, i64 0
%v8 = extractelement <2 x float> %v0, i64 1
%v9 = extractelement <2 x float> %v3, i64 1
%v10 = fmul float %v8, %v9
%v11 = fadd float %v7, %v10
%v12 = fmul float %v2, %v5
%v13 = fadd float %v12, %v11
%v14 = fcmp olt float %v13, 0.000000e+00
ret i1 %v14
}
define i1 @tgt(ptr %arg0, ptr %arg1) {
%v0 = load <2 x float>, ptr %arg1, align 4
%v1 = getelementptr inbounds nuw i8, ptr %arg1, i64 8
%v2 = load float, ptr %v1, align 4
%v3 = load <2 x float>, ptr %arg0, align 4
%v4 = getelementptr inbounds nuw i8, ptr %arg0, i64 8
%v5 = load float, ptr %v4, align 4
%v6 = fmul <2 x float> %v0, %v3
%v7 = extractelement <2 x float> %v6, i64 0
%v8 = extractelement <2 x float> %v6, i64 1
%v9 = fadd float %v7, %v8
%v10 = fmul float %v2, %v5
%v11 = fadd float %v10, %v9
%v12 = fcmp olt float %v11, 0.000000e+00
ret i1 %v12
}
```
alive2: available in alive2 when timeout limit = 50000
```
----------------------------------------
define i1 @src(ptr %arg0, ptr %arg1) {
#0:
%v0 = load <2 x float>, ptr %arg1, align 4
%v1 = gep inbounds nuw ptr %arg1, 1 x i64 8
%v2 = load float, ptr %v1, align 4
%v3 = load <2 x float>, ptr %arg0, align 4
%v4 = gep inbounds nuw ptr %arg0, 1 x i64 8
%v5 = load float, ptr %v4, align 4
%v6 = fmul <2 x float> %v0, %v3
%v7 = extractelement <2 x float> %v6, i64 0
%v8 = extractelement <2 x float> %v0, i64 1
%v9 = extractelement <2 x float> %v3, i64 1
%v10 = fmul float %v8, %v9
%v11 = fadd float %v7, %v10
%v12 = fmul float %v2, %v5
%v13 = fadd float %v12, %v11
%v14 = fcmp olt float %v13, 0.000000
ret i1 %v14
}
=>
define i1 @tgt(ptr %arg0, ptr %arg1) {
#0:
%v0 = load <2 x float>, ptr %arg1, align 4
%v1 = gep inbounds nuw ptr %arg1, 1 x i64 8
%v2 = load float, ptr %v1, align 4
%v3 = load <2 x float>, ptr %arg0, align 4
%v4 = gep inbounds nuw ptr %arg0, 1 x i64 8
%v5 = load float, ptr %v4, align 4
%v6 = fmul <2 x float> %v0, %v3
%v7 = extractelement <2 x float> %v6, i64 0
%v8 = extractelement <2 x float> %v6, i64 1
%v9 = fadd float %v7, %v8
%v10 = fmul float %v2, %v5
%v11 = fadd float %v10, %v9
%v12 = fcmp olt float %v11, 0.000000
ret i1 %v12
}
Transformation seems to be correct!
```
godbolt: https://godbolt.org/z/nTxrcxfbK
Pattern found in: https://github.com/dtcxzyw/llvm-opt-benchmark/blob/main/bench/pbrt-v4/optimized/vecmath.ll
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsV8Fu4zYQ_Rr6QsQgh5YsHXRwktWlLdDD_gAljWy2FCmQlOPk6wtKsZ06SupdbLFZIIJhQOK84RvOPDxJeq-2BrEgyS1J7hdyCDvrit_RsoSli8o2jwVJ2fOPbRpslUGqOCUr5l1NIOuDowQS6baMwB0933ICOSXrW8I28cmeUSLuqbayoUTcAT3QVlsZiPjyCndHpVZbQ1cRO4L5CN5iQI0dmhDDlansYBpPzfBAVTaTRaUrmp1ywJnAtPMZsJ_dVFzJmM2BV9_KmL1mnLzDeDW3aToC2m7Ql4ynFkTMWNkJsR4ReAhO1keqs9j0SI-dsNm12FNp_ITNr8WK11jOzmWOsRObY3H5OXAam1Y2zYvA9TGQs-NscpjLCMfA5JxRzGXkp0j-guU0AW3d9dTq8DJ8rIkt2XghgVs2HarDMGprRBO2Iev7-H-hu7AN1-ru1xPep-5-oO7St3T3liKy_9DYnCJmNcbZjBrhTUHwKwQBZ0G8cCTCNlKrPQIRGyr3UmlZaaTK0OkxfdihoUF1aIdAtepUGFkkcaeLXDdXXt9vhAQEI2LzY6XZ_3u-L1CcHj6ED77Jks2z_BYNfmAJfmjr--ne957rifs4YN_tfZ9S-1-k9pG19mva3TtG99VJ41vrOhmUNdQjdp4GSyuktXUO60CAX5jY1jaV1SHa4S6E3kcNQEmgfF5YWrclUD4RKM3Xg6sPbfXb5KN_yhDQGdrG0aHKzKRQYTdUy9p2BMom1IenxwcCpdb77sb24aZCU-866f4mUFbaVgTKTioT7-IKgbKvXLiJQ1XaPqhOPWFDoNxj3cmwW2q9aArR5CKXCyz4ei04h0zki12R8VxmnHO5bmWarRFF3iQSMRHQggC2UAUwSJngjAlgIl_WkOcJk3nGU-ANtGTFsJNKLyPdeAoL5f2ABc-SJF0ttKxQ-_FDGMDgAx1XCUD8LnbFWGM1bD1ZMa188Oc0QQWNxR_Ke2zoc1ljw-IBfomvHEYGpA6bwTTSBOprqaWj3aCD6rWqp-5Wj9Th4JXZ0j3Wwb4KcOgHHfxicLp4py-R17EpvbN_jVNSjtV4AuVzufsC_gkAAP__Ahd3SA">