diff options
author | Johnny Chen <johnny.chen@apple.com> | 2010-03-17 23:14:23 +0000 |
---|---|---|
committer | Johnny Chen <johnny.chen@apple.com> | 2010-03-17 23:14:23 +0000 |
commit | b675e255d0def28e9718c62336be6fd6e7a22e54 (patch) | |
tree | 275c1afb9a954d95bc7b72631ec268444c3fbd4f /lib | |
parent | 77bdc48eb66396cbc4f81bfd1ac9de257b83cf41 (diff) | |
download | external_llvm-b675e255d0def28e9718c62336be6fd6e7a22e54.zip external_llvm-b675e255d0def28e9718c62336be6fd6e7a22e54.tar.gz external_llvm-b675e255d0def28e9718c62336be6fd6e7a22e54.tar.bz2 |
Fixed a bug in the IT mask printing where T means the cond bit in the mask
matches that of Firstcond[0] and E means otherwise. The Firstcond[0] is also
tagged in the Mask to facilitate Asm printing. The disassembler also depends
on this arrangement. This is similar to what's described in A2.5.2 ITSTATE.
Ran:
utils/lit/lit.py test/CodeGen/ARM test/CodeGen/Thumb test/CodeGen/Thumb2
successfully.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98775 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/ARM/Thumb2ITBlockPass.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/Target/ARM/Thumb2ITBlockPass.cpp b/lib/Target/ARM/Thumb2ITBlockPass.cpp index f5ba155..f36d4ef 100644 --- a/lib/Target/ARM/Thumb2ITBlockPass.cpp +++ b/lib/Target/ARM/Thumb2ITBlockPass.cpp @@ -78,14 +78,16 @@ bool Thumb2ITBlockPass::InsertITBlocks(MachineBasicBlock &MBB) { DebugLoc ndl = NMI->getDebugLoc(); unsigned NPredReg = 0; ARMCC::CondCodes NCC = getPredicate(NMI, NPredReg); - if (NCC == OCC) { - Mask |= (1 << Pos); - } else if (NCC != CC) + if (NCC == CC || NCC == OCC) + Mask |= (NCC & 1) << Pos; + else break; --Pos; ++MBBI; } Mask |= (1 << Pos); + // Tag along (firstcond[0] << 4) with the mask. + Mask |= (CC & 1) << 4; MIB.addImm(Mask); Modified = true; ++NumITs; |