X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FCmmOpt.hs;h=a3de41c2c7fbea990a4bb0784ef6b80c308c38de;hb=28c556a5e0ed5c2687f19ec6ef8853b79ad65518;hp=710301437f3187cb7f062403dfe81a4c669ba9b3;hpb=601e8739f2af25f946a8a1b4273172b491c5bced;p=ghc-hetmet.git diff --git a/compiler/cmm/CmmOpt.hs b/compiler/cmm/CmmOpt.hs index 71030143..a3de41c 100644 --- a/compiler/cmm/CmmOpt.hs +++ b/compiler/cmm/CmmOpt.hs @@ -312,8 +312,12 @@ cmmMachOpFold op [x@(CmmLit _), y] -- put arg1 on the left of the rearranged expression, we'll get into a -- loop: (x1+x2)+x3 => x1+(x2+x3) => (x2+x3)+x1 => x2+(x3+x1) ... -- +-- Also don't do it if arg1 is PicBaseReg, so that we don't separate the +-- PicBaseReg from the corresponding label (or label difference). +-- cmmMachOpFold mop1 [CmmMachOp mop2 [arg1,arg2], arg3] - | mop1 == mop2 && isAssociativeMachOp mop1 && not (isLit arg1) + | mop1 == mop2 && isAssociativeMachOp mop1 + && not (isLit arg1) && not (isPicReg arg1) = cmmMachOpFold mop1 [arg1, cmmMachOpFold mop2 [arg2,arg3]] -- Make a RegOff if we can @@ -527,3 +531,6 @@ maybeInvertConditionalExpr :: CmmExpr -> Maybe CmmExpr maybeInvertConditionalExpr (CmmMachOp op args) | Just op' <- maybeInvertComparison op = Just (CmmMachOp op' args) maybeInvertConditionalExpr _ = Nothing + +isPicReg (CmmReg (CmmGlobal PicBaseReg)) = True +isPicReg _ = False \ No newline at end of file