[cfe-commits] r166717 - /cfe/trunk/lib/CodeGen/CGObjCMac.cpp
Eric Christopher
echristo at gmail.com
Thu Oct 25 14:34:46 PDT 2012
If this is going to change the offsets of where captured block
variables reside you might want to look at the debug information for
them as well.
-eric
On Thu, Oct 25, 2012 at 2:15 PM, Fariborz Jahanian <fjahanian at apple.com> wrote:
> Author: fjahanian
> Date: Thu Oct 25 16:15:04 2012
> New Revision: 166717
>
> URL: http://llvm.org/viewvc/llvm-project?rev=166717&view=rev
> Log:
> Add some new types in preparation of encoding of captured block variable
> layout meta-data work. wip.
>
> Modified:
> cfe/trunk/lib/CodeGen/CGObjCMac.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=166717&r1=166716&r2=166717&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Thu Oct 25 16:15:04 2012
> @@ -755,6 +755,72 @@
> : skip(_skip), scan(_scan) {}
> };
>
> + /// opcode for captured block variables layout 'instructions'.
> + /// In the following descriptions, 'I' is the value of the immediate field.
> + /// (field following the opcode).
> + ///
> + enum BLOCK_LAYOUT_OPCODE {
> + /// An operator which affects how the following layout should be
> + /// interpreted.
> + /// I == 0: Halt interpretation and treat everything else as
> + /// a non-pointer. Note that this instruction is equal
> + /// to '\0'.
> + /// I != 0: Currently unused.
> + BLOCK_LAYOUT_OPERATOR = 0,
> +
> + /// The next I+1 bytes do not contain a value of object pointer type.
> + /// Note that this can leave the stream unaligned, meaning that
> + /// subsequent word-size instructions do not begin at a multiple of
> + /// the pointer size.
> + BLOCK_LAYOUT_NON_OBJECT_BYTES = 1,
> +
> + /// The next I+1 words do not contain a value of object pointer type.
> + /// This is simply an optimized version of BLOCK_LAYOUT_BYTES for
> + /// when the required skip quantity is a multiple of the pointer size.
> + BLOCK_LAYOUT_NON_OBJECT_WORDS = 2,
> +
> + /// The next I+1 words are __strong pointers to Objective-C
> + /// objects or blocks.
> + BLOCK_LAYOUT_STRONG = 3,
> +
> + /// The next I+1 words are pointers to __block variables.
> + BLOCK_LAYOUT_BYREF = 4,
> +
> + /// The next I+1 words are __weak pointers to Objective-C
> + /// objects or blocks.
> + BLOCK_LAYOUT_WEAK = 5,
> +
> + /// The next I+1 words are __unsafe_unretained pointers to
> + /// Objective-C objects or blocks.
> + BLOCK_LAYOUT_UNRETAINED = 6
> +
> + /// The next I+1 words are block or object pointers with some
> + /// as-yet-unspecified ownership semantics. If we add more
> + /// flavors of ownership semantics, values will be taken from
> + /// this range.
> + ///
> + /// This is included so that older tools can at least continue
> + /// processing the layout past such things.
> + //BLOCK_LAYOUT_OWNERSHIP_UNKNOWN = 7..10,
> +
> + /// All other opcodes are reserved. Halt interpretation and
> + /// treat everything else as opaque.
> + };
> +
> + class RUN_SKIP {
> + public:
> + enum BLOCK_LAYOUT_OPCODE opcode;
> + unsigned block_var_bytepos;
> + RUN_SKIP(enum BLOCK_LAYOUT_OPCODE Opcode = BLOCK_LAYOUT_OPERATOR,
> + unsigned BytePos = 0)
> + : opcode(Opcode), block_var_bytepos(BytePos) {}
> +
> + // Allow sorting based on byte pos.
> + bool operator<(const RUN_SKIP &b) const {
> + return block_var_bytepos < b.block_var_bytepos;
> + }
> + };
> +
> protected:
> llvm::LLVMContext &VMContext;
> // FIXME! May not be needing this after all.
> @@ -763,6 +829,9 @@
> // gc ivar layout bitmap calculation helper caches.
> SmallVector<GC_IVAR, 16> SkipIvars;
> SmallVector<GC_IVAR, 16> IvarsInfo;
> +
> + // arc/mrr layout of captured block literal variables.
> + SmallVector<RUN_SKIP, 16> RunSkipBlockVars;
>
> /// LazySymbols - Symbols to generate a lazy reference for. See
> /// DefinedSymbols and FinishModule().
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list