Hello! Predicates, defined with "define_predicate" do not handle CONST_INT and CONST_DOUBLE operands at all, let alone provide any sort of special bypass for them. Just remove wrong text to save some poor soul from tripping this trap in the future.
2011-11-10 Uros Bizjak <ubiz...@gmail.com> * doc/md.texi (Defining Machine-Specific Predicates): Remove wrong explanation that predicates written with "define_predicate" provide special handling of CONST_INT and CONST_DOUBLE operands. Tested by "make doc" in gcc directory. OK for mainline SVN ? Uros.
Index: doc/md.texi =================================================================== --- doc/md.texi (revision 181258) +++ doc/md.texi (working copy) @@ -1001,16 +1001,7 @@ Predicates written with @code{define_predicate} automatically include a test that @var{mode} is @code{VOIDmode}, or @var{op} has the same -mode as @var{mode}, or @var{op} is a @code{CONST_INT} or -@code{CONST_DOUBLE}. They do @emph{not} check specifically for -integer @code{CONST_DOUBLE}, nor do they test that the value of either -kind of constant fits in the requested mode. This is because -target-specific predicates that take constants usually have to do more -stringent value checks anyway. If you need the exact same treatment -of @code{CONST_INT} or @code{CONST_DOUBLE} that the generic predicates -provide, use a @code{MATCH_OPERAND} subexpression to call -@code{const_int_operand}, @code{const_double_operand}, or -@code{immediate_operand}. +mode as @var{mode}. Predicates written with @code{define_special_predicate} do not get any automatic mode checks, and are treated as having special mode handling