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

    <tr>
        <th>Summary</th>
        <td>
            [PowerPC] Parameters are not stored in stack as per ABI
        </td>
    </tr>

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

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

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

<pre>
    For the below example, we can observe that the function parameters are not stored in stack slot as per ABI, instead being stored in other area.
The example is available here https://godbolt.org/z/Gfevrzh93

```
#include <stdio.h>

int __attribute__((noinline))  foo(long* y) {
  long **x = &y - 6; // needs to be &y+2 in clang, but as per ABI that is not recorded 
  printf("return address: %p\n", *(x+2));
  return **x;
}

/*
int __attribute__((noinline))  foo(long* y) {
  long **x = __builtin_frame_address(1);
  printf("return address: %p\n", *(x+2));
 return **x;
}
*/

int __attribute__((noinline))  bar() {
  long y = 200;
  return 1 + foo(&y);
}

int __attribute__((noinline))  xyz() {
 return 2 + bar();
}

int main() {
  return xyz();
}

```

The below is the explanation of the discrepancies.
```

// PowerPC gcc compiler at -O0
.L.foo(long*):
    mflr 0
    std 0,16(1)
    std 31,-8(1)
    stdu 1,-144(1)
    mr 31,1
    std 3,192(31) <--- Right: Stored at parameter area of the caller
    addi 9,31,144 <--- Got the frame pointer
    std 9,112(31)
    ld 9,112(31)
    addi 9,9,16 
    ld 9,0(9) <--- got the return address
    mr 4,9
    addis 3,2,.LC0@toc@ha
    addi 3,3,.LC0@toc@l
    bl printf

// PowerPc clang Compiler  at -O0
.Lfunc_begin0:
    mflr 0
    std 31, -8(1)
    stdu 1, -144(1)
 std 0, 160(1)
    mr      31, 1
    std 3, 128(31) <--- Wrong: Stored in SAVE reg area instead of caller parameter area
    addi 3, 31, 128
    addi 3, 3, -48
    std 3, 120(31)
    ld 3, 120(31)
    ld 4, 16(3)
    addis 3, 2, .L.str@toc@ha
    addi 3, 3, .L.str@toc@l
    bl printf

```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0Vt1u4zYTfRr6ZmCBGim2dOELx1kvFt8C36JbtJcGRY0ttjRpkFR-9ukLUnJiy03aAm1gxDBnOHPmzOGQwnt1MEQrdnfP7h5mog-ddasvvnsSTvxv1tj2ZbW1DkJH0JC2T0DP4njSxHADTwRSGLCNJ_dIEDoRkuO-NzIoa-AknDhSIOdBOAJjA_hgHbWgDPgg5O_gtQ0gPJzIwfr-SwyrjA8kWmhImcPFBhs6cjGQyBhf_9zRGQsoD-JRKC0aTdCRI-hCOHlWrBluGW4Ptm2sDpl1B4bbHwy3n_f06H50dcH4On4WfPzwNcNCGan7loAVGx9aZbOOFZ8GT2UC7HYiBKeaPtBux7BiWBmrjFaGGNYMa4C9tQwrbc2B4Rpe4hpb3jO-BoiLwHDNcP0MrHgAhosXmMOCFfcw4AVD1HoIFhpKZob3GCmQWsSIG2j6S9YG6pVPDDuS1rXUQsp2csqEfQKJjkLvDIi2deQjO8Dw7sTuNoYhxqgJVfUcsw2FsGLAPO4cUQ-rbPkwkhcx_0fc7HZNr3RQZrePUtqdsWOVX8D7V4r8oEZMNf6T_jfCJcOktJdUFHI-ITYHhvcjMUO_6wnJfzPv88uP67xjAkwJXlH9SfCjUGYCedz7GnPa98tDMxzIYUQon8YAPZ-0MCJNArtPS63y0tFJGKnIZ7cxRvl_s0_kvm3gICVIezwpHQ9-gPn_o1_2NbuSUEK2TogBjnvtgI8_fGiBM9zki7Ng3taLnOFmXt0YekiGvCyvTUc3bMkvY8TfNTKsoqmO82I-n8NP6tCFqLzvw-wS4W0Spvl1pkMKrcmNAUXbKqgZboY0ZXkO99mOYzWGgJNVJrxuiijinjx_RTFa9HuG1zzJvIBrf86wqi9qOYzJJ8fqlZMyBXqL7BMp8aBlXzeclTxYyUreicvs0aWYuujRo9Hn83wrCTlMQNicRXGpinjt7Bo6KMM_0ENiF95tPEw6f5YQ5At-I4j0NwScygLydD6vdPGri4J904Uy8H39yydwdBhkcb757H6UxkQ3Uw7PubG6taRayuoWFr8VyvuWcig9Gq4VNPQZ0kTNvmY-uA96PfybuL3X74uJMGtXRVsXtZjRKl8W5aJacixm3UoWmOeibPKWhOT1vuCtrKmkBgXVcilnaoUcyxyR87rgWGSSS2qLopIiXyIv9qzkdBRKZ1o_HuPDYKa872mVI19yPtOiIe3TswjRUJxpvqd4g9w9zNwqbpo3_cHHOpQP_i1MUEGn99Q4xNjdA3z763fQ22U-651eTd4vKnR9k0l7ZLiNmcav-cnZ30gGhtuEzzPcjgU8rvCPAAAA__-vi8Uc">