From: Tim Northover Date: Thu, 11 Aug 2016 21:40:55 +0000 (+0000) Subject: GlobalISel: support 'null' constant in translation. X-Git-Tag: llvmorg-4.0.0-rc1~12676 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8e0c53a018feae745c24f7898367088903f8dd3d;p=platform%2Fupstream%2Fllvm.git GlobalISel: support 'null' constant in translation. It's sharing the integer G_CONSTANT for now since I don't *think* it creates any ambiguity (even on weird archs). If that turns out wrong we can create a G_PTRCONSTANT or something. llvm-svn: 278423 --- diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 5e07723..3f396cc 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -296,6 +296,10 @@ bool IRTranslator::translate(const Constant &C, unsigned Reg) { EntryBuilder.buildConstant(LLT{*CI->getType()}, Reg, CI->getZExtValue()); else if (isa(C)) EntryBuilder.buildInstr(TargetOpcode::IMPLICIT_DEF).addDef(Reg); + else if (isa(C)) + EntryBuilder.buildInstr(TargetOpcode::G_CONSTANT, LLT{*C.getType()}) + .addDef(Reg) + .addImm(0); else if (auto CE = dyn_cast(&C)) { switch(CE->getOpcode()) { #define HANDLE_INST(NUM, OPCODE, CLASS) \ diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll index 68ac9fa..5987a4e 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll +++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll @@ -458,3 +458,10 @@ define i32 @test_ashr(i32 %arg1, i32 %arg2) { %res = ashr i32 %arg1, %arg2 ret i32 %res } + +; CHECK-LABEL: name: test_constant_null +; CHECK: [[NULL:%[0-9]+]](64) = G_CONSTANT p0 0 +; CHECK: %x0 = COPY [[NULL]] +define i8* @test_constant_null() { + ret i8* null +}