diff --git a/llvm/lib/Target/X86/X86PreTileConfig.cpp b/llvm/lib/Target/X86/X86PreTileConfig.cpp --- a/llvm/lib/Target/X86/X86PreTileConfig.cpp +++ b/llvm/lib/Target/X86/X86PreTileConfig.cpp @@ -31,6 +31,7 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineLoopInfo.h" +#include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/TargetInstrInfo.h" @@ -40,10 +41,16 @@ using namespace llvm; #define DEBUG_TYPE "tile-pre-config" -#define REPORT_CONFIG_FAIL \ - report_fatal_error( \ - MF.getName() + \ - ": Failed to config tile register, please define the shape earlier"); + +static void emitErrorMsg(MachineFunction &MF) { + SmallString<32> Str; + Twine ErrorMsg = + MF.getName() + + ": Failed to config tile register, please define the shape earlier"; + LLVMContext &Context = MF.getMMI().getModule()->getContext(); + Context.emitError(ErrorMsg); + exit(1); +} namespace { @@ -303,11 +310,11 @@ for (auto &I : ShapeBBs) { // TODO: We can hoist shapes across BBs here. if (BBVisitedInfo[I.first].HasAMXRegLiveIn) - REPORT_CONFIG_FAIL + emitErrorMsg(MF); if (BBVisitedInfo[I.first].FirstAMX && BBVisitedInfo[I.first].FirstAMX < I.second.back() && !hoistShapesInBB(I.first, I.second)) - REPORT_CONFIG_FAIL + emitErrorMsg(MF); WorkList.push_back(I.first); } while (!WorkList.empty()) { diff --git a/llvm/test/CodeGen/X86/AMX/amx_error.ll b/llvm/test/CodeGen/X86/AMX/amx_error.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/X86/AMX/amx_error.ll @@ -0,0 +1,13 @@ +@row = dso_local global i16 8, align 2 +@col = dso_local global i16 8, align 2 + +define dso_local void @add() { +entry: + %t0 = load i16, ptr @row, align 2 + %t1 = call x86_amx @llvm.x86.tilezero.internal(i16 %t0, i16 64) + %t2 = load i16, ptr @col, align 2 + %t3 = call x86_amx @llvm.x86.tilezero.internal(i16 16, i16 %t2) + ret void +} + +declare x86_amx @llvm.x86.tilezero.internal(i16, i16)