diff options
author | Magnus Lång <[email protected]> | 2016-10-02 14:20:41 +0200 |
---|---|---|
committer | Magnus Lång <[email protected]> | 2016-11-16 17:22:04 +0100 |
commit | 6b7c73196936d94f2a03a465c0954fc9dbf35974 (patch) | |
tree | 932e4b31aacda9c4ce243eea73378f7685adc589 /lib/hipe/x86 | |
parent | fda8d7909594d434c01fdc9610127d09d1499a43 (diff) | |
download | otp-6b7c73196936d94f2a03a465c0954fc9dbf35974.tar.gz otp-6b7c73196936d94f2a03a465c0954fc9dbf35974.tar.bz2 otp-6b7c73196936d94f2a03a465c0954fc9dbf35974.zip |
hipe_x86_postpass: Negate conditions in goto elim
Diffstat (limited to 'lib/hipe/x86')
-rw-r--r-- | lib/hipe/x86/hipe_x86.erl | 4 | ||||
-rw-r--r-- | lib/hipe/x86/hipe_x86_postpass.erl | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/hipe/x86/hipe_x86.erl b/lib/hipe/x86/hipe_x86.erl index 95af3f9c67..45bf1ad736 100644 --- a/lib/hipe/x86/hipe_x86.erl +++ b/lib/hipe/x86/hipe_x86.erl @@ -218,6 +218,10 @@ %% highest_temp/1 ]). +%% Other utilities +-export([neg_cc/1 + ]). + %%% %%% Low-level accessors. %%% diff --git a/lib/hipe/x86/hipe_x86_postpass.erl b/lib/hipe/x86/hipe_x86_postpass.erl index 390f5bf5e7..f88a841cca 100644 --- a/lib/hipe/x86/hipe_x86_postpass.erl +++ b/lib/hipe/x86/hipe_x86_postpass.erl @@ -217,6 +217,11 @@ trivial_goto_elimination(Insns) -> goto_elim(Insns, []). goto_elim([#jmp_label{label=Label}, I = #label{label=Label}|Insns], Res) -> goto_elim([I|Insns], Res); +goto_elim([#jcc{cc=CC, label=Label} = IJCC, + #jmp_label{label=BranchTgt}, + #label{label=Label} = ILBL|Insns], Res) -> + goto_elim([IJCC#jcc{cc=hipe_x86:neg_cc(CC), label=BranchTgt}, + ILBL|Insns], Res); goto_elim([I | Insns], Res) -> goto_elim(Insns, [I|Res]); goto_elim([], Res) -> |