-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Open
Description
Running opt -passes=jump-threading on this test fails with llvm.lifetime.start/end can only be used on alloca or poison
; ModuleID = 'reduced.ll'
source_filename = "reduced.ll"
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"
define void @widget(i1 %arg) {
bb:
br i1 %arg, label %bb1, label %bb2
bb1: ; preds = %bb
%call = tail call <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i8(<vscale x 2 x i8> zeroinitializer, <vscale x 2 x i1> zeroinitializer, i32 0)
br label %bb2
bb2: ; preds = %bb1, %bb
%alloca = alloca [4 x [4 x i32]], align 8
br i1 %arg, label %bb3, label %bb4
bb3: ; preds = %bb2
br label %bb4
bb4: ; preds = %bb3, %bb2
call void @llvm.lifetime.start.p0(ptr %alloca)
ret void
}
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32) #0
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(ptr captures(none)) #1
attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
https://godbolt.org/z/1jWaY6qoW
Test cases is a reduced from output from our downstream compiler where we accidentally moved an alloca out of the entry block. I haven't seen this failure from an upstream compiler.
CC: @nikic