Here, an integer underflow is exploited. The operation
iStack20 - 5U
is performed unsigned due to the implicit conversion rules when the two operands differ in type (C standard 6.3.1.8(1)):
Otherwise [signedness differs], if the operand that has unsigned integer type has rank greater or equal to the rank of the type of the other operand, then the operand with signed integer type is converted to the type of the operand with unsigned integer type.
So if iStack20 is < 5, then the result will be very large (somewhere near UINT_MAX) , hence the comparison
iStack20 - 5U < 2
will be false. If iStack20 is > 6, then the result will be greater than 2 anyway. So the program logic is preserved.