[Clang][Sema] Promote pointers to common address space in pointer subtraction (#217341)
fixes #216804
## Summary
This PR fixes pointer subtraction between pointers with different but
overlapping address spaces (e.g., `private` and `generic` in
OpenCL).
Previously, when subtracting a private pointer from a generic pointer on
AMDGPU:
- The private pointer (AS5, 32-bit) was converted directly to i32 via
`ptrtoaddr`
- The generic pointer (AS0, 64-bit) was converted to i64 via `ptrtoaddr`
- This resulted in incorrect comparison of 32-bit vs 64-bit values
Now, pointers are first promoted to the composite (superset) address
space using `addrspacecast` before the subtraction. This
mirrors how the conditional operator (`?:`) already handles mixed
address space pointers.
## Test plan
- `clang/test/CodeGenOpenCL/size_t.cl` updated and passes
- Verified generated IR shows correct `addrspacecast` before `ptrtoaddr`
for AMDGCN and SPIR targets
---------
Signed-off-by: addmisol <addmisol9@gmail.com>