[llvm] SimplifyLibCalls: Use the correct address space when computing integer widths. (PR #118586)

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 4 16:20:29 PST 2024


================
@@ -590,26 +588,35 @@ Value *LibCallSimplifier::optimizeStrCmp(CallInst *CI, IRBuilderBase &B) {
   if (Len1 && Len2) {
     return copyFlags(
         *CI, emitMemCmp(Str1P, Str2P,
-                        ConstantInt::get(DL.getIntPtrType(CI->getContext()),
-                                         std::min(Len1, Len2)),
+                        ConstantInt::get(
+                            DL.getIntPtrType(
+                                CI->getContext(),
+                                Str1P->getType()->getPointerAddressSpace()),
+                            std::min(Len1, Len2)),
----------------
efriedma-quic wrote:

The reason getSizeTSize() unconditionally queries addrspace(0) is just that there aren't any in-tree targets where it needs to return anything else. Fixes welcome.

Passing in a integer to emitMemCmp where the size isn't getSizeTSize() just miscompiles, as far as I know.  (CreateMemCpy works fine in any case because it's an intrinsic.)

https://github.com/llvm/llvm-project/pull/118586


More information about the llvm-commits mailing list