generateCondition (content -> Op op x y) label
  | op `elem` [IsGT, IsLT, IsEQ, IsNE] = do
    generate x
    generate y
    let op' = case op of
                IsGT -> C_GT
                IsLT -> C_LT
                IsNE -> C_NE
                IsEQ -> C_EQ
    liftG $ IF_ICMP op' `J.useLabel` label
generateCondition (content -> Op op x y) label
  | op `elem` [IsGT, IsLT, IsEQ, IsNE] = do
    generate x
    generate y
    let op' = case op of
                IsGT -> C_GT
                IsLT -> C_LT
                IsNE -> C_NE
                IsEQ -> C_EQ
    liftG $ IF_ICMP op' `J.useLabel` label
generateCondition (content -> Op op x y) label
  | op `elem` [IsGT, IsLT, IsEQ, IsNE] = do
    generate x
    generate y
    let op' = case op of
                IsGT -> C_GT
                IsLT -> C_LT
                IsNE -> C_NE
                IsEQ -> C_EQ
    liftG $ IF_ICMP op' `J.useLabel` label