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

    <tr>
        <th>Summary</th>
        <td>
            `cabs (x + 0i)`and `cabs(0.0 + xi)` should be optimized to `abs(x)` even without `-ffast-math`
        </td>
    </tr>

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

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

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

<pre>
    Take the fortran testcase:
```
subroutine foo(a,b,n)
  real(kind(1d0))::a
  real(kind(1d0))::b
 integer::i,n
  complex(kind(1d0))::c

  c = a
 b=abs(c)

end subroutine foo
```

This should be just optimized to `abs(a)` rather than a call to `cabs`.

C testcase:
```
double
foo (double e)
{
  _Complex double x = __builtin_complex(0.0,e);
  return __builtin_cabs(e);
}
double
foo1 (double e)
{
  return __builtin_cabs(e);
}
```

Likewise for `hypot` too.
```
double
fooh (double e)
{
  return __builtin_hypot(e, 0.0);
}
```

The definition of hypot in C99 allows for this.

GCC has been handling `foo1`  function since before GCC 3.4.0. `fooh` function since GCC 4.4.0.
This is more likely to show up with fortran code than C or C++ code.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVE2P4ygQ_TX4UmoLY7c_Dj50HGUve-x7C0w5MCEQGdxJ769fgd0fM8poeqSIJNTjVb1HUdx7fbSIPXnckcd9xpeg3NxftPUnzTPh5Fv_zE8IQSFMbg4ztxDQh5F7JOUToXtCn0hNt0_66xcxuyVoG484wlpO2CAIGyxh3QoBmJEbwtqTtpKwtpA0xlgXOcsn_i2U2FDaBjzivG7qlGc7PrrzxeDttwzjVv87HEi5h_fkgpR7Ljxh7fhR97qilfCLyHs-rOuz0h68couRIBB-LD6AuwR91v-hhOCA1HRNw2OamsLMg8IZguIWOIzcmA02RlxN86_0wx-vQ7pFGFx_T84BYe26Bfipq9m9m_AyrKbBBrolU15exKJN0Pbl01OaU8KGRFLuPm8sLLP9il_F_QQjzf5ubcWfivs79rv38a8-4VX71M7RVPV2cSHaHpzLv2Og-usi1xSpygGSa98t9lkhSJy01UE7C26CxAXawtB1wI1xV5-UBKX9T43xzzCA4h4EogXFrTTaHqPg6HPUC9Nix0TrtR0RBE5uRojnyrzKab6BVQT_go2gKoG-NLn2cI4MRp_QvMWe9cpdYbnAVQf1MT5GJ3Ft7gHcDANhO8J2aTvPZF_Krux4hn3RFF1bU1qzTPUoREt5XUgUtKwpNsXIJS3qSVbto0CZ6Z5RVtGGFkX7WDGWV6UcxchYwWlTs0aSiuKZa5Mb83rO3XzMtPcL9l1TlnVmuEDj0xhkzOIVUpAwFqfi3MczD2I5elJRo33wnyxBB4P99jpja9wgyqF6fc3cyo-nm55Mit626JfBcH8m3DYcvqJNNrolxOjDNHEfHs48xOvJltn0KoSLj0OAHQg7HHVQi8hHdybsEIvdvh4us_uBYyDskCR6wg6rBa89-z8AAP__1WzBTA">