mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +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/Constants.h" | ||||||
| #include "llvm/Support/GetElementPtrTypeIterator.h" | #include "llvm/Support/GetElementPtrTypeIterator.h" | ||||||
| #include "llvm/Support/MathExtras.h" | #include "llvm/Support/MathExtras.h" | ||||||
|  | #include <algorithm> | ||||||
| using namespace llvm; | using namespace llvm; | ||||||
|  |  | ||||||
| // Handle the Pass registration stuff necessary to use TargetData's. | // 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; |     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 | //                       TargetData Class Implementation | ||||||
| //===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user