Skip to content

LLVM ERROR: unable to legalize instruction: %68:_(<8 x s32>) = G_FPEXT %67:_(<8 x s16>) (in function: core_0_2) #656

@erwei-xilinx

Description

@erwei-xilinx

I am getting the following error with bfloat16 vector addition, using accumulator in float32.

llc input.opt.ll -O2 --march=aie2 --function-sections --filetype=obj -o input.o
LLVM ERROR: unable to legalize instruction: %68:_(<8 x s32>) = G_FPEXT %67:_(<8 x s16>) (in function: core_0_2)

Input file:

; ModuleID = '/home/erweiw/mlir-air/test/xrt/40_triton_vec_add/debug/air_project/input.llpeanohack.ll'
source_filename = "LLVMDialectModule"
target datalayout = "e-m:e-p:20:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-f32:32:32-i64:32-f64:32-a:0:32-n32"
target triple = "aie2"

@buf0 = external local_unnamed_addr global [64 x float]
@buf1 = external local_unnamed_addr global [64 x bfloat]
@buf2 = external local_unnamed_addr global [64 x bfloat]
@buf3 = external local_unnamed_addr global [64 x float]
@buf4 = external local_unnamed_addr global [64 x bfloat]
@buf5 = external local_unnamed_addr global [64 x bfloat]
@buf6 = external local_unnamed_addr global [64 x float]
@buf7 = external local_unnamed_addr global [64 x bfloat]
@buf8 = external local_unnamed_addr global [64 x bfloat]
@buf9 = external local_unnamed_addr global [64 x float]
@buf10 = external local_unnamed_addr global [64 x bfloat]
@buf11 = external local_unnamed_addr global [64 x bfloat]

; Function Attrs: nounwind
declare void @llvm.aie2.acquire(i32, i32) #0

; Function Attrs: nounwind
declare void @llvm.aie2.release(i32, i32) #0

; Function Attrs: noreturn nounwind
define void @core_0_2() local_unnamed_addr #1 {
  br label %1

1:                                                ; preds = %1, %0
  tail call void @llvm.aie2.acquire(i32 49, i32 -1)
  tail call void @llvm.aie2.acquire(i32 50, i32 -1)
  tail call void @llvm.aie2.acquire(i32 52, i32 -1)
  %2 = load <8 x bfloat>, ptr @buf2, align 16
  %3 = load <8 x bfloat>, ptr @buf1, align 16
  %4 = fadd <8 x bfloat> %2, %3
  %5 = fpext <8 x bfloat> %4 to <8 x float>
  store <8 x float> %5, ptr @buf0, align 32
  %6 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf2, i20 16), align 16
  %7 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf1, i20 16), align 16
  %8 = fadd <8 x bfloat> %6, %7
  %9 = fpext <8 x bfloat> %8 to <8 x float>
  store <8 x float> %9, ptr getelementptr inbounds (i8, ptr @buf0, i20 32), align 32
  %10 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf2, i20 32), align 16
  %11 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf1, i20 32), align 16
  %12 = fadd <8 x bfloat> %10, %11
  %13 = fpext <8 x bfloat> %12 to <8 x float>
  store <8 x float> %13, ptr getelementptr inbounds (i8, ptr @buf0, i20 64), align 32
  %14 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf2, i20 48), align 16
  %15 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf1, i20 48), align 16
  %16 = fadd <8 x bfloat> %14, %15
  %17 = fpext <8 x bfloat> %16 to <8 x float>
  store <8 x float> %17, ptr getelementptr inbounds (i8, ptr @buf0, i20 96), align 32
  %18 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf2, i20 64), align 16
  %19 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf1, i20 64), align 16
  %20 = fadd <8 x bfloat> %18, %19
  %21 = fpext <8 x bfloat> %20 to <8 x float>
  store <8 x float> %21, ptr getelementptr inbounds (i8, ptr @buf0, i20 128), align 32
  %22 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf2, i20 80), align 16
  %23 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf1, i20 80), align 16
  %24 = fadd <8 x bfloat> %22, %23
  %25 = fpext <8 x bfloat> %24 to <8 x float>
  store <8 x float> %25, ptr getelementptr inbounds (i8, ptr @buf0, i20 160), align 32
  %26 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf2, i20 96), align 16
  %27 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf1, i20 96), align 16
  %28 = fadd <8 x bfloat> %26, %27
  %29 = fpext <8 x bfloat> %28 to <8 x float>
  store <8 x float> %29, ptr getelementptr inbounds (i8, ptr @buf0, i20 192), align 32
  %30 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf2, i20 112), align 16
  %31 = load <8 x bfloat>, ptr getelementptr inbounds (i8, ptr @buf1, i20 112), align 16
  %32 = fadd <8 x bfloat> %30, %31
  %33 = fpext <8 x bfloat> %32 to <8 x float>
  store <8 x float> %33, ptr getelementptr inbounds (i8, ptr @buf0, i20 224), align 32
  tail call void @llvm.aie2.release(i32 51, i32 1)
  tail call void @llvm.aie2.release(i32 53, i32 1)
  tail call void @llvm.aie2.release(i32 48, i32 1)
  br label %1
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions