[llvm-commits] [llvm] r86322 - in /llvm/trunk: include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveIntervalAnalysis.cpp
Evan Cheng
evan.cheng at apple.com
Fri Nov 6 18:51:28 PST 2009
On Nov 6, 2009, at 6:28 PM, Jakob Stoklund Olesen wrote:
>
> On Nov 6, 2009, at 6:11 PM, Evan Cheng wrote:
>
>> Sorry, Jakob. I don't think this patch is right. The check is
>> whether the early coalescer should be handling the cases where the
>> normal coalescer cannot.
>
> I am not sure I understand. The conflict test is a correctness issue.
>
> The old code looked like this:
>
>> - if (!HaveConflict)
>> - return false; // Let coalescer handle it
>
> That is: If there is no conflict, it is /not/ safe to coalesce. This
> is clearly wrong - if there is a conflict, the early coalescer must
> stay clear.
>
> This fix fixes the miscompilations in MallocBench.
>
> I was seeing code like this:
>
> 2508 %reg1248<def> = MOV32rr %reg1069<kill>
> register: %reg1248 Removing [2072,2086] from: %reg1248,0.000000e
> +00 = [2054,2086:0) 0 at 2054-(2086)
> RESULT: %reg1248,0.000000e+00 = [2054,2072:0) 0 at 2054-(2220* phi)
> replace range with [2072,2086:1) RESULT: %reg1248,0.000000e+00 =
> [2054,2072:0)[2072,2086:1) 0 at 2054-(2220* phi) 1@?-(2086)
> +[2510,2536:2)
>
> 2516 %reg1249<def> = MOV32rr %reg1065<kill>
> register: %reg1249 Removing [2072,2094] from: %reg1249,0.000000e
> +00 = [2062,2094:0) 0 at 2062-(2094)
> RESULT: %reg1249,0.000000e+00 = [2062,2072:0) 0 at 2062-(2220* phi)
> replace range with [2072,2094:1) RESULT: %reg1249,0.000000e+00 =
> [2062,2072:0)[2072,2094:1) 0 at 2062-(2220* phi) 1@?-(2094)
> +[2518,2536:2)
>
>
> PHI Join: %reg1065<def> = MOV32rr %reg1248<kill>
> Moving: 2510 %reg1248<def> = MOV32rr %reg1069<kill>
> added range [2510,2536] to reg1065
>
> The early coalescer wanted to define %reg1065 at index 2508, even
> though it is being used at the next instruction. This is the
> miscompilation.
But I bet the resulting code is exactly the same as that without the
early coalescer . :-)
>
>> Perhaps hacking on the early coalescer is not the right approach?
>> We're probably better off starting over by adding on-demand
>> critical edge splitting in phi elimination.
>
> I agree. I am simply using the early coalescer to detect the cases
> where critical edge splitting is necessary.
Ok.
Evan
>
> /jakob
>
More information about the llvm-commits
mailing list