diff options
author | Andrey Turetskiy <andrey.turetskiy@gmail.com> | 2016-04-26 12:18:12 +0000 |
---|---|---|
committer | Andrey Turetskiy <andrey.turetskiy@gmail.com> | 2016-04-26 12:18:12 +0000 |
commit | b405606432ef00a6b1ca773968cb839c0418870f (patch) | |
tree | 86a3586861ea3dd20686d254ce6e29fc73dc644d /llvm/lib/Target/X86/X86OptimizeLEAs.cpp | |
parent | e114a1711a04a2911dd826ec3a1874d29718cde0 (diff) | |
download | bcm5719-llvm-b405606432ef00a6b1ca773968cb839c0418870f.tar.gz bcm5719-llvm-b405606432ef00a6b1ca773968cb839c0418870f.zip |
[X86] PR27502: Fix the LEA optimization pass.
Handle MachineBasicBlock as a memory displacement operand in the LEA optimization pass.
Differential Revision: http://reviews.llvm.org/D19409
llvm-svn: 267551
Diffstat (limited to 'llvm/lib/Target/X86/X86OptimizeLEAs.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86OptimizeLEAs.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86OptimizeLEAs.cpp b/llvm/lib/Target/X86/X86OptimizeLEAs.cpp index 5a7b562cb1d..3c83f5d64dc 100644 --- a/llvm/lib/Target/X86/X86OptimizeLEAs.cpp +++ b/llvm/lib/Target/X86/X86OptimizeLEAs.cpp @@ -146,6 +146,9 @@ template <> struct DenseMapInfo<MemOpKey> { case MachineOperand::MO_MCSymbol: Hash = hash_combine(Hash, Val.Disp->getMCSymbol()); break; + case MachineOperand::MO_MachineBasicBlock: + Hash = hash_combine(Hash, Val.Disp->getMBB()); + break; default: llvm_unreachable("Invalid address displacement operand"); } @@ -185,7 +188,7 @@ static inline bool isIdenticalOp(const MachineOperand &MO1, #ifndef NDEBUG static bool isValidDispOp(const MachineOperand &MO) { return MO.isImm() || MO.isCPI() || MO.isJTI() || MO.isSymbol() || - MO.isGlobal() || MO.isBlockAddress() || MO.isMCSymbol(); + MO.isGlobal() || MO.isBlockAddress() || MO.isMCSymbol() || MO.isMBB(); } #endif @@ -203,7 +206,8 @@ static bool isSimilarDispOp(const MachineOperand &MO1, (MO1.isBlockAddress() && MO2.isBlockAddress() && MO1.getBlockAddress() == MO2.getBlockAddress()) || (MO1.isMCSymbol() && MO2.isMCSymbol() && - MO1.getMCSymbol() == MO2.getMCSymbol()); + MO1.getMCSymbol() == MO2.getMCSymbol()) || + (MO1.isMBB() && MO2.isMBB() && MO1.getMBB() == MO2.getMBB()); } static inline bool isLEA(const MachineInstr &MI) { |