Skip to content

[LoongArch] Assertion `isReg() && "This is not a register operand!"' #79718

@dianqk

Description

@dianqk

I tried this code with llc --mtriple=loongarch64

define void @foo(ptr nocapture writeonly %0, i1 %1, i1 %2, i1 %3, i1 %4) { start: br label %bb1 bb1: ; preds = %bb6, %start %5 = phi i64 [ 0, %start ], [ %20, %bb6 ] %6 = phi i64 [ 0, %start ], [ %21, %bb6 ] %7 = phi i64 [ undef, %start ], [ %23, %bb6 ] %8 = icmp eq i64 %5, 1 br label %bb2 bb2: ; preds = %bb6, %bb1 %9 = phi i64 [ %5, %bb1 ], [ %20, %bb6 ] %10 = phi i64 [ %6, %bb1 ], [ %21, %bb6 ] %11 = phi i64 [ %6, %bb1 ], [ %22, %bb6 ] %12 = phi i64 [ %7, %bb1 ], [ %23, %bb6 ] br i1 %1, label %loopexit, label %preheader preheader: ; preds = %bb2, %bb4 %13 = phi i64 [ %15, %bb4 ], [ %11, %bb2 ] %14 = load volatile { i64, i64 }, ptr null, align 4294967296 br i1 %2, label %bb3, label %bb5 bb3: ; preds = %preheader %15 = add i64 %13, 1 br i1 %3, label %bb4, label %bb5 bb4: ; preds = %bb3 br i1 %4, label %loopexit, label %preheader loopexit: ; preds = %bb4, %bb2 %16 = phi i64 [ %10, %bb2 ], [ %15, %bb4 ] %17 = phi i64 [ %11, %bb2 ], [ %15, %bb4 ] store i8 0, ptr %0, align 1 br label %bb6 bb5: ; preds = %bb3, %preheader %18 = phi i64 [ 1, %bb3 ], [ 0, %preheader ] %19 = phi i64 [ %15, %bb3 ], [ %12, %preheader ] store i64 0, ptr %0, align 8 br label %bb6 bb6: ; preds = %bb5, %loopexit %20 = phi i64 [ %19, %bb5 ], [ %9, %loopexit ] %21 = phi i64 [ %18, %bb5 ], [ %16, %loopexit ] %22 = phi i64 [ %18, %bb5 ], [ %17, %loopexit ] %23 = phi i64 [ %19, %bb5 ], [ %12, %loopexit ] br i1 %8, label %bb2, label %bb1 }

I got a segmentation fault.
If assertion is turned on, I can get isReg() && "This is not a register operand!"' failed.

GodBolt: https://llvm.godbolt.org/z/zT5rKrW6x
From: rust-lang/rust#120268

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions