diff options
author | Richard Stallman <rms@gnu.org> | 1992-05-15 21:39:39 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-05-15 21:39:39 +0000 |
commit | ee668edcd3793c3a5b90e4c42541d8f7332237d7 (patch) | |
tree | 7a6c95bc0e7a27af432ea308cdb7364f43fcc691 | |
parent | 01e2750c1b0911e04fcf02e10b930bc982045af7 (diff) | |
download | gcc-ee668edcd3793c3a5b90e4c42541d8f7332237d7.zip gcc-ee668edcd3793c3a5b90e4c42541d8f7332237d7.tar.gz gcc-ee668edcd3793c3a5b90e4c42541d8f7332237d7.tar.bz2 |
*** empty log message ***
From-SVN: r994
-rw-r--r-- | gcc/final.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/gcc/final.c b/gcc/final.c index 923158a5..460500e 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -1283,6 +1283,22 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) clobbered by the function. */ if (GET_CODE (XVECEXP (body, 0, 0)) == CALL_INSN) CC_STATUS_INIT; + + /* Following a conditional branch sequence, we have a new basic + block. */ + if (profile_block_flag) + { + rtx insn = XVECEXP (body, 0, 0); + rtx body = PATTERN (insn); + + if ((GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == SET + && GET_CODE (SET_SRC (body)) != LABEL_REF) + || (GET_CODE (insn) == JUMP_INSN + && GET_CODE (body) == PARALLEL + && GET_CODE (XVECEXP (body, 0, 0)) == SET + && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) != LABEL_REF)) + new_block = 1; + } break; } @@ -1333,12 +1349,15 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) } #endif - /* Following a conditional branch, we have a new basic block. */ - if ((GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == SET - && GET_CODE (SET_SRC (body)) != LABEL_REF) - || (GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == PARALLEL - && GET_CODE (XVECEXP (body, 0, 0)) == SET - && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) != LABEL_REF)) + /* Following a conditional branch, we have a new basic block. + But if we are inside a sequence, the new block starts after the + last insn of the sequence. */ + if (profile_block_flag && final_sequence == 0 + && ((GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == SET + && GET_CODE (SET_SRC (body)) != LABEL_REF) + || (GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == PARALLEL + && GET_CODE (XVECEXP (body, 0, 0)) == SET + && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) != LABEL_REF))) new_block = 1; #ifndef STACK_REGS |