diff options
Diffstat (limited to 'llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp | 9 | 
1 files changed, 9 insertions, 0 deletions
| diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp index 490bf5fb56c..32c0cbde3cf 100644 --- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -1933,6 +1933,15 @@ isProfitableToIfCvt(MachineBasicBlock &TBB,    if (!TCycles)      return false; +  // In thumb code we often end up trading one branch for a IT block, and +  // if we are cloning the instruction can increase code size. Prevent +  // blocks with multiple predecesors from being ifcvted to prevent this +  // cloning. +  if (Subtarget.isThumb2() && TBB.getParent()->getFunction().hasMinSize()) { +    if (TBB.pred_size() != 1 || FBB.pred_size() != 1) +      return false; +  } +    // Attempt to estimate the relative costs of predication versus branching.    // Here we scale up each component of UnpredCost to avoid precision issue when    // scaling TCycles/FCycles by Probability. | 

