mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-18 18:42:46 +02:00
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
This commit is contained in:
parent
05c5b8d72c
commit
a215c0041c
@ -296,6 +296,10 @@ bool IRTranslator::translate(const Constant &C, unsigned Reg) {
|
||||
EntryBuilder.buildConstant(LLT{*CI->getType()}, Reg, CI->getZExtValue());
|
||||
else if (isa<UndefValue>(C))
|
||||
EntryBuilder.buildInstr(TargetOpcode::IMPLICIT_DEF).addDef(Reg);
|
||||
else if (isa<ConstantPointerNull>(C))
|
||||
EntryBuilder.buildInstr(TargetOpcode::G_CONSTANT, LLT{*C.getType()})
|
||||
.addDef(Reg)
|
||||
.addImm(0);
|
||||
else if (auto CE = dyn_cast<ConstantExpr>(&C)) {
|
||||
switch(CE->getOpcode()) {
|
||||
#define HANDLE_INST(NUM, OPCODE, CLASS) \
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user