def METHOD_NAME(self, node):
    self.generic_visit(node)
    try:
        if ast.literal_eval(node.test):
            if not metadata.get(node, OMPDirective):
                self.update = True
                return node.body
        else:
            if not metadata.get(node, OMPDirective):
                self.update = True
                return node.orelse
    except ValueError:
        # not a constant expression
        pass
    have_body = any(not isinstance(x, ast.Pass) for x in node.body)
    have_else = any(not isinstance(x, ast.Pass) for x in node.orelse)
    # If the "body" is empty but "else content" is useful, switch branches
    # and remove else content
    if not have_body and have_else:
        test = ast.UnaryOp(op=ast.Not(), operand=node.test)
        self.update = True
        return ast.If(test=test, body=node.orelse, orelse=list())
    # if neither "if" and "else" are useful, keep test if it is not pure
    elif not have_body:
        self.update = True
        if node.test in self.pure_expressions:
            return ast.Pass()
        else:
            node = ast.Expr(value=node.test)
            self.generic_visit(node)
    return node