diff options
author | Sasa Stankovic <Sasa.Stankovic@imgtec.com> | 2014-06-05 13:42:48 +0000 |
---|---|---|
committer | Sasa Stankovic <Sasa.Stankovic@imgtec.com> | 2014-06-05 13:42:48 +0000 |
commit | 44215458bd5298d9426373fc07d6492dc3d4d8cd (patch) | |
tree | 7b1c275b4b3d4c48c71dc9fafc6c6f59be9f8e46 /lib/CodeGen/BranchFolding.cpp | |
parent | 3a2156d1b5867b69625994f394d66511a5f4192d (diff) | |
download | llvm-44215458bd5298d9426373fc07d6492dc3d4d8cd.tar.gz llvm-44215458bd5298d9426373fc07d6492dc3d4d8cd.tar.bz2 llvm-44215458bd5298d9426373fc07d6492dc3d4d8cd.tar.xz |
Prevent hoisting the instruction whose def might be clobbered by the terminator.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210261 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/BranchFolding.cpp')
-rw-r--r-- | lib/CodeGen/BranchFolding.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp index f623a48cf0..7503e57519 100644 --- a/lib/CodeGen/BranchFolding.cpp +++ b/lib/CodeGen/BranchFolding.cpp @@ -1505,10 +1505,17 @@ MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB, if (MO.isUse()) { for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI) Uses.insert(*AI); - } else if (!MO.isDead()) - // Don't try to hoist code in the rare case the terminator defines a - // register that is later used. - return MBB->end(); + } else { + if (!MO.isDead()) + // Don't try to hoist code in the rare case the terminator defines a + // register that is later used. + return MBB->end(); + + // If the terminator defines a register, make sure we don't hoist + // the instruction whose def might be clobbered by the terminator. + for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI) + Defs.insert(*AI); + } } if (Uses.empty()) |