The @code{IFN_BITINTTOFLOAT} internal function is expanded by the
@code{expand_BITINTTOFLOAT} function.
+@cindex @code{IFN_VARYING} internal function
+@item @samp{IFN_VARYING}
+Use @code{IFN_VARYING} as a temporary placeholder for a value whose
+definition is still being built by the current pass. The pass that creates
+it must replace it before finishing; the verifier rejects any remaining calls.
+
@end table
gcc_unreachable ();
}
+void
+expand_VARYING (internal_fn, gcall *)
+{
+ /* This IFN should reach expand. */
+ gcc_unreachable ();
+}
+
void
expand_MULBITINT (internal_fn, gcall *stmt)
{
/* A NOP function with arbitrary arguments and return value. */
DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+/* A GIMPLE value with no definition and not Virtual Opeands for temporary
+ assignment cases within a pass. */
+DEF_INTERNAL_FN (VARYING , ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+
/* Temporary vehicle for __builtin_shufflevector. */
DEF_INTERNAL_FN (SHUFFLEVECTOR, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
extern void expand_TRAP (internal_fn, gcall *);
extern void expand_ASSUME (internal_fn, gcall *);
extern void expand_MASK_CALL (internal_fn, gcall *);
+extern void expand_VARYING (internal_fn, gcall *);
extern void expand_MULBITINT (internal_fn, gcall *);
extern void expand_DIVMODBITINT (internal_fn, gcall *);
extern void expand_FLOATTOBITINT (internal_fn, gcall *);
}
}
+ /* IFN_VARING is not allowed to be present after the completion of any pass
+ as it should have been replaced. */
+ if (gimple_call_internal_p (stmt, IFN_VARYING))
+ {
+ error ("%<.VARYING%> calls should have been replaced and are not allowed "
+ "outside of the pass that introduced them");
+ return true;
+ }
/* ??? The C frontend passes unpromoted arguments in case it
didn't see a function declaration before the call. So for now
leave the call arguments mostly unverified. Once we gimplify