From: Erven R. <erv...@in...> - 2010-03-09 10:53:52
|
Thierry Lafage a écrit : > Hi Gabriele, > > Thanks for your quick answer. My remarks below... > > Gabriele Svelto a écrit : >> Hi Thierry. >> >> 2010/3/8 Thierry Lafage <thi...@in...>: >> >>> cil-lower.c.patch modifies the pass gate in order to activate this pass only >>> when -ftree_vectorize option is activated (which is the case in -O3) >>> >> Unfortunately you cannot do this as the users can explicitly use >> vector intrinsics in the code even if -O3 is not specified. Under >> those conditions you will find vector operations even if you are >> compiling with -O0, it happens quite often in the testsuite BTW. >> > Ok, sorry, I misunderstood the fixme "should lower only if vector types > are handled in this funtion." > I simply wanted, for easier debug, to ensure that the execution of this > pass could be controlled (ie. skipped by using a command-line argument). > But it's probably useless. I made an attempt along those lines some time ago. My approach was to detect whether a function "deals with" vectors, for some definition of "deals with". You can grep "has_vec". The idea was to run the pass only is has_vec is true. Unfortunately I was missing some cases. It is still not working. -- Erven. > >>> and simp-cond.patch is a simplification of the simp-cond pass which also >>> makes it more complete (adds support for brtrue/brfalse and for floating >>> point comparisons in conditional branches + add a command-line option which >>> is activated in -O1 + fixes missing brtrue/brfalse as being conditional >>> branch instructions). Note that this pass either does nothing, or change a >>> branch condition instruction into another one (inverts the condition) and >>> removes the following unconditional branch. This means that the stack is not >>> changed at all, so I removed all the stuff that was recomputing the stack at >>> every statement. Moreover, I didn't understand the test on the conditional >>> branch operand type (integer or pointer) in order to change the conditional >>> br instruction: I've removed it and tested on a real program, and it seems >>> to be ok. >>> >> You cannot remove the integer / pointer test from that pass because >> for floating-point numbers those operations cannot be changed. For >> example if 'x' and 'y' are two floating-point NaNs the result from any >> comparison will always be unordered, i.e. x > y and x <= y will both >> evaluate to false hence you cannot invert the comparison. That's why I >> left out floating-point comparisons and that's why I compute the >> stack: I need to know on what types the comparison is working on. As >> for brtrue and brfalse I don't remember why I have left them out. They >> are different from the other instructions in that they pop off the >> stack a single value and work only on native integers while other >> comparisons pop two values which can be pretty much anything. I might >> have left them out because of that but I don't remember exactly so you >> might give them a try anyway. A full testsuite will give you the >> answer anyway, if there are problems tied to swapping brtrue/brfalse >> they will probably manifest themselves there. >> >> Gabriele >> > > Ok, for this one, I've been very naive. Sorry. It seems to me that it > has been a fast copy/paste of a generic pass... > For true/false, it happens that conditions on floating point values may > be computed by first using a comparison, and then a brtrue or brfalse. > So inverting the branch may lead to the same problems as with branches > with FP operands. In this particular case, we could look up at the > operands of the compare (if any) and invert the branch (or better: the > compare itself?) only if they are integer or pointers. > For the FP general case, wouldn't it be possible to use *.un (or not) > versions of the branches? I'll make tests to check. > However, concerning stack computation, since conditional branch > inversion does not change the stack at all, are the > "cil_stack_after_stmt (stack, stmt);" and "FOR_EACH_EDGE(...) { > cil_set_stack_for_bb (...); }" useful? > I understand these statements as being a stack re-compute, isn't it? > > Regards, > Thierry. > > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Gcc4cli-devel mailing list > Gcc...@li... > https://lists.sourceforge.net/lists/listinfo/gcc4cli-devel |