From 9f27f4536e19e93349b0662338408efe6d1cb2fd Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Wed, 21 Dec 2022 05:15:28 +0300 Subject: [PATCH] [NFC][SROA] `speculateSelectInstLoads()`: play nice with typed pointers for now As requested in https://reviews.llvm.org/D138238#inline-1356685 --- llvm/lib/Transforms/Scalar/SROA.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index 1bea80b..350e8bd 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -1518,6 +1518,14 @@ static void speculateSelectInstLoads(SelectInst &SI, LoadInst &LI, assert(LI.isSimple() && "We only speculate simple loads"); + if (auto *TypedPtrTy = LI.getType()->getPointerTo(); + SI.getType() != TypedPtrTy) { + TV = BitCastInst::CreatePointerBitCastOrAddrSpaceCast(TV, TypedPtrTy, "", + &LI); + FV = BitCastInst::CreatePointerBitCastOrAddrSpaceCast(FV, TypedPtrTy, "", + &LI); + } + IRB.SetInsertPoint(&LI); LoadInst *TL = IRB.CreateAlignedLoad(LI.getType(), TV, LI.getAlign(), -- 2.7.4