On Wed, 8 Jan 2014, Richard Biener wrote: > On Wed, 8 Jan 2014, Jakub Jelinek wrote: > > > On Wed, Jan 08, 2014 at 11:45:28AM +0100, Richard Biener wrote: > > > I prefer to always do this, not do the fancy insertion-before. That > > > would do repeated folding for > > > > > > fold_stmt (gsi); > > > fold_stmt (gsi); > > > fold_stmt (gsi); > > > > > > where the last two should be a no-op. > > > > I don't see how is that possible, at least for the __builtin_unreachable > > case, because by just setting the fndecl to __builtin_unreachable and > > keeping the incompatible fntype and bogus arguments for it all the > > predicates whether it is a valid/suitable builtin call will fail and we > > don't have a __builtin_unreachable function you could call. > > Well, that just means we need two sets of predicates to check for > a builtin call. The __builtin_unreachable code wants to know what > the callee is, not if that's a "valid" call to it. But yeah - this > starts to get confusing :/ > > > So at least for builtin we want to make sure it has the right parameters. > > If the lhs is something we can just initialize to zero, we can replace the > > call with zeroing the lhs, but that is no the case always. > > I start to think this is a too complex transform for stmt folding ...
Alternatively do update_call_from_tree (gsi, get_or_create_ssa_default_def (cfun, create_tmp_var (TREE_TYPE (lhs)))). > > For __cxa_pure_virtual we could just keep the code as is (just with the > > !inplace addition and spelling fix?), but would need to fix up whatever ICEs > > during checking on it to honor fntype rather than decl's type. > > Yes. > > So a patch just keeping the targets.length () == 1 case in folding > with just replacing the fndecl of the call is ok. > > Thanks, > Richard. > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer