[llvm] 9c91d79 - [NFC][ARM] LowOverheadLoop comments

Sam Parker via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 9 04:54:56 PST 2020


Author: Sam Parker
Date: 2020-01-09T12:54:01Z
New Revision: 9c91d79dadc660cb6a0ec736389341debd8cd118

URL: https://github.com/llvm/llvm-project/commit/9c91d79dadc660cb6a0ec736389341debd8cd118
DIFF: https://github.com/llvm/llvm-project/commit/9c91d79dadc660cb6a0ec736389341debd8cd118.diff

LOG: [NFC][ARM] LowOverheadLoop comments

Add a comment describing the dependencies of the pass.

Added: 
    

Modified: 
    llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp b/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
index 31a98d86a54d..6c45eecf0c23 100644
--- a/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
+++ b/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
@@ -19,6 +19,22 @@
 /// which determines whether we can generated the tail-predicated low-overhead
 /// loop form.
 ///
+/// Assumptions and Dependencies:
+/// Low-overhead loops are constructed and executed using a setup instruction:
+/// DLS, WLS, DLSTP or WLSTP and an instruction that loops back: LE or LETP.
+/// WLS(TP) and LE(TP) are branching instructions with a (large) limited range
+/// but fixed polarity: WLS can only branch forwards and LE can only branch
+/// backwards. These restrictions mean that this pass is dependent upon block
+/// layout and block sizes, which is why it's the last pass to run. The same is
+/// true for ConstantIslands, but this pass does not increase the size of the
+/// basic blocks, nor does it change the CFG. Instructions are mainly removed
+/// during the transform and pseudo instructions are replaced by real ones. In
+/// some cases, when we have to revert to a 'normal' loop, we have to introduce
+/// multiple instructions for a single pseudo (see RevertWhile and
+/// RevertLoopEnd). To handle this situation, t2WhileLoopStart and t2LoopEnd
+/// are defined to be as large as this maximum sequence of replacement
+/// instructions.
+///
 //===----------------------------------------------------------------------===//
 
 #include "ARM.h"


        


More information about the llvm-commits mailing list