[LLVMdev] Virtual register def doesn't dominate all uses
Boris Boesler
baembel at gmx.de
Mon Nov 3 13:56:51 PST 2014
Hi Quentin,
>> Yes, the dags in view-isel-dags and view-legalize-types-dags are correct (the add operations are here and are their results are used) and the dags are the same.
>
> And what about view-sched-dags?
The DAG looks like I described below (*)
> This one should give you what has been selected. So if this is not correct, you have indeed a problem in the selection problem.
> If that is the case, you can use -debug-only=isel to help you figuring out what is the problem.
This is the add node (sum + v3) from the dot file (-view-isel-dags):
Node0x7fef2a033610 [shape=record,shape=Mrecord,label="{{<s0>0|<s1>1}|add [ORD=21] [ID=29]|0x7fef2a033610|{<d0>i32}}"];
The debug output (-debug-only=isel) is:
ISEL: Starting pattern match on root node: 0x7fef2a033610: i32 = add 0x7fef2a033410, 0x7fef2a032f10 [ORD=21] [ID=29]
Skipped scope entry (due to false predicate) at index 3, continuing at 2566
Match failed at index 2575
Continuing at 2628
Match failed at index 2639
Continuing at 2659
Match failed at index 2663
Continuing at 2700
Continuing at 2701
Continuing at 2702
Match failed at index 2703
Continuing at 2817
Match failed at index 2818
Continuing at 2901
Match failed at index 2902
Continuing at 2985
Match failed at index 2986
Continuing at 3100
Match failed at index 3101
Continuing at 3215
Match failed at index 3216
Continuing at 3330
Match failed at index 3331
Continuing at 3445
Match failed at index 3447
Continuing at 3591
Match failed at index 3592
Continuing at 3706
Match failed at index 3707
Continuing at 3790
Match failed at index 3791
Continuing at 3874
Match failed at index 3875
Continuing at 3958
Match failed at index 3959
Continuing at 4046
Match failed at index 4047
Continuing at 4081
Match failed at index 4082
Continuing at 4116
Match failed at index 4117
Continuing at 4179
Match failed at index 4180
Continuing at 4209
Match failed at index 4210
Continuing at 4230
Match failed at index 4231
Continuing at 4261
Match failed at index 4262
Continuing at 4309
Match failed at index 4310
Continuing at 4322
Morphed node: 0x7fef2a033610: i32 = MVrr 0x7fef2a033610 [ORD=21]
Does the add operation become a MOVE instruction, or is this a chain of rules?
(*)
>>>>>> But if I use the statement "int res = v1 + v2 + v3;" something strange happens: all arguments are stored in the stack-frame and the local variables are initialized. Now, the variables v1 and v2 are loaded, but they are not used (no ADD instructions) and a MOVE instruction register to register is generated that uses itself as an operand. This register should be stored and should be used as function result.
Boris
More information about the llvm-dev
mailing list