I have a small test case which generates poor quality code on my target. Here is the original:
if (cond1 == 2048 || cond2 == 8) { x = x + y; } return x; This ends up generating a series of instructions to compute a flag with the result of the condition followed by a single compare with zero and a jump. Better code would be two compares and two jumps. The gimple is _1 = cond1 == 2048; _2 = cond2 == 8; _3 = _1 | _2; if (_3 != 0) goto <D.1464>; else goto <D.1465>; ... so this poor code sequence is essentially a correct translation. On MIPS, for the same test case, the gimple is different: if (cond1 == 2048) goto <D.1491>; else goto <D.1493>; <D.1493>: if (cond2 == 8) goto <D.1491>; else goto <D.1492>; <D.1491>: ... which generates the better code sequence. Can someone give me a pointer where to find where the lowering pass decides to break up a condition into multiple tests? Is there a target configuration option which I have overlooked or maybe set incorrectly? -- Michael Eager ea...@eagerm.com 1960 Park Blvd., Palo Alto, CA 94306