-
Notifications
You must be signed in to change notification settings - Fork 16.2k
Description
llvm commit: 6955a7d
Reproduce with:
opt -passes="loop-vectorize" bbi-107525_lv.ll -S -o - -mtriple=aarch64-none-linux-gnu --data-layout="p:16:16"
The loop-vectorize output contains
pred.sdiv.continue: ; preds = %pred.sdiv.if, %vector.body
%3 = phi i16 [ poison, %vector.body ], [ %2, %pred.sdiv.if ]
[...]
pred.sdiv.continue2: ; preds = %pred.sdiv.if1, %pred.sdiv.continue
[...]
%7 = shl i16 %3, 14
%8 = sub i16 %6, %7
%9 = getelementptr [16 x i64], ptr @g_855, i16 0, i16 %8
%10 = getelementptr i64, ptr %9, i32 0
%wide.load = load <2 x i64>, ptr %10, align 1
and the problem here is that we will get to the %3 phi from %vector.body and then continue to pred.sdiv.continue2 where the %3 poison value will make %7, %8, %9 and %10 poison, and then we will do a load from %10 which is instant UB.
The input program has no UB.
Before 0d61ffd
[Loads] Support SCEVAddExpr as start for pointer AddRec.
the result is ok. Then with 0d61ffd it crashes with
opt: ../include/llvm/Support/Casting.h:109: static bool llvm::isa_impl_cl<llvm::Instruction, const llvm::Value *>::doit(const From *) [To = llvm::Instruction, From = const llvm::Value *]: Assertion `Val && "isa<> used on a null pointer"' failed.
and that crash goes away with fd82b5b
[LV] Support recieps without underlying instr in collectPoisonGenRec.
Support recipes without underlying instruction in
collectPoisonGeneratingRecipes by directly trying to dyn_cast_or_null
the underlying value.
Fixes https://github.com/llvm/llvm-project/issues/70590.
but then we get the miscompile instead.
I also tested to cherry-pick the fd82b5b to directly after 0d61ffd and we get the miscompile then too, so it doesn't seem to be some other patch between them that causes the miscompile.
Reactions are currently unavailable