user32600: Most engines have some method of filtering out pseudo-legal moves from the actual legal ones. However, is there any reason not to keep them? With bit-boards, you can quickly filter out the ones that result in the king landing in the attack mask of the opponent's side when trying a move at search-time. Am I missing something here, or is it faster to filter out before the search?

user27860: It is actually!
Some engines have what are known as fully legal move generators, the kind of move generator you're talking about, where only completely legal moves are returned.
This approach is fine, but not every move is actually tested during the search phase, so it's actually (generally) more efficient to test move legality on a move-by-move basis.
This is the approach used in many of the current top chess engines like Stockfish, Etheral, and Koivisto. For example, here's the relevant code in Stockfish that does this, during the search phase:
while ((move = mp.next_move()) != MOVE_NONE)
    if (move != excludedMove && pos.legal(move))
    {
        ...

Notice the call to pos.legal, which tests if a move is legal.

32600: <p>Most engines have some method of filtering out pseudo-legal moves from the actual legal ones. However, is there any reason not to keep them? With bit-boards, you can quickly filter out the ones that result in the king landing in the attack mask of the opponent's side when trying a move at search-time. Am I missing something here, or is it faster to filter out before the search?</p>
 27860: <p>It is actually!</p>
<p>Some engines have what are known as fully legal move generators, the kind of move generator you're talking about, where only completely legal moves are returned.</p>
<p>This approach is fine, but not every move is actually tested during the search phase, so it's actually (generally) more efficient to test move legality on a move-by-move basis.</p>
<p>This is the approach used in many of the current top chess engines like <a href="http://ccrl.chessdom.com/ccrl/4040/" rel="nofollow noreferrer">Stockfish, Etheral, and Koivisto</a>. For example, <a href="https://github.com/official-stockfish/Stockfish/blob/master/src/search.cpp#L875" rel="nofollow noreferrer">here's the relevant code in Stockfish that does this, during the search phase</a>:</p>
<pre><code>while ((move = mp.next_move()) != MOVE_NONE)
    if (move != excludedMove &amp;&amp; pos.legal(move))
    {
        ...
</code></pre>
<p>Notice the call to <a href="https://github.com/official-stockfish/Stockfish/blob/master/src/position.cpp#L494" rel="nofollow noreferrer"><code>pos.legal</code></a>, which tests if a move is legal.</p>
