<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/74601>74601</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
struct {__float128} on should be passed in registers on X86-64
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
clang:codegen
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jeanPerier
</td>
</tr>
</table>
<pre>
I am working on flang, and we have to deal with struct passing ABI in the context of C/Fortran interoperability.
I noticed that `struct {__float128}` are passed on the stack (byval) by clang on X86-64. Reading at the ABI, I would expect them to be passed in SSE register.
```
typedef struct {
__float128 x;
} S;
void bar(__float128 x);
void test(S x) {
bar(x.x);
}
```
LLVM IR for X86-64:
```
define dso_local void @test(ptr noundef byval(%struct.S) align 16 %0) {
%2 = getelementptr inbounds %struct.S, ptr %0, i32 0, i32 0
%3 = load fp128, ptr %2, align 16
call void @bar(fp128 noundef %3)
ret void
}
declare void @bar(fp128 noundef)
```
`clang -O3` Assembly:
```
test: # @test
movaps xmm0, xmmword ptr [rsp + 8]
jmp bar@PLT
```
For info, `gcc -O3` / `icc -O3` assembly looks like:
```
test:
jmp bar
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVE1v4zgM_TXyhWhgy589-JA0GyBAFzuYLBZzK2SLdtTIkiEpX_9-IdltmkE7NQI5psjH90iCzFrRK8Sa5CuSryN2dHtt6ldk6gcagSZqNL_WW2ADnLU5CNWDVtBJpnpCn4ApDmeEPTshOA0cmYSzcHuwzhxbB6NPoHpYrrYgFLg9QquVw4sD3cEToZuNNs4wBUI5NHpEwxohhbsuSLwm8XILSjvRIge3Zw5IEc_IpFy9vHRSM5fQipRrUsTADIaMyD1Jn8w61h6A0Kq5npgk9BGaK7Sevff4VRUPRbaAn8i4Z8lcCFqutl7bFs76KDngZcQ23AxeY_OeQyjY7f4Cg72wDs3MeD6LeP6FT3cdkWMHN_KTHW4a4ELS2UrKNexuX-E8acGhYYbQ6i6GPn7m6NA6QqtdcPiQbgK4LO7jyvWnpKfz-fm_v2H7Ezpt5oKR9HORHDuhELjVL1K3TEKgQrJ4ZjM6A0oflS_E3I-K0HyqyWLnmTIpegVJAYTmsTd84O5tFEi6hh4dShxQOQ8pVONBLdxhPYG_m2CeQKQUPvy5AaYBUGrGoRv9JN0CaRjwmdBbSMvkTddUzRD3Lsxj-uLO_gZdcP-t0hxb6af1D0jvIJ92hRTxNMYP_6R-9JfW4tDI61e9CS1Il_D9Q2j63rNJxKBPbLQAl2EINbwMw1kbPtUpXxk7AqErqEi-fpM9Pa_DGN5eXRb_eP4X_qBoo30rO-0zkCLu2_ZNG6EbbxE3C5vVgtT6YEGKA34j_Gti90ERr1P-mD6yCOukjJOqzIuijPZ1nnVNRTkrOS94S1ueY9blmPCiS7u8wkjUNKZpQuMiyZOMlosiaTtWNZhltGsr1pEsxoEJuZDyNCy06SNh7RHrMiviJJKsQWnDHqa0Ye0BFSfp8ldVEOonkVAaGk7SZas59qi8PV9HpvZ4D82xtySLpbDO3jI44STWX6xMvwLtPuy4u6X2ttDsbUdCdDSy3js3Wl9MuiF00wu3PzaLVg-EbnzG-fUwGv2KrSN0EwRaQjdB4_8BAAD__x4W1_8">