[PATCH] D30469: [PowerPC] Expand compare instructions to equivalent GPR code sequences.

Tony Jiang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 3 14:52:16 PST 2017


jtony added a comment.

In https://reviews.llvm.org/D30469#691316, @inouehrs wrote:

> Comparison is often used with bit operators, like an example below.
>  In this example, as long as I test, the transformation is applied only when POS is 0; cmpd + isel are used for cases with POS > 0.
>  I feel it is nice if we can support comparisons used with bit operators.
>
>   const int POS = 1;
>   long set_flag(long a, long b, long flags) {
>   	flags |= ((a == b) << POS);
>   	return flags;
>   }
>


Hi Hiroshi, that happens because current the SETEQ is implemented in the PPCInstrInfo.td file, which is downstream of DAG2DAG slection, I checked the debug info for the test case you provided here. The zero_extend(setcc) pattern is got converted to select_cc before it has a chance to use the pattern that I added in td file. One possible solution is do that in the DAG2DAG stage like all the other patterns in the CWG, this is a similar issue Nemanja and I have encountered for these pattern in D.2 of CWG.  And there is also a new commit from trunk changes the conversion behavior from setcc to select_cc.  I haven't tried what is the influence of that commit so  I am not sure whether we should move this implementation here to the PPCISelDAG2DAG.cpp file or not.  I will let Kit and Nemanja decide.


https://reviews.llvm.org/D30469





More information about the llvm-commits mailing list