forked from OSchip/llvm-project
6f36cd4d76
When deciding if it is safe to optimize a conditional branch to a CBZ or CBNZ the offsets of the BasicBlocks from the start of the function are estimated. For inline assembly the generic getInlineAsmLength() function is used to get a worst case estimate of the inline assembly by multiplying the number of instructions by the max instruction size of 4 bytes. This unfortunately doesn't take into account the generation of Thumb implicit IT instructions. In edge cases such as when all the instructions in the block are 4-bytes in size and there is an implicit IT then the size is underestimated. This can cause an out of range CBZ or CBNZ to be generated. The patch takes a conservative approach and assumes that every instruction in the inline assembly block may have an implicit IT. Fixes pr31805 Differential Revision: https://reviews.llvm.org/D52834 llvm-svn: 343960 |
||
---|---|---|
.. | ||
ARMAddressingModes.h | ||
ARMAsmBackend.cpp | ||
ARMAsmBackend.h | ||
ARMAsmBackendDarwin.h | ||
ARMAsmBackendELF.h | ||
ARMAsmBackendWinCOFF.h | ||
ARMBaseInfo.h | ||
ARMELFObjectWriter.cpp | ||
ARMELFStreamer.cpp | ||
ARMFixupKinds.h | ||
ARMMCAsmInfo.cpp | ||
ARMMCAsmInfo.h | ||
ARMMCCodeEmitter.cpp | ||
ARMMCExpr.cpp | ||
ARMMCExpr.h | ||
ARMMCTargetDesc.cpp | ||
ARMMCTargetDesc.h | ||
ARMMachORelocationInfo.cpp | ||
ARMMachObjectWriter.cpp | ||
ARMTargetStreamer.cpp | ||
ARMUnwindOpAsm.cpp | ||
ARMUnwindOpAsm.h | ||
ARMWinCOFFObjectWriter.cpp | ||
ARMWinCOFFStreamer.cpp | ||
CMakeLists.txt | ||
LLVMBuild.txt |