[PATCH] D23824: [ADCE] Add handling of PHI nodes when removing control flow
Daniel Berlin via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 6 15:49:45 PDT 2016
In particular, this should do it:
int foo (int b, int j)
{
if (b)
{
int i;
for (i = 0; i<1000; ++i)
;
j = 0;
}
return j;
}
On Tue, Sep 6, 2016 at 3:41 PM, Daniel Berlin <dberlin at dberlin.org> wrote:
> Yes, that is why i said you may need to make the phi non-constant (ie make
> a new parameter):
>
> It is propagating the constant into the phi:
> %j.0 = phi i32 [ 0, %0 ], [ 1, %2 ]
>
> Thus, you never end up marking anything interesting live there.
>
>
>
>
>
> On Tue, Sep 6, 2016 at 3:30 PM, David Callahan <dcallahan at fb.com> wrote:
>
>> david2050 added a comment.
>>
>> I ran this test:
>>
>> int foo(int a, int b, int N) {
>> int j = 0;
>> if (b) {
>> int i;
>> for (i = 0; i < N; i++)
>> ;
>> j = 1;
>> }
>> return j;
>> }
>>
>> compiled to bc and then processed: opt -sroa -adce -adce-remove-loops
>> and it did successfully remove the loop. I also tried this variant
>>
>> int foo(int b, int N) {
>> int j = 0;
>> if (b) {
>> int i;
>> j = 1;
>> for (i = 0; i < N; i++)
>> ;
>> }
>> return j;
>> }
>>
>> The final output for that one looked like:
>>
>> define i32 @foo(i32 %b, i32 %N) #0 {
>> %1 = icmp ne i32 %b, 0
>> br i1 %1, label %2, label %3
>>
>> ; <label>:2: ; preds = %0
>> br label %3
>>
>> ; <label>:3: ; preds = %2, %0
>> %j.0 = phi i32 [ 0, %0 ], [ 1, %2 ]
>> ret i32 %j.0
>> }
>>
>>
>> https://reviews.llvm.org/D23824
>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160906/6d1f9f48/attachment.html>
More information about the llvm-commits
mailing list