-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Closed
Labels
llvm:hangCompiler hang (infinite loop)Compiler hang (infinite loop)llvm:instcombineCovers the InstCombine, InstSimplify and AggressiveInstCombine passesCovers the InstCombine, InstSimplify and AggressiveInstCombine passes
Description
Reduced test case: https://godbolt.org/z/dc6jnha5q
define i64 @func(i32 %p) {
entry:
%not = xor i32 %p, -1
br label %for.body
for.body:
%p0 = phi i32 [ %not, %entry ], [ %conv, %for.body ]
%p1 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
%inc = add i32 %p1, 1
%cmp1 = icmp ne i32 %inc, 0
%cond = select i1 %cmp1, i32 0, i32 -1231558963
%xor = xor i32 %cond, %p0
%cmp2 = icmp ne i32 %xor, -2
%conv = zext i1 %cmp2 to i32
br i1 %cmp2, label %for.body, label %for.exit
for.exit:
ret i64 0
}
IC: Visiting: %p0 = phi i32 [ %not, %entry ], [ %conv, %for.body ]
IC: Visiting: %cmp2 = icmp ne i32 %1, -2
ADD DEFERRED: %2 = select i1 %cmp1.not, i32 1231558962, i32 -1
ADD DEFERRED: %3 = xor i32 %2, %p0
IC: Old = %cmp2 = icmp ne i32 %1, -2
New = <badref> = icmp ne i32 %3, 1
ADD: %cmp2 = icmp ne i32 %3, 1
IC: ERASE %4 = icmp ne i32 %1, -2
ADD DEFERRED: %1 = xor i32 %0, %p0
IC: ERASE %1 = xor i32 %0, %p0
ADD DEFERRED: %0 = select i1 %cmp1.not, i32 -1231558963, i32 0
ADD DEFERRED: %p0 = phi i32 [ %not, %entry ], [ %conv, %for.body ]
ADD: %p0 = phi i32 [ %not, %entry ], [ %conv, %for.body ]
IC: ERASE %0 = select i1 %cmp1.not, i32 -1231558963, i32 0
ADD DEFERRED: %cmp1.not = icmp eq i32 %inc, 0
ADD: %cmp1.not = icmp eq i32 %inc, 0
ADD: %1 = xor i32 %0, %p0
ADD: %0 = select i1 %cmp1.not, i32 1231558962, i32 -1
IC: Visiting: %0 = select i1 %cmp1.not, i32 1231558962, i32 -1
IC: Visiting: %1 = xor i32 %0, %p0
IC: Visiting: %cmp1.not = icmp eq i32 %inc, 0
IC: Visiting: %p0 = phi i32 [ %not, %entry ], [ %conv, %for.body ]
IC: Visiting: %cmp2 = icmp ne i32 %1, 1
ADD DEFERRED: %2 = select i1 %cmp1.not, i32 -1231558963, i32 0
ADD DEFERRED: %3 = xor i32 %2, %p0
IC: Old = %cmp2 = icmp ne i32 %1, 1
New = <badref> = icmp ne i32 %3, -2
ADD: %cmp2 = icmp ne i32 %3, -2
IC: ERASE %4 = icmp ne i32 %1, 1
ADD DEFERRED: %1 = xor i32 %0, %p0
IC: ERASE %1 = xor i32 %0, %p0
ADD DEFERRED: %0 = select i1 %cmp1.not, i32 1231558962, i32 -1
ADD DEFERRED: %p0 = phi i32 [ %not, %entry ], [ %conv, %for.body ]
ADD: %p0 = phi i32 [ %not, %entry ], [ %conv, %for.body ]
IC: ERASE %0 = select i1 %cmp1.not, i32 1231558962, i32 -1
ADD DEFERRED: %cmp1.not = icmp eq i32 %inc, 0
ADD: %cmp1.not = icmp eq i32 %inc, 0
ADD: %1 = xor i32 %0, %p0
ADD: %0 = select i1 %cmp1.not, i32 -1231558963, i32 0
IC: Visiting: %0 = select i1 %cmp1.not, i32 -1231558963, i32 0
IC: Visiting: %1 = xor i32 %0, %p0
IC: Visiting: %cmp1.not = icmp eq i32 %inc, 0
Repeats multiple times...
Metadata
Metadata
Assignees
Labels
llvm:hangCompiler hang (infinite loop)Compiler hang (infinite loop)llvm:instcombineCovers the InstCombine, InstSimplify and AggressiveInstCombine passesCovers the InstCombine, InstSimplify and AggressiveInstCombine passes