2 of 2 added 307 characters in body

After grep -E "errors|warnings" myfifo > errors.log the pipe no longer contains data. So the next command cat myfifo which read from the pipe will be blocked.

If I understand your question correctly, you want to print all messages to stdout, and redirect all error and warning messages to errors.log. So if you want to use pipe, use two:

 mkfifo pipe1 pipe2 
 make 2>&1 | tee pipe1 pipe2 | grep -E "errors|warnings" pipe1 > errors.log | cat pipe2