<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/55900>55900</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            PPC64 codgen issue when passing structure parameters by value
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ltertan
      </td>
    </tr>
</table>

<pre>
    **Compile options**:
```shell
--target=ppc64 -mcpu=a2 -O2
```

**Test-case**:
```c
#include <stdio.h>
#include <stdarg.h>

typedef struct { char c; } myStruct;

int test_check(int i, ...) {
        myStruct mS;
        va_list ap;

        va_start(ap, i);
        mS = va_arg(ap, myStruct);
        va_end(ap);
        return (int)(mS.c+i);
}

int main (void) {
        volatile int i = 0;

        myStruct mS = { 5 };
        i = test_check(1, mS);
        if (i == 6) printf("Passed\n"); else printf("Failed\n");

        return 0;
}

```

**Description**:

In big-endian mode, the generated instructions for the ```mS = va_arg(ap, myStruct) ``` line are wrong:

```assembly
        std 4, 56(1)
        lbz 4, 56(1)
```

The compiler should generate a load with an offset of 7 for this, on little endian. The code for big endian looks good.

Proposed corrected implementation
```assembly
     std     r4,88(r1)
     
     
     
     
     
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVE1v4zgM_TXKhYjhyh9NDj60yRaY0xTI3AeyJNvakSVDkltkf_1ScppJ0nQHGxiOJT6RfI-kWiuODaFP-OzsOCktwU5BWeOXTVI8kXxP8idS58vjB6n1srdeB-Z6GUixnyZel7Ae-TTjilFYf6c3B0_L5Z2c_5A-rDnz8qtY_ANdKMP1LCSQYueDUDYbSPHXF1bM6dKc3uE4SSE78MHNPAB5fAY-MAecFM-42sN4PCQTri_PKRMgYJo_-SD5L0I3cUMRuoMsywjdRk8LEk6_D0cwHs6-Pmxv7KdWPgCbbsJcADxqGjAQYjAKhtp-cjMekOk-gpHqGXpmcOcEQqURJ-hns5NhdgYWehFAN-Mh44Q-X8VHnW61GZlK596sEnfleLOahdhWSbiUd_4F-QvlEi4WqYrF-ZTv4ueqLg9JgsM9dqpLzOKZeKyOeU4O8-lwm1D6yryXglQ7g4vFAUjt5RXohSGJa9A9Dicl8680-49p2EvPnUrDdzsP6f3NQKv6NdZRMQOjFTJSDoOEXhrpWJACRV4aPA4wdNYl8znmH_vmNxS0MhKYk_DurOlvUjnDonJjq4_XIuAMQhldV_VSme21Xbf_3LXfFecHMuDL1eTAD3bW4kwYGGjLBLyrMACKYrvOy4B_8Hhir3yMYw3yCQG7cFEvg8UrXhkRhrKeDOjO_vLQWyuyyyRenZ0sNgmecU7yJPU4aTlKE1iq2B91iaKkDonMN9hSG3ejzP_5XImmENtiy1ZBIa_m9XWH9y8yQmlAeT9j4Qb8nDATZfrTvTdjPSfm2CiDdB7aI_aCnuVqdroZQph8rDN9wadHRec2Q-FxofXbx996cvZvGZvlJUVBeV-qapvnq6GhIqf8kRWiLYuNKDjfbgrWiYf49diycqVZi3PVkOoZZ8jI9yXROE_VfqUamlOa13n9UJdlWWe8oq3ohKirusw7wUmZS7xudBbzyKzrV65JKbVz79EYb1b_2xiJ90bKFA79szkMFk8g88DMKoVuUur_Amx69DE">