aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2024-12-06 10:51:14 +1300
committerGitHub <noreply@github.com>2024-12-06 10:51:14 +1300
commitcfa582e8aaa791b52110791f5e6504121aaf62bf (patch)
treea526a1c8be3ca8febd71eb30f2941210bdc1b63e /llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
parent6f21401ae969eb3cdf66c7c84b52c90ca71c21bd (diff)
downloadllvm-cfa582e8aaa791b52110791f5e6504121aaf62bf.zip
llvm-cfa582e8aaa791b52110791f5e6504121aaf62bf.tar.gz
llvm-cfa582e8aaa791b52110791f5e6504121aaf62bf.tar.bz2
SimplifyLibCalls: Use default globals address space when building new global strings. (#118729)
Writing a test for this transitively exposed a number of places in BuildLibCalls where we were failing to propagate address spaces properly, which are additionally fixed.
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp80
1 files changed, 43 insertions, 37 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
index d85e0d99..0438ccf 100644
--- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
@@ -917,8 +917,9 @@ Value *LibCallSimplifier::optimizeStringNCpy(CallInst *CI, bool RetEnd,
// Create a bigger, nul-padded array with the same length, SrcLen,
// as the original string.
SrcStr.resize(N, '\0');
- Src = B.CreateGlobalString(SrcStr, "str", /*AddressSpace=*/0,
- /*M=*/nullptr, /*AddNull=*/false);
+ Src = B.CreateGlobalString(
+ SrcStr, "str", /*AddressSpace=*/DL.getDefaultGlobalsAddressSpace(),
+ /*M=*/nullptr, /*AddNull=*/false);
}
Type *PT = Callee->getFunctionType()->getParamType(0);
@@ -1723,7 +1724,8 @@ Value *LibCallSimplifier::optimizeMemSet(CallInst *CI, IRBuilderBase &B) {
Value *LibCallSimplifier::optimizeRealloc(CallInst *CI, IRBuilderBase &B) {
if (isa<ConstantPointerNull>(CI->getArgOperand(0)))
- return copyFlags(*CI, emitMalloc(CI->getArgOperand(1), B, DL, TLI));
+ return copyFlags(*CI, emitMalloc(CI->getArgOperand(0)->getType(),
+ CI->getArgOperand(1), B, DL, TLI));
return nullptr;
}
@@ -1758,122 +1760,124 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
switch (Func) {
case LibFunc_Znwm12__hot_cold_t:
if (OptimizeExistingHotColdNew)
- return emitHotColdNew(CI->getArgOperand(0), B, TLI,
+ return emitHotColdNew(CI->getType(), CI->getArgOperand(0), B, TLI,
LibFunc_Znwm12__hot_cold_t, HotCold);
break;
case LibFunc_Znwm:
if (HotCold != NotColdNewHintValue)
- return emitHotColdNew(CI->getArgOperand(0), B, TLI,
+ return emitHotColdNew(CI->getType(), CI->getArgOperand(0), B, TLI,
LibFunc_Znwm12__hot_cold_t, HotCold);
break;
case LibFunc_Znam12__hot_cold_t:
if (OptimizeExistingHotColdNew)
- return emitHotColdNew(CI->getArgOperand(0), B, TLI,
+ return emitHotColdNew(CI->getType(), CI->getArgOperand(0), B, TLI,
LibFunc_Znam12__hot_cold_t, HotCold);
break;
case LibFunc_Znam:
if (HotCold != NotColdNewHintValue)
- return emitHotColdNew(CI->getArgOperand(0), B, TLI,
+ return emitHotColdNew(CI->getType(), CI->getArgOperand(0), B, TLI,
LibFunc_Znam12__hot_cold_t, HotCold);
break;
case LibFunc_ZnwmRKSt9nothrow_t12__hot_cold_t:
if (OptimizeExistingHotColdNew)
return emitHotColdNewNoThrow(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
LibFunc_ZnwmRKSt9nothrow_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnwmRKSt9nothrow_t:
if (HotCold != NotColdNewHintValue)
return emitHotColdNewNoThrow(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
LibFunc_ZnwmRKSt9nothrow_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnamRKSt9nothrow_t12__hot_cold_t:
if (OptimizeExistingHotColdNew)
return emitHotColdNewNoThrow(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
LibFunc_ZnamRKSt9nothrow_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnamRKSt9nothrow_t:
if (HotCold != NotColdNewHintValue)
return emitHotColdNewNoThrow(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
LibFunc_ZnamRKSt9nothrow_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnwmSt11align_val_t12__hot_cold_t:
if (OptimizeExistingHotColdNew)
return emitHotColdNewAligned(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
LibFunc_ZnwmSt11align_val_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnwmSt11align_val_t:
if (HotCold != NotColdNewHintValue)
return emitHotColdNewAligned(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
LibFunc_ZnwmSt11align_val_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnamSt11align_val_t12__hot_cold_t:
if (OptimizeExistingHotColdNew)
return emitHotColdNewAligned(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
LibFunc_ZnamSt11align_val_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnamSt11align_val_t:
if (HotCold != NotColdNewHintValue)
return emitHotColdNewAligned(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
LibFunc_ZnamSt11align_val_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t:
if (OptimizeExistingHotColdNew)
return emitHotColdNewAlignedNoThrow(
- CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(2), B,
- TLI, LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t,
- HotCold);
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1),
+ CI->getArgOperand(2), B, TLI,
+ LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t:
if (HotCold != NotColdNewHintValue)
return emitHotColdNewAlignedNoThrow(
- CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(2), B,
- TLI, LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t,
- HotCold);
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1),
+ CI->getArgOperand(2), B, TLI,
+ LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t:
if (OptimizeExistingHotColdNew)
return emitHotColdNewAlignedNoThrow(
- CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(2), B,
- TLI, LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t,
- HotCold);
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1),
+ CI->getArgOperand(2), B, TLI,
+ LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t, HotCold);
break;
case LibFunc_ZnamSt11align_val_tRKSt9nothrow_t:
if (HotCold != NotColdNewHintValue)
return emitHotColdNewAlignedNoThrow(
- CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(2), B,
- TLI, LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t,
- HotCold);
+ CI->getType(), CI->getArgOperand(0), CI->getArgOperand(1),
+ CI->getArgOperand(2), B, TLI,
+ LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t, HotCold);
break;
case LibFunc_size_returning_new:
if (HotCold != NotColdNewHintValue)
- return emitHotColdSizeReturningNew(CI->getArgOperand(0), B, TLI,
- LibFunc_size_returning_new_hot_cold,
- HotCold);
+ return emitHotColdSizeReturningNew(
+ CI->getType()->getStructElementType(0), CI->getArgOperand(0), B, TLI,
+ LibFunc_size_returning_new_hot_cold, HotCold);
break;
case LibFunc_size_returning_new_hot_cold:
if (OptimizeExistingHotColdNew)
- return emitHotColdSizeReturningNew(CI->getArgOperand(0), B, TLI,
- LibFunc_size_returning_new_hot_cold,
- HotCold);
+ return emitHotColdSizeReturningNew(
+ CI->getType()->getStructElementType(0), CI->getArgOperand(0), B, TLI,
+ LibFunc_size_returning_new_hot_cold, HotCold);
break;
case LibFunc_size_returning_new_aligned:
if (HotCold != NotColdNewHintValue)
return emitHotColdSizeReturningNewAligned(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType()->getStructElementType(0), CI->getArgOperand(0),
+ CI->getArgOperand(1), B, TLI,
LibFunc_size_returning_new_aligned_hot_cold, HotCold);
break;
case LibFunc_size_returning_new_aligned_hot_cold:
if (OptimizeExistingHotColdNew)
return emitHotColdSizeReturningNewAligned(
- CI->getArgOperand(0), CI->getArgOperand(1), B, TLI,
+ CI->getType()->getStructElementType(0), CI->getArgOperand(0),
+ CI->getArgOperand(1), B, TLI,
LibFunc_size_returning_new_aligned_hot_cold, HotCold);
break;
default:
@@ -3345,7 +3349,8 @@ Value *LibCallSimplifier::optimizePrintFString(CallInst *CI, IRBuilderBase &B) {
// printf("%s", str"\n") --> puts(str)
if (OperandStr.back() == '\n') {
OperandStr = OperandStr.drop_back();
- Value *GV = B.CreateGlobalString(OperandStr, "str");
+ Value *GV = B.CreateGlobalString(OperandStr, "str",
+ DL.getDefaultGlobalsAddressSpace());
return copyFlags(*CI, emitPutS(GV, B, TLI));
}
return nullptr;
@@ -3357,7 +3362,8 @@ Value *LibCallSimplifier::optimizePrintFString(CallInst *CI, IRBuilderBase &B) {
// Create a string literal with no \n on it. We expect the constant merge
// pass to be run after this pass, to merge duplicate strings.
FormatStr = FormatStr.drop_back();
- Value *GV = B.CreateGlobalString(FormatStr, "str");
+ Value *GV = B.CreateGlobalString(FormatStr, "str",
+ DL.getDefaultGlobalsAddressSpace());
return copyFlags(*CI, emitPutS(GV, B, TLI));
}