[llvm] d839afe - [InstCombine] Avoid pointer element type access in PointerReplacer
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 27 03:28:39 PST 2022
Author: Nikita Popov
Date: 2022-01-27T12:28:32+01:00
New Revision: d839afe3f9a04288f20698c3a28c096a1822f3a1
URL: https://github.com/llvm/llvm-project/commit/d839afe3f9a04288f20698c3a28c096a1822f3a1
DIFF: https://github.com/llvm/llvm-project/commit/d839afe3f9a04288f20698c3a28c096a1822f3a1.diff
LOG: [InstCombine] Avoid pointer element type access in PointerReplacer
This code replaces the address space of the pointers while keeping
the element type. Use the appropriate helpers to make this work
with opaque pointers.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
index dad5c2ca6a50..756792918dba 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
@@ -301,16 +301,17 @@ void PointerReplacer::replace(Instruction *I) {
assert(V && "Operand not replaced");
SmallVector<Value *, 8> Indices;
Indices.append(GEP->idx_begin(), GEP->idx_end());
- auto *NewI = GetElementPtrInst::Create(
- V->getType()->getPointerElementType(), V, Indices);
+ auto *NewI =
+ GetElementPtrInst::Create(GEP->getSourceElementType(), V, Indices);
IC.InsertNewInstWith(NewI, *GEP);
NewI->takeName(GEP);
WorkMap[GEP] = NewI;
} else if (auto *BC = dyn_cast<BitCastInst>(I)) {
auto *V = getReplacement(BC->getOperand(0));
assert(V && "Operand not replaced");
- auto *NewT = PointerType::get(BC->getType()->getPointerElementType(),
- V->getType()->getPointerAddressSpace());
+ auto *NewT = PointerType::getWithSamePointeeType(
+ cast<PointerType>(BC->getType()),
+ V->getType()->getPointerAddressSpace());
auto *NewI = new BitCastInst(V, NewT);
IC.InsertNewInstWith(NewI, *BC);
NewI->takeName(BC);
@@ -345,9 +346,7 @@ void PointerReplacer::replacePointer(Instruction &I, Value *V) {
#ifndef NDEBUG
auto *PT = cast<PointerType>(I.getType());
auto *NT = cast<PointerType>(V->getType());
- assert(PT != NT &&
- PT->getPointerElementType() == NT->getPointerElementType() &&
- "Invalid usage");
+ assert(PT != NT && PT->hasSameElementTypeAs(NT) && "Invalid usage");
#endif
WorkMap[&I] = V;
More information about the llvm-commits
mailing list