- "Modern RISCs are slow because instructions take many cycles to execute": Latency is irrelevant as long as the pipeline remains filled. Pipeline length only matters when it's in the critical path, e.g. cycles from fetch to branch execution determines the bubble size on a mispredicted branch.
- "The pipeline must be flushed and refilled on branches"? Only on mispredicts, which are rare with good predictors on most code.
- "Cache makes the system more complex and expensive"? But it also is the only way to have acceptable performance when DRAM accesses take 200 cycles or more.
- "RISCs are slow at calls and returns" due to many registers? A good compiler will only save as many registers as it clobbers; more registers reduce register pressure and spills/fills, improving perf. (This is a net perf increase from x86-32 to x86-64, for example.) The only significant cost is additional context-switch overhead.