[llvm-dev] In ISel, where Constant<0> comes from?
Gleb Popov via llvm-dev
llvm-dev at lists.llvm.org
Tue Dec 18 01:41:02 PST 2018
On Tue, Dec 18, 2018 at 1:03 PM Tim Northover <t.p.northover at gmail.com>
wrote:
> On Tue, 18 Dec 2018 at 07:11, Gleb Popov via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
> > However, I haven't managed to get a "Constant<>" in the DAG when
> compiling for X86. I'm interested in how it is lowered. Can you please give
> me some guidance on this?
>
> How are you looking? When I run "llc -mtriple=x86_64-linux-gnu
> -debug-only=isel" on your IR I get multiple instances of Constants. At
> the very start is:
>
> Initial selection DAG: %bb.0 'main:entry'
> SelectionDAG has 18 nodes:
> t0: ch = EntryToken
> t7: i64 = Constant<0>
> t9: ch = store<(store 4 into %ir.retval)> t0, Constant:i32<0>,
> FrameIndex:i64<0>, undef:i64
> t2: i32,ch = CopyFromReg t0, Register:i32 %0
> t11: ch = store<(store 4 into %ir.argc.addr)> t9, t2,
> FrameIndex:i64<1>, undef:i64
> t4: i64,ch = CopyFromReg t0, Register:i64 %1
> t13: ch = store<(store 8 into %ir.argv.addr)> t11, t4,
> FrameIndex:i64<2>, undef:i64
> t16: ch,glue = CopyToReg t13, Register:i32 $eax, Constant:i32<0>
> t17: ch = X86ISD::RET_FLAG t16, TargetConstant:i32<0>, Register:i32 $eax,
> t16:1
>
> where the t16 line corresponds to what you've seen on SPARC.
>
> Cheers.
>
> Tim.
>
Strange. Even using exactly the same command line gives me following output:
# bin/llc -debug-only=isel -mtriple=x86_64-linux-gnu 1.ll
Changing optimization level for Function main
Before: -O2 ; After: -O0
FastISel is enabled
=== main
Enabling fast-isel
Total amount of phi nodes to update: 0
*** MachineFunction at end of ISel ***
# Machine code for function main: IsSSA, TracksLiveness
Frame Objects:
fi#0: size=4, align=4, at location [SP+8]
fi#1: size=4, align=4, at location [SP+8]
fi#2: size=8, align=8, at location [SP+8]
Function Live Ins: %edi in %0, %rsi in %2
%bb.0: derived from LLVM BB %entry
Live Ins: %edi %rsi
%2:gr64 = COPY %rsi; GR64:%2
%0:gr32 = COPY %edi; GR32:%0
%1:gr32 = COPY killed %0; GR32:%1,%0
%3:gr64 = COPY killed %2; GR64:%3,%2
%4:gr32 = MOV32r0 implicit-def %eflags; GR32:%4
MOV32mi %stack.0.retval, 1, %noreg, 0, %noreg, 0; mem:ST4[%retval]
MOV32mr %stack.1.argc.addr, 1, %noreg, 0, %noreg, %1;
mem:ST4[%argc.addr] GR32:%1
MOV64mr %stack.2.argv.addr, 1, %noreg, 0, %noreg, %3;
mem:ST8[%argv.addr] GR64:%3
%eax = COPY %4; GR32:%4
RETQ implicit %eax
# End machine code for function main.
Restoring optimization level for Function main
Before: -O0 ; After: -O2
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181218/490266df/attachment-0001.html>
More information about the llvm-dev
mailing list