X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mate.git;a=blobdiff_plain;f=Mate%2FBasicBlocks.hs;fp=Mate%2FBasicBlocks.hs;h=dfe1b363f7429c934ba16aefe9e3b5d4dfb706ba;hp=c94e6d1dc8229e93f40caa680086d531ebc838e9;hb=dbeafbd3712e710248fdea00f4fd7db3994f9e85;hpb=34939ca19d5f608efb04dcb2cdd97dd3f922d4a6 diff --git a/Mate/BasicBlocks.hs b/Mate/BasicBlocks.hs index c94e6d1..dfe1b36 100644 --- a/Mate/BasicBlocks.hs +++ b/Mate/BasicBlocks.hs @@ -125,10 +125,12 @@ markBackwardTargets (x:[]) = [x] markBackwardTargets insns@(x@((x_off,x_bbend),x_ins):y@((y_off,_),_):xs) = x_new:markBackwardTargets (y:xs) where - x_new = if isTarget then checkX y_off else x - checkX w16 = case x_bbend of + x_new = case x_bbend of Just _ -> x -- already marked, don't change + Nothing -> if isTarget then checkX y_off else x + checkX w16 = case x_bbend of Nothing -> ((x_off, Just $ FallThrough w16), x_ins) -- mark previous insn + _ -> error "basicblock: something is wrong" -- look through all remaining insns in the stream if there is a jmp to `y' isTarget = case find cmpOffset insns of Just _ -> True; Nothing -> False