<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/98480>98480</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[optimization] gcc generate better code than clang related to build complex type
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vfdff
</td>
</tr>
</table>
<pre>
* test: https://gcc.godbolt.org/z/rfGE71oqP
```
double WORK[2*NUM];
complex<double> res[NUM];
void foo () {
for (int K = 0; K < NUM; ++K) {
res[K] = complex<double>(WORK[K], WORK[K + NUM]);
}
}
```
* gcc:
```
.L2:
ldr q30, [x0]
add x0, x0, 16
ldr q31, [x0, 8176]
st2 {v30.2d - v31.2d}, [x1], 32
cmp x2, x0
bne .L2
```
* llvm: has 2 extra add instructions compare to gcc
```
.LBB0_1: // =>This Inner Loop Header: Depth=1
ldr q0, [x9]
add x11, x10, x8
add x8, x8, #32
ldr q1, [x9, #8192]
cmp x8, #4, lsl #12 // =16384
add x9, x9, #16
st2 { v0.2d, v1.2d }, [x11]
b.ne .LBB0_1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVE2P4zYM_TX0hRhDouzYPvgQTyZtMdsPFC16LGxJcVw4VkZSguz--kKyJ7PJzO4KgahE1CP5-MLWuaGftK4hbyDfJO3J742tzzu12yWdUZ9roDV67TyINe69PzoQa6At0LaXMu2N6szoU2N7oO0XoK3d_fRUcPPyB7ANsDWs2PKJX5U5daPGf37_8xnyhoDWv_39K-QbEM3sIM3hOOoLiMfZFcQTWu0gb-4c5_1sBoU7YxCoBKoQiuUacWds-HWYPD4jiA0yEE08PmLAEg0CNUDN891DXAI-Q76JDz_ICahcagheQI-vJT0HUFxypeqaLiIUmyXz6-GWm2WnNfZSBpY_cko_0fUKlzUqiy-ChSwgby4shL5xaJWK9hJ95p2v3oOE9SL4GxA9YsmL1TtA5ylaKJqzYCkpfMCz4CmpUNzynC_MCLp9LA_HORtasrm57SYdbSj0-yyN4_kQVdk6JNQXb9tY6TA5b0_SD2ZysXet1ehNZPVjSpuG_csD1A_WrPugCRBPf-0Hh79Mk7b4yZgj_qxbpW1A2eij34PY8G8wfO1U9WGnLjx24MLnbpXf6GW53AYsEvckX4Pxt2CzZ8krehf32pNXvCzY0Y3hzOk7TPCVKLMF7JpbjHWNeC-1r9SD56Ce4HcO6sGv5cPfsuzSWRWvrbptY6JqoSpRtYmueUGsYFlFLNnXWpeKZXKnipWWq4KLFRHbcdVp0mXZlclQE6OMFZxzIXJepUxSucqLTOckK9kKyJg-tMOYBrGFKZcMzp10XZVZyZKx7fTo4uwkkmM79UCB28TWwf-hO_UOMjYOzrs3BD_4MQ5cc_TDYfjSBqWGWdNLib2etG29xk57ry1KozT6fTthxEerx9ZrFfTcnYZRvQ4n9J-POjnZsb4b0oPfn7pUmgPQNv5jZvNwtOY_LT3QNlbkgLZzUeea_g8AAP__fC-OVA">