mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	add a StructLayout::getElementContainingOffset method.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20579 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -22,6 +22,7 @@ | ||||
| #include "llvm/Constants.h" | ||||
| #include "llvm/Support/GetElementPtrTypeIterator.h" | ||||
| #include "llvm/Support/MathExtras.h" | ||||
| #include <algorithm> | ||||
| using namespace llvm; | ||||
|  | ||||
| // Handle the Pass registration stuff necessary to use TargetData's. | ||||
| @@ -71,6 +72,22 @@ StructLayout::StructLayout(const StructType *ST, const TargetData &TD) { | ||||
|     StructSize = (StructSize/StructAlignment + 1) * StructAlignment; | ||||
| } | ||||
|  | ||||
|  | ||||
| /// getElementContainingOffset - Given a valid offset into the structure, | ||||
| /// return the structure index that contains it. | ||||
| unsigned StructLayout::getElementContainingOffset(uint64_t Offset) const { | ||||
|   std::vector<uint64_t>::const_iterator SI = | ||||
|     std::upper_bound(MemberOffsets.begin(), MemberOffsets.end(), | ||||
|                      Offset); | ||||
|   assert(SI != MemberOffsets.begin() && "Offset not in structure type!"); | ||||
|   --SI; | ||||
|   assert(*SI <= Offset && "upper_bound didn't work"); | ||||
|   assert((SI == MemberOffsets.begin() || *(SI-1) < Offset) && | ||||
|          (SI+1 == MemberOffsets.end() || *(SI+1) > Offset) && | ||||
|          "Upper bound didn't work!"); | ||||
|   return SI-MemberOffsets.begin(); | ||||
| } | ||||
|  | ||||
| //===----------------------------------------------------------------------===// | ||||
| //                       TargetData Class Implementation | ||||
| //===----------------------------------------------------------------------===// | ||||
|   | ||||
		Reference in New Issue
	
	Block a user