From d403a3d8eef42e0af61cd37d4cb299235f3a26ca Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Tue, 9 Aug 2016 23:01:30 +0000 Subject: [PATCH] GlobalISel: support 'undef' constant. llvm-svn: 278174 --- llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 10 ++++++---- llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll | 7 +++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index ef83630..a5f62cf 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -318,12 +318,14 @@ bool IRTranslator::translate(const Instruction &Inst) { } bool IRTranslator::translate(const Constant &C, unsigned Reg) { - if (auto CI = dyn_cast(&C)) { + if (auto CI = dyn_cast(&C)) EntryBuilder.buildConstant(LLT{*CI->getType()}, Reg, CI->getZExtValue()); - return true; - } + else if (isa(C)) + EntryBuilder.buildInstr(TargetOpcode::IMPLICIT_DEF).addDef(Reg); + else + llvm_unreachable("unhandled constant kind"); - llvm_unreachable("unhandled constant kind"); + return true; } diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll index 7546cfa..e63b851 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll +++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll @@ -363,3 +363,10 @@ define i32 @constant_int_start() { %res = add i32 2, 42 ret i32 %res } + +; CHECK-LABEL: name: test_undef +; CHECK: [[UNDEF:%[0-9]+]](32) = IMPLICIT_DEF +; CHECK: %w0 = COPY [[UNDEF]] +define i32 @test_undef() { + ret i32 undef +} -- 2.7.4