Skip to content

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

Closed
@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