-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Labels
crashPrefer [crash-on-valid] or [crash-on-invalid]Prefer [crash-on-valid] or [crash-on-invalid]vectorizers
Description
Assert in vectorizer during SCEVExpanderCleanup: https://godbolt.org/z/Ezcf68T85
Assert message:
opt: .../llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp:2466: void llvm::SCEVExpanderCleaner::cleanup(): Assertion `all_of(I->users(), [&InsertedSet](Value *U) { return InsertedSet.contains(cast<Instruction>(U)); }) && "removed instruction should only be used by instructions inserted " "during expansion"' failed.
IR reproducer:
target triple = "x86_64-unknown-linux-gnu"
define void @widget(i32 %arg, i64 %arg1) #0 {
bb:
br label %bb2
bb2: ; preds = %bb4, %bb
br label %bb5
bb3: ; preds = %bb5
%load = load ptr addrspace(1), ptr null, align 8%getelementptr = getelementptr i32, ptr addrspace(1) null, i64 %arg1
br i1 false, label %bb7, label %bb4
bb4: ; preds = %bb3
br label %bb2
bb5: ; preds = %bb5, %bb2
br i1 false, label %bb3, label %bb5
bb6: ; preds = %bb7
ret void
bb7: ; preds = %bb7, %bb3
%phi = phi i32 [ %add, %bb7 ], [ %arg, %bb3 ]
%phi8 = phi i32 [ %or, %bb7 ], [ 0, %bb3 ]
%load9 = load i32, ptr addrspace(1) %getelementptr, align 4
%or = or i32 %phi8, 0
store i32 %or, ptr addrspace(1) %load, align 4
%add = add i32 %phi, 1
%icmp = icmp eq i32 %phi, 0
br i1 %icmp, label %bb6, label %bb7, !prof !0
}
attributes #0 = { "target-features"="+avx2" }
!0 = !{!"branch_weights", i32 89478484, i32 1879048192}
Run as: opt -passes=loop-vectorize
Metadata
Metadata
Assignees
Labels
crashPrefer [crash-on-valid] or [crash-on-invalid]Prefer [crash-on-valid] or [crash-on-invalid]vectorizers