ARM: try harder to detect non-IT eligible instructions
authorSaleem Abdulrasool <compnerd@compnerd.org>
Mon, 11 Aug 2014 20:13:25 +0000 (20:13 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Mon, 11 Aug 2014 20:13:25 +0000 (20:13 +0000)
commit6c2be4ff95e4f7099b33ad53b47d621ff7ea04a3
treeb95b4fd1c940cc016fd909a72e9c43241a7a9ec9
parentb2d2f2835112470976027ef18b85c6e5c991dea8
ARM: try harder to detect non-IT eligible instructions

For many Thumb-1 register register instructions, setting the CPSR is not
permitted inside an IT block.  We would not correctly flag those instructions.
The previous change to identify this scenario was insufficient as it did not
actually catch all the instances.  The current list is formed by manual
inspection of the ARMv6M ARM.

The change to the Thumb2 IT block test is due to the fact that the new more
stringent checking of the MIs results in the If Conversion pass being prevented
from executing (since not all the instructions in the BB are predicable).  This
results in code gen changes.

Thanks to Tim Northover for pointing out that the previous patch was
insufficient and hinting that the use of the v6M ARM would be much easier to use
than the v7 or v8!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215382 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMBaseInstrInfo.cpp
test/CodeGen/ARM/thumb2-it-block.ll