Repository navigation
Expand file tree
/
Copy pathbasicBlock.h
More file actions
45 lines (44 loc) · 2.12 KB
/
Copy pathbasicBlock.h
File metadata and controls
45 lines (44 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/***************************************************************************
basicBlock code Module
***************************************************************************/
/*=========================================================================
DECLARATIONS
=========================================================================*/
/*-------------------------------------------------------------------------
basicBlock code RECORD
-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------
basicBlock code ENTRY
-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------
basicBlock code
Implementation: a chain of records.
------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------
initialization
------------------------------------------------------------------------*/
/*========================================================================
Operations: markBasicBlock.
========================================================================*/
void markBasicBlock(struct IntermediaRepresentation* IR){
struct Quad *ptr = IR->head;
while(ptr->next != (struct Quad *) 0){
ptr = ptr->next;
if(ptr->op == jmp || ptr->op == jgt || ptr->op == jgti || ptr->op == call || ptr->op == jgti || ptr->op == jge || ptr->op == jgei || ptr->op == jlt || ptr->op == jlti || ptr->op == jle || ptr->op == jlei || ptr->op == je || ptr->op == jei || ptr->op == jne || ptr->op == jnei){
ptr->dest.addr->basicBlockFlag = 1;
ptr->next->basicBlockFlag = 1;
}
else if(ptr->op == ret){
ptr->next->basicBlockFlag = 1;
}
}
ptr = IR->head;
while(ptr->next != (struct Quad *) 0){
ptr = ptr->next;
if(ptr->op == label){
ptr->basicBlockFlag = 0;
ptr->next->basicBlockFlag = 1;
}
}
}
/************************** End basicBlock code **************************/