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

    <tr>
        <th>Summary</th>
        <td>
            [HLSL] Compatibility overloads for integer operations
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            HLSL
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          llvm-beanz
      </td>
    </tr>
</table>

<pre>
    Many HLSL shaders call unary math operations with integers. To minimize disruptions at the source level we should implement additional integer overloads for unary floating-point math operations that take integers and explicitly convert them to `float`.

These should be enabled in HLSL 202x, but we should consider disabling them in 202y.

Some macros:

```hlsl
#define DXC_COMPAT_UNARY_INTEGER_OVERLOAD(fn) \
  float fn(int V) { return fn((float)V); } \
  float2 fn(int2 V) { return fn((float2)V); } \
  float3 fn(int3 V) { return fn((float3)V); }                                  \
  float4 fn(int4 V) { return fn((float4)V); }                                  \
  float fn(uint V) { return fn((float)V); }                                    \
  float2 fn(uint2 V) { return fn((float2)V); }                                 \
 float3 fn(uint3 V) { return fn((float3)V); } \
  float4 fn(uint4 V) { return fn((float4)V); } \
  float fn(int64_t V) { return fn((float)V); } \
  float2 fn(int64_t2 V) { return fn((float2)V); } \
  float3 fn(int64_t3 V) { return fn((float3)V); } \
  float4 fn(int64_t4 V) { return fn((float4)V); } \
  float fn(uint64_t V) { return fn((float)V); } \
  float2 fn(uint64_t2 V) { return fn((float2)V); }                             \
  float3 fn(uint64_t3 V) { return fn((float3)V); }                             \
  float4 fn(uint64_t4 V) { return fn((float4)V); }

#define DXC_COMPAT_BINARY_INTEGER_OVERLOAD(fn)                                 \
 float fn(int V1, int V2) { return fn((float)V1, (float)V2); } \
  float2 fn(int2 V1, int2 V2) { return fn((float2)V1, (float2)V2); } \
  float3 fn(int3 V1, int3 V2) { return fn((float3)V1, (float3)V2); } \
  float4 fn(int4 V1, int4 V2) { return fn((float4)V1, (float4)V2); }           \
  float fn(uint V1, uint V2) { return fn((float)V1, (float)V2); }              \
  float2 fn(uint2 V1, uint2 V2) { return fn((float2)V1, (float2)V2); }         \
  float3 fn(uint3 V1, uint3 V2) { return fn((float3)V1, (float3)V2); }         \
  float4 fn(uint4 V1, uint4 V2) { return fn((float4)V1, (float4)V2); }         \
 float fn(int64_t V1, int64_t V2) { return fn((float)V1, (float)V2); } \
  float2 fn(int64_t2 V1, int64_t2 V2) { return fn((float2)V1, (float2)V2); }   \
  float3 fn(int64_t3 V1, int64_t3 V2) { return fn((float3)V1, (float3)V2); }   \
  float4 fn(int64_t4 V1, int64_t4 V2) { return fn((float4)V1, (float4)V2); }   \
  float fn(uint64_t V1, uint64_t V2) { return fn((float)V1, (float)V2); }      \
  float2 fn(uint64_t2 V1, uint64_t2 V2) { return fn((float2)V1, (float2)V2); } \
  float3 fn(uint64_t3 V1, uint64_t3 V2) { return fn((float3)V1, (float3)V2); } \
 float4 fn(uint64_t4 V1, uint64_t4 V2) { return fn((float4)V1, (float4)V2); }
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0l1Fv4jgQxz-NeRkVJY4D5SEPFMrdSt3tqdtb3T0hJ5kQ3zk2im122U9_SgK50NJQrjlUqZDE_99k_uOxhhsjNgoxIuEdCZcj7myuy0jKXXETI1c_R7FO99Fnrvbw68PXBzA5T7E0kHApwSle7qHgNge9xZJboZWB78LmIJTFDZZmDM8aCqFEIX4ipMKUbts8xi3YHMFoVyYIEnco4TuCybWTKYhiK7FAZYGnqahWcHkUBb3DUmqeGsh0eYgik5pboTY3Wy2UfRWUzSse_xvbyICrFPDHVopEWLmHRKsdlnVQBVgNZOLVmmTijYk3J978OUfTBhgjoOKxxBSEanJDPfqD0AXEznbeJNHKiBTL6uV5LIXaNAihqgX7g_ZXXSAUPCm1IcG8uUYmXvOXSyOr3zRIMRMKYfnHYr14_Pzb_Hn9-5f505_rT1-e73-5f1o_frt_enicLwm9zRShMyDhgnhzaNID1bXbKj3f6nvTOyjRulI1N6pF9RvTWXWfBHdApstTCdpq0H4R2qcStCpBv0rwQuXi5wTDWgzrx7APYRotd21e3_E5l3p3fe7fiela46735lzq3fW5P1-xE7YepGornWEqt1IaIEMHpY8nyQ2VJfff0vTuOg5OMQN2gLcq8PoEHxrwuYZ796m_416z2ToN2a9OjvobveRf_Wj3An1Xtz4S6AUEfcWgvZCTZn6EBBcgwStI0As5aeVHCLsAYa8g7CXkjeLptvRawA1gzdu1etraW-AATl3agUEHN4Bnl3Yi6-AGdO_snmqa4bFWml__y946NMsuaRDn-g-eLm4Q5_pPpy5uEOd6j7C2SIawrXe_dc1zw7l34cQ7wQ3XK984-E5oHzevO5qM0ihIZ8GMjzDyp8zzp34w9Ud5xHyW3s78lM_CmCV0lmR0GoYsi7MZThgPRiKiHg09Sn3qhRPfH2OYsGySshSDgPtZQpiHBRdyXE2jY11uRsIYh5FPbymdjSSPUZp6cKW0mr8IpdUIe5xe3cYQ5klhrPlXwQor62G3XhAuYaGLLbciFlLY_YvBsh032zFy5EoZ5dZu6yGNrghdbYTNXTxOdEHoquIc_t1sS_0XJpbQVR22IXR1iHwX0X8CAAD__695SoE">