The speed benefits of using goto can be VERY good. In a dialog callback that would often involve a lot of IF statements it can literally be an ORDER OF MAGNITUDE faster.

mIRC has no intermediate compiled form for aliases and thus must parse each call to an alias on the fly. This is quite slow... I'm guessing that because the parser doesn't have to actually evaluate anything until it finds the :LABEL it just sorta scans along keeping track of {}'s and ()'s and stuff.

To prove this a simple benchmark:

ticks for 10000 iterations:
calling empty alias: 438
calling 10 failed empty if statements in a row: 1719
calling 10 failed empty if statements one inside the other: 1766
calling alias with 10 if statements but a goto 10th at the start: 1047

Conclusion: the mIRC parse is clearly doing something differently with the goto statement. 10 if statements with one inside the other SHOULD mean that only the first is evaluated and the others skipped over, but based on the timing above this isn't happening and it's fully parsing everything but just not evaluating it. The goto on the other hand is somehow skipping over stuff quickly looking for the :TAG but yet still obeying {}'s.

Anyway, goto's are definitely faster than IFs provided you can skip executing/parsing a lot of code in the alias such as in dialogs callbacks...