Optimización de retorno de GCC

Me gustaría saber si GCC puede optimizar código como

int foo(args) {
    if(is_true) {
        do_smth;
        n = call_func(args);
        do_smth;
        return n;
    }
    else {
        return call_func(args);
    }
}

para que si estoy en otra rama, la llamada de call_func se ejecute como si no hubiera una llamada foo? Estoy escribiendo el módulo del kernel, y para resolver un problema en particular, necesito que se vea como si se llamara directamente a call_func. Para ser más específico, call_func es una llamada al sistema. Foo es mi versión de esta llamada al sistema. En este caso, debería hacer algo, llamar a esta llamada al sistema y luego devolver su retorno. Pero en! Is_true me gustaría cambiar de alguna manera la pila de llamadas, para que en el nivel actual haya call_func en lugar de foo. ¿Es posible?

Implementación de is_true:

struct task_struct * cur_task = current;
if(check_dir(cur_task)) {
...
}

check_dir es una función para verificar si queremos hacer algo con el directorio, desde el cual se llamó a la llamada al sistema.

Respuestas a la pregunta(1)

Su respuesta a la pregunta