Skip to content

Commit cdaeac9

Browse files
committed
Correctly handle uncanonicalized addrspacecasts.
1 parent e3c28a5 commit cdaeac9

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

src/llvm-remove-addrspaces.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,14 @@ bool RemoveNoopAddrSpaceCasts(Function *F)
208208
LLVM_DEBUG(
209209
dbgs() << "Removing noop address space cast:\n"
210210
<< I << "\n");
211-
ASC->replaceAllUsesWith(ASC->getOperand(0));
211+
if (ASC->getType() == ASC->getOperand(0)->getType()) {
212+
ASC->replaceAllUsesWith(ASC->getOperand(0));
213+
} else {
214+
// uncanonicalized addrspacecast; demote to bitcast
215+
llvm::IRBuilder<> builder(ASC);
216+
auto BC = builder.CreateBitCast(ASC->getOperand(0), ASC->getType());
217+
ASC->replaceAllUsesWith(BC);
218+
}
212219
NoopCasts.push_back(ASC);
213220
}
214221
}

0 commit comments

Comments
 (0)