diff options
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp index 98114d295a1..30e0da319e8 100644 --- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp @@ -154,12 +154,18 @@ bool CombinerHelper::tryCombineExtendingLoads(MachineInstr &MI) { assert(Preferred.Ty != LoadValueTy && "Extending to same type?"); // Rewrite the load and schedule the canonical use for erasure. - const auto TruncateUse = [](MachineIRBuilder &Builder, MachineOperand &UseMO, - unsigned DstReg, unsigned SrcReg) { + const auto TruncateUse = [&MI](MachineIRBuilder &Builder, + MachineOperand &UseMO, unsigned DstReg, + unsigned SrcReg) { MachineInstr &UseMI = *UseMO.getParent(); MachineBasicBlock &UseMBB = *UseMI.getParent(); Builder.setInsertPt(UseMBB, MachineBasicBlock::iterator(UseMI)); + + if (UseMI.isPHI()) + Builder.setInsertPt(*MI.getParent(), + std::next(MachineBasicBlock::iterator(MI))); + Builder.buildTrunc(DstReg, SrcReg); }; |