<div dir="ltr">I noticed a change in LLVM's behavior between 3.2 and 3.3/ToT, but I'm not sure if it qualifies as a bug/regression or not.<div><br></div><div>The change is that in 3.3 and tip of trunk, calling ConstantFoldConstantExpression on</div>

<div><br></div><div>    i64 and (i64 add (i64 add (i64 ptrtoint (i64* getelementptr (i64* null, i32 1) to i64), i64 ptrtoint (i64* getelementptr (i64* null, i32 1) to i64)), i64 15), i64 -16)<br></div><div><br></div><div>

produces</div><div><br></div><div>    i64 and (i64 add (i64 ptrtoint (i64* getelementptr (i64* null, i32 1) to i64), i64 23), i64 -16)<br></div><div><br></div><div>which, when passed back to ConstantFoldConstantExpression, gets boiled down to</div>

<div><br></div><div>    i64 16</div><div><br></div><div><br></div><div>LLVM 3.2 returns a ConstantInt from the first call. I've attached a small testcase which shows this behavior.</div><div><br></div><div>Is the fact that ConstantFoldConstantExpression does not produce a "minimal" constant expression a bug, or are clients expected to potentially need to iterate folding to get a final result? I didn't see anything in 3.3's release notes about changes to constant folding behavior.</div>

</div>