Those restrictions really don't slow the code down much. They slow down its *theoretical* max speed: a compiler written by an ultraintelligent being could make use of overlapping instructions and that sort of thing.
But code generated by compilers written by human beings never does that. Only attacks do. (And it is very rare to rely on self-modifying code or data execution, either: SELinux and other systems have blocked it for ages, and programs relying on it have long been considered buggy.)