| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | #ifndef __PERF_BLOCK_RANGE_H | 
 | #define __PERF_BLOCK_RANGE_H | 
 |  | 
 | #include "symbol.h" | 
 |  | 
 | /* | 
 |  * struct block_range - non-overlapping parts of basic blocks | 
 |  * @node:	treenode | 
 |  * @start:	inclusive start of range | 
 |  * @end:	inclusive end of range | 
 |  * @is_target:	@start is a jump target | 
 |  * @is_branch:	@end is a branch instruction | 
 |  * @coverage:	number of blocks that cover this range | 
 |  * @taken:	number of times the branch is taken (requires @is_branch) | 
 |  * @pred:	number of times the taken branch was predicted | 
 |  */ | 
 | struct block_range { | 
 | 	struct rb_node node; | 
 |  | 
 | 	struct symbol *sym; | 
 |  | 
 | 	u64 start; | 
 | 	u64 end; | 
 |  | 
 | 	int is_target, is_branch; | 
 |  | 
 | 	u64 coverage; | 
 | 	u64 entry; | 
 | 	u64 taken; | 
 | 	u64 pred; | 
 | }; | 
 |  | 
 | static inline struct block_range *block_range__next(struct block_range *br) | 
 | { | 
 | 	struct rb_node *n = rb_next(&br->node); | 
 | 	if (!n) | 
 | 		return NULL; | 
 | 	return rb_entry(n, struct block_range, node); | 
 | } | 
 |  | 
 | struct block_range_iter { | 
 | 	struct block_range *start; | 
 | 	struct block_range *end; | 
 | }; | 
 |  | 
 | static inline struct block_range *block_range_iter(struct block_range_iter *iter) | 
 | { | 
 | 	return iter->start; | 
 | } | 
 |  | 
 | static inline bool block_range_iter__next(struct block_range_iter *iter) | 
 | { | 
 | 	if (iter->start == iter->end) | 
 | 		return false; | 
 |  | 
 | 	iter->start = block_range__next(iter->start); | 
 | 	return true; | 
 | } | 
 |  | 
 | static inline bool block_range_iter__valid(struct block_range_iter *iter) | 
 | { | 
 | 	if (!iter->start || !iter->end) | 
 | 		return false; | 
 | 	return true; | 
 | } | 
 |  | 
 | extern struct block_range *block_range__find(u64 addr); | 
 | extern struct block_range_iter block_range__create(u64 start, u64 end); | 
 | extern double block_range__coverage(struct block_range *br); | 
 |  | 
 | #endif /* __PERF_BLOCK_RANGE_H */ |